yanyingwang / ming

名语言/Ming-Language
https://yanying.wang/ming
Other
7 stars 0 forks source link

todos #1

Open yanyingwang opened 2 years ago

yanyingwang commented 2 years ago

any suggestions or ideas that you want to discuss or let me know can be put here

Kalimehtar commented 1 year ago

enh the error megs of mapping,

Maybe you should join to the discussion of the Racket internationalization issue

kalxd commented 1 year ago

使用汉字太过生僻了,我一个打五笔的,字库里根本找不到。 汉字虽然以表音为主,还是少量表意结构,不如试试让程序变得更加自由,允许用户根据几个偏旁(五笔用户用字根),生成新的“文字操作符”。 例如mapfilter两个操作符的组合,我感觉能否以“土”“彐”组合成“寻”?类似这样的伪代码:

(define 寻 (compose 彐 土))
yanyingwang commented 1 year ago

@kalxd 使用现代汉语常用字是我最早的想法,比如 https://github.com/yanyingwang/ming/blob/d790156c935da4b95d8deb4b516c048829936f87/mapping/racket/list.rkt 最早就全部都是现代汉语常用字。但是我觉得这样的翻译还不如直接使用英文,起码没有很大的差别。

后来随着翻译的发展,发现需要把一些函数命名拆分成非常细小的概念,才能组合表达,才有了使用生僻字,进而又去新造了很多汉字。以至于现在输入函数名需要另外安装自定义的汉字字库,并要使用郑码输入法了:http://www.yanying.wang/ming/prepare.html#%28part._fonts-and-input-methods%29

这么做的原因汇总下来,我觉得问题还是出在现代汉语身上,现代汉语在我看来是将汉语揉进了西方语言的特色的,带来的西方语言的优点,同时也丧失了汉语的优势。

另外一个主要的问题,我觉得是西方近代科学里面的很多概念都是古代中国所没有的,现代汉语在创造这些概念的时候,没有沿用或者有意规避了发展古代汉语的特色的方式。比如古代中国有一种使用单字表达概念的习惯,典型的比如中国省份都有单字简称。

而在现代科学体系中,数学无疑是很重要的,但数学中的各个概念,基本上全都不是古代中国有的,古代中国的数学其实是相当落后的,根本就没有发展出来这些概念,但是现代汉语中的这些概念命名,都是一种现代汉语的方式,我觉得也是需要改进的:http://www.yanying.wang/ming/numbers.html

发展到现在,其中我觉得最有用处的一点是可以通过函数名中汉字的偏旁来暗示出参和入参的类型等信息:http://www.yanying.wang/ming/naming-rules.html

举例来说,比如find这个函数,汉语可以用“寻”字,但是必须更加的简化,如此能用单字组合出member、filter、remove。

就现在来说,要使用名语言,学习成本还是很高的,但是我觉得最终的效果很好,我最近在写一个生成股票走势图的程序,感觉写出来的代码可读性比racket是好的:

2023-08-12 22-16-34 的屏幕截图

最终上,我觉得如果要使汉语编程,必须要有突出的优点,这个优点就落在命名上,但是这样的命名发展下去,最终会改变现代汉语,或者现代汉语在专业领域上的表达的,这个表达很多时候需要落在用简短的汉字汉语表达丰富的信息上,比如数学里面的“坐标”,也需要抽象成单字:"並+示" 。这样在编程的时候,用汉语编程才能做到真正的简短。

知乎上有一个人的回答,我觉得讲的还是很对的:https://www.zhihu.com/question/33983820/answer/3138164556

kalxd commented 1 year ago

我倒不觉得是汉字缺陷,西式汉语确是个问题,我也常犯,这难以避免,阅读翻译的教材,都有股子英语味道。毕竟能“信、达、雅”翻译到中文,不仅本专业要过关,汉语(表达水平)不能太差,两者皆俱少之又少。 从组合性来讲,身为分析语的汉语,比起屈折变化的英语,可谓优势甚大。以“吃饭”这个动作为例,就可以自由加上时间“早上”“等会儿”,而英语还要考虑时态,到底是“ate"还是"eating"。单这一点,我也想推广中文(汉语)编程。 有时我觉得是现在编程语言语法限制了中文化的可能性,世面上大部分语法都靠空格、缩进区分token,我们中文却少有空格,这导致直接翻译成汉字,变得不伦不类。S表达式也不例外。 我对“名语言”是支持的,只是我现在单纯认为“名语言”把一个词合成一个字,使用难度没有降低。你或许可以参考一下这款文言文编程,期待能有更好的突破!

yanyingwang commented 1 year ago

你说的空格和时态的问题,其实就是我开始这个项目的初衷,只是后来变得魔幻了。

文言文那个我其实之前也看到过,但我觉得那个有点趋向于文学编程,虽然用了文言文的词汇,但我觉得却像是徒有其表的,反而比白话文更加啰唆,且也不比白话更加的浅显明了,好像是极具了白话文和文言文共有缺点的产物(我其实没有深入看实现原理,只是就表面而言)。

如果未来有一种文言文式的编程语言的话,我觉得反而可能是名语言这种形式的激进发展结果,比如你提到因为汉语不需要空格区分单词,并且表现出一种弱词性因而不需要时态的变换(这个本质上我觉得是跟汉字的偏旁有极大关系的),因而最终可能可以发展出来一种省略括号、空格、回车却依旧可以清晰的表达清楚表达式边界的形式,也就是编程意义上的文言文了。而那个时候的文言文,从遣词造句的方式,到具体的每个汉字,都跟古代文言文可能都是完全不同的,唯一相同的是,他们都是一种极其精简的表达形式,且基本都只用于书面表达,鲜少用于日常口语。