成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編程語言的進化

開發 開發工具
早上讀到了一篇文章《Lisp的永恒之道》 這一篇文章解決了我一直以來對Lisp編程語言的疑惑,加深了對DSL(領域編程語言),同時對編程語言的理解也越來越深入。寫一篇文章的目的就是從主要編程語言的進化來看看編程語言發展的過程以及背后的設計哲學,當然,這個只是我自己的認識,如果有不足之處,請博友指教。

早上讀到了一篇文章《Lisp的永恒之道》 這一篇文章解決了我一直以來對Lisp編程語言的疑惑,加深了對DSL(領域編程語言),同時對編程語言的理解也越來越深入。寫一篇文章的目的就是從主要編程語言的進化來看看編程語言發展的過程以及背后的設計哲學,當然,這個只是我自己的認識,如果有不足之處,請博友指教。

機器語言

最早的編程語言是卡帶,也就是機器語言,這種語言沒有語義和語法,操作符和數據混合在一起,偏向于具體的設備,依賴覺得硬件。

匯編語言

隨后,匯編語言就出現了,匯編語言定義了基本的語法結構,定義了操作符和數據類型,但是匯編語言還是針對特定的硬件編程,比如cpu,我記得大學的時候學習的就是8086匯編語言程序設計,這個就是針對intel 8086cpu的編程語言而設計,如果cpu是80386,那么就必須在對80386的cpu進行編程,可移植性非常差。如果針對每一個cpu就要重新寫整一套代碼,那么將會是多么復雜的事情,困難度不可想象。

C語言

對于匯編語言的問題,主要要解決跨硬件平臺,那么怎么解決這個問題了,對啦,添加一個抽象層,這個就是硬件抽象層,它隱藏了特定平臺的硬件接口細節,為操作系統提供虛擬硬件平臺,使其具有硬件無關性,可在多種平臺上進行移植。相當于提供統一的api 比如C語言printf函數,打印字符串,由于每個終端設備的類型和型號都不一樣,需要在適配到每個終端設備上,那么通過一個終端虛擬硬件,由它進行各個終端差異的屏蔽,提供統一的對外接口,有點類似適配器模式。用C語言寫出來的程序。雖然這樣簡化了操作硬件的這種復雜行,但是直接寫操作虛擬硬件的代碼也是很苦逼的事情,這樣就出現了系統內核,用來提供更高一層的抽象,所以C語言操作硬件的函數都會調用系統內核,由系統內核再去調用具體的虛擬終端設備。這個就和特定的操作系統有關了,C語言編譯器編譯出來的代碼就和操作系統進行關聯。所以C語言程序很難做到跨操作系統平臺,因為每個操作系統都提供私有函數,并且編譯出來的二進制代碼也是不一樣的,跨平臺基本不可能。

高級語言:java,.net

為了解決C語言的跨平臺的問題,可以考慮再在操作系統這一層添加一個抽象。那么就出現了java和.net這樣的編程語言。java通過實現一個jvm虛擬機,屏蔽了各個操作系統的差異,同時定義了一個標準的目標代碼(class文件),只要class文件滿足jcp定義的規范,就可以被jvm執行。這就解決了兩個問題,目標代碼格式固定,這個平臺都一樣,函數調用都一樣,都和jvm打交道。這樣就實現了跨越操作系統平臺。但是還存在一個問題,jvm的實現只能夠獲取各個操作系統公共的部分進行抽象,但是有一些操作系統私有的個性化是無法屏蔽的,只能通過開通一個小后門,讓開發者能夠開發基于操作系統的native實現。

DSL領域編程語言

好了,編程語言發展到這一層,已經非常高級了,對于開發者來說,已經夠簡單了。不需要硬件只是,不需要懂操作系統知識。如果在繼續發展會怎么樣,對啦,是不是可以跨越編程語言。還有,編程語言一般都是語法和語義綁定在一起的,比如 int c = a + b 這一條賦值語句,我們知道要把 a 和 b相加 賦予 c ,相當于知道語法,就知道語義了,那么是不是可以把語義 和 語法 分開 ?

語義:

  1. define c = add(b,c)  

或者

  1. <opteration name="add" result="c"><paramparam="a,b"/></opteration> 

那么轉化為 java語言 就是 int c = a + b; 轉化為javasrpit var c = a + b 等等

相當于what 和 how 分開,就是說 我要做什么 和 我怎么做 這一層在區分開來。目前我們使用的比較多的就是maven

