回到未來:Smalltalk 編程系統

来源:https://www.cnblogs.com/hexiangyu/archive/2020/01/12/back-to-the-future-with-smalltalk.html

Smalltalk 是19世紀70年代由 Alan Kay 設計的,第一個以面向對象(Object-Orientation)為主要範式的編程語言 1。Smalltalk 具有大量首創的特性,深刻影響了其之後的編程語言、開發環境和軟體過程。 ...


 

 

Smalltalk 是19世紀70年代由 Alan Kay 設計的,第一個以面向對象(Object-Orientation)為主要範式的編程語言 1。Smalltalk 具有大量首創的特性,深刻影響了其之後的編程語言、開發環境和軟體過程。

 

由 Smalltalk 開始的面向對象的設計思想影響了後來出現的 C++,Objective-C,Python,Java,Ruby,C# 等眾多編程語言,甚至在以函數式著稱的 Lisp 和邏輯編程語言 Prolog 當中也演化出了功能強大的對象系統23。在所有編程範式當中,面向對象的編程範式毫無疑問取得了突出的成功。究其原因,一方面在於面向對象的設計一般易於描述和理解,而針對對象系統的建模、分析和可視化工具也得到長足的發展;其次,面向對象的諸多實踐4模塊化(Modulariry)復用(Reusability)等優化了軟體行業的經濟效益(Economic benefits)5。這些原因使得面向對象的設計方法和軟體系統得到了從個人到企業的廣泛採用(Adoption)。

面向對象的核心思想之一是封裝(Encapsulation),與之類似的一個概念是閉包(Closure),後者在提供一階函數(First-class function)的編程語言內普遍存在。在對閉包與對象的比較上有很多精彩的爭論67,將閉包作為底層機制來實現對象系統在函數式編程語言中屢見不鮮89,而早期的面向對象的編程語言也在發展過程中不斷吸收函數式編程的諸多要素。值得一提的是,Smalltalk 從誕生之初就有塊(Block)的概念,其本質就是一種語法閉包,這使得在 Smalltalk 中可以優雅地實現需要用到類似高階函數(Higher-order function)的功能。

左:Smalltalk-76 右:Pharo

Smalltalk 起源於施樂帕羅奧多研究中心(Xerox PARC)的一項研究項目,旨在讓人們更高效、更愉快地使用電腦系統。在這個願景下,Smalltalk 使用一套互動式圖形界面(Interactive graphical interface)作為其開發環境,它包含系統瀏覽器(System browser)、調試器(Debugger)、檢視器(Inspector)、分析器(Profiler)等等一系列圖形化的開發工具10。這也導致了 Smalltalk 的另一個重要貢獻——推動了圖形用戶界面的發展,並且催生出了現在所謂的集成開發環境(Integrated development environment, IDE)。與今天的集成開發環境不同的是,Smalltalk 的開發環境完全由其系統自身的功能來構建,開發人員可以接觸和定製開發環境的方方面面,甚至把它作為最終軟體產品的一部分用來交付11

GNU Dr. Geo 是一款幾何軟體,它直接基於 Pharo 的圖形界面進行開發

得益於元類(Metaclass)和反射(Reflection)機制的存在,相較於其他編程語言中的對象系統,Smalltalk 具有十分出色的元編程(Metaprogramming)能力。由於“一切皆對象”的設計思想,在 Smalltalk 中不僅實例(Instance)具有動態特征,類(Class)和元類也可以被動態地創建和修改,這使得程式的行為可以在多個不同的層面得到調控。元類被廣泛應用於對象的持久化存儲(Object persistence)和對象關係映射(Object-relational mapping, ORM)等方面,它為對象系統提供了在用戶層面(User-space)進行拓展的能力,為對象系統升級和演化提供了一個視窗,一些比較前沿的編程範式如 Context-oriented programming 和 Aspect-oriented programming 也可以通過元類成為現有對象系統的擴展12

Yesterday's Computer of Tomorrow: The Xerox Alto │Smalltalk-76 Demo

Daniel H. H. Ingalls’ demonstration of Smalltalk-76 on the Xerox Alto
https://www.youtube.com/watch?v=NqKyHEJe9_w

