瞎扯淡 编程语言为什么不做成模块化的?

mizuhashi · 2016年07月05日 · 最后由 jasl 回复于 2016年07月06日 · 3212 次阅读

好多人为了一点点语法差异就要重新发明一门编程语言,但是一门语言要达到工业强度没个五年不太可能,人的一生的 1/12 就没有了...

那为什么不把语法的实现模块化,比如 ruby 现在的模式匹配比较弱,那用户直接换个更强大的模式匹配模块就可以了。也就是语法和语意分离,ruby 的语意核心就是对象模型这些,但是语法可以随便弄,只要能编译成 ast。

其实 babel-plugin 是有点这种感觉的,js 没有运算符重载,但是用 babel 是完全可以做个 plugin 支持运算符重载,虽然还需要一点 polyfill。这样根本不用等什么标准,就可以以自己喜欢的方式使用语言了。

那些跑在 JVM 上的非 java 的语言算是楼主想要做成的那样的么?

#1 楼 @ywjno 不是,比如表达代码块可以 do...end,可以{...},也可以用缩进表示,把 ruby 的块表示法换掉并不会对语言的其他部分有什么影响,那为什么不把他做成一个可以更换的块语法模块

#2 楼 @mizuhashi Lisp 就可以,不过会导致一个项目的代码风格完全是另一种语言了,不利于维护。 ruby 虽然注重灵活,但还是考虑到 project 的问题。

顺着你的思路考虑一下,我在使用 Java,但是一段难以表达的业务逻辑,我希望使用 Ruby 完成

Ruby 支持 keyword arguments, 比如 我可以写 sign_in(email: email, password: password),但 Java 不支持的,这时候要怎么去调用呢?会不会增加额外的成本?

#4 楼 @jasl 业务逻辑还好 rest 就完了

#5 楼 @jicheng1014 还别说。。。 我们的登录接口有三个参数 email、phone_number、password 前两者二选一,封装的时候可就愁了... signIn(String email, String password)signIn(String phoneNumber, String password) 是不行的 必须signInByEmail, signInByPhoneNumber

这样搞,会不会等做编译器的哥们把多出来的 bug 修完之前,这门语言就已经完蛋了。

这样会很难写编译器吧,有些语法之间会有潜在的二义性。

#6 楼 @jasl 有这么恶心?java?

#6 楼 @jasl 参数统统是 hash

#6 楼 @jasl 传个 hash 就行了,ruby 也是传 hash 啊,而且同样没有函数重载

#11 楼 @mizuhashi Ruby 不是 hash 哦。。那些 key 真的是方法签名的一部分

#10 楼 @jicheng1014 Ruby 2.0 有 keyword arguments 了呀,keyword 是方法签名的一部分了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号