蘋果 MacPaint 和 QuickDraw 的源代碼(2010)

簡評:本文由計算機歷史博物館發表自 2010 年,經喬布斯的允許,蘋果軟體 MacPaint 和 QuickDraw 代碼開放。(軟體的主創表示:一再精簡代碼,代碼就應該讓人看的懂)

Apple Macintosh 是軟硬體結合的優秀作品。1984 年 1 月,麥金塔問世,和它一起的還有繪圖軟體 MacPaint。它們向世人展示了:蘋果想做什麼,以及如何去實現。

很多朋友想要了解它是如何在「底層」工作的。經過蘋果公司的許可,我們很高興提供 MacPaint 和 QuickDraw 的原始程序源代碼。

https://www.zhihu.com/video/954403400293576704

(視頻:在麥金塔上演示 MacPaint)

博物館藏品 —— 源代碼

注意:本資料版權歸 1984 Apple Inc.所有,僅供非商業用途使用。

MacPaint 是繪圖應用程序,用戶通過滑鼠鍵盤進行操控和交互。它的高級邏輯是用 5822 行的 Apple Pascal 編寫並封裝;為了實現高性能的常式以及操作系統的一些介面,底層是 3583 行彙編語言所編寫。

  • MacPaint 源碼下載:MacPaint version 1.3 source code (5 files, 67.8k)

QuickDraw 是麥金塔的點陣圖庫,可以用於 MacPaint 和其他的軟體應用。它包含 36 個文件共計 17101 行代碼,全部由彙編語言構成,面向 68000 微處理器。

  • QuickDraw 源碼下載:QuickDraw source (37 files, 180.4k)

MacPaint 和 QuickDraw 的故事

MacPaint 由 Bill Atkinson ,他是原始Macintosh開發團隊的成員。他將他的早期LisaSketch(也稱為SketchPad)用於不成功的Apple Lisa電腦,所以他最初稱它為MacSketch。他於1983年初開始在Mac版上工作。

Bill Atkinson 自畫像

Bill Atkinson 編寫了 MacPaint,他也是麥金塔開發團隊的初創人員。他之前為不成功的 Apple Lisa 電腦編寫過 LisaSketch(別名 SketchPad),後來在 1983 年開發 Mac 版本,名稱從 MacSketch 改為 MacPaint。

Bill Atkinson 也為 Lisa 創建了 QuickDraw 最初版本。Andy Hertzfeld 是團隊另一個關鍵成員,他認為「QuickDraw 是麥金塔的核心技術,它能夠及快速的在幀緩衝區創建出色的用戶界面」。

最初的 MacPaint 被設計成單文件界面。調色板和文件視窗的位置和大小是固定的,這和當時其他主流麥金塔軟體有很大的分別,因為其他軟體的視窗位置和大小是可以讓用家自行調整的。

當用戶在屏幕上拉動圖像的時候會產生閃爍的現象。MacPaint 用上兩組數據緩衝器,以防止這一情況出現。其中一組緩衝器儲存了文件中的現有像素,而另外一組則儲存了文件之前的像素。第二組緩衝器也提供了 MacPaint 復原功能的基礎。

1983 年 4 月,Bill Atkinson 把 MacSketch 改名為 MacPaint,幾乎每天都在添加新功能,「Fat Bits」可以放大屏幕區域並編輯單個像素;「油漆桶」可以填充封閉區域;「套索」可以特定選區;他是在景星製作了一個字元識別工具,可以將像素字元變成文本,但最後被他否決了,他希望 MacPaint 專註於繪圖而不是文本處理。

在編寫 MacPaint 時,Bill 很關注代碼的可讀性,他說道「這也是一種藝術,和其他藝術形式一樣,我花很多時間重構代碼,使它們更簡潔、更清晰。我堅信,防止錯誤最好的方法就是讓代碼變得更清楚,一眼就知道怎麼回事。在蘋果工作後,我有了這樣的轉變。如果你想讓它變得通順,必須從頭開始重構至少五次」。

MacPaint 於 1983 年 10 月完成,他與 QuickDraw、操作系統共同運行在僅 128K 內存,沒有浮點運算的 8 Mhz 處理器上。及時硬體條件如此,MacPaint 也提供了一定程度的性能和功能,為個人電腦建立了新的標準。

軼事

Andy Herzfeld 在 www.folklore.org 上記錄了很多麥金塔團隊的奇聞異事,經過他的允許,我們貼上幾個有代表性的小故事:

  • 軟體開發了多久?

記者問「這個軟體開發用了多少?」

bill 說「我用了四年做來的」。

喬布斯在旁邊補充「正常要 24 人一年能做出來」。(畫外音:bill 一個人能頂 6 個人)

  • 如何衡量程序員的生產力?

當年 Lisa 團隊 1982 年寫軟體時,項目經理要求程序員每周提交報告,記錄上周的代碼行數。Bill Atkinson 認為這很蠢。在他重寫 QuickDraw 那一周,他的速度非常快,並且縮短了 2000 多行代碼,在周報表格,代碼行數「-2000」。幾周後,經理們不再要求他填寫表格了。

結語

MacPaint 是由原麥金塔開發成員 Bill Atkinson 負責開發。之後在 1987 年,蘋果旗下的軟體子公司 Claris 接手了 MacPaint的 研發工作。一年之後(1988年),MacPaint 2.0 發布,這也是 MacPaint 的最後一個版本。鑒於銷售額每況愈下,MacPaint 的銷售在 1998 年正式中止。

Bill Atkinson 多年來關注設計類軟體,後來他專註於自然攝影,www.billatkinson.com 這是他的網站。

致謝

  • 感謝蘋果公司和史蒂夫喬布斯讓我們獲得許可,讓這個歷史性的源代碼可供全世界欣賞和研究。
  • 感謝 Andy Hertzfeld 分享他對那段歷史的複述,並允許自由使用他的書和他的網站上的文字。
  • 感謝 Grady Booch 推動這個項目。
  • 感謝Bill Atkinson 給我們的代碼。

原文:MacPaint and QuickDraw Source Code


  • MacPaint 源碼下載:MacPaint version 1.3 source code (5 files, 67.8k)
  • QuickDraw 源碼下載:QuickDraw source (37 files, 180.4k)

極光日報,極光開發者旗下媒體。

每天導讀三篇英文技術文章。


推薦閱讀:

TAG:開源 | 編程 | 蘋果公司AppleInc |