片由 h heyerlein 发布在 Unsplash 上
如果我们把人类的现代文明看作一辆汽车,那么软件开发行业就像汽车的发动机,编程语言就像发动机的燃料。那么问题来了,你应该学哪种编程语言?
学习一门新的编程语言在时间、精力和脑力上的投入都非常巨大,但它可以提高你的软件开发技能,并给你的职业生涯带来提升,正如我在另一篇博客中所写的:
博客网址:https://medium.com/@md.kamaruzzaman/5-reasons-to-learn-a-new-programming-language-in-2020-bfc9a4b9a763
通常,你应该选择一种能有助于你事业发展的编程语言。另外,你还可以学习一门受欢迎程度正在上升的语言。
我对主流编程语言非常尊重。但在这里,我列出现代编程语言,这些语言可以提高你的工作效率,使你成为一个更好的开发人员。此外,我还将涉及更广泛的领域:系统编程,应用程序开发,网络开发,科学计算。
「现代编程语言」这个词是模棱两可的。许多人认为像 Python、JavaScript 这样的语言是现代编程语言。但同时,他们认为 Java 是一种古老的编程语言。事实上,它们都出现在同一时间:1995 年。
大多数主流的编程语言是在上个世纪发展起来的,主要是在 20 世纪 70 年代(例如 C)、20 世纪 80 年代(例如 C++)、20 世纪 90 年代(例如 Java、Python、JavaScript)。这些语言不是为了利用现代软件开发生态系统而设计的。尽管其中的许多语言中有改进特性,比如并发性和自我调整,但是它们也提供了向后兼容性,并且不能丢弃旧的、过时的特性。
在这一点上,Python 做的很好,它在 Python 2 和 Python 3 之间做了一个明确的划分。这些语言通常提供 10 种方法来做同样的事情,而不关心开发人员用起来是否方便。根据 StackOverflow developer 的调查,大多数主流的旧编程语言都在「最可怕的语言」类别中占据了榜首:
图片来源:Stackoverflow
我将以第一款 iPhone 发布的时候,也就是 2007 年 6 月 29 日作为新旧编程语言之间的界限时间点。在 iPhone 发布之后,一切都发生了变化。在这个列表中,我主要考虑 2007 年后的编程语言。
首先,开发现代编程语言是为了充分利用现代计算机硬件(多核 CPU、GPU、TPU)、移动设备、大数据集、快速网络、容器和云。此外,大多数现代编程语言使用起来都更容易,主要体现在:
简洁的代码
内置的并发支持
空指针安全
类型推断
更简单的特性集
低认知负荷
混合所有编程范例的最佳特性
其次,列表中的许多编程语言都具有破坏性,将永远改变软件行业。其中一些已经成为主流编程语言,而另一些则等待取得突破。至少作为第二种编程语言来学习这些语言是明智的。
在之前的一篇博文「20 个 2020 年软件发展趋势预测」中,我预测了 2020 年许多现代编程语言的突破:
文章网址:https://towardsdatascience.com/20-predictions-about-software-development-trends-in-2020-afb8b110d9a0
Rust
图片来源:Thoughtram
系统编程语言是由 C、C++等主导的,尽管它们可以完全控制程序和硬件,但它们缺乏内存安全性。即使它们支持并发性,但是在比你保证并发安全性的情况下,使用 C/C++编写并发程序是很有挑战性的。其他流行的编程语言是可解释性的语言,如 Java、Python、Haskell,它们提供安全性,但需要很多的运行时间或虚拟机。由于运行时很大,像 Java 这样的语言不适合系统编程。
有很多人尝试过将 C/C++的特性和 Haskell,Java 的安全性结合起来,但目前看来,Rust 是第一个实现这一目的的产品级编程语言。
Graydon Hoare 最早将 Rust 作为一个副产品开发出来。他受到了研究性的编程语言 Cyclone 的启发。Rust 是开源的,Mozilla 与许多其他公司和社区一起进行语言开发。Rust 于 2015 年首次发布,很快就引起了社会各界的关注。在以前的文章中,我深入研究了 Rust,并论证了为什么在大数据域中使用 Rust 来代替 C++、Java 是一个更好的选择:
文章网址:https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842
主要特性:
通过所有权和借用的概念提供内存安全性和并发安全性。
内存安全和并发安全的编译时间保证,即如果一个程序代码编译了,那么它既是内存安全的,也没有数据竞争。这是 Rust 最吸引人的特点。
它还提供了 ML,Haskell 的表示方式。Rust 具有不变的数据结构和函数式编程特性,提供函数式并发和数据并发。
Rust 的速度非常快。
由于没有运行时,Rust 提供了对现代硬件(TPU、GPU、多核 CPU)的完全控制。
Rust 有 LLVM 支持。
受欢迎程度:
自 2015 年首次亮相以来,Rust 一直被开发者所喜爱,并在 StackOverflow 开发者调查中连续四年(2016、2017、2018、2019)被评为最受欢迎的语言:
图片来源:Stackoverflow
根据 GitHub Octoverse 的说法,Rust 是仅次于 Dart 的增长第二快的语言:
图片来源:Octoverse
流行编程语言网站 PyPl 也将 Rust 排在第 18 位,并呈上升趋势:
图片来源:PyPl
对比它提供的功能集,难怪像微软、亚马逊、谷歌这样的科技巨头最终宣布将 Rust 作为一种长期的系统编程语言。
在过去的 5 年里,Rust 的吸引力每年都在增加:
图片来源:Google Trends
主要用在:
系统编程
无服务器计算
业务应用程序
主要竞争语言:
C
C++
Go
Swift
Go
图片来源:Wikimedia
谷歌是最大的网络公司之一。本世纪初,Google 面临着两个扩展问题:开发扩展和应用程序扩展。开发扩展意味着他们不能通过增加开发人员来增加更多的功能,应用程序扩展意味着他们无法轻松开发一个可以扩展到「Google」级机器集群的应用程序。2007 年左右,谷歌开始创建一种新的「实用」编程语言,这种语言可以解决这两个问题。在 Rob Pike(UTF-8)和 Ken Thompson(UNIX 操作系统)中,两个世界上最有才华的软件工程师创建了一种新的语言。
2012 年,谷歌发布了 Go 编程语言的第一个官方版本。Go 是一种系统编程语言,但不同于 Rust。它也有一个运行时和垃圾收集器(几兆字节),但与 Java 或 Python 不同的是,这个运行时包含了生成的代码。最后,Go 生成一个本机二进制代码,可以在没有附加依赖项或运行时的情况下在计算机中运行。
主要特性:
Go 具有一流的并发支持。它不通过线程和锁提供「共享内存」并发性,因为编程难度要大得多。相反,它提供了基于 CSP 的消息传递并发性。Go 使用「Goroutine」(轻量级绿色线程)和「Channel」进行消息传递。
Go 最具杀伤力的特点是简单,它是最简单的系统编程语言,一个萌新软件开发人员可以在几天内编写出高效的代码。一些最大的云原生项目(Kubernetes,Docker)是用 Go 编写的。
GO 也有嵌入式垃圾收集器,这意味着开发人员不需要担心像 C/C++那样的内存管理问题。
谷歌在 Go 上投入了大量资金,因此,Go 拥有大量的工具支持。对于新的 Go 开发人员来说,有一个庞大的工具生态系统。
通常,开发人员花费 20% 的时间编写新代码,80% 的时间维护现有代码。由于其简单性,Go 在语言维护领域表现出色。如今,Go 在商业应用程序中得到了广泛的应用。
受欢迎程度:
自 Go 首次问世以来,软件开发社区已经欣然接受了它。在 2009 年(首次亮相)和 2018 年,Go 通过 TIOBE 指数进入编程语言名人堂排行榜。难怪 Go 的成功为 Rust 这样的新一代编程语言铺平了道路。
Go 已经是一种主流编程语言。最近,Go 团队宣布了「Go 2」的计划,目的只是让语言更加稳固。
在几乎所有流行编程语言比较网站,Go 的排名很高,超过了许多现有的语言。以下是 2019 年 12 月的 TIOBE 指数评级,Go 排名第 15 位:
图片来源:TIOBE
根据 Stackoverflow 的调查,Go 是十大最受欢迎的编程语言之一:
图片来源:Stackoverflow
根据 GitHub Octoverse 的统计,Go 也是增长最快的十大语言之一:
图片来源:Octoverse
谷歌还显示,过去五年里,Go 的吸引力不断增强:
图片来源:Google Trends
主要用例:
系统编程
无服务器计算
业务应用程序
云本机开发
主要竞争语言:
C
C++
Rust
Python
Java
Kotlin
Java 是企业软件开发中无可争议的王者。近年来,Java 已经受到了很多批评:冗长,需要大量的样板编码,复杂,容易发生意外。然而,关于 Java 虚拟机(JVM)的争论很少。JVM 是软件工程领域的杰作,它提供了一个经过时间考验的运行时。在上一篇文章中,我详细讨论了 JVM 的优点:
文章网址:https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0
多年来,像 Scala 这样的 JVM 语言试图回答 Java 的缺点,并希望成为更好的 Java,但是失败了。最后,Kotlin 出现了,寻找更好 Java 的旅程似乎已经结束。Jet Brains(流行 IDE IntelliJ 背后的公司)开发了 Kotlin,它运行在 JVM 上,解决了 Java 的缺点,并提供了许多现代特性。与 Scala 不同,Kotlin 比 Java 简单得多,并在 JVM 中提供 Go 或 Python 式的开发效率。
谷歌宣布 Kotlin 是开发 Android 的一流语言,并提高了 Kotlin 在社区的接受度。同样流行的 Java 企业框架 Spring 也从 2017 年开始在 Spring 生态系统中支持 Kotlin。
主要特性:
Kotlin 的 USP 是它的语言设计。我总是将 Kotlin 看作 JVM 上的 Go/Python,因为它的代码简洁明了。因此,Kotlin 的生产效率很高。
与许多其他现代语言一样,Kotlin 提供了空指针安全、类型推断等功能。
因为 Kotlin 在 JVM 中运行,因此你可以使用现存的 Java 库庞大的生态系统。
Kotlin 是开发 Android 应用程序的一流语言,已经超越 Java 成为开发 Android 应用程序的第一语言。
Kotlin 有 JetBrains 和开源的支持。所以,Kotlin 有很好的工具支持。
有两个有趣的项目:Kotlin Native(将 Kotlin 编译为本机代码)和 Kotlin.js(Kotlin 转换为 JavaScript)。如果他们成功了,那么 Kotlin 可以在 JVM 之外使用。
Kotlin 还提供了一种编写 DSL(领域特定语言)的简单方法。
受欢迎程度:
自 2015 年首次发布以来,Kotlin 的受欢迎程度正在飙升。根据 Stack Overflow,Kotlin 是 2019 年第四受欢迎的编程语言:
图片来源:Stackoverflow
Kotlin 也是增长最快的编程语言之一,排名第四:
图片来源:Github Octoverse
热门编程语言排名网站 PyPl 将 Kotlin 列为第 12 位最受欢迎的编程语言,并有很高的上升趋势:
图片来源:Pypl
自从谷歌宣布 Kotlin 是开发 Android 应用程序的一流语言以来,Kotlin 的受欢迎程度快速上升,如下图所示:
图片来源:Google Trends
主要用例:
企业应用程序
Android应用程序开发
主要竞争语言:
Java
Scala
Python
Go
TypeScript
JavaScript 是一种优秀的语言,但 2015 年以前的 JavaScript 有许多缺点。甚至著名的软件工程师 Douglas Crockford 也写过一本书《JavaScript: The Good Parts》,并暗示 JavaScript 有很多不好的部分。由于没有模块化和「回调地狱」,开发人员不喜欢维护特别大的 JavaScript 项目。
Google 甚至开发了一个平台,将 Java 代码转换为 JavaScript 代码(GWT)。许多公司或个人试图开发更好的 JavaScript,例如 CoffeeScript、Flow、ClojureScript,但微软的 TypeScript 无疑是其中最突出的。由 Delphi 的创建者 Anders Hejlsberg 领导的一组微软工程师创建了 TypeScript,把它作为 JavaScript 的静态类型的模块化超集。
在编译期间,TypeScript 被编译为 JavaScript。2014 年首次发布以来,TypeScript 迅速引起社会关注。当时谷歌还计划开发一个静态类型的 JavaScript 超集。谷歌对 TypeScript 印象深刻,他们没有开发新的语言,而是与微软合作改进 TypeScript。
Google 使用 TypeScript 作为其 SPA 框架 Angular2+ 的主要编程语言。另外,流行的 SPA 框架 React 提供了对 TypeScript 的支持。另一个流行的 JavaScript 框架 Vue.js 声明他们将使用 TypeScript 开发新的 Vue.js 3:
图片来源:Vue.js Roadmap
此外,node.js 的创建者 Ryan Dahl 决定使用 TypeScript 开发一个安全的 node.js 替代品 Deno。
主要特性:
与列表中的 Go 或 Kotlin 一样,TypeScript 的主要特性是语言设计。凭借其清晰干净的代码,它是最优雅的编程语言之一。就开发人员的生产力而言,它与 JVM 上的 Kotlin 或 Go/Python 不相上下。TypeScript 是最高效的 JavaScript 超集。
TypeScript 是 JavaScript 的强类型超集。它特别适合大型项目,并被正确地称为「大规模的 JavaScript」。
「三大」单页应用程序框架(Angular、React、Vue.js)为 TypeScript 提供了极好的支持。在 Angular 中,TypeScript 是首选的编程语言。在 React 和 Vue.js 中,TypeScript 越来越流行。
两个最大的科技巨头:微软和谷歌正在合作开发 TypeScript,它得到了一个充满活力的开源社区的支持。因此,对 TypeScript 的工具支持是最好的支持之一。
由于 TypeScript 是 JavaScript 的超集,它可以在 JavaScript 所有的地方运行。TypeScript 可以在浏览器、服务器、移动设备、物联网设备和云上运行。
受欢迎程度:
开发人员喜欢 TypeScript 优雅的语言设计。在 Stackoverflow 开发者调查中,它在最受欢迎的语言类别中与 Python 并列第二:
图片来源:Stackoverflow
TypeScript 是增长最快的 Web 编程语言之一,在 GitHub Octoverse 上排名第五:
图片来源:Octoverse
根据 GitHub 贡献,TypeScript 也进入了前 10 名(排名第 7):
图片来源:Octoverse
TypeScript 在过去的一年中吸引了越来越多的眼球,这反映在 Google 趋势上:
图片来源:Google Trends
主要用例:
Web 用户界面开发
服务器端开发
主要竞争语言:
JavaScript
Dart
Swift
Steve Jobs 拒绝在 iOS 中支持 Java(和 JVM),因为他认为 Java 将不再是一种主要的编程语言。我们现在知道 Steve Jobs 对 Java 的评价是错误的,但是 iOS 仍然不支持 Java。相反,苹果选择 Objective-C 作为 iOS 中的主流编程语言。Objective-C 是一门很难掌握的语言。而且,它具备现代编程语言所要求的高开发效率。
在苹果,Chris Lattner 和其他人开发了 Swift ,它是一种多范式、通用、可编译的编程语言,为 Objective-C 提供了一种替代方案。Swift 的第一个稳定版本于 2014 年发布。Swift 还支持 LLVM 编译器工具链(也由 Chris Lattner 开发)。Swift 与 Objective-C 代码库具有良好的互操作性,并且已经成为 iOS 应用程序开发的主要编程语言。
主要特性:
Swift 的一个致命优点是它的语言设计。它使用更简单、简洁和干净的语法,为 Objective-C 提供了一个更高效的替代方案。
Swift 还提供了现代程序语言的特性:null 安全性。
Swift 是一种编译语言,它和 C++一样快。
Swift 支持 LLVM 编译器工具链。因此,我们可以在服务器端甚至浏览器编程(使用 WebAssembly)中使用 Swift。
Swift 提供自动参考计数(ARC)支持,这样可以限制内存管理不当。
受欢迎程度:
和许多其他现代语言一样,开发人员也非常喜欢 Swift。根据 StackOverflow 的调查,Swift 在最受欢迎的编程语言中排名第六:
在 TIOBE 的编程语言排行榜中,Swift 在 2019 年已升至第 10 位。考虑到这门语言才 5 岁,这是一个相当了不起的成就:
图片来源:TIOBE Index
Google trends 还显示,Swift 的受欢迎程度先急剧上升,随后在最后几次饱和中趋势略有下降:
图片来源:Google Trends
主要用例:
iOS 应用程序开发
系统编程
客户端开发(通过 WebAssembly)
主要竞争语言:
Objective-C
Rust
Go
Dart
Dart 也是 Google 发布的编程语言。Google 是网络和安卓领域的关键玩家,在网络和应用程序开发领域开发自己的编程语言也就不足为奇了。
Dart 是一种支持强类型和面向对象编程的通用编程语言。Dart 也可以被转换成 JavaScript,并且可以运行在 JavaScript 运行着的任何地方(例如 Web、移动、服务器)。
主要特性:
与 Go 一样,Dart 也非常注重开发人员的工作效率。Dart 由于其干净、简单、简洁的语法,极大地提高了生产效率,深受开发人员的喜爱。
Dart 还提供强大的类和面向对象的编程。
Dart 是少数支持 JIT 编译和 AOT 编译的语言之一。因此,Dart 可以以 JavaScript 运行时(V8 引擎)为目标,Dart 可以编译成快速的本机代码(AOT 编译)。
跨平台的原生应用开发平台 Flutter 选择 Dart 作为编程语言来开发 iOS 和 Android 应用。从那以后,Dart 变得越来越流行。
与 Go 一样,Dart 也有出色的工具支持和 Flutter 巨大的生态系统。Flutter 的日益流行只会增加 Dart 的流行程度。
受欢迎程度:
根据 Github Octoverse,Dart 是 2019 年增长最快的编程语言,去年它的受欢迎程度翻了五倍:
根据 TIOBE,Dart 居于第 23 位,仅仅 4 年时间,它已经超越了其它很多编程语言:
图片来源:TIOBE index
它也是 StackOverflow 开发者调查中排名第 12 位的最受欢迎的编程语言之一:
图片来源:StackOverflow
除了 Flutter,Dart 的受欢迎程度在过去两年也经历了巨大的改善,这一点在 Google 中很明显:
图片来源:Google Trends
主要用例:
应用程序开发
前端开发
主要竞争语言:
JavaScript
TypeScript
Julia
前面列出的编程语言都是由大公司开发的,但 Julia 不是。在技术计算中,通常使用 Python、Matlab 等动态语言。这些语言提供易于使用的语法,但不适合大规模的技术计算,他们使用 C/C++库来处理 CPU 密集型任务。由于代码是在两种语言之间转换的,因此总会有一些性能损失。
为了解决这个问题,麻省理工学院的一组研究人员计划从头开始创建一种新的语言,它利用了现代硬件的优势,并结合了其他语言的最佳部分。他们在麻省理工学院创新实验室完成这项工作,还发表了以下宣言:
资料来源:Julia Presentation
Julia 是一种动态的高级编程语言,为并发、并行和分布式计算提供一流的支持。Julia 的第一个稳定版本于 2018 年发布,很快就得到了社区和业界的青睐。Julia 可以应用于科学计算、人工智能等许多领域,最终解决「两种语言」的问题。
特性:
和 Rust 一样,Julia 的主要特点是语言的设计。它试图在不牺牲性能的情况下,结合现有的编程语言在高性能和科学计算中的一些最佳特性。到目前为止,它做得很好。
Julia 是一种可选类型的动态编程语言。因此,Julia 很容易学习,而且效率很高。
它以多分派编程范式为核心。
它内置了对并发、并行和分布式计算的支持。
它还为 I/O 密集型任务提供异步 I/O。
它速度非常快,可以用于需要数百万线程的科学计算。
受欢迎程度:
在许多领域,Julia 主要与 Python 竞争。由于 Python 是最流行的编程语言之一,Julia 成为主流还需要几年时间。
Julia 相对年轻(只有一岁),但在 TIOBE index 中仍排在第 43 位:
图片来源:TIOBE
Google Trends 也显示出过去的时间里,程序员对 Julia 的稳定兴趣。
但考虑到 Julia 背后的功能集和公司数量,如 NSF、DARPA、NASA、Intel,Julia 何时取得突破只是个时间问题。
主要用例:
科学计算
高性能计算
数据科学
可视化
主要竞争语言:
Python
Matlab
via:https://towardsdatascience.com/top-7-modern-programming-language-to-learn-now-156863bd1eec
雷锋网雷锋网雷锋网
些人会说语言学到最后不都差不多吗?其实可以这样讲,也可以不这样讲。虽然每种语言的表达能力大部分是重合的,只是语法表现形式不一样,但是由于历史发展的原因,每种语言形成了自己的支撑环境,所以都有其主要的适用范围。
C、C++、Python和Java四种是通用编程语言,JavaScript和PHP算是Web环境的专用编程语言。
由于其底层操作特性和历史的积累,在嵌入式领域是当之无愧的王者。
是一种支持最广泛编程范式的复杂语言,在高级语言当中,处理运行速度是最快的,大部分的游戏软件,系统都是由C++来编写的。
作为一种灵活的轻便的通用型脚本语言,使用范围比较广,从应用软件到Web开发都有它的身影,由于其解释语言的特点,比较适合轻量级或原型开发;
Java由于其跨平台可移植性,在Web开发领域大放异彩,特别是在企业级Web开发,同时由于Android系统采用Java来开发应用程序,所以也随着Android的发展而应用越发广泛;
JavaScript语言由于其是浏览器内置的脚本语言,是Web前端开发的主流,近年来由于google的V8引擎开源,出现了Node.js之类JavaScript后台开发框架,把JavaScript的应用领域扩展到了Web后台。
独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页;还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
理清不同语言间主要语法特性的差异,才能更好的在合适的领域或场景下去应用合适的编程语言,以满足我们所面对的需求。这六种语言都是从C语言发展而来,所以它们的语法都比较像C语言,下面我就主要语法特性对各个语言做一个对比。
1、常量定义
C:#define TEST 0
C++:#define TEST 0
或者
const test = 0;
Python:test = 0
C#:不支持
PHP:define('test', 1);
Java:final int test = 0;
分析:JavaScript不支持常量,C、C++都用特有的预定义宏,PHP用特殊的define语法,其它的都用定义不变变量的方式。
2、变量定义
C:int test = 0;
C++:int test = 0;
Python:test = 0
JavaScript:val test = 0;
PHP:$test = 0;
Java:int test = 0;
分析:这个最基本的都支持了。
3、函数定义
C:int test(int param){}
C++:int test(int param){}
Python:def test(param):
JavaScript:function test(param){}
PHP:function test($param){}
Java:public class test{
public int test(int param){} }
分析:这个也是最基本的了,只是Java比较特殊,不支持定义类之外的函数。
4、类定义(含继承)
C:不支持
C++:class test2: public test1{}
Python:class test2(test1):
JavaScript:function test2(){}
test2.prototype =inherit(test1.prototype){}
PHP:class test2 extend test1{}
Java:class test2 extends test1{}
分析:C由于是传统面向过程的语言不支持类,其他的都支持了,只是JavaScript的类模型比较特殊,把函数作为类来使用。
5、对象定义
C:不支持
C++:test2 obj = new test2();
Python:obj = test2()
JavaScript:var obj = new test2();
PHP:$obj = new test2();
Java:test2 obj = new test2();
分析:除了C外其它语言都是通过new一个对象。
6、数组定义
C:int a[] = {1, 2, 3};
C++:int a[] = {1, 2, 3};
Python:a = [1, 2, 3]
JavaScript:var a = [1, 2, 3];
PHP:$a = array("1", "2", "3");
Java:int a[] = {1, 2, 3};
分析:数组是语言的基本特性,都支持了,只是PHP通过类似函数调用的语法来完成。
7、条件语句
C:if (test > 0){}
else if (test < 0){}
else{}
C++:if (test > 0){}
else if (test < 0){}
else{}
Python:if test > 0:
elif test < 0:
else:
JavaScript:if (test > 0){}
else if (test < 0){}
else{}
PHP:if ($test > 0){}
elseif ($test < 0){}
else{}
Java:if (test > 0){}
else if (test < 0){}
else{}
分析:这是最基本的语句,都支持了。
8、循环语句
C:for (idx=0; idx<num; idx++){}
C++:for (idx=0; idx<num; idx++){}
Python:for idx in range(1,10):
JavaScript:for (var idx=0; idx<num; idx++){}
PHP:for ($idx=0; $idx<$num; $idx++){}
Java:for (idx=0; idx<num; idx++){}
分析:这个也是基本的语句,都支持了。
9、foreach语句
C:不支持
C++:不支持
Python:for i in a:
或者
for key in d:
d[key]
JavaScript:for(i in a){}
PHP:foreach($a as $i){}
Java:for(int i : a){}
分析:foreach算是循环语句的一个变种,在操作顺序容器的时候非常有用,可以看到C和C++不支持,其它的都语言内置支持了。
10、打印语句
C:printf("test: %d", val);
C++:cout<<"test: "<<val<<endl;
Python:print "test: "+val
JavaScript:不支持
PHP:echo "test: $val";
Java:System.out.println("test :"+val);
分析:打印算是语言所运行环境的支持库功能,除了JavaScript外都支持了,因为JavaScript主要使用来操控DOM树的,没有自己的输出窗口所以也没必要支持。
11、字符串定义
C:char test[] = {"helloworld"};
C++:String test = "helloworld";
Python:test = "helloworld"
JavaScript:var test = "helloworld";
PHP:$test = "helloworld";
Java:String test = "helloworld";
分析:这个都支持了,其中C++、Java都是用标准库来现实的。
12、字符串串接
C:test = strcat(test1, test2);
C++:test = test1 + test2;(STL库)
Python:test = test1 + test2
JavaScript:var test = test1 + test2;
PHP:$test = $test1 .= $test2;
Java:test = test1 + test2;
分析:很有用的功能,除了C是用标准库函数来实现,其它都是语言内置支持了。
13、字符串分割
C:不支持
C++:test.substr(3, 8);
Python:test[3:8]
JavaScript:test.slice(3, 5);
PHP:substr($test, 3, 5);
Java:test.substring(3, 8);
分析:常用的功能,C不支持,Python是语言内置支持,其他的都依靠库来完成。
14、字符串正则表达式
C:不支持
C++:不支持
Python:test.replace("test1", "test2")
JavaScript:test.replace(/test1/gi, "test2");
PHP:str_replace($test, "test1", "test2");
Java:test.replaceAll("test1", "test2");
分析:常用的功能,可惜C、C++不支持,其他都有标准库来支持。
15、内置容器类型
C:数组
C++:数组
顺序容器 Vector
关联容器 Pair MapSet
Python:列表/元组
字典
JavaScript:数组
对象
PHP:数组(含关联数组)
Java:数组
序列 Collection
映射表 Map
分析:C最简单只支持数组,其他都支持容器,不过主要还是顺序容器和关联容器两大类。
16、注释方式
C:/* */
C++://
Python:#
JavaScript:/* */
//
PHP:/* */
//
#
Java:/* */
//
分析:大概就/**/、//、#三种方式,各自支持情况不一。
17、多线程支持
C:支持
C++:支持
Python:支持
JavaScript:不支持
PHP:不支持
Java:支持
分析:四种通用编程语言都支持了,两种专用编程语言都不支持。
18、socket支持
C:支持
C++:支持
Python:支持
JavaScript:不支持
PHP:支持
Java:支持
分析:除了JavaScript以外都支持,这也是JavaScript的应用领域限制所决定的。
19、垃圾回收机制
C:不支持
C++:不支持
Python:支持
JavaScript:支持
PHP:支持
Java:支持
分析:这是现代语言的重要机制,C和C++不支持,其他的都支持了。
20、引入其他文件中的函数
C:export int test();
C++:export int test();
Python:from test import *
JavaScript:<script language='javascript' src="test.js"charset="utf-8"></script>
PHP:require_once('test.php');
或者
include_once('test.php');
Java:import java.util.test.*;
分析:都支持,C和C++用export,Python和Java用import,JavaScript依靠HTML脚本,PHP用自己的函数调用。
21、将字符串作为指令执行
C:不支持
C++:不支持
Python:eval("port=5060")
JavaScript:eval("port=5060;");
PHP:eval("port=5060;");
Java:Porcess proc = new ProcessBuilder(“test”).start();
分析:很有用的一个动态语言特性,C和C++都不支持,Java要类库来支持,其它的语言内置eval关键字.
C/C++资料分享:
需要的小伙伴们可以【点击下方】链接哦~
什么是编程语言?"我总会问自己这个问题,SQL是吗?Excel是吗?HTML是吗?……这些问题总在困扰着我,所以我把这些疑问整理成问卷的形式,向各位网友征集了大家的想法。
上图就是我们这次调研结果,这次调查我们一共设置了三个选项:是、否和弃权,调查对象主要有HackNews和Reddit的读者组成。
正如我们所预期的那样,绝大多数人都认同C、Java和JavaScript是编程语言,而其他选项的调查结果就有趣了很多:
Verilog:大多数人同意Verilog(硬件描述语言)是一种编程语言,他们认为即使软件的输出是硬件,但生成硬件的过程仍然是程序化的。
SQL:大多数人认为SQL是一个编程语言,但是很多人因为其缺乏完整性而提出了异议,SQL虽然没有类和循环,但其仍然有算术表达式、函数和变量。
C preprocessor:被调查者对于C preprocessor的兴趣明显要高于正则表达式,C preprocessor本质上是一个字符串替换引擎,它比正则表达式的功能更少,只用于生成C代码。但是,很多人认为是否被用来生成代码是判断是否为编程语言的关键因素。
LaTeX:咋一看,这是最接近编程语言的,LaTeX具有变量,函数和许多其他类PL功能(LaTeX是Turing-complete!),但是由于它的输出是一个文档,所以我并不看好大家会把它当做是一种编程语言。
但是令人惊讶的是,它就排在C preprocessor之后。
CSS:进入Web语言时代之后,少数的受访者也把CSS当做是一种编程语言。
TensorFlow:TensorFlow是一种具有变量、循环、编译器等的数据流语言。然而,因为它是一种特定于领域的语言,而且没有独立的语法(它通常通过Python API编程),大多数被调查者并不认为它是一种编程语言。
HTML:可能和CSS的情况一样。
JSON: JSON是一种数据规范语言,但是大多数人并不把它当做是编程语言。
Microsoft Word: GUIs不可能是编程语言!
Eclipse:看结果,很显然并不是!
对于上述列举的大家是否认为其属于编程语言呢?欢迎在下方留言评论!
*请认真填写需求信息,我们会在24小时内与您取得联系。