Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
片由 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小時內與您取得聯系。