この質問はに関連しています
ここ数年、私は自分が使っている言語について好きなことと嫌いなことについて考えてきました。私はいつも自分の言語を書きたいと思っていましたが、決してそうしませんでした。
私はレゴRCXとNXTの両方を所有していますが、ビジュアルプログラミング環境が制限されているため、ほとんどの場合、ロボットに実際に何かをさせることはありません。
すでにたくさんの汎用言語があり、NXTは具体的な問題と目標のセットを提供し、うまくいけば素晴らしいサンドボックスを提供してくれるので、NXT用のプログラミング言語を設計すると思います。
それで?どこから始めればいいですか?何を知る必要がありますか?
可能であれば、PythonまたはClojureでコンパイラーを作成します。NXT用のSDKがありますが、アセンブリ言語もあります。最良/最も簡単なルートは何でしょうか?
Lego NXTには、小さな画面、USBとBluetoothがあり、デジタルとアナログの両方の4つのセンサーポート、3つの出力ポートと2つのARMプロセッサ、1つのメインプロセッサと1つのコプロセッサがあります。http://mindstormsnxt.blogspot.com/2006/08/whats-inside-nxt-brick.html
NXTのプログラミングは、データとイベントの処理に関係しているため、ある種のモノイコニックデータフロー/リアクティブスタイルが適切であるように思われます。並列タスクもうまく処理できるはずなので、機能的だと思います。私は現在、スタックベースも考えています。
私の頭の中で、私はすでにこれらの概念を統一し、サンプルコードを考えようとしています。機能的なブランチを並行して実行できるスタックではなく、ツリーを考えています。例:
# implicit main stack
5 5 +
# 10
# quoted branch or list
[1 -]
# 10 [1 -]
# eval list and recur until false
loop
# [9 8 7 6 5 4 3 2 1 0]
# define stack as a function
[1 = [1 8 motor] [1 0 motor] if] fn
# [9 8 7 6 5 4 3 2 1 0] <function>
# define function as a symbol
"handle-press" def
# [9 8 7 6 5 4 3 2 1 0]
# reactively loop over infinite lazy stack returned by sensor
# in a parallel branch
|4 sensor handle-press for|
# [9 8 7 6 5 4 3 2 1 0] [8 nil nil nil 8 ...]
この背後にある推論には明らかにまだギャップのある穴がありますが、とにかくこのラフスケッチを投稿して、いくつかの役立つ回答と議論を引き起こします。