Smalltalk 是少數使用鏡像(Image)的編程系統之一。與基於鏡像的開發方式相對的是基於源代碼(Source-based)的開發方式,這也是今天絕大部分編程系統所採用的開發方式。在基於鏡像的開發過程中,源代碼的作用只是用來改變鏡像的狀態,在開發階段完成後,鏡像作為一段記憶體區域被持久化轉存(Dump)到鏡像文件(Image file)中。到了部署階段,鏡像文件再被恢復到記憶體當中,然後以轉存之前的狀態繼續運行。與基於源代碼的方式相比,一個重要的優勢在於開發人員可以將任意程式狀態封裝進最終交付的鏡像中,而前者必須經歷一個自舉(Bootstrap)過程來達到特定狀態,或者將這些狀態定位於外部資源。基於鏡像的編程系統通常具有天然的熱部署(Hot deployment)能力並且非常看重運行時環境(Run time)的健壯性,這使得他們成為開髮長運行(Long-running)的應用程式的理想選擇。

時至今日,以 Pharo 為代表的新興 Smalltalk 平臺一直處在高速的發展之中,很多早期的 Smalltalk 項目得到維護和升級,Smalltalk 編程系統的優勢也得到了發揮和繼承13。舉例來說,Moose 構建了一個強大的可視化數據分析平臺;Glamorous Toolkit 將 Smalltalk 圖形開發環境更進一步,提出了 “moldable development environment” 的概念,如果你認為可視化編程(Visual programming)代表了未來的方向,那麼 Smalltalk 始終走在它的前列。

 文章鏈接:https://xh.coobii.com/2019/06/16/back-to-the-future-with-smalltalk/

  1. 在 Smalltalk 之前有 Simula首次實現了面向對象中的關鍵思想,包括類(Class)、對象(Object)、繼承(Inheritance)和動態綁定(Dynamic binding)等,Smalltalk 的貢獻在於其介紹了一種新的設計模式。”Though it has noble ancestors indeed, Smalltalk’s contribution is a new design paradigm—which I called object-oriented—for attacking large problems of the professional programmer, and making small ones possible for the novice user.” (Alan Kay, The Early History Of Smalltalk)
  2. Common Lisp 在早期有 LOOPSFlavors,後來演化成標準化的 Common Lisp Object System(CLOS)
  3. Logtalk 為多種主流 Prolog 實現提供了面向對象的語言擴展。此外在一些商業 Prolog 實現如 SICStus 中也提供對象系統。
  4. 在這方面比較有影響力的一本書是 Object-Oriented Software Construction
  5. Smalltalk-80: The Language and It’s Implementation 一書中稱 Smalltalk 對於管理軟體複雜度(Managing complexity)所採用的方法是其主要貢獻。
  6. “A closure is a poor man’s object; an object is a poor man’s closure” https://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html
  7. Closures And Objects Are Equivalent http://wiki.c2.com/?ClosuresAndObjectsAreEquivalent
  8. Modularity, Objects, and State (Structure and Interpretation of Computer Programs, Chapter 3) https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-19.html#%_chap_3
  9. FP, OO and relations. Does anyone trump the others? http://okmij.org/ftp/Scheme/oop-in-fp.txt
  10. Smalltalk 提供的圖形化開發工具遠不止這些,值得一提的還有代碼倉庫管理工具 Iceberg,版本管理系統 Monticello 等。
  11. 這方面的一個例子是 GNU Dr. Geo,一款基於 Pharo 的圖形界面之上的幾何軟體。
  12. 一個例子是 ContextL,它基於 Common Lisp 對象系統的元類功能實現了一套 Context-oriented programming 擴展。
  13. Awesome Pharo 是一個列表,分類列舉了大量與 Pharo 相關的項目。

您的分享是我們最大的動力!

