Skip to content

language as an application

· xieyuheng

题解 ​

所谓「语言作为应用程序」, 就是说程序语言,应该以何种方式被用户使用。

使用情形 ​

分两种使用情况:

  • 用户第一次接触到这个语言;
  • 用户需要长期使用这个语言。

初次接触 ​

情形一:一个已经可以熟练使用别的程序语言的程序员,初次接触新语言。

  • 此时用户本身有自己所熟悉的文本编辑器和命令行终端。 语言作的命令行工具,只是用来检查和编译代码, 是工作流中诸多工具的组成部分。

  • 此时需要简化安装过程。 最好是一次安装,获得语言的命令行工具。

情形二:一个没有写过程序的用户,想要学习一个程序语言。

  • 此时「命令行工具」「命令行终端」「文本编辑器」 对于用户来说可能都是陌生的概念。

  • 此时需要给用户提供集成开发环境(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。