maven通過自己的一套語義,定義了整個構建的過程。我只定義了怎么做,通過xml這一套語法來定義,但是具體怎么做我通過一個解釋層來實現,同時也可以用不同的語言,可能在java平臺上,我用java語言來實現,在.net平臺,我用.net來實現。

其中大名頂頂的 facebook的 Thrift框架就是這種設計思想,通過自己定義的一套語言,定了一個分布式服務框架,通過自己的解釋器,把自己定義的解釋成為不同的語言實現。

但是由于領域語言的語義定義的規則和模式都不一樣,對于每個不同的領域,都有自己的DSL,比如是ant,我就必須學習一下整個ant的規則,比如maven也需要重新開始學習。

目前很多語言轉化服務,比如目前把java寫的語言轉化為obejct-c和windows的云服務,原理和上面類似,應該都是先轉化為一套中間語言,然后轉化成為各個實際的特性語言。

未來想象

隨著DSL語言的快速發展,我在想 未來是不是會把DSL也統一起來,定義一套通用的規則和規范,找出每個領域特性部分,進行抽象,形成一種統一的開發語言。比如web編程,只需要web方面的DSL語言就可以了,不需要在學習python,php,jsp,asp等等,在數據庫操作方面也一樣,不需要在了解各個平臺具體連接數據庫的方式以及代碼實現,用統一的數據操作DSL就可以了。這個想法比較大,也是扯扯淡的,不過還是希望未來的某一天,編程語言會統一,不過現在越來越有這個趨勢了,各個語言都在添加其他語言的特性,增強自己的特性,以后各個語言都變的越來越類似,功能也越來越雷同,***需要考慮的是語言性能問題,但是隨著硬件的發展,除非某一個特定的領域,大部分應用在語言層面的性能應該會忽略。

通過編程語言的進化,起始發現背后的思想都是一樣的,原話我忘記是怎么說的,大概意思是:任何兩個系統之間的復雜性,都可以通過添加一個抽象層要屏蔽。整個編程語言的進化也都說明了這個問題。

原文鏈接:http://www.cnblogs.com/aigongsi/archive/2012/09/28/2706604.html

責任編輯:林師授 來源: 博客園
相關推薦

2011-01-04 17:08:10

匯編語言

2010-03-19 09:39:17

Python編程語言

2021-05-28 05:34:06

Golang語言編程

2021-01-13 10:40:42

編程語言PLCGraph

2010-01-21 16:08:26

C++語言

2018-11-12 12:50:30

C語言編程匯編

2018-05-14 12:30:37

數據驅動算法優化

2020-10-13 06:34:15

編程語言IDE

2021-08-10 19:15:17

語言編程應用

2011-10-21 10:54:04

編程語言

2015-11-02 17:25:23

Elixir編程語言未來

2020-10-23 18:40:56

編程語言HTML程序員

2024-02-04 15:58:53

C++ 17編程代碼

2021-08-23 15:05:21

PyretJavaScript編程

2010-03-19 18:09:35

Java編程語言

2013-07-29 10:46:51

編程語言

2009-05-20 14:47:18

學習程序員編程語言

2021-11-09 23:15:20

編程語言本質

2012-02-13 10:03:31

編程開發

2014-02-04 19:44:23

編程語言開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人av| 亚洲一区二区三区在线 | 国产精品免费一区二区三区四区 | 在线一区| 精品91久久 | 久久久这里都是精品 | 天堂色区 | 天天爽一爽 | 日韩中文字幕 | 亚洲国产精品日本 | 91精品国产91久久久久游泳池 | 久久综合久 | www.一级片 | 国产精品久久久久久久久久 | 亚洲欧美日韩中文在线 | 女同久久| 美女爽到呻吟久久久久 | av无遮挡 | 中文字幕一区二区三区四区五区 | 日韩中文字幕 | 国产成在线观看免费视频 | 欧美一级大片免费观看 | 黑人巨大精品欧美一区二区免费 | 欧美日韩不卡合集视频 | 国产精品日韩在线观看一区二区 | 69电影网 | 欧美一区二区在线 | 久久久精选 | 午夜日韩 | 精品国产一级 | 日韩国产一区二区三区 | av在线天天 | 国产人成精品一区二区三 | 国产精品国产自产拍高清 | 欧美lesbianxxxxhd视频社区 | 日日日操 | 精品福利在线 | 99久久婷婷国产综合精品 | 欧美久久久网站 | 欧美偷偷 | 午夜精品|