更多相關文章
  • 之前租用的功能變數名稱空間經常被服務商莫名其妙的搞掛了,不是訪問不了就是資料庫連接出問題,一氣之下功能變數名稱和空間都不用了。 由於功能變數名稱沒有保留下來,導致了一個比較尷尬的事情。之前寫的文章、代碼中有地方引用了以前的功能變數名稱,這些文章被一些朋友轉走了,導致大家訪問文章里的網址會跳轉到莫名其妙的頁面,給朋友們造成了一些困擾 ...
  • $("#pic").click(function(){ location.href='newpage.html'; }); 上面的相當於<a href="newpage.html" target="_self"><img src="img.jpg" /></a> $("#pic").click(fu ...
  • ![](https://img2018.cnblogs.com/blog/1920879/202001/1920879-20200112203037860-1294141842.png) ...
  • 這是我第一次寫博客,現如今我得了病,時間也就愈發多了。遂決定開始我的寫博客計劃,以此來使黑暗中的人喝到一劑打發時光的良藥。 大體學完HTML後,接下來就要學習css,css對於我自己來講就是對HTML進一步的處理。 css樣式分為外鏈樣式 簡單地說就是再創建一個css文件。創建好了以後呢,再在<he ...
  • prototype見上一節,馬克-to-win:prototype作用就是給某個類增加一個實例方法。例 3.6.2<head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/></head><script> /* ...
  • Layui彈層layer中select沒CSS樣式或渲染失效的解決方法 ...
  • 米娜桑,哦哈喲~ 個人製作,該文章主要講解最近基於 "uni app" 框架編寫的集圖文拖拽等多方位編輯、油墨電子簽名、開放式海報於一體的小程式的製作思路和實現代碼。 目錄 1、完整源碼鏈接 2、實現思路 3、核心代碼 3 1、圖文多方位編輯 3 2、油墨電子簽名 3 3、開放式海報 3 4、小結 ...
  • 簡單工廠模式 定義:封裝改變,既然要封裝改變,自然也就要找到需要更改的代碼,然後將需要更改的代碼用類來封裝,這樣的思路就是我們簡單工廠模式的實現方式了 下麵我們通過一則小故事來簡述一下我們在項目中為什麼要使用簡單工廠模式 背景 橙子同學正在興高采烈的逛著博客園,學習著大佬的一些操作,突然發現微信閃動 ...
一周排行
  • 這是一個個人敘述自己建設博客的帖子,既然是第一篇那肯定是不牽扯代碼了,主要講一下大體的東西,微軟最新的web框架應該就數asp.net core 3.1了這是一個長期支持版,而且是跨平臺又開源版本,所以大家可以去GitHub上找源碼,也可以研究源碼是怎麼寫的。 大過年的偏偏出現這個疫情,所以只能窩屋 ...
  • 上一篇帖子講了用了哪些技術,這個帖子就先介紹介紹api項目吧,項目就是一個普通的webapi項目,賬戶系統用的identity ,什麼是identity呢? 其實就是官方封裝好的一系列的可以用來操作資料庫的類,對用戶信息進行增刪改查。主要牽扯的類有如下幾個: UserManager SignInMa ...
  • 1、添加php的yum軟體倉庫 sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 2、安裝php相關軟體,執行過程中全部選擇yes即可 sudo yum install php71w.x86_64 php71w-cli.x86_ ...
  • 預設情況下,CentOS6 64 bit 已經早已不支持php5.2.x ,但是某些php程式還需要zend optimizer支持,怎麼辦呢?目前大部分的yum repos 都已經不支持直接安裝php5.2了,怎麼在CentOS6.x/6.5/6.4/6.3/6.2/7.x 64位安裝php5.2 ...
  • Dart Bool類型和其他語言類似,比較簡單 其特點有: 1.使用 bool 表示布爾類型 2.布爾值只有 true 和 false 3.布爾類型bool預設值是null bool isTrue = true; bool isFalse = false; bool defaultBool ; pr ...
  • 今天在資料庫中生成數據表,生成遷移文件時報了一堆錯。 最重要的就是TypeError: __init__() missing 1 required positional argument: 'on_delete', 他說我缺少一個必要的參數。 代碼如下: 關聯外鍵 sgrade = models.F ...
  • —— 終端中的編輯器 01. 簡介 在工作中,要對 伺服器 上的文件進行 簡單 的修改,可以使用 遠程登錄到伺服器上,並且使用 進行快速的編輯即可 常見需要修改的文件包括: 源程式 配置文件 ,例如 的配置文件 在沒有圖形界面的環境下,要編輯文件, 是最佳選擇! 每一個要使用 Linux 的程式員, ...
  • 認識 Python 人生苦短,我用 Python —— Life is short, you need Python 01. Python 的起源 Python 的創始人為吉多·範羅蘇姆(Guido van Rossum) 1. 1989 年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心 ...
  • 01. 第一個 程式 1.1 Python 源程式的基本概念 1. Python 源程式就是 一個特殊格式的文本文件 ,可以 使用任意文本編輯軟體 做 的開發 2. Python 程式的 文件擴展名 通常都是 1.2 演練步驟 在桌面下,新建 目錄 在 目錄下新建 文件 使用 gedit 編輯 並且 ...
  • PyCharm 的官方網站地址是:https://www.jetbrains.com/pycharm/ 01. 恢復 PyCharm 的初始設置 的 配置信息 是保存在 用戶家目錄下 的 目錄下的, 表示當前使用的 的版本號 如果要恢復 的初始設置,可以按照以下步驟進行: 1. 關閉正在運行的 2. ...
x