V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  程序员

如果要让各位设计一个理想的编程开发语言与 IDE,各位会怎么设计?有哪些脑洞?

  •  
  •   tctc4869 · 2020-06-28 08:57:41 +08:00 · 4783 次点击
    这是一个创建于 1392 天前的主题,其中的信息可能已经有所发展或是发生改变。

    国内经常有中英文编程的争执,但我觉得无论是所谓的英语编程还是中文编程,都有很多不足,而且很多问题并没有解决,就是显示代码外观的不同。没有本质变化。

    我觉得编程体验开发的本质问题,应该是 IDE 开发软件与一类编程语言的功能匹配结合问题。比如 V2015 与 C#搞了一个资源文件。让我们可以以表格的方式编辑一个类的静态资源,不用搞手写 static 之类的麻烦事了。

    如果要各位设计一个理想的编程开发语言,各位会怎么设计,有什么特定和脑洞?针对什么领域?广泛的,还是特定的?若与 ide 开发软件结合,则各位会怎么考虑设计合适的 IDE 开发软件?

    第 1 条附言  ·  2020-06-28 09:38:00 +08:00
    可以在现有语言上提出改进,以及与 ide 搭配的脑洞。
    第 2 条附言  ·  2020-06-29 21:28:11 +08:00
    对于我来说,英语编程和汉字编程本质是一样的,没有区别,只不过谁的代码在哪个场景下更难看的区别。汉语编程本质并不能提升中国程序员的编程能力(相对于英语编程开发效率)。


    我觉得更需要改进的是 ide 与开发语言配合。开发语言提供一个组件,这个组件容易让 ide 以此为根基,让开发语言与 IDE 进行交互对接,实现各种丰富的辅助编码,各种丰富的显示代码文件效果,

    比如把一个模块用思维导图显示,
    把一个方法转成流程图,
    把一个类文件的所有标识符,显示成以标识符上的注解某个字段的内容,没有就显示原名
    伪代码演示,比如有一个类
    @info(title="测试类")
    @table(table="teatTableName")
    class Test{

    @info(title="测试属性")
    private int name;

    @info(title="测试方法")
    public void testFun (){
    @(title="测试变量")
    int a=1;
    }
    }
    使用 ide 的代码显示策略功能,进行编辑,能做到一键替换显示不同的代码显示,比如,把一个类的所有标识符都替换成 @info 注解里的 title 字段内容,并且隐藏 @info 注解,但原来的源码文件是不变的,只不过是一个显示效果的编辑选择。
    @table(table="teatTableName")
    class 测试类{

    private int 测试属性;

    public void 测试方法 (){
    int 测试变量=1;
    }
    }
    63 条回复    2020-06-30 09:04:40 +08:00
    keith1126
        1
    keith1126  
       2020-06-28 09:16:34 +08:00   ❤️ 5
    散了吧,v2ex 上没有几个懂 PLT ( Programming Language Theory ) 的人,设计不出语言的
    cmdOptionKana
        2
    cmdOptionKana  
       2020-06-28 09:28:24 +08:00 via Android
    Kotlin 就是从语言设计阶段就考虑 IDE 的,基本上做到极致了,还可以坐拥整个 Java 生态圈。
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       2020-06-28 09:33:08 +08:00
    基础都搞不定 还想象呢!!

    早上看到的
    https://raphlinus.github.io/xi/2020/06/27/xi-retrospective.html
    光做代码作色就各种问题
    sampeng
        4
    sampeng  
       2020-06-28 09:40:53 +08:00 via iPhone   ❤️ 4
    我,程序员,自己动
    lostpg
        5
    lostpg  
       2020-06-28 09:43:16 +08:00 via Android   ❤️ 1
    首先,我没有能力设计语言,没有系统学过 pl 。
    其次,我希望杰特脑死出 rust 的 ide 。
    另外,我不赞同语言与语言之间的区别就是外观不同。
    keith1126
        6
    keith1126  
       2020-06-28 09:58:19 +08:00
    @lostpg #5

    初学 Rust,感觉 CLion 装了 Rust 插件似乎也还行吗?
    hronro
        7
    hronro  
       2020-06-28 10:01:34 +08:00
    @zhuangzhuang1988 #3 你说的代码着色是指 syntax highlighting ?这个如果没有历史包袱的话,现在直接用 tree-sitter 应该是最好的
    GeruzoniAnsasu
        8
    GeruzoniAnsasu  
       2020-06-28 10:03:08 +08:00 via Android
    你是易语言粉(察觉
    tctc4869
        9
    tctc4869  
    OP
       2020-06-28 10:04:58 +08:00
    @GeruzoniAnsasu 很遗憾,你察觉错了,我连易语言都没用过
    ershierdu
        10
    ershierdu  
       2020-06-28 10:16:44 +08:00
    @keith1126 #1 甚至国内学术界也没多少做这个方向的人…
    ChanKc
        11
    ChanKc  
       2020-06-28 10:21:01 +08:00 via Android   ❤️ 1
    随便提几个问题看看下面能不能吵起来
    面向对象还是面向过程
    要不要函数式
    要不要垃圾回收
    要不要静态类型
    aot 还是 jit 还是两者都有
    要不要有 vm
    怎么样做模块化
    keith1126
        12
    keith1126  
       2020-06-28 10:23:16 +08:00
    @ershierdu #10

    所以国内没法创造出能流行起来的编程语言...只能换皮套壳
    ashsaviour
        13
    ashsaviour  
       2020-06-28 10:48:16 +08:00
    @sampeng
    靠谱
    tctc4869
        14
    tctc4869  
    OP
       2020-06-28 10:52:22 +08:00
    @ChanKc 我觉得,相比这些,更好的是是怎么让一个项目,每个模块,每个代码文件增加能让开发者编辑更多丰富的注释可能性。让 ide 根据开发者配置的丰富的注释把一个代码文件,一个模块,一个项目显示多样化。目的是让便于阅读理解项目,模块,代码文件。
    注释编辑不一定手写,可以利用 ide 辅助。
    tctc4869
        15
    tctc4869  
    OP
       2020-06-28 10:53:40 +08:00
    @tctc4869 利用丰富的注释信息辅助开发者对项目编码
    ChanKc
        16
    ChanKc  
       2020-06-28 11:00:03 +08:00 via Android
    @tctc4869 这和 pl 有什么关系?而且这种东西不是已经有了吗? javadoc 就可以写 HTML 啊

    而且这样真的好吗?比如 Java 的 lombok,很多人都用,随手就是一个注解自动生成 getter 和 setter,有人真的认真思考过为什么 Java 要设计得那么“啰嗦”吗?

    易于编写只是编程的一个维度。除了这个还有很多东西要考虑的
    GeruzoniAnsasu
        17
    GeruzoniAnsasu  
       2020-06-28 11:10:55 +08:00   ❤️ 1
    @tctc4869 你当然没用过,你用过就会发现自己说的就是易语言

    你是易语言粉(确信
    LokiSharp
        18
    LokiSharp  
       2020-06-28 11:13:16 +08:00
    现有的语言不好么? C# 已经足够了吧
    nrtEBH
        19
    nrtEBH  
       2020-06-28 11:13:43 +08:00
    全自动格式化代码
    随便加空格加 tab 加换行符,全角半角全兼容,[{<(四种括号含义一样
    编译阶段自动美化
    LokiSharp
        20
    LokiSharp  
       2020-06-28 11:17:10 +08:00   ❤️ 1
    @ChanKc #11 这些是实现 runtime 考虑的事情,和语言无关
    baobao1270
        21
    baobao1270  
       2020-06-28 11:17:48 +08:00
    知乎上有一个一模一样的问题哎……

    转自知乎:
    提出需求,IDE 自己动,自动写出代码
    felixin
        22
    felixin  
       2020-06-28 11:25:07 +08:00 via Android
    dark lang
    ChanKc
        23
    ChanKc  
       2020-06-28 11:30:14 +08:00 via Android
    @LokiSharp 有一些是 runtime 的事情,有一些不是
    tctc4869
        24
    tctc4869  
    OP
       2020-06-28 11:35:53 +08:00
    @ChanKc java 的注解,我觉得可以用 ide 可视化编辑注解,编辑丰富的注解,ide 能显示隐藏一些注解。然后 ide 根据规则,为项目生成一个思维导图之类的,或者变换显示方式,把一个类文件的所有标识符,都用所属的某个注解里的某个属性盖住,并显示在界面上。

    比如有一个类
    @info(title="测试类")
    class Test{

    public void testFun (){

    }
    }
    tctc4869
        25
    tctc4869  
    OP
       2020-06-28 11:39:26 +08:00
    抱歉操作失误没写完整

    java 的注解,我觉得可以用 ide 可视化编辑注解,编辑丰富的注解,ide 能显示隐藏一些注解。然后 ide 根据规则,为项目生成一个思维导图之类的,或者变换显示方式,把一个类文件的所有标识符,都用所属的某个注解里的某个属性盖住,并显示在界面上。


    演示,比如有一个类
    @info(title="测试类",)
    class Test{

    @info(title="测试属性")
    private int name;

    @info(title="测试方法")
    public void testFun (){
    @(title="测试变量")
    int a=1;
    }
    }
    使用 ide 的一键替换显示不同的代码显示


    class 测试类{


    private int 测试属性;


    public void 测试方法 (){
    int 测试变量=1;
    }
    }

    然后换回来
    icylogic
        26
    icylogic  
       2020-06-28 13:37:11 +08:00 via iPhone
    xi 和 xray 好像都跪了吧,所以还是只有 vscode,(neo)vim,emacs,vs,jb 系这些可选。

    就提一点,你说的资源文件-表格,本质上我觉得可以当做一种 structure editing,好处是可视化的编辑,避免了语法错误,而且可以有更好的补全 /重构功能,因为操作的单元是 ast ( expr/stmt )而不是文本 (char/word)。先不说编程语言,光是 toml/json/xml/csv 这些配置 /数据文件能做出来就挺好的。

    https://raphlinus.github.io/xi/2020/06/27/xi-retrospective.html
    Jooooooooo
        27
    Jooooooooo  
       2020-06-28 15:27:18 +08:00
    IDE?

    绝大多数人连一个带编辑功能的记事本都做不出来
    secondwtq
        28
    secondwtq  
       2020-06-28 19:17:17 +08:00
    @keith1126 #12 我觉得一个编程语言是否流行这个问题和 PLT 压根不沾边…
    tctc4869
        29
    tctc4869  
    OP
       2020-06-28 19:20:53 +08:00
    @cmdOptionKana 坐拥整个 Java 生态圈。是什么意思? Kotlin 能调 java 的方法?比如在 Kotlin new 一个 java 的类对象?
    crella
        30
    crella  
       2020-06-28 19:47:57 +08:00 via Android
    话说 c#怎样才能像 ruby 一样,在运行时动态加载外部的代码文件?

    其实觉得 ruby 的有些语法怪怪的,在试着换到 c#上去,结果 c#的泛型让我感觉有点晕
    tctc4869
        31
    tctc4869  
    OP
       2020-06-28 20:35:24 +08:00
    c# 动态编译
    cmdOptionKana
        32
    cmdOptionKana  
       2020-06-28 20:46:46 +08:00
    @tctc4869 对,可以。比如这样

    import java.util.*

    val list = ArrayList<Int>() // 没有用 new 这个关键字,但 ArrayList 确实是直接拿来就用的。

    不仅如此,kotlin 写的库,也可以从 java 那边直接调用。官方的说法是 “Kotlin 在设计时就考虑了兼容 Java” 以及 “100%与 Java 兼容”。
    msg7086
        33
    msg7086  
       2020-06-28 21:03:06 +08:00
    @crella
    Ruby 是一个有能力在运行时直接重写自己的语言。
    C#从灵活性来看还差得很远。

    @tctc4869
    你觉得本质问题是 IDE ?
    我觉得这不是什么大问题。大问题是对于你要做的事情一门语言是否最适合。
    比如说做快速开发,应该用 Ruby 。做容易招人的项目,应该首选 PHP (网站)和 Java (桌面应用)。做大量复杂工作,应该用 C 和汇编。做大量并行和重复的工作,应该用 CUDA 。

    没有一种语言是大而全,能面面俱到的。因为面面俱到本身就是一个非常巨大的缺点。
    winglight2016
        34
    winglight2016  
       2020-06-28 21:31:47 +08:00
    楼上诸位似乎都没有接触过各式代码自动生成工具?有些基于 UML,有些面向行业,有些面向 OA/CMS,有些面向数据库,用户可以是略懂 SQL 的需求人员,甚至可以是精通业务的销售人员。做大而全的 IDE,的确没有这样的产品,曾经的 visual studio 是这种目标,但是现在大概用的人不多了,因为解决所有编程问题的银弹是不存在的,更不用说面向的程序员水平参差不齐,最重要的是,开发活动中,最大的风险在于系统的复杂性,而不是具体的 coding,所以 lz 说的需求没人去做。
    namelosw
        35
    namelosw  
       2020-06-28 21:41:13 +08:00
    1. 所有的 Lisp 都有一个叫 Paredit 的插件,因为 Lisp 代码本身就像数据结构,所以你可以用快捷键像数据结构一样随心所欲地操控代码。有点像 Intellij 的重构,但是更和语言合到一起。

    2. Clojure / ClojureScript Cider 那样的远程 REPL,再编辑器里不离开原地同时就能写完 Server 和 Browser 的所有功能,一次刷新 /重启都不需要。想知道代码好不好用,表达式的值是多少,半秒之内就能知道。这个其实现在已经有了。

    3. Idris / Agda 和其他 Dependent type 语言的理论补全能力 + Intellij 的质量,写一个签名生成一大片代码,暴力搜解,让电脑带着你写代码。还可以靠科里霍华德同构证明代码,代码不对直接实时飘红。这些也已经有了,但是要变成 Intellij 级别的话,估计 30-50 年以后见……
    lululau
        36
    lululau  
       2020-06-28 21:42:25 +08:00 via iPhone
    Ruby 加上可选的带类型推导的静态类型系统、模式匹配、更具效率的数组和 struct/data class,这样应该就是最完美的语言了,能使用这个语言来编写 Emacs 扩展,那基本就是最完美的编辑器 /IDE 了
    crella
        37
    crella  
       2020-06-28 23:22:16 +08:00 via Android
    @msg7086 ruby 的 pass by object reference 还是有点深奥啊,我刚才看了 stackoverflow 一会儿才明白为什么 string 有.replace 这个方法。本质上,验证了我的猜想,ruby 里面都是‘引用传递’是因为 ruby 里包括数字和文本都是对象,但这个引用传递跟 c 语言的指针不一样

    总感觉有点复杂。就我肉眼统计,v2 上捧 ruby 的捧得很高,踩 ruby 的踩的很低,有点心累。
    msg7086
        38
    msg7086  
       2020-06-29 00:35:39 +08:00   ❤️ 2
    @crella 是的,Ruby 是 pass by object ref 。

    捧踩其实非常完美地说明了为什么需要那么多种不同的语言。
    比如大家捧得很高的 Python,我其实很不喜欢。
    风格死板,行事保守,推崇一件事只有一种最好的做法,但好处是上手容易,让一个新手写出和一个五年老手差不多的代码可能只需要五个月。

    Ruby 则完全相反。
    灵活,激进,一件事最好有无数种做法,好处是你什么都能做(我之前给自己写了一个 DSL 玩),坏处是上手非常难,让一个新手写出和一个五年老手差不多的代码,可能需要八年。

    所以必然有人非常喜欢 Python 而讨厌 Ruby,也必然有人非常喜欢 Ruby 而讨厌 Python 。
    XanderChen
        39
    XanderChen  
       2020-06-29 01:34:05 +08:00 via Android   ❤️ 1
    让 ide 能读取脑电波,

    我想输入英文的时候,换英文输入法,

    我想输入中文的时候,换中文输入法,

    我想把光标插在哪里,就自动插过去。

    别的脑洞没了。
    levelworm
        40
    levelworm  
       2020-06-29 04:04:49 +08:00 via Android
    @baobao1270 程序员为什么老是做这种把自己的工作搞没的梦呢。。。
    ConradG
        42
    ConradG  
       2020-06-29 05:57:16 +08:00
    现在都是 IDE 服务于语言,是时候该语言服务 IDE 了 :doge:
    yousabuk
        43
    yousabuk  
       2020-06-29 07:58:31 +08:00 via iPhone
    要锤子编程语言和 IDE

    意念生成符合功能要求的可执行文件

    怕把程序员的工作搞没了,那就只能是程序员的意念吧
    shellic
        44
    shellic  
       2020-06-29 08:00:58 +08:00 via Android
    一看这标题我还以为自己在知乎:doge:
    tctc4869
        45
    tctc4869  
    OP
       2020-06-29 08:06:23 +08:00 via Android
    @XanderChen 你这个其实是加快了的打字效率
    hejingyuan199
        46
    hejingyuan199  
       2020-06-29 08:30:50 +08:00
    我可能没有看懂内容。
    不过一楼让大家散掉,那怎么行,哈哈。(开玩笑)
    聚在一起瞎聊聊。

    我觉得我可能理解的不对:
    不过我印象中很多编程语言都是自带独有的 IDE 吧。

    比如,Matlab,R ( Rstudio ),Racket,Mathematica 等。
    以前用过 PLC,那个 IDE 和它的语言也结合得很好啊。

    当然,有人认为这些不算编程语言?
    0x000007b
        47
    0x000007b  
       2020-06-29 08:33:39 +08:00
    @XanderChen 你可以发个邮件给马斯克,让他给你造一个脑机接口
    HeapOverflow
        48
    HeapOverflow  
       2020-06-29 08:41:12 +08:00
    把(){}替换成[]
    tctc4869
        49
    tctc4869  
    OP
       2020-06-29 08:43:23 +08:00
    @msg7086 对于我来说,语言和 ide 都重要,但相比之下,一个好的 IDE 的开发体验更能加速开发效率。不然干脆全部去记事本或命令行编程算了。一个开发语言,我觉得内部要提供一个组件能容易与 ide 对接交互。使开发人员能够定制 ide 与该语言辅助编写开发,以及显示代码不同角度视角下的效果

    本质就是,为什么有了命令行还得有 GUI 呢?为什么会有可视化开发呢?不就是为了更好的开发体验么?(不过目前我发现的第三方可视化低代码开发,我是是不想用的)

    国内的中文编程终究不过是个壳子,即便做到汇编语言级别都没有意义,要做到中文编程还不简单,让 ide 帮我们给项目源码套个信息壳子,信息壳子里面放中文,但真正源码是不变的,因为编程字符就是符号化的字符。

    一个好的 ide,可以让一个代码文件的源码内容以及信息壳子,以不同的视角显示不一样的外观。可以让一个项目,一个模块生成思维导图表示,让一个方法的代码转化为流程图显示。
    araraloren
        50
    araraloren  
       2020-06-29 08:55:17 +08:00
    @HeapOverflow 你说的是 Red 语言吗??
    nightwitch
        51
    nightwitch  
       2020-06-29 09:23:07 +08:00
    支持以希腊字母以及上下标变种的为变量名的 C++。(当然这辈子估计是见不到了

    数值计算的代码如果没有希腊字母真的很难懂
    HeapOverflow
        52
    HeapOverflow  
       2020-06-29 09:29:06 +08:00
    @araraloren 我不是很喜欢 red 的变量声明和方程调用语法
    llsquaer
        53
    llsquaer  
       2020-06-29 10:25:27 +08:00
    ide 集成输入法...
    比如 打印, 键盘敲 dy 就出来了,,
    如果中文变量名 敲 首字母..
    输入新变量的时候有一个备选词(中英文都包含,和输入法差不多吧)

    这样减少切换输入法了.
    这种怎么样.
    msg7086
        54
    msg7086  
       2020-06-29 14:40:14 +08:00 via Android
    @llsquaer 重新发明易语言?
    llsquaer
        55
    llsquaer  
       2020-06-29 16:43:09 +08:00
    @msg7086 没用过....只知道他是中文编程..
    msg7086
        56
    msg7086  
       2020-06-29 17:52:11 +08:00
    @llsquaer 它在大约 20 年前就实现了你说的功能。
    secondwtq
        57
    secondwtq  
       2020-06-29 19:20:32 +08:00
    @nightwitch 用希腊字母的话,应该已经可以了。(当然我谷歌了一下发现 GCC 到 10 才支持,但是 C++标准应该是早就支持了)

    上下标是更大的问题—因为现在一般程序员”写代码”的方式,从 typography 的角度来讲是极其原始的(比如拉丁字母的等宽字体,其实是打字机的副产品。大量的标点符号被重新定义,搞一个简单的 ligature 居然还能在 21 世纪火起来),并且更可怕的是,似乎并没有人想要解决这个问题。大家都满足于”一切皆纯文本”这种”哲学”上,认为存在并且自己已经认识到了 one true way,或者至少是一个 common ground 。楼主的帖子其实也属于这一范畴。
    nightwitch
        58
    nightwitch  
       2020-06-29 20:05:30 +08:00
    @secondwtq 试了一下,真的可以。看来我离语言律师的路还有很远 XD
    tctc4869
        59
    tctc4869  
    OP
       2020-06-29 21:14:27 +08:00
    @secondwtq 我觉得编程用哪些符号比较好的问题,决定关键在于打字输入符号和输入效率,用希腊字母或俄文字母打代码也不是不行,搞个希腊饿文字母键盘就行。或者 IDE 。更快的脑波意念输入打字。
    xcstream
        60
    xcstream  
       2020-06-29 21:45:26 +08:00
    idea 或者 vscode 魔改
    levelworm
        61
    levelworm  
       2020-06-30 02:55:42 +08:00 via Android
    话说有人用过 holy c 没? jit 感觉不错啊
    ChanKc
        62
    ChanKc  
       2020-06-30 08:35:37 +08:00 via Android
    还有人认真回复楼主啊,搞了半天感觉就是想要个 dsl
    Chikaku
        63
    Chikaku  
       2020-06-30 09:04:40 +08:00
    es6 的基础语法 + python 的库和语法糖 + 静态类型 + golang 的性能
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2667 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:36 · PVG 23:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.