Этот вопрос связан с
Последние пару лет я думал о вещах, которые мне нравятся, и мне не нравятся языки, которые я использую. Я всегда хотел писать свой собственный язык, но никогда не делал этого.
Я также владею как Lego RCX, так и NXT, но большую часть времени я никогда не делал своих роботов чем-либо из-за их ограничительной среды визуального программирования.
Я думаю, что я разработаю свой язык программирования для NXT, потому что уже есть много языков общего назначения, и NXT дает мне конкретный набор проблем и целей и, надеюсь, приятную песочницу, с которой можно играть.
Теперь что? С чего начать? Что мне нужно знать?
Если возможно, я бы написал компилятор в Python или Clojure. Существует SDK для NXT, но также Язык ассемблера. Каким будет лучший/самый простой маршрут?
В Lego NXT есть небольшой экран, USB и Bluetooth, он имеет 4 порта датчиков как цифрового, так и аналогового, 3 выходных порта и 2 процессора ARM, один основной процессор и один сопроцессор. 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 ...]
В рассуждениях, по-видимому, все еще есть дыры, но я все равно размещаю этот грубый эскиз, чтобы исправить некоторые полезные ответы и обсуждение.