Scripting Languages 簡介


何謂 Scripting?

命令稿語言 scripting language 是什麼? 很難給一個嚴格的定義; 不妨看看最具代表性的幾個例子: perl, python, php, tcl, guile, ruby。 另外, UNIX 上的各種 shells, MS Windows 上的 visual basic, OS/2 上的 rexx 也都可以算是 scripting languages。 用這些語言所寫的程式, 執行的方式都是以解譯 (interpreting) 為主,
執行效率也許不如 C, C++, Java, Pascal, 等以編譯 (compiling) 為主的程式, 但是在研發速度上往往比後者快上數倍。

這些語言最初的用途, 多半在整合系統既有的元件。 如果拿蓋房子做比喻, 傳統編譯語言像是建造公寓時所使用的重機械, 操作起來耗時耗力成本高, 但成品 (一整排制式的公寓) 的使用者多且單價也高; scripting language 像是佈置裝潢時所使用的工具, 操作起來成本低, 但成品 (一間公寓) 的使用者少且單價也低。 再拿大眾運輸做比喻, 傳統編譯語言像捷運 -- 成本高, 客戶多, 利潤高; scripting 像計程車 -- 成本低, 客戶少, 利潤低。

其實現在的 scripting languages 不只可以作高階的整合, 也可以寫低階的程式, 甚且有它自己的編譯器。 再加上 swig 可以替 c 語言寫的函式庫包上與各種 scripting 語言連結的外衣, 所以在許多場合 scripting 語言幾乎已可完全取代傳統的編譯語言。

為何要學 Scripting?

首先, 硬體價格日益降低, 電腦速度日益提高, 人工價格日益昂貴。 種種因素都造成程式研發的速度越來越重要; 程式執行的速度越來越不重要。

更重要的是 軟體自由化的趨勢 即將對資訊業產生很大的衝擊。 過去 C/C++/Java 就業市場需要大量的人力, 是因為寫好一套軟體之後, 不需要修改, 就可以賣給很多人, 所以 (1) 軟體執行的速度必須要快 (2) 軟體公司願意高薪僱用程式設計師 (像不像成本高/利潤高的捷運/制式公寓?) 但是現在 OO.o 開始對 MS Office 造成挑戰; 不論市場佔有率是否真的改變, MS Office 的降價勢在必行。 同樣地, 不論 Linux 是否真能取代 MS Windows, 後者的價格絕對會因前者的挑戰而降低。
試想: 如果全球最大, 壟斷最成功的微軟都被自由軟體逼著降價, 那麼賣資料庫的 Oracle, 賣開發工具的 Borland, 以及其他 靠著賣軟體賺錢 的較小公司, 又如何能不降價? 如果賣軟體不再賺錢, 那麼 C/C++/Java 的就業市場大小又怎能不向下調整? 如果寫 「大眾使用的程式」 不再好賺, 那麼程式設計師的市場自然要向 「小眾化」 「特殊化」 調整。 什麼樣的語言適合拿來寫 "使用人次少" 的軟體? 開發速度快, 執行速度慢的 scripting languages 不正是首選嗎?
我個人認為, 受到自由軟體運動的衝擊, 未來程式設計業的主要工作, 將從生產業/工業 ("大量生產千篇一律的公寓") 逐漸轉為服務業 ("針對客戶個人需求與使用習慣, 量身訂作, 裝潢出一個有特色的環境")。 當然 C/C++/Java 的就業市場不會消失, 例如嵌入式系統之類與硬體結合的工作, 一樣會需要人力。 不過就大趨勢而言, 相信 scripting 的成長空間遠遠超過這些傳統編譯式語言。

更多類似的看法, 請見 Scripting: Higher Level Programming for the 21st Century, Unix as an element of literacy, 及 Death to the Wizards! 等三篇

