Re: [請益] 為什麼要有這麼多程式語言?

看板Soft_Job作者 (是妳)時間12年前 (2012/04/01 00:01), 編輯推噓6(6013)
留言19則, 7人參與, 最新討論串2/2 (看更多)
※ 引述《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 此類語言認為解決問題,就是打造一個函式。 給予一個輸入,便依照問題類型給予適當的輸出。 想當然爾,發明者跟數學家脫不了干係。 此類語言一開始最大的特色是沒有變數與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)的計算模型被奠定後。 更可以有數學根據的說明一套計算流程,或著電腦所需要的操作其實只要有限幾個。 因此,解覺問題,就是安排一套運作流程。 藉著按照特定順序給予指令,電腦執行後,便能解決問題。 而這樣的語言後來也衍生了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 -- 回憶不會消失...只會被蓋在灰塵下... 只要沒有去吹動~~一切....就可以默默淡忘... 所以....不要成為那傷人吧.... ^.^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.245.65.175

04/01 00:01, , 1F
有點傷眼,鞭小力一點。小弟還在國軍Online,變笨許多。
04/01 00:01, 1F

04/01 00:09, , 2F
推,很棒的觀點~
04/01 00:09, 2F

04/01 00:21, , 3F
我覺得你講的層次有點高過原PO想問的東西了……
04/01 00:21, 3F

04/01 00:22, , 4F
原PO基本上就是問「為什麼不能修訂原語言 而要發展新的」
04/01 00:22, 4F

04/01 00:22, , 5F
那我覺得就很簡單,legacy問題。
04/01 00:22, 5F

04/01 00:23, , 6F
或著說我花時間修訂了,我幹嘛不順便改個我愛的名字...XD
04/01 00:23, 6F

04/01 00:24, , 7F
是啊 我也覺得 其實很大一方面是人(職場政治?)的問題
04/01 00:24, 7F

04/01 00:25, , 8F
語言間的內涵有大到像是函數式vs程序式的 少之又少 XD
04/01 00:25, 8F

04/01 00:26, , 9F
如果要談的是 "為什麼公司用這個語言" 這種問題
04/01 00:26, 9F

04/01 00:27, , 10F
我還沒有職場經驗,可是可以想像人和政治問題才是主因吧
04/01 00:27, 10F

04/01 00:27, , 11F
聽說銀行業至今都還是用Fortran呀。
04/01 00:27, 11F

04/01 00:28, , 12F
也聽說一些公司一定要用微軟方案,是因為出錯有微軟頂
04/01 00:28, 12F

04/01 01:24, , 13F
其實我很好奇微軟頂過什麼了 XD
04/01 01:24, 13F

04/01 11:51, , 14F
高手~~
04/01 11:51, 14F

04/01 12:04, , 15F
『連Windows都會當機了,這個小當一下很正常啦!』
04/01 12:04, 15F

04/01 12:53, , 16F
04/01 12:53, 16F

04/04 01:30, , 17F
簡單說..編譯語言有他的不可取代處,但腳本語言有他的強處
04/04 01:30, 17F

04/04 01:32, , 18F
某些時候編譯語言當lib,搭腳本語言(ex.lua)實在是粉強大
04/04 01:32, 18F

04/04 11:47, , 19F
JIT + Bytecode 也是類似的應用....:p
04/04 11:47, 19F
文章代碼(AID): #1FTof293 (Soft_Job)
文章代碼(AID): #1FTof293 (Soft_Job)