作者: SansWord (是妳) 看板: Soft_Job
標題: Re: [請益] 為什麼要有這麼多程式語言?
時間: Sun Apr 1 00:01:02 2012
※ 引述《northsoft (北方軟件)》之銘言:
: 如標題
: 我一直很好奇
: 為什麼有 PHP, Perl, Ruby 這麼多程式語言
: 如果Ruby是為了OO
: 為什麼不修訂PHP標準就好
: 又為什麼要有C, C++, Java, C#
: 如果說 Java是為了跨平台不用重編譯
: 那又為什麼Sun不做各平台的C++ compiler以及C++ run time environment就好
: 有了C++, 又何必保留C的存在? 重新定義C的標準不就好了, 何必要共存?
: 有沒有人可以分享一下這些神秘的歷史阿
引用Alan Perlis 的名言:
A programming language that doesn't change the way you think is not
worth learning.
一個不會改變你思考方式的程式語言並不值得被學習。
這麼多程式語言,反應了這個語言發明者對於 "如何解決問題" 的思考方式。
在此介紹幾種不同語言類型:
但是小弟才疏學淺,這樣的介紹稱不上是 "歷史", 至少時間序會很混亂。
我只就我所認知的分類做些介紹,希望能引出真正的大物來好好幫我們上一堂
歷史課。
A. 依解題邏輯分類:
1. Functional Language
代表性語言:Haskell, OCaml, Standard ML, Scheme
此類語言認為 [1;33;40m解決問題,就是打造一個函式。
給予一個輸入,便依照問題類型給予適當的輸出。
想當然爾,發明者跟數學家脫不了干係。
此類語言一開始最大的特色是沒有變數與Assignment
但是後來為了使用方便還是會有些妥協。
但是有趣的是,在沒有Assignment的情況下,仍然能利用語言特性
打造類似變數功能的Environment. 也因此能更嚴密的思考在語言執行中
底層需要處理哪些事情。
小弟大學時就用過Haskell當成Compiler刻過Mini-C Compiler,並且實現了Pointer 與
Object-Orineted的相關功能。
只能說,自斷雙手,才會發現其他東西也能長出手來呀。
2. Processual Language
代表性語言:Machine Code, Assembly Language, C,
我認定這類語言是從Machine Code -> Assembly Language -> High Class Language
一路發展下來。
一開始的電子計算想的是一套程序。
而自從圖靈機(Turing Machine)的計算模型被奠定後。
更可以有數學根據的說明一套計算流程,或著電腦所需要的操作其實只要有限幾個。
因此, [1;33;40m解覺問題,就是安排一套運作流程。
藉著按照特定順序給予指令,電腦執行後,便能解決問題。
而這樣的語言後來也衍生了Object-Oriented, Aspect-Oriented, Feature-Oriented
等思考面向,但是在我看來,都脫不了一開始 "安排一套運作流程" 的範疇。
只是運作的流程從一開始操作記憶體位置,到操作變數、物件、
甚至能細分流程的各面向,或個功能。實際上我覺得都還是類似的。
可是,如果以這樣的分類方式,大概無法說明原Po一開始詢問的各種語言
照原Po所提的幾種語言,我想提供另外一種分類的思考
1. 按照問題領域,也就是所謂的Domain-Specific Language.
為了解決各樣問題,雖然所有問題都可以用一套語言來寫啦,也就是說
其實我們的鍵盤只需要 0, 1兩個數字。
http://secretgeek.net/image/real-programmers-code-in-binary.jpg
可是軟體業也是生產業,況且輪子這玩意兒造一次就夠了。
針對不同領域的問題,自然使用特定語言才能更有效率的描述該問題。
你的確可以用C, 不使用HTML來輸出類似網頁的東西。
也可以不要用SQL, 用不同方式管理,操作資料庫。
可是針對特定領域的語言總是能比較有效的解決該類問題。這類語言很多很多。
2. 為了特定原因:
為了跨平台,Java 發展出了Virtural Machine 與 ByteCode
或著不想要Compile或著環境不合適而有了Scirpting Language (Javascript, Ruby)
為了Javascript太難以掌握而出現功能,語法較限縮的CoffeeScript
為了讓網頁的外觀與資料分離而出現的CSS,
為了彌補CSS的不足而出現能有變數、函式的的SASS
覺得Java 太囉嗦而出現的Ruby
語言的發展仍然蓬勃的進行,每個語言的出生,有可能是為了$$$
(我絕對不是說抄很大的C#)
也可能是為了某語言真的出現了瓶頸。
當年Assembly 出現的時候,人們說終於可以Automaticly Programming.
因為不再需要記得每種CPU的goto是怎樣的0, 1 組合,
而只要使用 "goto" 這四個字母, 你看,這是多麼精巧。
語言只會繼續往上疊加,為了人們思考方式的進步而繼續為大家服務著。
http://www.bobcongdon.net/images/tower-of-babel.jpg
參考資料:
http://en.wikipedia.org/wiki/History_of_programming_languages
--
[1;35m回憶 [37m不會消失...只會被蓋在灰塵下...
只要沒有 [36m風 [37m去吹動~~一切....就可以 [;32m默默淡忘...
所以....不要成為那 [31m傷人 [37m的 [32m風 [37m吧.... ^.^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.245.65.175
→ SansWord:有點傷眼,鞭小力一點。小弟還在國軍Online,變笨許多。 04/01 00:01
推 robinliao:推,很棒的觀點~ 04/01 00:09
推 raincole:我覺得你講的層次有點高過原PO想問的東西了…… 04/01 00:21
→ raincole:原PO基本上就是問「為什麼不能修訂原語言 而要發展新的」 04/01 00:22
→ SansWord:那我覺得就很簡單,legacy問題。 04/01 00:22
→ SansWord:或著說我花時間修訂了,我幹嘛不順便改個我愛的名字...XD 04/01 00:23
→ raincole:是啊 我也覺得 其實很大一方面是人(職場政治?)的問題 04/01 00:24
→ raincole:語言間的內涵有大到像是函數式vs程序式的 少之又少 XD 04/01 00:25
→ SansWord:如果要談的是 "為什麼公司用這個語言" 這種問題 04/01 00:26
→ SansWord:我還沒有職場經驗,可是可以想像人和政治問題才是主因吧 04/01 00:27
→ SansWord:聽說銀行業至今都還是用Fortran呀。 04/01 00:27
→ SansWord:也聽說一些公司一定要用微軟方案,是因為出錯有微軟頂 04/01 00:28
推 Blueshiva:其實我很好奇微軟頂過什麼了 XD 04/01 01:24
推 northsoft:高手~~ 04/01 11:51
→ SansWord:『連Windows都會當機了,這個小當一下很正常啦!』 04/01 12:04
推 guestone:推 04/01 12:53
沒有留言:
張貼留言
您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.