0%

对编程语言的一点思考

3.23日区块链课后心血来潮,遂尝试描绘一下自己心中最理想的语言的模样:(不分先后)

  • 易书写、易阅读

    这个太关键了,个人感觉C和C++在这方面简直负分。以下列举几个我比较喜欢的点:(不分先后)

    • 函数可以返回多个值

    • 语句末尾可以不用加分号

      这样可以防止某些人把一堆语句塞到一行

    • 统一代码风格、命名风格

  • 强类型

    没啥可说的,就是你,Javascript.

    关于是否强类型检查,个人并没有特殊的倾向。我希望二者兼有。Go属于二者兼有但倾向强,Python属于二者兼有但很倾向弱,Typescript可能不错(没尝试过)。

  • 快速

    其实,说句公道话,各个编程语言只是人类与计算机沟通的桥梁。C语言和其他语言并没有什么区别,C语言的快速,很大程度上是因为C语言的编译器经过了几十年无数人的优化,有诸如尾递归消去、循环展开等优化,而这些优化思想并不是language-specific的,完全可以应用到其他语言上。

    有一个很好的例子就是,Python和Javascript相比,Javascript更加灵活,根据常理,灵活的代价是牺牲速度。但是为什么Javascript的执行速度这么快,以至于诸多服务器、客户端程序都是JS开发的?因为JS的v8解释器是Google雇佣几十个人开发十几年的产品,已经把JS这个动态语言优化到了编译成机器代码的程度。那么Python作为相对来说限制更强的语言,应该速度更快才对。但是并没有,为什么?因为Python的维护主要由一群爱好者业余时间维护。一言以蔽之,给钱,就能行。

    理论上来说,所有语言优化到极致,它们的速度几乎是一样的。for(int i=0; i<n; ++i);的速度,放在哪个语言里都应该是一样的。

    C语言进行纯计算确实快,这是因为C语言关心的事情少。但是,现在除了超频爱好者/OIer/Researcher,谁还在关心单线程的运算速度?大厂的服务器后台一个个都是Nodejs搭的。

  • 高并发

    关于这一点,我非常喜欢Go的思想:通过通信来共享内存,而不是共享内存来通信。Goroutine的设计爱了爱了。

  • 安全

    • 线程安全

    • 内存安全

      对于指针,一定要谨慎设计。空指针、野指针的隐患太大了。

      或者干脆没有指针,就像Python/JS一样,全部都是引用。变量名?就是个名字罢了。

  • 简单的面向对象支持

    前几年面向对象大火,现在已经不行了。C++的面向对象语法就是垃圾,何必要搞得这么复杂?像Python/Go 一样简洁有效不好吗?在学习这些语言的面向对象特性时,我可以清楚地感受到设计者在面向对象方面花费的心思。

一些小细节:

  • 不要有Stop the world垃圾回收机制。应用程序循环性卡顿会限制它的应用场景。Java的致命弱点就是它。Go似乎有所改善。Rust在这方面做的不错。

Update on 2021/4/28:

C和Rust可以嵌入式,Go和Python有运行时环境,因此几乎没人搞嵌入式。

Python的优点:好写

Go的优点:傻瓜式多线程

Rust的优点:安全(但费劲)

C++的优点:CCF NOI(开玩笑

就目前俺个人的应用场景,可能还是常用Python吧,其他语言的优点目前用不上。