这个问题与
在过去的几年里,我一直在思考我喜欢和不喜欢我使用的语言的事情。我一直想写自己的语言,但从来没有这样做过。
我还拥有乐高 RCX 和 NXT,但大多数时候我从未真正让我的机器人做任何事情,因为它们具有限制性的可视化编程环境。
我想我会为 NXT 设计我的编程语言,因为已经有大量的通用语言,而 NXT 给了我一组具体的问题和目标,并希望有一个不错的沙盒可供使用。
怎么办?我从哪说起呢?我需要知道什么?
如果可能的话,我会用 Python 或 Clojure 编写编译器。NXT有一个SDK ,也有一个汇编语言。什么是最好/最简单的路线?
Lego NXT 有一个小屏幕、USB 和蓝牙,它有 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 ...]
这背后的推理显然仍然存在巨大的漏洞,但无论如何我都会发布这个粗略的草图,以引发一些有用的答案和讨论。