如何选择第二开发语言

背景

喜欢编程的同学,都有极强的探索欲望,会去尝试不同的编程语言,c,c++,lua,javascript,…,现在的开发语言的列表非常长,常见排行榜上都有百十个。而我们总想去寻找一个最适合自己的。

此外,在我们熟悉了一门语言之后,一般会试图再去掌握一个开发语言,要么是为了开发效率,要么是为了执行效率,总会有各种各样的原因。那我们应该如何选择?

选择标准

我们要根据自己的需要对这些标准排序,然后筛选出适合自己的语言。

  • 成熟度 :如果不是为了玩玩而已,那么成熟度,应该选择成熟度较高的语言,它们经历了多年锤炼、众多项目的实践,拥有庞大的类库,拥有成熟的IDE,在互联网上有广泛的热度和讨论话题。在一个成熟的环境下开发,往往可以事半功倍。这个标准一般看开发语言排行榜就行了。
  • 跨平台:在当前环境下,电脑以各种各样的形式存在:PC、服务器、手机、游戏机、可编程玩具、可编程电子设备…。操作系统也是各种各样:windows linux android iso(不过常见基本可以归为两类:windows以及类unix)。我们的开发语言是否能够在目标平台运行。
  • 执行效率:不同的开发语言执行效率差距很大,一般来说,实际访问量越大、实际访问用户越多的场合对执行效率越高。目前执行效率第一梯队是:汇编、c、c++、rust等;第二梯队:java c#(.netcore) js(nodejs),这些语言有着接近c的执行效率(一般是c的50%以上);第三梯队:php python lua等等,它们的执行效率一般是c的10%以下。
  • 开发效率:这个主要看语言是否具备现代化的语法。一般新语言都会具备现代语法,而老的语言,也可能会修订标准,增加对现代语法的支持:比如lambda表达式、iterator、auto 、var等。现代化的语法会大大减少代码量、让代码更紧凑,也降低我们的工作量,因为有了这些语法,部分工作就交给编译器了。
  • 实时性需求:现在的大部分开发语言都是解释执行的,它们都有虚拟机,都有垃圾回收,这样的程序会在不确定的时间发生暂停,在停止执行一段时间后(几毫秒或者几十秒、几分钟),再继续执行。如果有强烈的实时性需求,那么就要保障暂停时间在可接受范围内。

我的选择

对我来说,之前最熟悉的语言是java,而现在需要一个跨平台(可以在移动设备、pc上运行)、执行效率高、较为成熟、能满足一定实时性的第二语言。

我考虑过一个很大的列表,大致有 c c++ rust D swift kotlin,

d swift kotlin都是较新的语言,不够成熟,或者在部分平台成熟。这样的语言,需要耗费你很多时间去学习,然后才能发现不适合。

跨平台执行效率成熟度实时性开发效率C ABI兼容
c★★★★★★★★★★ ★★★★★ ★★★★★ ★★★
c++★★★★★★★★★★ ★★★★★ ★★★★★ ★★★★
rust★★★★★★★★★ ★★★★ ★★★★★ ★★★★
d★★★★★★★★★ ★★★★★★ ★★★★★
swift★★★★★★★★★★★★ ★★★★★
kotlin★★★★★★★★★★★★★★★ ★★★★★

我把d swift kotlin 剔除,主要是因为它们在多个平台上的总体执行效率不够高、或者因为有GC的缘故实时性较差。

剔除rust,主要是它与c++对比没有明显优势,而且它的语法与我的习惯差距过大。

剔除c,是因为c的表达能力相对比较差,开发效率也相应低一些。

最后还是选择了c++,c++11以后的c++,用起来还是很舒服的,再搭配boost,基本都是hpp库,不需要编译就能使用包括asio 在内的大量库,boost使c++拥有了丰富的基础库,使我们可以直接开发业务逻辑,而不是从基础库开始开发。其次c++的跨平台能力非常好,只要目标平台支持标准c++,你的代码就可以在目标平台编译、执行,这是大部分新语言做不到的。

最后,给大家一个忠告,如果你在寻找一门新的语言,来替代c和c++,并且希望这门语言同时也具备c c++的优点,那么还是使用c++吧,暂时还没有更好的语言来代替它们,与其花费那么多精力去尝试各种语言,不如把c++学的更熟悉。而且,就算学别的语言,最后在调用c c++的库时候,发现还是需要懂得c c++。所以,c++11 就是代替c c++的最好选择。

发表评论

电子邮件地址不会被公开。 必填项已用*标注