回到未來: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、小結 ...
  • 簡單工廠模式 定義:封裝改變,既然要封裝改變,自然也就要找到需要更改的代碼,然後將需要更改的代碼用類來封裝,這樣的思路就是我們簡單工廠模式的實現方式了 下麵我們通過一則小故事來簡述一下我們在項目中為什麼要使用簡單工廠模式 背景 橙子同學正在興高采烈的逛著博客園,學習著大佬的一些操作,突然發現微信閃動 ...
一周排行
  • 比如要拆分“呵呵呵90909086676喝喝999”,下麵當type=0返回的是中文字元串“呵呵呵,喝喝”,type=1返回的是數字字元串“90909086676,999”, private string GetStrings(string str,int type=0) { IList<strin ...
  • Swagger一個優秀的Api介面文檔生成工具。Swagger可以可以動態生成Api介面文檔,有效的降低前後端人員關於Api介面的溝通成本,促進項目高效開發。 1、使用NuGet安裝最新的包:Swashbuckle.AspNetCore。 2、編輯項目文件(NetCoreTemplate.Web.c ...
  • 2020 年 7 月 30 日, 由.NET基金會和微軟 將舉辦一個線上和為期一天的活動,包括 微軟 .NET 團隊的演講者以及社區的演講者。本次線上大會 專註.NET框架構建微服務,演講者分享構建和部署雲原生應用程式的最佳實踐、模式、提示和技巧。有關更多信息和隨時瞭解情況:https://focu... ...
  • #abp框架Excel導出——基於vue #1.技術棧 ##1.1 前端採用vue,官方提供 UI套件用的是iview ##1.2 後臺是abp——aspnetboilerplate 即abp v1,https://github.com/aspnetboilerplate/aspnetboilerp ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 作者:碧茂大數據 PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領取 input()輸入 Python提供了 input() 內置函數從標準輸入讀入一 ...
  • 從12年到20年,python以肉眼可見的趨勢超過了java,成為了當今It界人人皆知的編程語言。 python為什麼這麼火? 網路編程語言搜索指數 適合初學者 Python具有語法簡單、語句清晰的特點,這就讓初學者在學習階段可以把精力集中在編程對象和思維方法上。 大佬都在用 Google,YouT ...
  • 在社會上存在一種普遍的對培訓機構的學生一種歧視的現象,具體表現在,比如:當你去公司面試的時候,一旦你說了你是培訓機構出來的,那麼基本上你就涼了,那麼你瞞著不說,然後又通過了面試成功入職,但是以後一旦在公司被髮現有培訓經歷,可能會面臨被降薪,甚至被辭退,培訓機構出來的學生,在用人單位眼裡就是能力低下的 ...
  • from typing import List# 這道題看了大佬寫的代碼,經過自己的理解寫出來了。# 從最外圍的四周找有沒有為O的,如果有的話就進入深搜函數,然後深搜遍歷# 判斷上下左右的位置是否為Oclass Solution: def solve(self, board: List[List[s ...
  • import requests; import re; import os; # 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, li ...
  • import requests; import re; import os; import parsel; 1.請求網頁 header = { "user-agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537. ...