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

mizuhashi · 发布于 2016年07月05日 · 最后由 jasl 回复于 2016年07月06日 · 1259 次阅读
23529

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

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

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

共收到 13 条回复
1342

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

23529

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

6361

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

1107

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

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

10547

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

1107

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

A908ae

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

15139

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

3873

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

10547

#6楼 @jasl 参数统统是 hash

23529

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

1107

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

1107

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

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