如何選擇適當的 scripting language?

  1. 是否支援各種不同的作業平臺? (cross-platform)
  2. 外掛模組是否容易使用與建構? (extensibility)
  3. 語言設計是否良好? (嚴謹 vs 寬鬆; 豐富 vs 易學)
  4. 上中下層市場 (人力需求/使用人口/既有模組) 是否活潑?

長遠看來, 只要是解譯器原始碼公開的語言 (例如上述各種語言) 都會有持續的發展空間與市場。 再配合搜尋/代換字串用的 regular expression, 支援各種不同語言的 GUI 程式庫 tk, 以及「將既有 C/C++ 程式庫轉換成上述各語言的外掛模組」的工具 swig, 程式設計師可以擺脫朝學夕廢的夢魘, 讓舊的知識不僅保留下來, 而且可以和新的知識發揮相乘的效果

附錄 A: 各種 open source scripting languages 的比較文章

  1. What's wrong with Perl
  2. Perl 與各種語言比較: 其實包含了 tcl, python, java, ..。 等等許多語言的比較。 不過請注意這個網頁的位址, 如果搜集的文章有點偏頗也在所難免 ..。
  3. A Perl Hacker in the Land of Python
  4. Open Source High-level Languages in Your Neighborhood (談的不完全是 scripting 語言)

附錄 B: 我對各種 scripting 語言的主觀心得

我最熟悉 perl; 學過 tcl; 曾考慮過要學 python 或 ruby。

Perl 的中心思想是: There is more than one way to do it。 同一件事有很多不同表達方式, 所以程式很好寫 (可以寫得很簡潔) 但不好讀。 語言裡面幾乎用盡各種標點符號, 而且有許多省略片段的特殊規則。 最方便的是命令列上的 -ne 或 -pe 讓你可以不必寫程式存檔就完成許多事, 特別是處理文字檔。 最大的缺點是 oop 的觀念/語法不太自然, 較難拿來寫很大的程式。 Perl 的歷史久, 既有市場大, 未來五到十年內應該是一個很好的學習選擇。

Tcl 的中心思想是: 一切都是字串。 結構簡單, 上手容易; 可是寫稍大一點的程式就會發覺它的表達力較弱。

