我看过一个众所周知的video其中,前 Apple UI 设计师 Bret Victor 展示了惊人的演示,在更改源代码中的一个符号后立即更新正在运行的代码。
向那些没有看过或没有时间观看视频的人说明我的问题:我想使用这样的工具来编写我自己的软件。他演示的工具是否可用,或者是否有其他类似的工具?
哪种语言/环境无关紧要,我只想让我的代码运行,然后更改源代码中的一行并立即查看结果更新,而无需重新启动它。
该视频也可在 YouTube 上获得,关键点是:
最佳答案
谁做的
你会在 React 和 ELM 社区以及前端函数式编程社区中发现很多有趣的东西。
最近以某种方式试图提供这种开发环境的一些全栈平台是:
Eve :
一家 Andreessen Horowitz/Y-Combinator 初创公司,资金 230 万美元,来自 Chris Granger,一位已经构建了 LightTables 的有影响力的 Clojure 程序员。
技术 :Rust(后端)、TypeScript(前端)以及自制的 React 概念实现(他们称之为“microReact”)
Unison :
不是一家公司(还没有?),但得到了来自 Paul Chiusano(著名书籍“FP in Scala”的作者)的 Patreon 事件的支持。
技术 :Haskell(后端),ELM(前端)。
备注 :你可以看到这些工具背后的人是经验丰富的函数式程序员。检查“它是如何工作的”部分。
它是如何工作的 -> 函数式编程
程序有状态。
为什么 Bret Victor 能够制作那个视频?
因为:
受此演讲启发的一种工具是 ELM 语言。
榆木states that :
So at the root of the debugger is the design of Elm itself. If you do not start with the right design choices at the language level, creating a time-traveling debugger quickly becomes extremely complex. Even languages that partially fulfill the necessary design requirements will have serious challenges.
所以你真正需要明白的是有趣的不是技术,而是底层软件架构 .一旦有了架构,添加这样的调试功能就不是那么难了。
ReactJS/Flux 社区中的许多人已经表明,我们可以通过这种架构实现真正伟大的事情。 Om的大卫诺伦ClojureScript 的炒作可能是触发因素,Dan Abramov 最近表明 we can achieve very similar things that compare to Bret Victor's debugging .
我自己我一直在试验 recording user session videos in JSON ,这也是这种架构所利用的一个特性。
所以,你要明白,他的成就不是靠聪明的代码技巧或 super 语言来完成的,而是真正好的架构模式。
这些模式甚至都不是新的,它们被数据库创建者和一些后端开发人员以不同的名称使用了很长时间,包括命令/事件源、日志……如果你想了解一下,Confluent.IO blog is a very pedagogic source .
问题甚至不在于重新加载代码,而在于重新加载代码后如何处理状态。
您真正需要了解的是,该问题没有唯一的答案:这完全取决于您想要实现的目标。
例如,在 Bret Victor 的 Mario 示例中,当他修改某些参数(如重力)时,您可以看到它可以影响过去(他记录的内容)和 future (他在代码更改后将执行的操作)。这意味着用户意图在不同的上下文中被重新解释,产生新的事实历史(通常称为命令源)。
虽然这对于他所展示的视频游戏来说真的很有趣,但对于许多其他应用程序来说这绝对是无用的。让我们举一个问责制应用程序的例子,其中税收百分比可以每年增加或减少。您真的认为修改当年的税率应该对 10 年前的 Assets 负债表产生任何影响吗?显然不是,但它可能仍然对本年度产生影响。
另外,调整跳跃参数时马里奥定位托盘,工具自己无法知道它必须为马里奥元素显示它。你必须明确说明它,否则它可以对云或乌龟做同样的事情。对问责应用程序做同样的事情是否有意义?
我的意思是,这是一个很酷的演示,制作精良。您无法获得一个开箱即用的类似开发环境。但是您可以学习允许轻松完成的架构模式,并使用诸如 ELM/Om/Redux/Flux/ReactJS 之类的工具(以及一些 Haskell/Scala/Erlang 可能也很有用!),这将极大地帮助您实现它们正确并为您提供尽可能多的热重载。
关于ide - Bret Victor 的 "Inventing on Principle"演讲中支持实时编码的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448215/