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

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

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

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

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

什么是结构化的编程语言

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

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

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

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

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

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

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

这 tm 有什么?

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

你咋不上天呢?

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

相关链接

8100 次点击
所在节点    程序员
113 条回复
lambdaq
2022-11-01 23:19:10 +08:00
你倒是贴段代码康康呢。。。伪代码也行。。。
wsseo
2022-11-01 23:20:19 +08:00
英文编程语言什么的真的是 low 爆了
sadhen
2022-11-01 23:21:17 +08:00
@lambdaq 我们先完成结构化编辑器的设计和实现。目前墨干编辑器不支持 Unicode ,这个问题很大,我们会在 V1.2.0 开始设计 TMU 格式,支持 Unicode 。
sadhen
2022-11-01 23:24:18 +08:00
@lambdaq 另外,V2EX 并不是一个支持结构化文本的论坛,你可以看相关链接里面的截图。

比如,我不知道怎么在 V2EX 里面输入一个矩阵,至少这有点麻烦。

a = <mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd><mn>1</mn></mtd>
<mtd><mn>0</mn></mtd>
<mtd><mn>0</mn></mtd>
</mtr>

<mtr>
<mtd><mn>0</mn></mtd>
<mtd><mn>1</mn></mtd>
<mtd><mn>0</mn></mtd>
</mtr>

<mtr>
<mtd><mn>0</mn></mtd>
<mtd><mn>0</mn></mtd>
<mtd><mn>1</mn></mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
sadhen
2022-11-01 23:26:08 +08:00
wxf666
2022-11-01 23:30:20 +08:00
@sadhen 可以再多写写应用场景吗?还能在哪些方面解决现有编程语言的什么痛点?
XCFOX
2022-11-01 23:33:39 +08:00
请问结构化编程和函数式编程( Haskell 、F#)有何不同?
sadhen
2022-11-01 23:34:55 +08:00
@wxf666 目前还在设计阶段,会参考 https://haxe.org/ 这门语言

一门新的语言,一开始可以依附于既有的编程语言。类似于 Haxe ,用墨干语言实现的 Library ,构建之后可以发布到多种平台,比如 JVM 、Javascript 、WASM 等等。等到成熟之后,可以投入精力,直接将结构化的编程语言编译到 LLVM 这样的虚拟机上面。
sadhen
2022-11-01 23:42:22 +08:00
@XCFOX 一般我们认为支持函数式编程的语言是现代语言。而结构化的语言是未来的语言。有一个显著的差别在于,结构化的编程语言原生支持数学结构。比如矩阵就是结构化编程语言的内置类型。

> 那么结构化编程语言和现在的计算机代数系统+函数式编程有什么区别呢?比如 Fricas 里面 SPAD 语言?

自问自答:SPAD 语言对数学结构的支持仍旧采用的是纯文本的符号,在未来,纯文本的编程语言和现在汇编语言一样不可思议,没有人会再去学习纯文本的编程语言。未来人会惊叹:一门语言竟然不支持数学公式?图像和视频竟然不能作为字面量潜入到代码中?

就像早期的 IRC ,只支持字符。而现代的聊天工具,支持 Emoji 、语音、视频。这种发展是一个自然而然的过程。

抽象层级越来越高,这是自然而然的进化过程。
pocarisweat
2022-11-01 23:45:47 +08:00
你想找的是不是 https://www.jetbrains.com/mps/

话说回来,所谓结构化其实就是直接暴露内部数据结构而不是文本,用在编辑器上我觉得更恰当些(其实 JetBrains 的 IDE 已经很有「我编辑的是 AST 而不是源码」的感觉了)。

王垠之前也痛陈过 Unix 一切皆文本哲学的危害,然后写了篇文章设计一个结构化的操作系统: https://www.yinwang.org/blog-cn/2013/04/14/os-design

微软的 COM 也有点这个意思,因为文本是程序之间天然的 RPC 接口,而要想超越文本接口,就必须要设计一个放之四海而皆准的结构化接口,然后就成了 COM 这么个奇怪的东西
lisongeee
2022-11-01 23:46:09 +08:00
sadhen
2022-11-01 23:47:45 +08:00
@pocarisweat 我知道有 mps 这样的编辑器,所以我并没有在寻找这样的实现。我在寻找志同道合的人,一起来实现结构化的编程语言和编辑器。
sadhen
2022-11-01 23:50:50 +08:00
@pocarisweat 写文章设计什么的,还是弱爆了。那是技术圈的“网红”才会做的事情(没有贬低网红的意思,taste 同样是比较重要的)。个人崇尚“实用”,不喜欢清谈。设计了,最终是要实现的,可能要花十年、二十年,但是足够有意思,为什么不去实现呢?为什么不找一群志同道合的人一起实现呢?
x02
2022-11-01 23:51:07 +08:00
> 为什么不为人类设计一门结构化的编程语言?

为什么人类需要一个结构化的编程语言?

你的语言在哪些问题上有更好的表现?
wxf666
2022-11-01 23:52:50 +08:00
@sadhen 硬编码图像和视频??
sadhen
2022-11-01 23:58:46 +08:00
@x02 因为人类在计算机技术上能做的抽象层级越来越高了。人类需要更多的多样性!为什么英语要统治编程语言世界?非洲某个部落的只有 1000 个人使用的语言也可以用做结构化编程语言的关键字。比如,未来的太空旅行中,一个飞行器里面可能有十个人,这十个人在漫长的星际旅行中,他们在日常生活中创造了一门新的自然语言,这个时候,英语明显是不合适的。英语在这样的飞行器中的地位,就是现在的拉丁文了。

> 你的语言在哪些问题上有更好的表现?

上面已经有一些例子了,我再举一些例子吧。结构化的语言不用考虑:

+ 要不要用游标卡尺
+ 一个语句(Statement)的末尾是不是需要加 `;`

这类细枝末节的事情。由于语言本身的序列化就是结构化的,编译器前端的实现可以大大简化,我们直接做后端优化就可以了,去适配不同类型物理实现:CPU/GPU/TPU/量子计算芯片
sadhen
2022-11-01 23:59:48 +08:00
@wxf666 Racket 的 REPL 里面,图像就可以作为字面量。我们可以实现 rotate 函数,对输入参数的图像做 rotate 。
sadhen
2022-11-02 00:22:12 +08:00
> 个人崇尚“实用”,不喜欢清谈。设计了,最终是要实现的

努力提高知识水平,请大家指导,避免在 21 世纪“土法炼钢”
luckyrayyy
2022-11-02 00:46:47 +08:00
人类文字真的是 low 爆了,我设计了一个火星文编程
humpy
2022-11-02 00:54:24 +08:00
「结构在实现上就是抽象语法树」
lisp ?

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

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

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

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

© 2021 V2EX