Python 之於 perl, 有點像是 pascal 之於 C。 強調易讀易學易維護。 一方面提供很好的 oop 語法, 不怕拿來寫大型, 非常需要結構化的程式; 另一方面對初學者很友善, 光是用 procedural 傳統寫法就已經可以做很多有用的事, 不輸 perl 太多。 但如果要從 minimalist 及 orthogonality 的角度來看, 它還是差強人意。 例如 tuple 與 list 的功能重疊, 函數關鍵字參數及變動個數參數的語法, 還有列印用的 %, 轉字串用的 `, 設定
dictionary literal 用的 { } 這些標點符號其實都可以用更 "正交" 的既有符號來表達。

Ruby 的中心思想是: the principle of least surprise。 技術上似乎涵蓋了 perl 多數的優點, 並且是完整的 oop 語言。 非技術面的最重要因素是太年輕, 所以社群較小 。

相關網址

  1. http://www.osnews.com/story.php?news_id=7038
  2. http://sdtimes.com/news/083/story5.htm
  3. http://www.softpanorama.org/Scripting/index.php
  4. http://home.pacbell.net/ouster/scripting.html
  5. 在 google 上面用 scripting languages future 搜尋

Scripting Languages 簡介的更多相关文章

  1. Scripting Languages

    Computer Science An Overview _J. Glenn Brookshear _11th Edition A subset of the imperative programmi ...

  2. Source Tree 簡介

    Table of Contents 1. 什麼是 Source Tree ? 1.1. 下載 1.2. SourceTree 介面簡介 1.3. git 指令/狀態圖 2. SourceTrees 超 ...

  3. 一起來玩鳥 Starling Framework 簡介

    開場 Starling Framework是一套Flash 2D遊戲開發"工具",是使用Flash最新的Stage3D API建構出來的一套Framework.最大優點在於使用GP ...

  4. SQL Server 的 Statistics 簡介

    當你要清空「資料表(table)」,或倒入大量「資料(data;record)」,或公司「資料庫(database)」改用新版本要資料大搬家…等情形,不只是要重建「索引(index)」,還應要重建或更 ...

  5. 網站SSL加密原理簡介(2张图,握手有9个步骤,解释的很清楚)

    Secure Socket Layer說明 SSL是Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸.最早是Netscape公司所提出,SSL的目 ...

  6. COB (Chip On Board) 製程介紹/簡介/注意事項 I

    COB (Chip On Board)在電子製造業並不是一項新鮮的技術,但最近我卻常常被問到相關的問題及資料索取.也許真的是產品越來越小了,而較進階的技術又太貴,所以又有人回過頭來考慮COB的製程. ...

  7. Vue簡介

    vue使用由下向上的增量開發模型: vue是javascript的漸進框架: vue的目標是盡量使用簡單的API實現響應的數據綁定和組合的視圖組件.

  8. jQuery 簡介

    jQuery:是一個js庫,可以極大地簡化編程,“寫得少做得多”. jquery的作用: 挑選元素.操作屬性.事件函數.動畫和效果.ajax: jQuery庫:google和microsoft都支持, ...

  9. 第一章 Linux內核簡介

    1. Linux是類Unix系統,但他不是Unix. 儘管Linux借鑑了Unix的許多設計並且實現了Unix的API(由Posix標準和其他Single Unix Specification定義的) ...

随机推荐

  1. C#跨进程读取listview控件中的数据

    http://www.cnblogs.com/Charltsing/p/slv32.html 欢迎交流:QQ564955427 读取标准的32位listview控件中的数据,网上已经有很多代码了.今天 ...

  2. Maven安装与环境配置(Windows)

    1.下载安装包 在Maven官网下载最新版的安装包:http://maven.apache.org/download.cgi 2.解压安装包 3.配置Maven环境变量 配置M2_HOME环境变量,指 ...

  3. 【学习总结】 小白CS成长之路

    2017-9-3:入坑. 理想:敲着代码唱着歌. 现实:骨感. Step 1: 认识CS: CS大体可以分成以下几个大领域:硬件.系统.软件.网络.计算理论.计算方法. 硬 件 ---- 数字电路.集 ...

  4. JEECG 单点登录 SSO

    jeecg中用户登录的唯一性-CSDN问答https://ask.csdn.net/questions/656639 JEECG 集成KiSSO单点登录实现统一身份认证 - zhangdaiscott ...

  5. js 深度复制deepClone

    function isObject(obj) { return typeof obj === 'object' && obj != null; } const deepClone =( ...

  6. Java 简单的登录验证码

    1 验证码的作用 验证码是为了区分人与机器,如果没有验证码机制,web网站或者应用会遇到很多问题,具体如下: ① 网站容易被暴力登录攻破密码,可以制作一个自动程序不断的尝试登录,密码很容易被破解,系统 ...

  7. 面试题(校招java)

    1:linux线程和进程的区别? 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程 ...

  8. jQuery EasyUI 选项卡面板tabs使用实例精讲

    1. 对选项卡面板区域 div 设置 class=”easyui-tabs” 2. 对选项卡面板区域添加多个 div,每个 div 就是一个选项卡(每个面板一定设置 title) 3. 设置面板 fi ...

  9. python爬虫之git的使用

    一.简单认识: 1.初始化文件夹为版本控制文件夹,首先建立一个文件夹,进入这个文件夹以后输入git init初始化这个文件夹. 2.Git几种位置概念 1.本地代码:本地更改完代码以后,虽然是存放在g ...

  10. 常用Mac快捷键

    1.复制Cmd + C 粘贴Cmd + C —-> Cmd + V 剪切Cmd + C —-> Cmd + Opt + V 2.查看隐藏文件 Cmd + shift + . 3. 货币符号 ...