是否有一种完美语言来终结“编程语言之争”?
大家都可能听过“PHP 是最好的语言”段子。
编程语言很多,既然存在,就有每个存在的理由。其实没必要评论哪个语言好,哪个语言不好。因为每个编程语言本身都不难,只要学会了一种语言,其他的都是相通的。难的,好坏之分,是理解,记忆,熟悉,和流畅的使用那些每个语言提供的基础库和扩展库,也就是 LIBs,或是 APIs,或是 SDK,或是 Frameworks。
编程语言本身,就最简单的集合来说,就是一堆保留的关键词和一堆的语法,这个大家稍微看看就都会明白,还有其设计思想。就和学一门外语一样,一些词汇加上一些词汇能组合的语法。这些通常包括的编程语言特性有:语句组成,变量定义,算术运算,循环语句,函数定义和调用,面向对象,指针操作,垃圾回收,输入输出等等。基础的东西,大家如果学过或是使用过一种语言,其他的新的语言,花个一两分钟就能写出一个 hello world 的入门程序,花个一两个小时就能基本理解。
那么,好坏之分,难的部分,实际上是那些基础库和各种扩展库。这些库,必须在实践中一步一步熟悉和掌握。如果不经常使用,还特别容易忘记,尽管现代的编程环境有各种智能辅助。会不会,熟不熟一门语言,很大程度上是对他们的持续使用和理解。这也是为什么,没有多个项目,或是几年的实践,很难说是一个语言的高手。
比如同样对于网络的操作,有的语言的库包装的简单高级易用全面,有的语言就基础原始。那么对于那些有高级包装库的语言,大家就会觉得好,语言好用,开发效率高,想要什么都有,socket、tcp/ip、http、async/sync、select、event,甚至是 sever、client、crawler 等等。而对那些比较底层的包装的语言,大家就学觉得开发效率低,难用,比如只有 select 和 socket。是不是大概如此?
学习完了编程语言基础,大家一般要花很多的时间去了解和学习基础库和扩展库,这个才是真正的痛处和难点,学了不用还容易忘记,用到的时候还得想到有这个函数库。那么,如果有一套对各种语言都适用的 API 或是库函数定义,那么,大家学习和使用一门新的语言的效率会大幅度提高。这时,哪个语言最好,也就不再是什么问题了。
Protobuf、Thrift、COM、RPC 等等都已经在做这方面尝试,如果有一天,大家不管用什么编程语言,只要记住一套接口函数,那就太美好了。这时,估计没有人会再争论,PHP 是否是最好的语言了。
《架构师特刊:编程语言》序言,作者:陈利人
Go 是 Google 开发的一种并发型,具有垃圾回收功能的编程语言。Go 语言最初由 Robert Griesemer, Rob Pike 和 Ken Thompson 在 2007 年末共同设计和实现,2009 年 11 月份正式发布并开源,当它全部开源出来后,获得了当年的年度语言。
Go 语言相对其它语言具有几点天然的优势:
语法简单,上手快。
性能高,编译快,开发效率也不低。
原生支持并发,协程模型是非常优秀的服务端模型,同时也适合网络调用。
部署方便,编译包小,几乎无依赖。
Go 适合用来做:1. 服务器编程,通常以前是使用 C 或者 C++,用 Go 来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。2. 分布式系统,数据库代理器等。3. 网络编程。4. 内存数据库。5. 云平台。
Go 语言在中国发展也非常不错,今日头条当前后端服务超过 80% 的流量是跑在 Go 构建的服务上。微服务数量超过 100 个,高峰 QPS 超过 700 万,日处理请求量超过 3000 亿,是业内最大规模的 Go 应用。
在 2015 年之前,头条的主要编程语言是 Python 以及部分 C++。随着业务和流量的快速增长,服务端的压力越来越大,随之而来问题频出。Python 的解释性语言特性以及其落后的多进程服务模型受到了巨大的挑战。
2015 年 6 月,今日头条开始使用 Go 语言重构后端的 Feed 流服务,2016 年 6 月,Feed 流后端服务几乎全部迁移到 Go。
点击下图即可阅读全文
从 1995 年第一个版本发布到现在,Java 语言已经在跌宕起伏中走过了 22 年,最新的 Java 版本也已经迭代到 Java 9。当年 Java 语言的跨平台优势如今看来也只不过是家常小菜,Go、Rust 等语言横空出世,进一步拓宽了编程语言的边界。当年发明 Java 语言的 Sun 公司早已被 Oracle 收购,Oracle 现在也正处于水深火热的云计算浪潮当中,甚至连 Java 之父 James Gosling 也加入了当今世界最大的云计算公司 AWS。
Java 语言发展的这 20 年也正是全球互联网迅猛发展的 20 年,Java 语言同时也见证了电商浪潮、移动互联网浪潮、大数据浪潮、云计算浪潮,所以在现今各大互联网公司身上都能看到 Java 的身影。
TIOBE 的语言排行榜显示,自 2016 年初 Java 语言就出现了明显的下颓趋势,开发者社区也出现了一些唱衰 Java 语言的论调,编者心中也有些许疑问:Java 老矣,尚能『饭』否?基于这样的背景,InfoQ 邀请到了 Java 资深专家张建锋来为大家解读 Java 语言的发展现状以及未来。
点击下图即可阅读全文
Python 的创始人为吉多·范罗苏姆(Guido van Rossum)。1989 年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,于是 Python 就诞生了。
尽管 Python 有时被粗略地分类为“脚本语言”(script language),但是它具有最丰富和强大的类库,以及良好的扩展性,于是在工业和科研上获得广泛的使用。
PyCon 是全世界最大的以 Python 编程语言 为主题的技术大会,大会由 Python 社区组织,每年举办一次。在 Python 2017 上,Instagram 的工程师们带来了一个有关 Python 在 Instagram 的主题演讲,同时还分享了 Instagram 如何将整个项目运行环境升级到 Python 3 的故事。
Instagram 的总注册用户达到 30 亿,月活用户超过 7 亿 (作为对比,微信最新披露的月活跃用户为 9.38 亿)。而令人吃惊的是,这么高的访问量背后,竟完全是由以速度慢著称的 Python + Django 支撑。Python 虽然运行很慢,不过,这对于 Instagram 不是问题,因为他们认为:『Instagram 的最大瓶颈在于开发效率,而不是代码的执行效率』。上面是 Instagram 这种业务上不依赖高强度运算的实例。对于计算强度高的业务,如果强调性能,可以使用 Cython(https://en.wikipedia.org/wiki/Cython)。或者如 Numpy\numba\NUFFT 之类专门优化过的计算库。
点击下图即可阅读全文
Rust 是由 Mozilla 研究室主导开发的一门现代系统编程语言,自 2015 年 5 月发布 1.0 之后,一直以每 6 周一个小版本的开发进度稳定向前推进。语言设计上跟 C++ 一样强调零开销抽象和 RAII。拥有极小的运行时和高效的 C 绑定,使其运行效率与 C/C++ 一个级别,非常适合对性能要求较高的系统编程领域。
Rust 作为一种新锐的语言,具备其独有的优越性,虽然对于国内大多数开发者来说会显得比较陌生,但是并不妨碍 Rust 已经在世界范围内作为公认的 C/C++ 的有希望的挑战者。目前在全球落地的项目中比较知名的比如,Dropbox 的后端分布式存储系统(闭源),Firefox 的新的内核 Servo,操作系统 Redox,还包括 PingCAP 的分布式数据库 TiDB 的存储层 TiKV。TiKV 作为其中的一员,自上线以来非常引人注目,在 GitHub Rust 语言的全球排名项目中,基本上一直徘徊在前几名的状态。
点击下图即可阅读全文
JavaScript 因为互联网而生,紧随着浏览器的出现而问世。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、FireFox、Safari、Opera)支持。
除了样式效果外,JavaScript 也被越来越多地应用于软件开发,例如后端任务、Web 服务器以及数据处理。JavaScript 成型很快,起初只关注一个很小的目标,后来市场的力量改造了这门语言。
对 JavaScript 有正面影响的统计数据:
在 Github 上 JavaScript 开源项目的数量最多(比 Java 多出 50%)。
NodeJS 被评为 StackOverflow 2017 年开发者调查中最受欢迎的框架。
JavaScript 是 Stack Overflow 中最流行的编程语言。
JavaScript 已经达到以下这些成为一流编程语言的标准:
被创业公司和大型私营公司用作后端服务框架(NodeJS)。
有一个蓬勃发展的开源社区(在 Github 上最活跃)。
作为一门专业技能,有大量的招聘需求要求掌握 JavaScript 知识(Indee.com)。
点击下图即可阅读全文
Clojure 是一套现代的 Lisp 语言的动态语言版,函数式多用途的语言。目前其开发进程是社区主导的,在作者 Rich Hickey 以一个“终身的仁慈独裁者”的身份监督下进行。Clojure 是 JVM 之上的语言,继承了 lisp 的优美,也保留了 Java 的实效。本文整理自 QCon 演讲,讲师是 Morgan Stanley VP 何婧誉 (Loretta),专业使用 Clojure 5 年多,主要用 Clojure 做数据流处理。