第四代編程語言,或者說是第四階段的編程語言,這是我本身理解定義的一個概念,請勿告訴我說4gl是SQL。程序員
我的認爲,對程序員而言,編程語言已經發展到第四個階段了。數據庫
第一階段,彙編語言。在此以前,還有機器語言,即0101010101010這樣的二進制代碼。對程序員來講,機器語言無疑是天書,徹底不可接受。而彙編用針對指令的符號代替二進制代碼,對程序員來講無疑的莫大的福音。可是,咱們直接去操做寄存器,須要瞭解不一樣硬件平臺,比較抽象,相對於人們平常生活描述方式差之極遠。編程
第二階段,以C爲表明,它給咱們抽象一些底層的東西,咱們大部分時間是關心業務邏輯,而不要了解咱們當前的硬件。這類語言充分接近人們生活描述習慣,比較容易理解和學習。可是程序員編寫它們,除了業務邏輯,咱們還須要進行內存管理,這無疑增長了開發負擔。網絡
第三階段,以JAVA爲表明,它爲咱們進一步抽象底層,有了類、接口等OO概念,程序員也無需管理內存。它基本上是人們生活的描述,程序員很容易學習和編寫本身的業務邏輯。多線程
第四階段,隨着CPU性能的提高,計算速度愈來愈快,可是I/O性能卻沒有成比例的提高,大部分的時間耗在I/O等待上(網絡I/O和磁盤I/O),CPU沒有充分利用起來。第三代語言的解決辦法是多進程和多線程,然而不管是多進程仍是多線程,須要消耗額外的資源,好比資源消耗在線程同步、上下文切換等上面。爲了解決這些問題,我的定義的第四代語言應運而生。他們充分利用CPU的性能實現並行、非I/O阻塞的計算,而這些特性是他們天生就有的,不須要程序員關心的。架構
Go、Lua、Node.js便是我認爲的第四代的編程語言。併發
Go經過goroutine來實現多併發,儘管goroutine的底層實現是線程,但他經過封裝,程序員不須要關心這些線程,並且是輕量級的。編程語言
Node.js採用了一個稱爲「事件循環(event loop)」的架構,舉個例子吧,咱們小學學過一篇華羅庚先生的《統籌方法》的課文,告訴咱們要想提升效率,主要是把工序安排好。Node.js就是這樣的,採用一系列「非阻塞」庫來支持事件循環的方式。本質上就是爲文件系統、數據庫之類的資源提供接口。向文件系統發送一個請求時,無需等待硬盤(尋址並檢索文件),硬盤準備好的時候非阻塞接口會通知Node.js。oop
Lua一樣是非I/O阻塞的,它裏面有個協程的東西。關於協程的概念,能夠看看這篇文章http://www.douban.com/note/185796525/性能
從以上的分析來看,程序語言一代比一代簡單易用,它爲程序員封裝了不少東西,程序員只需寫具體的業務邏輯代碼就能夠了。
我的意見,歡迎探討。