题解
所谓「语言作为应用程序」, 就是说程序语言,应该以何种方式被用户使用。
使用情形
分两种使用情况:
- 用户第一次接触到这个语言;
- 用户需要长期使用这个语言。
初次接触
情形一:一个已经可以熟练使用别的程序语言的程序员,初次接触新语言。
此时用户本身有自己所熟悉的文本编辑器和命令行终端。 语言作的命令行工具,只是用来检查和编译代码, 是工作流中诸多工具的组成部分。
此时需要简化安装过程。 最好是一次安装,获得语言的命令行工具。
情形二:一个没有写过程序的用户,想要学习一个程序语言。
此时「命令行工具」「命令行终端」「文本编辑器」 对于用户来说可能都是陌生的概念。
此时需要给用户提供集成开发环境(IDE)。 如果是本地开发,这也至少需要一词安装。
情形三:用户在使用 AI coding agent,想要通过 AI 来使用一个程序语言。
- 此时把语言的命令行工具作为一个 skill 即可。
长期使用
此时用户经常需要做的操作可能是:
- 创建这个语言的新项目。
- 发布自己的项目代码。
- 发现和理解别人的项目代码。
- 作为依赖项,使用别人的项目代码。
应用形式
playground
首先想到的形式是基于 web 的代码 playground。
优点:
- 这能够让用户不需要安装工具, 打开网页就可以编译和运行代码。
缺点:
但是这与正常的程序员使用语言的方式相去甚远。
想要实现 playground:
- 要么要求实现者有自己的 server 来运行语言的命令行工具;
- 要么要求语言本身么以编译到 JS 或 wasm。
然而这两个需求都不是程序员使用语言时的长期需求。
notebook
优点:
- 可以把代码写在 markdown 中,支持文学式编程。
- 可以直接把某一个代码块输出的图片,显示在代码块的下面。
缺点:
notebook 早期的缺点,比如:
- 缺乏依赖管理;
- 代码不可重复运行。 都是可以通过设计上的改进来克服的。
notebook 起源于 REPL,所以一个与语言要能支持 REPL。 对于通过编译器实现的语言而言,这可能是很复杂的。
IDE
我们所采纳的形式应该是一个 IDE。
一个极简的 IDE 没有复杂的功能,只有朴素的编辑代码功能。
受到 deekseek-harness 的启发,通过本地网页 APP 来发布。
由于我们的语言直接支持 markdown, 因此可以获得 notebook 形式的两个优点:
- 支持文学式编程;
- 「图片可以在代码块下面」这个功能, 可以通过图片输出到文件, 然后在块下面引用文件的图片来实现。
为了让我们的工作更有价值,IDE 可以是通用的, 不是绑定到我们的某一个语言的。 只需要有约定的文件夹结构, 比如用
scripts/保存工具脚本, 就可以支持任何语言(正如我们现在的项目结构一样)。
coding agent
一个通用的 IDE,显然可以与一个通用的 AI coding agent 相互配合。
给基于 Web 页面的 IDE 增加登录功能,就可以做到:
- 在服务器部署,在本地用 AI 修改服务器的代码;
- 在移动端访问本地的局域网服务,修改主机上的代码。
结论
我们计划实现一个:
- 通用的(不是针对某一语言的);
- 基于本地 Web 页面的;
- 自带 coding agent 的 IDE。