V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
netabare
V2EX  ›  程序员

打算设计一门集所有语言的缺点短板于一体的语言,可能从哪里开始或者有哪些功能建议呢?

  •  
  •   netabare · 9 天前 · 6370 次点击
    这个想法大概一开始是从某语言的变量提升开始的,刚学到那语言就觉得怎么会有这么天才的设计,真是太符合心目中的「语言的经典设计」(恶趣味角度)了。

    虽然后来慢慢也理解到了这个设计的缘由,而且其实对这个语言接近 Lisp 和函数式的一些角度还是蛮喜欢的。

    后来接触了一些其他的语言,例如某个 J 开头的语言,包括各种设计模式,有时候写着代码的时候,看到一些奇怪的约束和很不方便的地方,也会想,是不是可以做个集这一些短处为一体的语言呢。

    现在想的话,大概想到的可能还有这些想法吧:

    - for 关键字同时用于不同的循环、分支里面
    - 混淆 true/false 、0 、非 0 、void 等概念
    - 遍历集合的时候会改变原集合的结构
    - 用 plunk 之类的字符串匹配而不是 map/forEach/filter
    - 用同一个东西和语法表达列表、字典等多种数据结构,并且不关心顺序
    - 每个函数都有个 this 指针
    - 没有泛型,并且需要强转
    - 所有的对象都可以 call ,函数也可以 new

    目前大概想到的是这么多吧。
    85 条回复    2024-12-20 10:38:42 +08:00
    avocador
        1
    avocador  
       9 天前
    有个叫 brainfucker 的语言我记得,看懂一段用它编写的代码需要一定的大脑算力
    ho121
        2
    ho121  
       9 天前 via Android
    您要找的是不是: 汇编
    XCFOX
        3
    XCFOX  
       9 天前
    不用设计,已经有现成的 GO 语言了
    songray
        4
    songray  
       9 天前   ❤️ 11
    所有的对象都可以 call ,函数也可以 new
    混淆 true/false 、0 、非 0
    用同一个东西和语法表达列表、字典等多种数据结构,并且不关心顺序
    每个函数都有个 this 指针

    我怀疑你在内涵 JS 。
    66450146
        5
    66450146  
       9 天前   ❤️ 14
    "2006-01-02 15:04:05"
    mekingname
        6
    mekingname  
       9 天前   ❤️ 16
    无论你的项目有多少行代码,你的项目文件夹里面,必须嵌套 10 倍的空文件夹,项目才能正常运行。

    例如:

    com/xxx/yyy/zzz/ppp/ttt/mmm/qqq/service/head/break/main.java
    auh
        7
    auh  
       9 天前
    人才,希望设计出来,提供更多程序员职位的语言
    koykoi
        8
    koykoi  
       9 天前
    parody 的话,可以考虑
    https://github.com/TodePond/DreamBerd
    SchwarzeR
        9
    SchwarzeR  
       9 天前   ❤️ 56
    你说得对,但是《 Golang 》是一门由 Google 自主研发的全新编程语言,语言发生在一个被称作「 goroutine 」的幻想世界,在这里,被 func 选中的人将被授予「 pointer 」,导引 GO111MODULE 之力,你将扮演一位名为「 20060102150405 」的神秘角色,在自由的 interface 中邂逅性格各异、能力独特的 struct 们,和他们一起击败 err ,找回失散的泛型——同时,逐步发掘「 panic 」的真相。
    woctordho
        10
    woctordho  
       9 天前 via Android   ❤️ 1
    esolangs.org
    去集齐这些语言的缺点吧
    FalconD
        11
    FalconD  
       9 天前 via Android   ❤️ 1
    回答 esolangs 多少有点算跑题了
    核心还是让各种语言特性相互冲突和耦合
    建议直接干掉过程的形参列表,类型系统随便乱来
    nyxsonsleep
        12
    nyxsonsleep  
       9 天前
    @songray 确实
    kneo
        13
    kneo  
       9 天前   ❤️ 4
    每个变量和函数参数/返回值都必须声明类型
    声明了类型但是不强制编译器检查类型
    即使编译器检查了类型也不保证运行时没有类型错误

    必须支持泛型
    泛型必须很详细,什么也不能省
    泛型不保证你没有运行时错误
    泛型不能带来性能提升

    代码必须要先编译才能运行
    编译必须很仔细,没一个小时不能完成
    编译应该是单线程的
    编译也可以选择多线程
    多线程编译不保证正确性
    多线程编译不能带来性能提升

    程序员必须手动管理内存
    虽然需要手动管理内存并且要编译,但是运行时还有虚拟机
    虚拟机的指令必须要是解释执行的
    虽然程序员必须手动管理内存但是虚拟机实现了 GC
    GC 是用引用计数
    引用计数可能会有内存泄漏

    程序编译之后,如果想在其他机器上运行,必须要在目标机器安装编译开发环境
    动态链接库必须要完全一致
    如果机器上有旧版本的链接库请先卸载
    如果有新版本的也请一并卸载
    如果运行不了建议在虚拟机或者 docker 中运行
    环境变量不正确可能运行不了
    以防外一,编译出来的程序最好是从 IDE 中启动

    本语言没有规范,以实现为准
    如果有新版本请以新版本为准
    如果版本过新,请卸载新版本,重新安装大家都在用的版本!
    DOLLOR
        14
    DOLLOR  
       8 天前 via Android
    代码不用英文字母,只用阿拉伯、希伯来字母这些 RTL 文字🐶
    lujiaxing
        15
    lujiaxing  
       8 天前
    @SchwarzeR 卧槽原神
    lysShub
        16
    lysShub  
       8 天前
    @66450146 这玩意不比哪种 yymm 好?
    lysShub
        17
    lysShub  
       8 天前
    那种
    billccn
        18
    billccn  
       8 天前 via Android
    数组从 0.5 开始,但可变长度列表无法用下标直接访问,需要遍历,遍历过的内容即销毁。

    变量必须有一个大写一个小写一个数字一个特殊符号和一个不打印字符,总共不得高于 5 字符。

    检查 HashMap 是否含某个 key 则会自动创建含该 key 的 entry,数值是 undefined behaviour.
    FYFX
        19
    FYFX  
       8 天前
    动态作用域
    felixcode
        20
    felixcode  
       8 天前 via Android   ❤️ 1
    写代码需要在多种不同的键盘布局间切换
    glcolof
        21
    glcolof  
       8 天前
    有个叫 Whitespace 还是什么的语言,只接受空格、Tab 和回车三个字符。
    建议 OP 借鉴下。
    xtreme1
        22
    xtreme1  
       8 天前
    不太可能的, 正如不可能设计一门语言集成所有语言的优点.
    clf
        23
    clf  
       8 天前
    建议引用第三方库只能在线引入,每次运行都得重新下依赖 x
    kapaseker
        24
    kapaseker  
       8 天前
    可以混用缩进,大小括号。

    fun abc()

    xxxxx
    }

    结尾既可以给分好,也可以不给
    adian
        25
    adian  
       8 天前
    等你的大餐,金牌大厨 netabare !
    soul11201
        26
    soul11201  
       8 天前 via Android   ❤️ 3
    把容易引起混乱的都设计进来

    1. PHP 可以参考的地方是函数参数含义不要保持一致性
    2. Java 可以参考的就是启动让他慢
    3. Rust 可以参考的部分,编译让他慢
    4. C++可以参考的部分是规范整得巨复杂
    5. Go 可以参考的部分是别人给你提意见的时候不管对错就说这是你自己的,拒不接受。
    6. Lisp 可以参考的部分是提供一个宏,让每个使用的人容易搞自己的方言,弄个巴别塔让社区容易分裂
    7. C 语言可以参考的部分是 把依赖管理整得复杂点
    8. Python 可以参考的部分,用每个语句用汉语逗号进行缩进
    9.Ruby 可以参考的部分,约定优于配置,你就写一份文档,不要做任何实现,文档要以小学生二年级水平来写
    jianchang512
        27
    jianchang512  
       8 天前
    1. 变量必须用 $ 开头
    2. 空格缩进对齐
    3. 不支持 try catch
    4. 多线程 GIL 锁定
    soul11201
        28
    soul11201  
       8 天前 via Android
    提供并发的能力,但不提供并发控制的原语
    提供文件操作的能力,但不保证可靠性,比如写操作都缓存在内存中,进程正常退出时刷盘
    cocong
        29
    cocong  
       8 天前
    看 黑客与画家,说是 Lisp 最好,因为它是数学不是语言,永不过时,我是欣赏不来。
    spongebobsun
        30
    spongebobsun  
       8 天前
    还用设计啥,javascript 这不都现成儿的
    jackmod
        31
    jackmod  
       8 天前
    不区分大小写
    dapang1221
        32
    dapang1221  
       8 天前
    笑死我了,光是看到这些点已经开始难受了
    huangsijun17
        33
    huangsijun17  
       8 天前
    你需要通过纸袋打孔、磁环穿线来编程。
    cmdOptionKana
        34
    cmdOptionKana  
       8 天前
    直接学 perl 就好了
    llsquaer
        35
    llsquaer  
       8 天前
    感觉你说的是 JS , 因为这几天在深入写个前端赶工,之前没真实上手 到不觉得。
    上手写了才觉得一个语言分 严格模式和非严格,
    this 指这里,指哪里。
    函数创建格式 少说 3 种。

    看别人源码更是头疼, 传参直接匿名函数一大串,多个参数情况下都不知道下一个参数在那个位置。

    然后还有一个解构语句,花括号解构就解构吧, 还有简写方式,和非简写方式 ,绑定模式,还有默认值 等等。
    后来觉得为啥单单一个解构语句都这么花,后来想通了,JS 就是怎么花啊
    dalaoshu25
        36
    dalaoshu25  
       8 天前
    Perl 和任何一个 RISC 机器的汇编语言都可以,不需要发明什么。暴露了 OP 对历史一无所知。
    Tomatopotato
        37
    Tomatopotato  
       8 天前
    没想到评论里获得恶意最多的竟然是 go
    james122333
        38
    james122333  
       8 天前 via Android
    不觉得 js 接近 lisp...
    lisp 大家说是数学但我觉得更接近工具
    就是动作+参数 这部份比较类似 shell 除了回传
    falcon05
        39
    falcon05  
       8 天前 via iPhone
    最怪异的还是 Javascript 吧
    xuld
        40
    xuld  
       8 天前
    楼主的想法和我一模一样。
    但一个语言并不是想想就能做出来的,光设计是没意义的,因为成熟的语言不止需要编译器,还需要 ide 、打包工具、系统库、三方框架等等配套,才有可能被使用,这些没几年是做不出来的,而且即使做到这个程度,程序员还不乐意学新语言。
    如果你有精力可以自己研发。或者,你可以和找我,说不定我可以实现你的想法。我一直都在做语言,现在也有了一些进度,也非常乐意收集各种 idea 以提升语言的吸引力。具体可以查我之前在 v2 发的贴子。
    我的联系方式:xuld#xuld.net
    james122333
        41
    james122333  
       8 天前 via Android
    @lysShub

    其实 yymm 还是比较直观的 对应英文字 除了这点以外我觉得 go 其实不错 简洁好写 写命令行工具也好写
    justdoit123
        42
    justdoit123  
       8 天前
    @cocong 所以说,教条才是永恒。

    “反正我跟你说好就是好”
    “你看,这个函数多纯啊!”
    “你看,我们能动态绑定,多灵活。”
    “你看,我们现在摆脱动态绑定了,多纯粹”。

    我现在对“语言软文贴”避而远之。
    tt67wq
        43
    tt67wq  
       8 天前
    @XCFOX CSP 模型设计的像 Go 这样开箱即用这么方便的还真没有
    laminux29
        44
    laminux29  
       8 天前
    不建议发明新语言,因为,语言最重要的,并不是它有多好,而是需要有足够的资金与威望,能推广它,让更多的程序员去用,让配套环境足够广且大。

    比如 C# 比 Java 、Python 、JS 语言好太多,但后面 3 者随便哪位都能在使用人数与配套环境上秒了 C#。
    thinkershare
        45
    thinkershare  
       8 天前
    很多语言的优点是相互矛盾的,你不可能将相互矛盾的东西融合到一起,取舍从来都是在现实世界做事的最基本的原则。
    xuanbg
        46
    xuanbg  
       8 天前
    别的我不知道,靠缩进而非花括号标识代码段这个必须学起来!
    tianzhiya
        47
    tianzhiya  
       8 天前
    extends 可以继承多个类,并且内存释放必须自己管理
    krixaar
        48
    krixaar  
       8 天前
    代码不使用大小括号,而是类似 BASIC 语言的 IF...THEN...END IF/FOR...END FOR/SUB...END SUB 的形式。
    在此基础上,用缩进表示代码层级,写 END 只是为了 aesthetic 。
    jspatrick
        49
    jspatrick  
       8 天前
    很奇怪,每一行都有 js 的影子,但又不完全是
    xz410236056
        50
    xz410236056  
       8 天前
    这些缺点,objective-c 得包含一半
    rossroma
        51
    rossroma  
       8 天前
    找出最流行的 20 种语言,每一种语言都提取出它最突出的 10 个优点,然后你把这些优点汇集在同一个语言上,那就是最糟糕的语言。
    Doraismydora
        52
    Doraismydora  
       8 天前   ❤️ 1
    vb:不区分大小写
    py:用缩放区分代码块,变量可以不声明并且作用域直接是整个函数
    js:this 指针到处乱飞,var 声明变量的奇奇怪怪的特性, 双等号和三等号
    C/C++:看起来像是强类型语言但是实际上有各种显式隐式 cast ,编译报错几百行
    java:1==1, 127==127 ,128!=128
    matlab:下标从 1 开始
    rust:返回值不用显式 return
    proxychains
        53
    proxychains  
       8 天前
    @SchwarzeR #9 time format 的 20060102150405 也是纯逆天
    ninjashixuan
        54
    ninjashixuan  
       8 天前
    @rossroma 这么牛的编译器应该不存在吧。
    layxy
        55
    layxy  
       8 天前
    仓颉好像就吸收了不少语言的优点,只是目前好像还没有开放
    yb2313
        56
    yb2313  
       8 天前
    js,然后再添加一些其他的特性,把速度再优化慢 100 倍
    ayase252
        57
    ayase252  
       8 天前
    隐式类型转换
    cocong
        58
    cocong  
       8 天前
    最好的变成语言是人工智能,无需变成,要啥直接说,未来是不需要软件的。
    EscYezi
        59
    EscYezi  
       8 天前 via Android
    变量用$声明
    ns09005264
        60
    ns09005264  
       8 天前
    让这三种类型并存:null 、nil 、undefined 。
    并且这样写可以通过编译:

    ```
    varlet foo: Foo = null;
    foo = nil;
    foo.bar();
    ```

    语法尽量地少,比如函数是一等公民,但是当函数作为参数或变量时完全没有简化的写法,必须严格按照完全的语法来写,且强制格式化换行:
    ```
    func do(callback: Callback) {
    callback();
    }
    do(func() {
    println("hell word")
    })
    ```
    Rehtt
        61
    Rehtt  
       8 天前 via Android
    @66450146 我倒觉得这个设计挺好的,123456 代表的含义都不同没有重复
    zzz22333
        62
    zzz22333  
       8 天前
    @ho121 #2 汇编可谈不上,为了效率而生的。
    neptuno
        63
    neptuno  
       8 天前
    @felixcode #20 哈哈哈某些关键词使用中文,还是高频使用的
    luffy2u
        64
    luffy2u  
       8 天前
    main 改成 mian
    dragondove
        65
    dragondove  
       8 天前
    @layxy 仓颉 beta 版本已经开放有一段时间了 https://cangjie-lang.cn/download 可以直接下载,感觉有些特性应该还需要砍一下,优化一下,反正还不是最终版。然后运行时的性能也没白皮书说的那么好,gc 性能很差。然后我不知道怎么才能把运行时静态链接进去,按照文档怎么尝试命令都不行,估计是测试版还有问题。
    moefishtang
        66
    moefishtang  
       8 天前
    @xuanbg 我勒个 python 啊
    orioleq
        67
    orioleq  
       8 天前 via iPhone
    @xuanbg 缩进我觉得还好,在 IDE 下都还安全。对我来说 python 最糟糕的可能是依赖包的版本管理。
    alphaControler
        68
    alphaControler  
       8 天前 via Android
    目前来看,语言上最麻烦的还是内存管理和并发问题
    Cabana
        69
    Cabana  
       8 天前
    @66450146 牛的,看了半天不知道啥意思。去 google 了下,真离谱~
    DiaoWang
        70
    DiaoWang  
       8 天前 via iPhone
    不要使用栈内存,所有内存申请及释放必须手动,不能 try catch ,不能抛出异常,编程语言不支持写注释,包括但不限于变量名/函数名只能使用纯数字🤔先这么多吧。
    sduoduo233
        71
    sduoduo233  
       7 天前
    llsquaer
        72
    llsquaer  
       7 天前
    @sduoduo233 这一行一个括号的意义在哪里?
    sduoduo233
        73
    sduoduo233  
       7 天前
    @llsquaer 我想说的是可以把代码居中写,这样就不用纠结缩进是几个空格了
    Bunsei
        74
    Bunsei  
       7 天前
    想了想,要不你弄个要求空格对其的汇编吧
    INTOX8O
        75
    INTOX8O  
       7 天前
    突然想起几年前的 TrumpScript https://github.com/samshadwell/TrumpScript
    xiaochong0302
        76
    xiaochong0302  
       7 天前
    @66450146 我第一次接触的时候,我心里一万个草泥马,这是什么玩意!
    fionasit007
        77
    fionasit007  
       7 天前
    @66450146 #5 我之前改别人写好的 golang ,需要格式化时间,结果搜了下,我以为这个是 go 创始时间呢😂
    bigtear
        78
    bigtear  
       7 天前 via Android
    首先学 python 的精华,缩进
    xuanbg
        79
    xuanbg  
       7 天前
    @orioleq 你复制粘贴一下,恐怕就很难还原成正确的代码段了
    FalconD
        80
    FalconD  
       7 天前 via Android
    @sduoduo233 怎么感觉这是优点,层主写的还是太规整了
    658
        81
    658  
       7 天前
    if err != nil {
    }
    proxychains
        82
    proxychains  
       7 天前
    null,undefined:=make(&nil)
    8620
        83
    8620  
       7 天前
    如果想要折磨人,不如看看某学校大一上学期的一个作业,占那门课的 7.5%:
    写一个简单的 RISC 汇编程序,程序功能自选但是得有功能,指令集只有加、取、存、跳转、大于等于跳转、不等于跳转、以及一些编译器提供的便利功能(标签、常数等)。
    半个月前刚辅导完今年的学生,大概一半人直接放弃了,比去年稍微少点……
    netabare
        84
    netabare  
    OP
       4 天前
    @songray 虽然 var 那个确实有这个想法,但是其实某种程度上我还蛮喜欢 JS 的( bushi

    @mekingname 这个思路不错,感觉可以再考虑一个专门应对它的设计模式(

    @koykoi 这个之前也有看过,甚至有做过一点贡献( bushi 不过感觉 Dreamberd 比较偏向前端,和我的想法不太一样

    @FalconD 认同

    @kneo 听起来有点规则怪谈了

    @DOLLOR 想起 PHP 那个 semicolon 了……

    @FYFX 这个不错!不过感觉实际实现有点难度,很可能在实现之前自己人先晕了

    @jianchang512 说到 try/catch ,我倒是想过一个只有 try/catch 来表达控制流,并且所有 if/while/for 都得用 try/catch 模拟的语法……

    @soul11201 感觉这个思路是「做一件事,但做得马马虎虎」,刚好和 unix 哲学背道而驰

    @spongebobsun 随着 JS 不停刷版本,其实 JS 似乎反而还越来越像个正常语言了……而且 JS 有许多灵活的东西我还是蛮喜欢的(叠个甲,我是静态强类型阵营的)

    @llsquaer 不完全是,某种程度上我觉得 JS 的设计虽然有很多问题,但是其实已经算是蛮健全(?)的了。在低代码或者企业级技术栈里面有更多古神低语,当然 JS 的一些上古框架的很多设计也确实很难绷。

    @xuld 其实我倒是有想做自己的语言,但是就像你说的,成熟的语言需要一整套生态和工具链,我眼下优先可能考虑更健全的设计吧,不过这个倒是后话了……问这个问题某种程度上算是吐槽()

    @jspatrick 可能因为我比较熟悉 JS (

    @ayase252 这个似乎确实某种程度上算是个潘多拉魔盒了……感觉也确实是这个问题下的必选项()

    @ns09005264 还可以再加个 0 、void 和空字符串

    @DiaoWang 想到了一个叫 BANCStar 的语言了(虽然跟你描述的不太一样,但感觉思路很像)

    @8620 可以指一下路看看是什么课程嘛,感觉很有趣想 follow 一下,顺便也从比较高层的语言设计转向底层实现,近半年主要是自学 UW PL 和 Scala 的公开课,然后自己断断续续看书写自己语言搞各种东西,不过都离底层或者硬件实现感觉有点太远了(
    soul11201
        85
    soul11201  
       4 天前
    @netabare #84 >@soul11201 感觉这个思路是「做一件事,但做得马马虎虎」,刚好和 unix 哲学背道而驰。
    其实不是,Unix 里面的原话是 >让程序只做好一件事。
    资源总是有上限的,对于一个系统来说很难件件事都做到最好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1185 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:20 · PVG 02:20 · LAX 10:20 · JFK 13:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.