为什么不为人类设计一门结构化的编程语言(中文编程语言什么的真的是 low 爆了)

2022-11-01 23:16:28 +08:00
 sadhen

我们墨者实验室正在设计一门结构化的编程语言。

https://github.com/XmacsLabs/mogan-lang

中国人不缺编程语言,而人类还缺少一门结构化的编程语言!

什么是结构化的编程语言

目前( 2022 年),大多数编程语言都是使用纯文本维护的,而结构化编程语言是使用结构化的文本( GNU TeXmacs 的文档就是结构化文本的一种)维护的。

结构化编程语言和纯文本编程语言有三个主要的区别:

  1. 结构是一等公民: 结构在实现上就是抽象语法树,结构化编程语言会序列化成结构化文本。
  2. 关键字自由:大部分编程语言所使用的关键字都是英文,这事实上剥夺了用户的关键字自由,用户可以使用自己的母语或者自己喜欢的语言中的词作为结构化语言的关键字。
  3. 文学编程:撰写结构化的编程语言的过程就是撰写结构化文档,也就是文学编程

结构化字面量(设计草稿)

结构化编程语言可以支持丰富的字面量,比如图像字面量、矩阵字面量、自然数、实数。。。

结构化表达式(设计草稿)

数学表达式是一定要支持的,比如积分、矩阵等等。

这 tm 有什么?

写个数学公式,就可以炼统计学习的丹药,不是很爽么?

你咋不上天呢?

我们从墨干编辑器这样一个结构化的编辑器开始,去探索如何设计一门结构化的编程语言。

相关链接

8649 次点击
所在节点    程序员
113 条回复
z4oSkDNGGC2svsix
2022-11-02 00:55:49 +08:00
@sadhen 我并没有看懂, 也许很强大, 但你没有表达清楚, 至少我这样的凡夫俗子没有看懂.

> 人类在计算机技术上能做的抽象层级越来越高了

然后呢? 并没有引出下一个结论.


> 人类需要更多的多样性!

这种论点就像"硅谷需要更多女性"一样, 我对这种话题没兴趣.

> 为什么英语要统治编程语言世界?

因为我们的键盘是按照英文设计的, 也许未来我们可以用脑电波输入时, 编程语言的符号就不存在了. 人类的想法会被直接转换成 10.


> 非洲某个部落的只有 1000 个人使用的语言也可以用做结构化编程语言的关键字

只要你愿意, 当然可以, 不过我看不出来这有什么实际好处.

> 未来人类在漫长的星际旅行中创造了一个语言? 那个时候英语是不合适的?

首先, 我很好奇那些人为什么会在星际旅行中创造语言. 其次如果他们要创造语言, 自然它们不可能创造英语, 因为英语已经存在了, 但他们很有可能用英文字母, 如果他们还打算为这个新语言创造文字的话, 这一切都取决于那几个无聊的人怎么想. 话说未来的虚拟娱乐方式应该会很多吧.



至于你最后说的不要游标卡尺和分号.

JAVASCRIPT

最好,

你的这个语言也许很有意思, 我并不是打击你. 在这个消费的时代, 创造是值得鼓励的.
sadhen
2022-11-02 01:01:13 +08:00
@humpy lisp 只是抽象语法树的一种“序列化”的方式。囿于时代,或者出于设计上简洁性的考量,lisp 所表达的抽象语法树仅仅支持字符串这种比较基础的 primitive node 。未来的编程语言的抽象语法树,它的节点是更加“高级”。比如我们现在能理解的图像数据和视频数据,他们都可以作为抽象语法树的节点。

未来的人类在基础学科上的突破,可以想象,会有很多基础的东西,是现在的人类所无法理解的。
maggch97
2022-11-02 01:03:47 +08:00
易语言被人吐槽的一点就是那个''结构化''的代码无法用 git track 改动
12101111
2022-11-02 01:08:13 +08:00
git 不支持这种语言的变动追踪,不如先实现一个结构化的 diff 算法
sadhen
2022-11-02 01:11:45 +08:00
> 你的这个语言也许很有意思, 我并不是打击你. 在这个消费的时代, 创造是值得鼓励的.

@x02 如果你是 GNU TeXmacs 或者 MPS 或者别的结构化编辑器的用户,你会觉得我并不是在“创造”。这样的设想其实是一群人的有共鸣的设想。只不过我在这里,和大家聊起这个话题。

> > 非洲某个部落的只有 1000 个人使用的语言也可以用做结构化编程语言的关键字
> 只要你愿意, 当然可以, 不过我看不出来这有什么实际好处.

这里只是举个例子,说明使用结构化语言,用户可以很方便地自定义关键字。在结构化编辑器中,而且对于关键字,使用英语键盘输入是没有什么问题的。比如如果我定义了分支语句的中的关键字 IF 为如果,我需要输入“如果”,那么完全可以自定义快捷键,比如输入 r g tab 就得到如果。

