我观看了一个已经众所周知的视频,其中,前Apple UI设计师Bret Victor在更改了源代码中的一个符号后,立即运行代码更新,展示了惊人的演示。
为了向那些没有看过或没有时间看视频的人讲清楚我的问题:我想使用这样的工具来编写自己的软件。他演示的工具是否可用,或者还有其他类似的工具吗?
不管哪种语言/环境,我都只想运行我的代码,然后在源代码中更改一行,并立即查看更新的结果,而无需重新启动它。
我观看了一个已经众所周知的视频,其中,前Apple UI设计师Bret Victor在更改了源代码中的一个符号后,立即运行代码更新,展示了惊人的演示。
为了向那些没有看过或没有时间看视频的人讲清楚我的问题:我想使用这样的工具来编写自己的软件。他演示的工具是否可用,或者还有其他类似的工具吗?
不管哪种语言/环境,我都只想运行我的代码,然后在源代码中更改一行,并立即查看更新的结果,而无需重新启动它。
Answers:
通常,在React和ELM社区以及前端功能编程社区中,您会发现很多有趣的东西。
一些最近的全栈平台以某种方式试图提供这种开发环境:
Andreessen Horowitz / Y-Combinator初创企业,由著名的Clojure程序员Chris Granger资助了230万美元,他已经创建了LightTables。
技术:Rust(后端),TypeScript(前端)以及React概念的自制实现(它们称为“ microReact”)
还不是公司(还?),但是得到了Paul Chiusano(著名著作“ Scala FP”的作者)的Patreon运动的支持。
技术:Haskell(后端),ELM(前端)。
注意:您会发现这些工具背后的人都是经验丰富的函数式程序员。检查“它是如何工作的”部分。
程序有状态。
为什么Bret Victor可以制作该视频?
因为:
受此演讲启发的一种工具是ELM语言。
ELM指出:
因此,调试器的根本是Elm本身的设计。如果您没有在语言级别上从正确的设计选择入手,那么快速创建时间旅行调试器将变得极为复杂。即使部分满足必要设计要求的语言也将面临严峻挑战。
因此,您真正要了解的是,有趣的不是技术,而是底层的软件体系结构。一旦有了体系结构,添加此类调试功能就很容易了。
ReactJS / Flux社区中的许多人已经表明,使用这种架构可以实现真正的伟大成就。Om的ClojureScript炒作的David Nolen可能是触发器,并且Dan Abramov最近证明,与Bret Victor的调试相比,我们可以实现非常相似的功能。
我自己一直在尝试用JSON记录用户会话视频,这也是这种架构所利用的功能。
因此,您必须了解,他的成就不是通过巧妙的代码技巧或超级语言完成的,而是真正好的架构模式。
这些模式甚至都不是新模式,它们被数据库创建者和一些后端开发人员以不同的名称使用了很长时间,包括命令/事件源,日志记录...。如果您需要介绍,Confluent.IO博客是教育学资料。
问题不仅仅在于重新加载代码,还在于重新加载代码后如何处理状态。
您真正需要了解的是,这个问题没有唯一的答案:这完全取决于您要实现的目标。
例如,在布雷特·维克多(Bret Victor)与马里奥(Mario)的示例中,当他修改诸如引力之类的参数时,您会看到它既会影响过去(他记录的内容)又会影响未来(代码更改后他将执行的操作)。这意味着将在不同的上下文中重新解释用户的意图,从而产生新的事实历史记录(通常称为命令源)。
尽管对于他所展示的视频游戏而言,这确实很有趣,但对于许多其他应用程序而言,这绝对是没有用的。让我们以问责制应用程序为例,其中税率百分比每年都可以增加或减少。您是否真的认为修改当年的税收百分比会对10年前的资产负债表产生影响?显然不会,但是它可能仍会对当年产生影响。
同样,在调整跳转参数时,Mario会定位托盘,该工具自己不知道必须为Mario元素显示它。您必须明确说明它,否则它可能对云或乌龟也一样。对问责制应用程序执行相同操作是否有意义?
我的意思是,这是一个很棒的演示,已经制作精良。开箱即用,您无法获得类似的开发环境。但是您可以学习允许轻松实现的架构模式,并使用ELM / Om / Redux / Flux / ReactJS之类的工具(有些Haskell / Scala / Erlang也可能有用!),这将极大地帮助您实现它们正确地为您提供尽可能多的热装。
克里斯·格兰杰(Chris Granger)正在建造一种名为“光桌”的产品,这似乎是朝这个方向迈出的有希望的一步。最初,它仅支持Clojure,但他有望在将来支持其他语言。
我相信以下内容允许更改源代码中的一行(并查看直接影响):
注意:我只有1、5-7的经验。对于其中的许多内容,我认为您不能将光标放在代码的特定部分上并突出显示图像的相关部分。
编辑:添加的项目号。4(2014.10.27),5(2014.10.31)和6-7(2015.03.12)。
编辑2(2015.06.25):来自http://sixrevisions.com/tools/code-demo-sites/(其中大多数是HTML / CSS / Javascript)。
我为Emacs,PyCharm和Eclipse构建了一个名为“ Live Coding in Python”的插件,该插件涵盖了您所要求的三个功能中的两个。在您键入代码时,它会立即更新turtle图形算法的结果。
它还在每个分配旁边显示局部变量的状态。这是二进制搜索算法的示例显示:
def search(n, a): | n = 3 a = [1, 2, 4]
low = 0 | low = 0
high = len(a) - 1 | high = 2
while low <= high: | |
mid = (low + high) / 2 | mid = 1 | mid = 2
v = a[mid] | v = 2 | v = 4
if n == v: | |
return mid | |
if n < v: | |
high = mid - 1 | | high = 1
else: | |
low = mid + 1 | low = 2 |
return -1 | return -1
|
i = search(3, [1, 2, 4]) | i = -1
IPython Notebook正朝着这个方向迈进。尽管它更适合于针对科学问题的交互式探索性分析,但我发现它非常具有交互性,并且很有趣。
我也刚刚发现了Live Code。经过一些实验,我发现它并不包含布雷特·维克多哲学的所有原理。它具有简单明了的语法,但UI不适用于交互式开发。他们还有一段路要走。
然后还有R。由于Shiny和knitr的新发展,正在发生一些有趣的创新,这与Bret的哲学相一致。
Haskell for Mac的受众可能有限,因为它是(a)特定于平台的(您可能已经从名称中猜到了)和(b)商用软件(目前为20美元)。但这是布雷特·维克多(Brett Victor)的思想,非常明确地基于该思想,这在早期的博客文章中已有讨论。
当然,应该将其添加到实现“可学习编程”的编程环境的所有详尽列表中。
如今,对于前端开发而言,许多工具提供了一种称为“热重载”的功能,基本上使您对代码的更改在浏览器/移动仿真器中立即可见。这独立于IDE /编辑器。