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

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

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

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

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

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

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

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

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

    例如:

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

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

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

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

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

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

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

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

    fun abc()

    xxxxx
    }

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

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

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

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

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

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

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

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

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

    语法尽量地少,比如函数是一等公民,但是当函数作为参数或变量时完全没有简化的写法,必须严格按照完全的语法来写,且强制格式化换行:
    ```
    func do(callback: Callback) {
    callback();
    }
    do(func() {
    println("hell word")
    })
    ```
    Rehtt
        61
    Rehtt  
       12 小时 33 分钟前 via Android
    @66450146 我倒觉得这个设计挺好的,123456 代表的含义都不同没有重复
    zzz22333
        62
    zzz22333  
       12 小时 32 分钟前
    @ho121 #2 汇编可谈不上,为了效率而生的。
    neptuno
        63
    neptuno  
       12 小时 3 分钟前
    @felixcode #20 哈哈哈某些关键词使用中文,还是高频使用的
    luffy2u
        64
    luffy2u  
       11 小时 34 分钟前
    main 改成 mian
    dragondove
        65
    dragondove  
       9 小时 36 分钟前
    @layxy 仓颉 beta 版本已经开放有一段时间了 https://cangjie-lang.cn/download 可以直接下载,感觉有些特性应该还需要砍一下,优化一下,反正还不是最终版。然后运行时的性能也没白皮书说的那么好,gc 性能很差。然后我不知道怎么才能把运行时静态链接进去,按照文档怎么尝试命令都不行,估计是测试版还有问题。
    moefishtang
        66
    moefishtang  
       9 小时 34 分钟前
    @xuanbg 我勒个 python 啊
    orioleq
        67
    orioleq  
       9 小时 20 分钟前 via iPhone
    @xuanbg 缩进我觉得还好,在 IDE 下都还安全。对我来说 python 最糟糕的可能是依赖包的版本管理。
    alphaControler
        68
    alphaControler  
       7 小时 2 分钟前 via Android
    目前来看,语言上最麻烦的还是内存管理和并发问题
    Cabana
        69
    Cabana  
       6 小时 17 分钟前
    @66450146 牛的,看了半天不知道啥意思。去 google 了下,真离谱~
    DiaoWang
        70
    DiaoWang  
       6 小时 12 分钟前 via iPhone
    不要使用栈内存,所有内存申请及释放必须手动,不能 try catch ,不能抛出异常,编程语言不支持写注释,包括但不限于变量名/函数名只能使用纯数字🤔先这么多吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   748 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:01 · PVG 06:01 · LAX 14:01 · JFK 17:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.