• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Qiaogui
V2EX  ›  程序员

我想开发一门新的编程语言,不过个人能力有限(编程技术很菜ヾ(o・ω・)ノ,不过并不影响我对编程语言的理解),希望有人帮助我开发编译器或解释器,完整的想法我已经有了,就等实现了。

  •  
  •   Qiaogui ·
    QiaoguiDai · May 7, 2019 · 32083 views
    This topic created in 2595 days ago, the information mentioned may be changed or developed.

    不是玩具语言,不是玩具语言,不是玩具语言,重要的事情说三遍。

    就是常规的通用目标编程语言,不过它有些很独特的特性,很强的,很强的,很强的!!!

    希望能找一两个会做编译器或解释器的(不会也行,只要是程序猿都可( • ̀ω•́ )✧,毕竟太高级的程序猿可能会很不屑 d(´ω`*)),还想找一个会写文档的,自己文笔太菜,草案写的很丑 ̄ω ̄=,哈哈。

    有兴趣的,都欢迎加入,稍后我看有多少人再决定建个讨论组或群。 还请觉得不屑的大大不要喷,虽然可能看上去很菜,但是实现了绝对能够惊世骇俗,我坚信(`_ゝ´)。

    备注:1.没有工资,没有工资,没有工资,本人很穷(/ω\)。 2.希望能做成开源项目,让更多的人用,人人为我,我为人人。

    320 replies    2025-07-13 15:43:53 +08:00
    1  2  3  4  
    jackmod
        201
    jackmod  
       May 8, 2019
    这玩意是复杂项目,最好是先写点东西出来挂 github 上再发贴推广,如果有人觉得不错自然就参与了。
    ech0x
        202
    ech0x  
       May 8, 2019   ❤️ 4
    你要设计一个语言至少得回答下面几个问题吧。
    1:静态类型还是动态类型?
    2:函数式,面向对象,面向过程,面向逻辑,还是多范式?
    3:需不需要手动内存管理?
    4:支持不支持模版或者宏编程?
    5:更高阶的,要不要有类似 Haskell 中 typeclass 和 kinds,甚至更高级的 dependent types.

    既然你说你有学过龙书和虎书,BNF 范式应该知道吧,你不试试用 BNF 范式来描述一下你的语言?

    你这些问题都没想清楚,只有几个零星的例子,就想着要做一个编程语言,也太异想天开了。
    abyssal
        203
    abyssal  
       May 8, 2019
    等一个“不要报酬”的大神
    ech0x
        204
    ech0x  
       May 8, 2019
    @ech0x #202 我看了你的文档,我不是很能理解你所谓的 Array 的 dimension 和 order 关系。
    比如 C 语言里的二维数组申明为 int a[2][3], 在你的语言里这个应该怎么写 int array [2][3] a, 还是 int array [2,3] a ?
    1024hack
        205
    1024hack  
       May 8, 2019
    @Qiaogui 两年前听说很多人用易语言做外挂,然后自己手痒想尝试一下,记得当时打开易语言官网,好像看到要钱就没有尝试了:smile:,默默为你加油,假如你成功了,我就能说自己也见证了这段历史:smile:。
    ech0x
        206
    ech0x  
       May 8, 2019
    而且说实话,看完你的「资料」,除了 Array 部分我有所疑惑,其他的并没有什么新奇的东西,一些关键字选择的槽点我都不吐了。
    ech0x
        207
    ech0x  
       May 8, 2019
    @marsgt #25 你希望的已经以某种形式的实现了。如果你把 BNF 语言的本文当作配置文件的话,那么类似 bison 的工具可以直接生成语言的前端,再利用 llvm 做后端你就可以用很少的代码量作出一个新语言了。
    ccj3011
        208
    ccj3011  
       May 8, 2019   ❤️ 4
    朋友,如果您觉得我后面的话有些不适,先说一句对不起,看了你的帖子,我想到了 cxk 的自我介绍,大家好我是练习了两年半的个人练习生 cxk,喜欢唱、跳、rap、篮球(划掉)、编程
    byte404
        209
    byte404  
       May 8, 2019
    有这个能力并且有这个兴趣的人为何不去加入成熟语言开发圈, 而要跑你这里来? 去帮助 Rust/Python/Go 之类的通用语言变得更好不是比你这个更有价值? 况且你没证明你有引领团队开发新语言的能力
    ech0x
        210
    ech0x  
       May 8, 2019
    @ech0x #202 按你的语言里 我如果写 var int a,a 的类型是什么? 如果我只写 var b 而不给 b 赋值,是编译不通过,还是编译通过,如果编译通过了 b 的类型又是什么?
    hebin
        211
    hebin  
       May 8, 2019
    🎣 大家还是直接开喷好点
    ech0x
        212
    ech0x  
       May 8, 2019   ❤️ 1
    @ech0x #210 你这个所谓的弱引用还不支持引用的引用,那我为什么不用指针?
    ech0x
        213
    ech0x  
       May 8, 2019   ❤️ 1
    @ech0x #212 都 9102 年了,一门新的语言居然不支持类型推导,连 C++都有 auto 了。
    nguoidiqua
        214
    nguoidiqua  
       May 8, 2019   ❤️ 38
    你的设计我就不评论了,因为你都写不明白,没啥好评论的。

    这种情况呢,在游戏社区是经常能看到的。经常有些玩过几个游戏的人跑出来大喊现在游戏都太垃圾,我有一个想法,只要按我的想法来,如何如何云云。这些人里面,大多连一个文档都拿不出。基本上就是玩这个游戏觉得这里好那里不好,玩那个游戏觉得那里好这里不好,于是就想把好的地方给拼凑起来。

    可是他们不懂,有无相生,高下相盈。好与坏,很多时候都是取舍的结果,无此即无彼。所以做任何东西,既要选择好的,也要选择坏的。一个人只想到好的,那可以说这个人还没有想清楚事情的能力。

    譬如做菜吧,一个人只是吃过一些菜,算是吃过点好吃的也吃过点不好吃的东西。但他自己也没怎么做过菜,做得好不好很难说,可能他觉得做菜很麻烦,这也许是就是他不怎么做菜的原因,他觉得问题在这。于是他就想改变厨艺的现状,于是他找了些厨艺书籍看了看,拿着锅碗瓢盆掂量了掂量。这样几年之后,他觉得自己对厨艺十分了解了,和别人谈起来的时候,可以把各地厨艺相关的东西如数家珍,但就是没做过什么菜。但是他觉得没所谓,反正他不是想当厨师,他有更伟大的使命,改变厨艺、造福广大厨师才是他该做的事情。于是他开始想了,比如给炒锅改成两个柄,一只手抛不动锅的时候可以两只手一起抛锅,这可以让力气小的人也能潇洒的抛锅。总之,他提出了很多零零碎碎的便利性小想法,他感觉只要有人帮他做出这些,当厨师就不难了。

    很多人都是这样,因为他们对事物缺乏根本性的了解,看到的都是些表面的东西,于是他们觉得改进很简单,大有文章可做,其实他们那些不成熟的想法只会带来更多问题,却没有什么真正裨益。

    对于你吧,一个正在接受高等教育的人,处于成长阶段的人,说自己表达能力不行,写不好一个大纲或者文档,要找人写。能力不行,想的不是借此锻炼自己,提升自己的能力,你想的是绕过这个问题,找别人帮你解决。一个中国人,用中文都表达不好自己的想法,写不出有条理的文案,那么真的有能力设计一个表达条理性逻辑思维的工具吗?

    写程序也是,学了很多语言,却没写过什么程序,也不想当程序员。为什么呢,学一个语言简单,有基础的人几个小时就能初步了解一个新的编程语言,很容易得到满足感。但是写程序呢,可能几个小时都解决不了一个 BUG,好累哟,这种事情还是绕过去,让别人去做吧。

    英文不好,就找机翻。学了这么多编程语言,自己写不出 demo,也想来找别人帮忙。总是遇到难处就避开,想要别人解决。你就没有想过,这正是提高你自己实践能力的机会吗?实践出真知,你自己试试就知道自己的设计现实不现实了,就知道那些所谓改进有没有什么用了。

    面对难点就避开,讨论严肃问题大量夹带颜文字和各种网络老梗,毫无根本的自信,种种都给人不成熟很幼稚的感觉。

    我没什么好建议的,只能说,要做呢,就自己好好整理出文档,自己去起手做,哪里不会学哪里,然后把学的知识用起来,这才是真正的学。这样的话,就算最后没什么卵用,就算做出来的东西连玩具都不如,但是起码你的编程能力是真正提高了,你会真正切实体会到编程中的一些问题。像以前那样走马观花的学这学那,不过是浪费了青春。

    不过呢,虽然折腾下也能学到点东西,但最好还是别折腾这个了,你已经快毕业了,这东西你想做,还是等以后能力强点再做吧。现在你可能折腾几个月都写不出个屁,但以后水平高了可能一个圣诞节假期就写出来了,总之你还没到做这种东西的时候。

    先博而后渊,你既然已经走马观花那么久了,那不如选门觉得还算有用的语言做点真正的程序。你需要改变的不是编程语言,而是你自己。
    Xusually
        215
    Xusually  
       May 8, 2019
    @nguoidiqua 目前你最长,服
    rus4db
        216
    rus4db  
       May 8, 2019
    思而不学则殆。
    不过本着友善的态度来说,还是建议你先从实现一个 Scheme 解释器这样的项目入手。
    比如我目前正在做的事情: https://github.com/mikukonai/AuroraScheme

    最后,创造一门能够形成生产力的新语言,最关键的是生态。
    codebear01
        217
    codebear01  
       May 8, 2019
    是不是需要先看下编译原理呀
    RyuZheng
        218
    RyuZheng  
       May 8, 2019 via iPhone
    想做又觉得自己做不了,说到底楼主还是没有很想做。不然千辛万苦也会做
    RyuZheng
        219
    RyuZheng  
       May 8, 2019 via iPhone
    想做又觉得自己做不了,说到底楼主还是不够想做。不然千辛万苦也会做
    Qiaogui
        220
    Qiaogui  
    OP
       May 8, 2019
    @maxco292 有类型系统,但是了不是类似于 F# Mir... haskell 那种,函数式语言的风格比较像 scheme 和 common lisp
    @bokchoys 学习的话欢迎哟,不过我不觉得一个学生能有足够的能力完成,这需要有很深厚的功底,当然,如果能的话,当我没说( • ̀ω•́ )✧,之后我还会继续完善我的文档,尽量做到每日一更,直到文稿彻底定型,欢迎跟进。
    @inwl @jackmod 谢谢你们的建议,但好像 github 做推广也很难吧。
    @ech0x 1:静态类型还是动态类型? 答:两种都支持!这取决于使用的方式,是按强类型引用还是按弱类型引用。就像 Cython 一样作为 python 的改良,它同样保留了动态类型。
    2:函数式,面向对象,面向过程,面向逻辑,还是多范式?当然是多范式,并且实现了完美的融合而不是缝合。
    3:需不需要手动内存管理?语法上支持手动内存释放,但实现上如果支持自动收集垃圾,手动释放功能仍然是保留的,可以用于提前释放。(就像应急情况下的手刹一样)。
    4:支持不支持模版或者宏编程?支持模板编程,部分支持宏,不过不允许通过宏来过度的改变语言结构,这会造成语言的分裂,也会造成语言使用群体的分裂,就像大量的 Lisp 社区一样。
    5:更高阶的,要不要有类似 Haskell 中 typeclass 和 kinds,甚至更高级的 dependent types.更高阶风格类似于 scheme 那种,不属于 haskell 类的函数式。

    关于数组的文档,那里存在错误,数组的声明类似于 C。
    例子:
    int intArray[4,5][6,7] // 这是一个具有两阶每阶都具有两个维度的整型数组
    按阶遍历的方法:
    loop int xArray[6,7] in intArray :
    loop int x in xArray:
    print(x) ~
    ~ // 波浪号代表冒号块的结束,之前用的是下划线,最后我还是觉得波浪线好一点。

    var int a // a 是一个整型引用的名称,但当前他不引用任何东西,也就是 nil,他也只能引用整型变量
    var b // b 是一个无类型引用的名称,它可以引用任何类型,所以它对类型的判断是弱的,
    // 将弱引用转换成强引用需要通过显示的转换,确保这是你想做的
    // 而将强引用转换成弱引用则不要强制类型转换

    指针指向内存地址,意味着直接对底层进行操作,这很不安全,为了避免它,JAVA 给出了引用的方式。我借鉴了它,但同样我也很看重名字的重要性,就像 SCIP 苏珊曼的课程,他一直在强调名字的重要性,语言对于名称的处理作用域的管理与其他语言有区别。

    @RyuZheng 我听了很多类似您这样的说法,我的文档还在跟进,整体逻辑以及完整的思路已经成竹在胸,虽然写的烂,但日后每日我会逐渐更新文档,直到文稿彻底成型。
    MadHouse
        221
    MadHouse  
       May 8, 2019 via Android
    说实在的, 比起语言类型,算法模型,功能实现才是更加重要,像目前为止所开发的语言,基本都是针对性的应用类型和方向,,lisp(人工智能与绘图),R(数据处理分析),JS(web 应用),java (移动终端)等等,题主想要开发新语言,是想适合在什么场景应用,实现什么功能?语言不是唯一的,涌现新语言都是为了利用已经构造好的函数,库…来加速软件开发周期,更加方便编程实现;想当初我做系统建模的时候,也有跟你一样的想法,结果本末倒置,求解速度慢不说,还极其陷入局部最优
    koodai
        222
    koodai  
       May 8, 2019 via Android
    挺好的,几点:
    1、楼主是个有实践精神的人,没有止于一时冲动,👍
    2、楼主回复就事说事,有些回复可能不是那么友好,也能容纳。
    3、楼主说自己读过很多相关书籍,具体水平不知道,但表现出来的是有一定思想基础的,不是和大家闹着玩。

    综上,我觉得楼主蛮 OK 的呀,假如能把自己的想法整理后完整清晰的阐述一下,可能有不少 v2 的朋友们会行动起来。
    加油😊
    xiaosongshu
        223
    xiaosongshu  
       May 8, 2019 via Android   ❤️ 1
    首先,鼓励你一下,精神与勇气可嘉,但是可别荒废掉了自己的原专业,风险很大呀!
    我觉得,你这样创造语言,恐怕有点难,尤其脱离实际工程经验的语言发明,最终会与工程应用脱节甚远,很难成功的。。。创造一门新语言,没有经历过足够多的工程设计,没有撸过足够多的基础轮子,是很难知道设计的好与坏的。碰巧我也在设计语言、编译器及配套开发工具和库,但与你有本质上的差异,你的原点是学足够多的语言,取“所长”,然后创造出一门语言,而我与你恰相反,我的原点是撸了足够多的基础项目,造了足够多的基础轮子,语言却只学了一门,我设计新语言完全是以工程应用为准则,而不是以众家语言为蓝图,否则语言最终可能就是个大杂烩。。。
    做为旁观者和过来人,在评估了你当前所处的境界后,我的建议是,如果不想“自己亲自撸代码并预算 n 年的全职时间和巨大风险”的话,那还是建议你回到本职专业吧。
    认真考虑一下吧,评估一下对将来的职业规划是否有帮助,风险几许,要继续还是止损。。。
    lonelygo
        224
    lonelygo  
       May 8, 2019
    如果是做一个商业项目或者目标非常具体的开源工具,有想法找一些代码实现能力强的大神一起合作,是有可行性的,因为:目标清晰,即使遇到不同理念,也较容易基于目标达成一致;就算达不成一致,散伙了,继续干下去还是比较容易,还是因为:目标清晰。
    但是,语言开发这事情,先不说难度和周期,就说理念。
    大神难找,还要找到理念一致的大神才行。
    否则,就是看{ }不爽,那我弄个 python ……等等等,不都是因理念不一致而分支,或者干脆另起高楼么。
    TimPeake
        225
    TimPeake  
       May 8, 2019
    忽然想起来一件事:
    TimPeake
        226
    TimPeake  
       May 8, 2019
    忽然想起来初中时的一件事:
    当时记得是数学课,老师刚讲完勾股定理
    luxy
        227
    luxy  
       May 8, 2019 via iPhone
    楼主的想法挺不错的,曾几何时也有过类似的想法,建议楼主先建一个 github 仓库,把这些记录起来,也方便更多人的加入贡献,完善实现
    TimPeake
        228
    TimPeake  
       May 8, 2019
    @TimPeake
    当时不小心不知道怎么找了两个三角形的边长,去验证勾股定理,最后的结果竟然不符合勾股定理的预期,于是我欣喜若狂地对同桌说,你看,我推翻勾股定理啦!同桌一记白眼,默默地重新给我算了下我假设的条件,原来是我搞错了。。。
    感觉楼主有点像当年的自己
    xuld
        229
    xuld  
       May 8, 2019
    楼主私个联系方式
    ech0x
        230
    ech0x  
       May 8, 2019
    @Qiaogui #220

    1.「并且实现了完美的融合而不是缝合。」这是一句空话,请你仔细说明。
    2 「支持模板编程,部分支持宏」这还是一句空话,怎么支持,支持的语法是什么请说明。
    3.「语法上支持手动内存释放,但实现上如果支持自动收集垃圾」前后矛盾,所以你到底想要个带垃圾回收的还是不带垃圾回收的语言呢?
    4 「.更高阶风格类似于 scheme 那种,不属于 haskell 类的函数式。」所以到底是个什么样子的风格,请你用写点 Haskell 和 scheme 对比一下。你会 Haskell 吗?
    5. 「 是一个无类型引用的名称,它可以引用任何类型,所以它对类型的判断是弱的」你不说这是一个强类型的语言吗?这又是怎么回事?
    6. array 我还是没能理解,你不妨用你的语言输出一个乘法口诀表看看。
    补充问题:
    1. 你想解决的问题是什么,又是怎么解决的?请用你感觉不爽的语言实现一段代码,再用你的语言实现同样的功能。
    2.你有没有写过解释器,据我的学习经验 SICP 最后是要实现 eval 和 apply 函数的,不可能一点东西都实现不出来的。
    3.既然你的语言是一个强类型系统的,而且支持 OOP,那么你的语言支持 协变 和逆变 吗?你知道什么是协变逆变吗?
    4.既然你学过这么多东西,那么为什么对 bison llvm 这些工具的概念这么一窍不通呢?请说明。
    ech0x
        231
    ech0x  
       May 8, 2019
    @ech0x #230 如果你学过 lisp 那么我相信你对闭包的感念是熟悉的,那么你稍微说一下你所理解的必报是什么?
    另外 sicp 一开始就讲了尾递归调用和优化,不如你来讲一下尾递归调用优化的原理,这样也可以用在你的「语言」上。
    ech0x
        232
    ech0x  
       May 8, 2019
    @ech0x #231 既然你看过你龙书和虎书,不如来分析分析几种文法分析的算法的优劣,这可是基础知识,毕竟饭要一口一口吃。
    ashlord
        233
    ashlord  
       May 8, 2019
    等等,这种帖子在游戏开发社区中日经,pl 版本的我倒是第一次见,长见识了。
    nguoidiqua
        234
    nguoidiqua  
       May 8, 2019
    面面俱到就等于面面不到,因为有些优点正是另外有些优点的对立面。人人都讨好就等于人人都不讨好,因为有些人喜欢的正是另外一些人讨厌的。

    基本上有点追求的程序员,都想过改进编程语言,我自己每学个新东西都有改进的想法,但往往想清楚了之后会发现一个事实,要么改动没啥实际作用,要么虽然有点作用但是会带来其他问题。

    历史上很多人都想过搞个又通用、又高效、又易懂的编程语言,但是好像最后流行起来的语言没有一个是这样的。现在能够崛起的新语言往往已经都属于针对性很强的语言,专注解决某一方面的痛点。似乎大家都已经意识到不同场合用不同轮子比搞个万能轮子更好,用瑞士军刀不如用工具套。

    你的文档我看了下,只有一个感觉——混乱。虽然集合各种优点的想法听起来很美好,不过实际上看好像没啥吸引人的特点。想想自己到底要解决哪方面的问题,这世界没有治好一切病的万能药,很多药混起来不见得是治病。

    我个人建议呢,写点真正的示例代码来看看,你自己去模拟写代码才算用,用了才知道感觉怎么样,别人看了才知道用起来大概什么情况。
    mostkia
        235
    mostkia  
       May 8, 2019
    站在巨人肩上不好吗?老老实实的学一门成功的语言,能做的事情有很多。有时候你觉得很棒的一个想法,可能只是某些情况下的最优解,你自己也不是说了吗?不太懂代码,又怎么知道你的想法是否是个好主意呢。有这种想法是好的,但也得打好基础,至少自己也能出点力,不要都指望别人来替你实现,然后你摘桃子,显然没那么好的事情,好的想法从来不会少的,只有肯动手的人少而已。
    KuzhiBake
        236
    KuzhiBake  
       May 8, 2019 via Android
    楼主脾气好,这一点我要向你学习。
    testplusplus
        237
    testplusplus  
       May 8, 2019
    我想到一个很惊艳的 PC 游戏,就差程序员、美工、测试、市场运营替我免费打工了。
    b00tyhunt3r
        238
    b00tyhunt3r  
       May 9, 2019 via iPad
    语言设计也是设计,设计工作最重要的东西就是文档了。
    现在才理解学好语文(逻辑)很重要吧,楼主加油💪
    qingxiangcool
        239
    qingxiangcool  
       May 9, 2019
    一堆闲鱼前面谈天论地是没用的, 还不如脚踏实地, 一行一行代码的实现, 是金子总会发光的.
    darknoll
        240
    darknoll  
       May 9, 2019
    我有一个很好的想法,就差实现。
    Qiaogui
        241
    Qiaogui  
    OP
       May 9, 2019
    听你们的建议,我慢慢开始整理我的思路。
    这是今天上午的成果:

    链接: https://pan.baidu.com/s/1U3W4rSfZNgdGyVq0S8fI8A
    提取码:2c9s

    之后还会有关于数组,控制流,函数,对象,更多高级主题的东西,我慢慢写,慢慢上传,大家不要急。
    如果您有更好的见解欢迎提供,如果您有问题,欢迎询问,虽然不是人人都能回复,但我还是尽量照顾到每个人。如果您是喷子,我也并不介意,只要您不影响讨论区的其它人就可,谢谢各位的配合,感谢那些支持我的人。
    Qiaogui
        242
    Qiaogui  
    OP
       May 9, 2019
    一次写一种东西,思路感觉清晰多了。(*^▽^*)
    Qiaogui
        243
    Qiaogui  
    OP
       May 9, 2019
    @FrankHB 大大,这种写法类似于 Spec 的写法吗?想咨询你一下。
    wutiantong
        244
    wutiantong  
       May 9, 2019   ❤️ 2
    @Qiaogui 看了一下,随便说几句啊

    1. “声明”这个词被你滥用了,绝大部分地方其实是在“定义”,如果你就是想更改这两个词的通俗含义( C-like ),那么你需要重新阐述一下这两个词在你的描述中的确切含义。

    2. 据我所知,新一代语言都在试图把 nullity 做到类型上(optional type),而你的引用类型却延续了 C/Java 的做法( always null check ),你这样做的好处是什么?

    3. 当你在描述“指类型”时,至少有两件非常重要的事情你都没提到:1. 指类型是否必须初始化; 2. 若它不携带类型那么从 initializer 的自动类型推断是不可或缺的

    4. 绑定那一块想做的事情太复杂了,你的那点文字根本没有说清楚任何实质性问题。
    Qiaogui
        245
    Qiaogui  
    OP
       May 9, 2019 via Android
    @wutiantong 谢谢您的建议,我继续跟进。
    wutiantong
        246
    wutiantong  
       May 9, 2019
    @Qiaogui

    5. 说到对象就不得不去思考对象的生命周期问题,说到生命周期问题就不得不去考虑作用域问题。这些问题你有什么考虑呢?

    5. 你还得有 type-cast 吧,否则你的弱引用永远就是个 void*,能派上什么重要的用场呢?
    Qiaogui
        247
    Qiaogui  
    OP
       May 9, 2019 via Android
    @wutiantong 嗯,谢谢您的补充,这些我考虑过,只是当时一时没想起来要把它写进去,之后会加进去的。
    xairsky
        248
    xairsky  
       May 9, 2019 via iPhone
    zz
    qzivli
        249
    qzivli  
       May 9, 2019
    看了你分享的文档,挑一个来说一下吧。

    delay 关键字:

    正确的做法不应该是 delay int x = 7 * func( o * y)
    而是 let x: Promise<int> = delay(7 * func(o * y))

    注意,int 和 Promise<int> 类型是不一样的,int o = x o 被 x 传染的做法是有问题的,不仅类型是错误的,而且这种“隐式”的东西都是程序员日后的思维负担。

    print(o) 隐式地对其参数进行 force 操作也是错误的,对 delay 之后的对象( promise )强制求值,应该有且只有一个方式,那就是显式地使用 force。


    force 关键字的文档里有个备注:“类型绑定可以在之后重复进行,这种行为类似于赋值,而不是变量的二次声明,不会造成语言歧义”。这里不区分绑定和赋值的行为是一个严重的设计错误,Python 已经吃过苦头了不是吗?
    janxin
        250
    janxin  
       May 9, 2019
    先说观点,我认为没有大量工程经验是设计不出来好语言的...起码工程上不会是好语言... 辣鸡 py 连个 spec 都没有,药丸药丸

    然后再去看看 LZ 的 spec
    solos
        251
    solos  
       May 9, 2019
    厉害了楼主,你这个想法很大胆啊
    ludics
        252
    ludics  
       May 9, 2019 via Android
    建议在 github 开个 repo,把文档传上去便于查看,百度网盘不太方便
    Qiaogui
        253
    Qiaogui  
    OP
       May 9, 2019
    @ludics Github 的工作流程还在学习,先推上去了,貌似好像能看到。谢谢您的提醒。
    @wutiantong 我听取了您的建议,做了些部分修改,关于作用域方面和类型转换那一块详细的我会在后续的文档单独书写。谢谢您的指点。

    这是今天下午到晚上整理的成果:
    https://github.com/QiaoguiDai/Unname
    botian
        254
    botian  
       May 10, 2019 via Android
    想法是好的,但给人的感觉是眼高手低,虽然感觉话不中听,sorry。
    Eugene1024
        255
    Eugene1024  
       May 10, 2019
    就差一个程序员了,手动狗头
    337136897
        256
    337136897  
       May 10, 2019
    楼主脾气好,这一点我要向你学习。另外我还要喷一下你。
    Qiaogui
        257
    Qiaogui  
    OP
       May 10, 2019
    @botian 没事
    这是今天上午整理出来的,关于控制流的介绍:
    https://github.com/QiaoguiDai/Unname/tree/master/二零一九零五幺零幺零三零
    Qiaogui
        258
    Qiaogui  
    OP
       May 10, 2019
    数字麻烦自行转换下,v2ex 好像屏蔽不准发数字序列。
    cretaceous
        259
    cretaceous  
       May 10, 2019 via Android
    你应该看看这三个编程语言,PerlYuYan

    Rockstar Chef
    Qiaogui
        260
    Qiaogui  
    OP
       May 10, 2019 via Android
    @cretaceous 刚刚我看了下,那些语言完全没有啥实用性,基本上就是做着来玩的。。。
    ciaoly
        261
    ciaoly  
       May 10, 2019 via Android
    弱弱的问一句,楼主是女生吗?
    |・ω・`)
    MixFlow
        262
    MixFlow  
       May 10, 2019
    大概瞄了下评论,先说个别人可能没提到的,编程语言成功不光依靠编程语言本身,还有可供选择的封装 lib、package、框架,以及社区。
    现在做个上规模的项目(包括个人项目),语言本身很 low-level 了,比如我单就语言很喜欢 ruby,但现在要做机器学习的项目,我还是会选择 python,因为 py 的 ML 框架有 tensorflow 和 pytorch,还有 numpy 处理矩阵。不是说 ruby 没 ML 相关的,但是没有这些用的广泛,就别提我当时 0 基础入门 ML 的课程 cs231n 就是 python 环境,这也是定势了。

    最后再提句可能很多评论说过的,自己写代码吧,编程真不是有多难。互联网上“我有一个 NB 想法”太多了,跟着"就差一个 XX 来帮我实现"基本上我还没见过做成的。哪怕“我有个 NB 想法,我没资源弄个别人(团队)来弄,我自己都来自学自己做”这种都不一定稳出结果,但至少后一种比“理念”更接近结果。
    Qiaogui
        263
    Qiaogui  
    OP
       May 10, 2019
    @ciaoly 不是,是男的,纯爷们儿!
    Qiaogui
        264
    Qiaogui  
    OP
       May 10, 2019
    @MixFlow 您说的对啊,不过我学的比较偏,编程语言这一块我非常了解,对于实际编程方面,就是因为看不惯那些混乱的东西,所以才决定开发新的语言。之前我写 C 代码做 BISON 和 FLEX 的编译器的时候,各种指针就非常让人头大,之后我又用过 COCO.R 来写,心想 C++方便些,结果 COCO.R 只支持 LL(1)要 LL(K)的话可以实现,但是很困难。还用过 ANTLR 我也试过,那个东西 LL ( K )的,不过做起来还是格外复杂。
    MixFlow
        265
    MixFlow  
       May 10, 2019
    @Qiaogui 我不是编程语言设计专家,我说的话不一定正确。
    C 我只做过写应用,但 C 系的语言做编译器 /解析器 meta-language 没做过,但大概能理解你的头大。不知道 LISP 系你知道多少,以前学 intepreter 解析器(用 LISP 实现一个 LISP)我个人感觉还是挺清晰(对比 C)。极度推荐 coursera 的 programming languages 公开课,课程设计很合理,https://www.coursera.org/learn/programming-languages。写语言的话,这么课教的编程语言设计的体系还是要要学的,你可以不从我给的这门课学,但也要从别处学,我觉得这个知识算 101 课程了。
    LS 有个评论说的写 SPEC,我也建议这个。脑神经学是有相应理论支撑的,你脑中的概念你感觉明确的东西实际是模糊的,写成文字或者哪怕口述出来,才会清晰。人类是通过"讲故事"来理解世界的。
    Qiaogui
        266
    Qiaogui  
    OP
       May 10, 2019 via Android
    @MixFlow 您能帮我看下我之前上传的文档吗,我不知道那个是否符合 spec
    edward9941
        267
    edward9941  
       May 10, 2019
    看到 cons car cdr 就知道至少看过 SICP,但是还是没看出有什么新的东西,可能我水平有限。。。
    aprilwei
        268
    aprilwei  
       May 10, 2019 via Android
    造轮子的事不用着急,没想过沿着这个方向读研吗?那样你在研一接受课程,研二就可以去你想去的企业实习,你有近两年的时间可以专心验证你的想法。我没记错的话,Vue 的创造者是个文科生,你可以读读关于他的访谈。
    edward9941
        269
    edward9941  
       May 10, 2019
    @edward9941 不过还是有语法上的想要统一各种范式的想法,赞楼主的想法和在这里的分享
    Qiaogui
        270
    Qiaogui  
    OP
       May 10, 2019 via Android
    @edward9941 并不是您水平有限,只是我前面只是大概介绍一下,并没有说清楚,后面会陆续发表一些文档。您可以在前面提供的相关链接看到。
    ahonn
        271
    ahonn  
       May 10, 2019
    从帖子内容上看,并没有觉得这所谓的新 “编程语言” 有啥特别的地方。甚至可以说语法看起来很丑..
    另外,有想法是好事,但是指望别人帮你实现是不现实的。多看书,自己搞搞差不多。
    DearTanker
        272
    DearTanker  
       May 10, 2019
    楼主,你看一下点赞数比较多的几个回复,你就知道你会面对多大的嘲讽压力了。
    年轻多折腾没有错,上面很多人建议你自己先搞个雏形出来比较好,大佬不是靠吆喝就能找到的。你的东西有价值,大佬们看到自然会出手帮你。
    xianxiaobo
        273
    xianxiaobo  
       May 10, 2019
    先自己做的差不多了,然后骗点 github star,然后再找人加入进来,这样应该比较靠谱
    wutiantong
        274
    wutiantong  
       May 10, 2019
    @Qiaogui

    我大致刷了一遍你写的“变量 /数组 /控制流”这三节,我也不想去吐槽什么了,我也不打算再继续关注这个了,

    但我真的希望你能尊重一下编程这个专业领域。
    zhicheng
        275
    zhicheng  
       May 10, 2019 via iPhone
    如果想从头到尾了解一下一个编程语言是如何工作的话可以了解一下我写的 http://www.lemon-lang.org/ 标准 C 实现,核心无外部依赖。

    代码 https://github.com/lemon-lang/lemon

    如果有什么问题或想法也可以找我讨论。
    Afanyiyu
        276
    Afanyiyu  
       May 10, 2019 via iPhone
    想也能想到上面一堆喷的
    lz 加油,自己默默干就行
    Qiaogui
        277
    Qiaogui  
    OP
       May 10, 2019
    @zhicheng 好的呢,谢谢您,在下才疏学浅,能有高人指点求之不得,抽空我会找您讨论的,谢谢。
    @xianxiaobo 嗯嗯,是这样的。
    @Afanyiyu 我都习惯了,哈哈(~ ̄▽ ̄)~ ,还是谢谢你的鼓励。

    这是今天下午到晚上关于函数基础部分的一个整理,感觉还是没太说明白,之后嘛。。。还得再改改,示例还得再找点东西来。至此,面向过程部分的核心基本完成了,不能说基本,起码还得再多加个几十页才能讲透。不过之后呢会先开始整理面向对象,函数式,模块化等等偏高级的主题。最后再统一整理定成规范也好,设计文档也行。
    https://github.com/QiaoguiDai/Unname/blob/master/hanshujichu
    lrxiao
        278
    lrxiao  
       May 10, 2019
    lrxiao
        279
    lrxiao  
       May 10, 2019
    没看到任何有新意的部分。。
    做个自己的玩具还是无所谓的,不过肯定不会有人用
    建议上一遍 CS143
    Exits
        280
    Exits  
       May 10, 2019
    感觉我浪费了 30s。建议:没有建议= =
    https://github.com/JiangHanChao/SimpleCompiler
    RubyJack
        281
    RubyJack  
       May 10, 2019
    白嫖编译器...
    aazz11
        282
    aazz11  
       May 11, 2019 via Android
    我看了你的描述我大概就能猜到评论区是什么样的,果然不出我所料,额,,,
    aazz11
        283
    aazz11  
       May 11, 2019 via Android
    还有你的回复不知道为什么要加颜文字和卖萌的语气词,而且还是个男的,我感觉有点幼稚,有点娘,就跟 cxk 一样
    mind3x
        284
    mind3x  
       May 11, 2019 via Android   ❤️ 1
    不像上面多数喷你或者鼓励的人,我确实看了你的几个 PDF。

    很遗憾,我认为你看 SICP 是在浪费自己的时间。你的信念和思考体系,和其他领域的民科如出一辙。

    我是真心建议你到其他的民科论坛寻找志同道合的伙伴,在这里发帖既是在浪费你自己的时间,也是在浪费别人的时间。
    cookey39
        285
    cookey39  
       May 11, 2019 via Android
    怎么还在首页
    Qiaogui
        286
    Qiaogui  
    OP
       May 11, 2019
    这是今天的成果,关于语言声明部分的构造。
    声明部分是 C-Like 的,有了声明部分,之后关于类型部分就可以细讲了。
    链接: https://pan.baidu.com/s/1d4bKq9XOhGFwHl_1FcvBnw
    提取码:5obt

    我就不在 Github 发了,喷子都跑到我 github 上去喷我了,ε=(´ο`*)))唉。
    b00tyhunt3r
        287
    b00tyhunt3r  
       May 11, 2019 via iPad
    @HiCode 感觉你谦虚了,看着也挺能吹的
    Q4h7388nR28s95fa
        288
    Q4h7388nR28s95fa  
       May 12, 2019
    @b00tyhunt3r 我也只会吹了,真正顶尖的那个层次,可能这辈子都达不到了,只能靠以后做个简单语言安慰自己。其实也很羡慕楼主现在这种心态,在他这个时间点,是最最最有信心,最最最有勇气的。
    FrankHB
        289
    FrankHB  
       May 12, 2019
    @maxco292 这啥,你说 TAPL 么。。。那个嘛,有 type system 也并不会显得一个 toy language 不 toy 了。何况多数所谓的工业语言光是 type system 上也都挺 toy 的就是了。
    不过我个人意见是对没搞清楚要设计成什么样的来讲还不如不看。
    另外像是通用做法:
    https://aiplaybook.a16z.com/reference-material/mccarthy-1960.pdf
    没管 type 不也照样挺 FP 的嘛。
    想清楚了针对什么目的(比如 totality )搞 type system,之后再看看 The Little Typer 之类的入门(虽然老实说,欠了很多东西没讲清楚)。

    @ech0x 你一开始提的一些问题比大多数关于琐碎设计选项的问题的确更有意义,能镇住用过某些语言的用户,也能糊住现在的 LZ,但远远支撑不了 LZ (想要)吹的说法。

    换些问法吧。(翻译太麻烦的进阶问题仅供参考。)

    1:(设计语言时,下同)为什么要考虑静态动态?
    1.5:为什么要考虑类型?
    1.5.1:为什么要考虑类型系统?
    1.5.1.1:Structrual or nominal?
    1.5.1.2:Why support array?
    1.6:为什么要推导类型?
    1.7:Why not (algebraic) effect system?
    2:为什么要倒腾什么“面向过程”?(不好意思,这个槽点我实在忍不住了……)
    2.5:什么叫“函数式”?
    3:为什么要考虑单独对内存进行管理?
    4:怎么支持元编程?
    4.1:When and why macros considered harmful?
    4.2:How to deal with hygiene?
    4.3:How to avoid trivial equational theory caused by features about reflection support?
    5:为什么 dependent types 更高级……

    嘛,看下面的回复,可能关于类型上面 LZ 确实没啥新的想法,否则可以直接 gradual typing 糊脸了。
    至于数组就还是别鞭尸了吧,C 的 dimension/rank 光是说法自己就挺乱的。

    顺便关于尾递归……这玩意正好我前几个月刚好折腾了不少,补充点附加题给有兴趣的童鞋(糊 SICP 真的是远远不够的):

    1.PTC(proper tail call)/PTR(proper tail recursion) 和 TCO(tail call optimization) 的差别在哪?
    2.TCO 和 TCE(tail call elimination) 的差别是?
    3.PTR 和 evlis tail recursion 的差别是?
    4.为什么 safe for space requirement 对环境的结构有限制?
    5.在一个 native 实现上要求不依赖全局 GC,且语言要求支持 PTC,对整个语言的设计有什么影响?

    @mostkia 怎么说呢……大部分人看到的巨人其实都挺矮的……

    @Qiaogui 可以是 spec 的一部分,但体例不完整。
    我比较怀疑你会全部返工,所以还是建议你先整理需求。
    (如果照常规的 spec 的写法,你这里是有不少比“变量”更基本的内容是要提到外面写的。)
    另外,因为各种这里已经有人提过的和没提过的原因,我建议你最好不要随便说“非常了解”。

    @qzivli 虽然 LZ 的设计比较感人,不过这水深得很,别太死脑筋……
    比如:
    https://srfi.schemers.org/srfi-45/srfi-45.html
    http://klisp.org/docs/Promises.html#Promises

    @mind3x 别那么悲观嘛……要我说的话,现在所有比较流行(这楼里大多数人包括 LZ 可能有听说过的)工业语言刨祖坟串起来后的设计,还真没几个不民科的。
    算上委员会的话可能还好点,但其中有些经典的设计在历史上就是以看上去相当民科的方式溜进去的——比如说,从 ALGOL-60 要求支持递归调用开始。
    (不信?随便举些比较有名的,分分钟挖黑历史出来。虽然可能有些槽点外行难以理解就是了。)
    Qiaogui
        290
    Qiaogui  
    OP
       May 12, 2019
    Qiaogui
        291
    Qiaogui  
    OP
       May 12, 2019
    @FrankHB 那个我最近分享的那个声明的部分还请您看下,就百度网盘发的那个。
    FrankHB
        292
    FrankHB  
       May 13, 2019
    @Qiaogui 我不觉得通用语言有把声明做成 primitives 的必要。具体设计看领域特定的需求。
    Qiaogui
        293
    Qiaogui  
    OP
       May 15, 2019
    @FrankHB 嗯,了解,我会在 Spec 中细说的。
    Qiaogui
        294
    Qiaogui  
    OP
       May 15, 2019
    今日打卡,Spec 编写中······。
    Qiaogui
        295
    Qiaogui  
    OP
       May 16, 2019
    2019 年 5 月 16 打卡
    Qiaogui
        296
    Qiaogui  
    OP
       May 17, 2019
    2019 年 5 月 17 日 打卡
    Qiaogui
        297
    Qiaogui  
    OP
       May 18, 2019
    2019 年 5 月 18 日 打卡
    Qiaogui
        298
    Qiaogui  
    OP
       May 19, 2019
    2019 年 5 月 19 日 打卡
    Qiaogui
        299
    Qiaogui  
    OP
       May 20, 2019
    2019 年 5 月 20 日 打卡
    Qiaogui
        300
    Qiaogui  
    OP
       May 21, 2019
    2019 年 5 月 21 日 打卡
    1  2  3  4  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   929 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 148ms · UTC 22:45 · PVG 06:45 · LAX 15:45 · JFK 18:45
    ♥ Do have faith in what you're doing.