国内经常有中英文编程的争执,但我觉得无论是所谓的英语编程还是中文编程,都有很多不足,而且很多问题并没有解决,就是显示代码外观的不同。没有本质变化。
我觉得编程体验开发的本质问题,应该是 IDE 开发软件与一类编程语言的功能匹配结合问题。比如 V2015 与 C#搞了一个资源文件。让我们可以以表格的方式编辑一个类的静态资源,不用搞手写 static 之类的麻烦事了。
如果要各位设计一个理想的编程开发语言,各位会怎么设计,有什么特定和脑洞?针对什么领域?广泛的,还是特定的?若与 ide 开发软件结合,则各位会怎么考虑设计合适的 IDE 开发软件?
1
keith1126 2020-06-28 09:16:34 +08:00 5
散了吧,v2ex 上没有几个懂 PLT ( Programming Language Theory ) 的人,设计不出语言的
|
2
cmdOptionKana 2020-06-28 09:28:24 +08:00 via Android
Kotlin 就是从语言设计阶段就考虑 IDE 的,基本上做到极致了,还可以坐拥整个 Java 生态圈。
|
3
zhuangzhuang1988 2020-06-28 09:33:08 +08:00
|
4
sampeng 2020-06-28 09:40:53 +08:00 via iPhone 4
我,程序员,自己动
|
5
lostpg 2020-06-28 09:43:16 +08:00 via Android 1
首先,我没有能力设计语言,没有系统学过 pl 。
其次,我希望杰特脑死出 rust 的 ide 。 另外,我不赞同语言与语言之间的区别就是外观不同。 |
7
hronro 2020-06-28 10:01:34 +08:00
@zhuangzhuang1988 #3 你说的代码着色是指 syntax highlighting ?这个如果没有历史包袱的话,现在直接用 tree-sitter 应该是最好的
|
8
GeruzoniAnsasu 2020-06-28 10:03:08 +08:00 via Android
你是易语言粉(察觉
|
9
tctc4869 OP @GeruzoniAnsasu 很遗憾,你察觉错了,我连易语言都没用过
|
11
ChanKc 2020-06-28 10:21:01 +08:00 via Android 1
随便提几个问题看看下面能不能吵起来
面向对象还是面向过程 要不要函数式 要不要垃圾回收 要不要静态类型 aot 还是 jit 还是两者都有 要不要有 vm 怎么样做模块化 |
13
ashsaviour 2020-06-28 10:48:16 +08:00
@sampeng
靠谱 |
14
tctc4869 OP @ChanKc 我觉得,相比这些,更好的是是怎么让一个项目,每个模块,每个代码文件增加能让开发者编辑更多丰富的注释可能性。让 ide 根据开发者配置的丰富的注释把一个代码文件,一个模块,一个项目显示多样化。目的是让便于阅读理解项目,模块,代码文件。
注释编辑不一定手写,可以利用 ide 辅助。 |
16
ChanKc 2020-06-28 11:00:03 +08:00 via Android
@tctc4869 这和 pl 有什么关系?而且这种东西不是已经有了吗? javadoc 就可以写 HTML 啊
而且这样真的好吗?比如 Java 的 lombok,很多人都用,随手就是一个注解自动生成 getter 和 setter,有人真的认真思考过为什么 Java 要设计得那么“啰嗦”吗? 易于编写只是编程的一个维度。除了这个还有很多东西要考虑的 |
17
GeruzoniAnsasu 2020-06-28 11:10:55 +08:00 1
|
18
LokiSharp 2020-06-28 11:13:16 +08:00
现有的语言不好么? C# 已经足够了吧
|
19
nrtEBH 2020-06-28 11:13:43 +08:00
全自动格式化代码
随便加空格加 tab 加换行符,全角半角全兼容,[{<(四种括号含义一样 编译阶段自动美化 |
21
baobao1270 2020-06-28 11:17:48 +08:00
知乎上有一个一模一样的问题哎……
转自知乎: 提出需求,IDE 自己动,自动写出代码 |
22
felixin 2020-06-28 11:25:07 +08:00 via Android
dark lang
|
24
tctc4869 OP |
25
tctc4869 OP 抱歉操作失误没写完整
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; } } 然后换回来 |
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 |
27
Jooooooooo 2020-06-28 15:27:18 +08:00
IDE?
绝大多数人连一个带编辑功能的记事本都做不出来 |
29
tctc4869 OP @cmdOptionKana 坐拥整个 Java 生态圈。是什么意思? Kotlin 能调 java 的方法?比如在 Kotlin new 一个 java 的类对象?
|
30
crella 2020-06-28 19:47:57 +08:00 via Android
话说 c#怎样才能像 ruby 一样,在运行时动态加载外部的代码文件?
其实觉得 ruby 的有些语法怪怪的,在试着换到 c#上去,结果 c#的泛型让我感觉有点晕 |
31
tctc4869 OP c# 动态编译
|
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 兼容”。 |
33
msg7086 2020-06-28 21:03:06 +08:00
|
34
winglight2016 2020-06-28 21:31:47 +08:00
楼上诸位似乎都没有接触过各式代码自动生成工具?有些基于 UML,有些面向行业,有些面向 OA/CMS,有些面向数据库,用户可以是略懂 SQL 的需求人员,甚至可以是精通业务的销售人员。做大而全的 IDE,的确没有这样的产品,曾经的 visual studio 是这种目标,但是现在大概用的人不多了,因为解决所有编程问题的银弹是不存在的,更不用说面向的程序员水平参差不齐,最重要的是,开发活动中,最大的风险在于系统的复杂性,而不是具体的 coding,所以 lz 说的需求没人去做。
|
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 年以后见…… |
36
lululau 2020-06-28 21:42:25 +08:00 via iPhone
Ruby 加上可选的带类型推导的静态类型系统、模式匹配、更具效率的数组和 struct/data class,这样应该就是最完美的语言了,能使用这个语言来编写 Emacs 扩展,那基本就是最完美的编辑器 /IDE 了
|
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 的踩的很低,有点心累。 |
38
msg7086 2020-06-29 00:35:39 +08:00 2
@crella 是的,Ruby 是 pass by object ref 。
捧踩其实非常完美地说明了为什么需要那么多种不同的语言。 比如大家捧得很高的 Python,我其实很不喜欢。 风格死板,行事保守,推崇一件事只有一种最好的做法,但好处是上手容易,让一个新手写出和一个五年老手差不多的代码可能只需要五个月。 Ruby 则完全相反。 灵活,激进,一件事最好有无数种做法,好处是你什么都能做(我之前给自己写了一个 DSL 玩),坏处是上手非常难,让一个新手写出和一个五年老手差不多的代码,可能需要八年。 所以必然有人非常喜欢 Python 而讨厌 Ruby,也必然有人非常喜欢 Ruby 而讨厌 Python 。 |
39
XanderChen 2020-06-29 01:34:05 +08:00 via Android 1
让 ide 能读取脑电波,
我想输入英文的时候,换英文输入法, 我想输入中文的时候,换中文输入法, 我想把光标插在哪里,就自动插过去。 别的脑洞没了。 |
40
levelworm 2020-06-29 04:04:49 +08:00 via Android
@baobao1270 程序员为什么老是做这种把自己的工作搞没的梦呢。。。
|
42
ConradG 2020-06-29 05:57:16 +08:00
现在都是 IDE 服务于语言,是时候该语言服务 IDE 了 :doge:
|
43
yousabuk 2020-06-29 07:58:31 +08:00 via iPhone
要锤子编程语言和 IDE
意念生成符合功能要求的可执行文件 怕把程序员的工作搞没了,那就只能是程序员的意念吧 |
44
shellic 2020-06-29 08:00:58 +08:00 via Android
一看这标题我还以为自己在知乎:doge:
|
45
tctc4869 OP @XanderChen 你这个其实是加快了的打字效率
|
46
hejingyuan199 2020-06-29 08:30:50 +08:00
我可能没有看懂内容。
不过一楼让大家散掉,那怎么行,哈哈。(开玩笑) 聚在一起瞎聊聊。 我觉得我可能理解的不对: 不过我印象中很多编程语言都是自带独有的 IDE 吧。 比如,Matlab,R ( Rstudio ),Racket,Mathematica 等。 以前用过 PLC,那个 IDE 和它的语言也结合得很好啊。 当然,有人认为这些不算编程语言? |
47
0x000007b 2020-06-29 08:33:39 +08:00
@XanderChen 你可以发个邮件给马斯克,让他给你造一个脑机接口
|
48
HeapOverflow 2020-06-29 08:41:12 +08:00
把(){}替换成[]
|
49
tctc4869 OP @msg7086 对于我来说,语言和 ide 都重要,但相比之下,一个好的 IDE 的开发体验更能加速开发效率。不然干脆全部去记事本或命令行编程算了。一个开发语言,我觉得内部要提供一个组件能容易与 ide 对接交互。使开发人员能够定制 ide 与该语言辅助编写开发,以及显示代码不同角度视角下的效果
本质就是,为什么有了命令行还得有 GUI 呢?为什么会有可视化开发呢?不就是为了更好的开发体验么?(不过目前我发现的第三方可视化低代码开发,我是是不想用的) 国内的中文编程终究不过是个壳子,即便做到汇编语言级别都没有意义,要做到中文编程还不简单,让 ide 帮我们给项目源码套个信息壳子,信息壳子里面放中文,但真正源码是不变的,因为编程字符就是符号化的字符。 一个好的 ide,可以让一个代码文件的源码内容以及信息壳子,以不同的视角显示不一样的外观。可以让一个项目,一个模块生成思维导图表示,让一个方法的代码转化为流程图显示。 |
50
araraloren 2020-06-29 08:55:17 +08:00
@HeapOverflow 你说的是 Red 语言吗??
|
51
nightwitch 2020-06-29 09:23:07 +08:00
支持以希腊字母以及上下标变种的为变量名的 C++。(当然这辈子估计是见不到了
数值计算的代码如果没有希腊字母真的很难懂 |
52
HeapOverflow 2020-06-29 09:29:06 +08:00
@araraloren 我不是很喜欢 red 的变量声明和方程调用语法
|
53
llsquaer 2020-06-29 10:25:27 +08:00
ide 集成输入法...
比如 打印, 键盘敲 dy 就出来了,, 如果中文变量名 敲 首字母.. 输入新变量的时候有一个备选词(中英文都包含,和输入法差不多吧) 这样减少切换输入法了. 这种怎么样. |
57
secondwtq 2020-06-29 19:20:32 +08:00
@nightwitch 用希腊字母的话,应该已经可以了。(当然我谷歌了一下发现 GCC 到 10 才支持,但是 C++标准应该是早就支持了)
上下标是更大的问题—因为现在一般程序员”写代码”的方式,从 typography 的角度来讲是极其原始的(比如拉丁字母的等宽字体,其实是打字机的副产品。大量的标点符号被重新定义,搞一个简单的 ligature 居然还能在 21 世纪火起来),并且更可怕的是,似乎并没有人想要解决这个问题。大家都满足于”一切皆纯文本”这种”哲学”上,认为存在并且自己已经认识到了 one true way,或者至少是一个 common ground 。楼主的帖子其实也属于这一范畴。 |
58
nightwitch 2020-06-29 20:05:30 +08:00
@secondwtq 试了一下,真的可以。看来我离语言律师的路还有很远 XD
|
59
tctc4869 OP @secondwtq 我觉得编程用哪些符号比较好的问题,决定关键在于打字输入符号和输入效率,用希腊字母或俄文字母打代码也不是不行,搞个希腊饿文字母键盘就行。或者 IDE 。更快的脑波意念输入打字。
|
60
xcstream 2020-06-29 21:45:26 +08:00
idea 或者 vscode 魔改
|
61
levelworm 2020-06-30 02:55:42 +08:00 via Android
话说有人用过 holy c 没? jit 感觉不错啊
|
62
ChanKc 2020-06-30 08:35:37 +08:00 via Android
还有人认真回复楼主啊,搞了半天感觉就是想要个 dsl
|
63
Chikaku 2020-06-30 09:04:40 +08:00
es6 的基础语法 + python 的库和语法糖 + 静态类型 + golang 的性能
|