可定制的自由是很重要的自由,比如为什么我的淘宝首页非得是淘宝的产品、运营定制的,为什么这个首页非得是淘宝各种部门拉锯之后的结果。

未来的编程语言在语法上会有很大的自由度,不论你用什么样的语法、什么样的渲染结果,最终内部的结构是统一,那么语义也是一致的。
sadhen
2022-11-02 01:14:49 +08:00
@12101111 看这个视频的 https://www.bilibili.com/video/BV1MV4y137Qs 时间戳位置 26:30

结构化的 DIFF 算法已经有了
sadhen
2022-11-02 01:20:15 +08:00
> 我并没有看懂, 也许很强大, 但你没有表达清楚, 至少我这样的凡夫俗子没有看懂.

@x02 我确实没有表达清楚,不过这是我一直有的想法。我有很多 Random Thoughts ,我需要在 V2EX 里面写下来,然后看一下有没有理解我的同类。再过段时间,我写一篇长文

也谈未来的编程语言

详细描述一下我对结构化编程语言的畅想,这里的未来,指的大概是 30 年内的。
Aloento
2022-11-02 01:33:47 +08:00
当绝大部分人都看不懂的时候,这个东西就目前来讲,便已失去了实用性
sadhen
2022-11-02 01:39:16 +08:00
> 至于你最后说的不要游标卡尺和分号.
>
> JAVASCRIPT

这里也是举一个例子。由于结构化语言和结构化编辑器有一定程度的结合,可以保证我们不需要在意语法。

更进一步,**使用结构化编辑器来编辑结构化的编程语言能够保证用户的每一次编辑都是可以通过编译器编译的**。

如果做的更好的话,结构化编辑器甚至可以保证用户的每一次编辑,都是能够保证其正确性。我们现在的程序员经常在和 CI 做斗争,以后这是不需要的。

如果下一次编辑只有一种可能,或者只有若干种可能,那么为什么不让用户自己选择呢?

为什么一次编辑只能编辑一个文件?一次编辑当然可以编辑多个文件。

为什么源代码需要用文件来组织呢?源代码当然可以和任何别的数据一样,完全不需要文件这种具体实现。
sadhen
2022-11-02 01:40:37 +08:00
@Aloento 失去了对 2022 年大部分人类的实用性,不代表失去了对 2050 年大部分人类的实用性。
sadhen
2022-11-02 01:42:08 +08:00
> 微软的 COM 也有点这个意思,因为文本是程序之间天然的 RPC 接口,而要想超越文本接口,就必须要设计一个放之四海而皆准的结构化接口,然后就成了 COM 这么个奇怪的东西

@pocarisweat 曾经有过去微软打工赚钱的想法,但从来没有用微软的方轮子造自行车的想法。。。
placeholder
2022-11-02 02:44:39 +08:00
全文对 [为什么不为人类设计一门结构化编程语言] 没有一丝一毫的探讨。

点进来还以为能学点啥,哎,就不说脏话骂你了。
AX5N
2022-11-02 05:32:13 +08:00
15 楼贴的 mps 的网站里,三张图马上就能明白 mps 的意图是什么,但 lz 说了半天也完全没搞懂 lz 想说什么。

能不能用 photoshop 或者纸笔画几张效果图出来演示下?
L4Linux
2022-11-02 07:14:09 +08:00
我的理解就是富文本编程。。。
sadhen
2022-11-02 07:15:19 +08:00
@AX5N 五楼也有图
sadhen
2022-11-02 07:19:37 +08:00
@L4Linux 这里是要设计并实现一门编程语言。拿 ms-word 举例,设计一门 ms-word-lang ,这门语言会有一个 ms-word-interpreter ,然后这门语言的源代码是用 xxx.doc, xyz.docx 这样的格式存储的。

ms-word-interpreter xxx.doc
ms-word-interpreter xyz.docx

这样就可以得到运行的结果。
mizuhashi
2022-11-02 07:49:02 +08:00
支持楼主,比较期待看到实际的写程序体验。结构化编辑基于 mps 或者 notion 之类的体验,比较麻烦的是总要先选好节点类型再填内容,修改的话也要处理节点类型变化的问题,例如两个名字差不多的函数调用在文本编辑下可以删改几个字符,在结构化编辑下就要整个节点换掉。估计我作为一个已经成年的程序员还是更习惯文本的自由编辑,不过我确实认同未来的人可能会更习惯结构化编辑,如果从小就开始用结构化编辑器
AX5N
2022-11-02 07:53:02 +08:00
@sadhen 你 5 楼那个图完全没看出来跟普通编程语言有啥区别。你把矩阵画成那样跟 [1, 2, 3, 4] 的区别在哪?就只有好看一些吗?
greygoo
2022-11-02 08:12:35 +08:00
很早以前就见到了 JetBrains MPS,有这一个非常好的结构化代码编辑器可以实现一些数学公式: https://www.jetbrains.com/mps/img/screenshots/2017.2/projectional-editor.png
greygoo
2022-11-02 08:22:01 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/891914

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX