プログラミング
Apple Calculator Language
The Apple Calculator Language (wadetregaskis.com)
要約
Jef Raskinが初期のApple時代に提案した「Apple Calculator Language」は、プログラミング言語としての可能性も秘めた計算機言語でした。Raskinは当時のBASICやPascalなどの言語に批判的でしたが、このシンプルな言語には現代的な魅力を感じさせます。著者はこの言語の実装を作成し、そのユニークな評価方法や構文を解説しています。
全文翻訳
目次
Apple Calculator Language
ペーパーテープ
開始点
どのように読むか
二つのものの間
一つのものの後
意味のある名前
プライマーと異なる点
出典
Jef Raskinの初期のApple(主に1979年)の文書を調べていたところ、興味深いものに出くわしました。それはJefが提案した「計算機」言語です。特に興味深いのは、それがプログラミング言語の文脈で提示されていることです。その仕様は、汎用プログラミング言語を記述しているわけではありません。タイトルは計算機言語としては正確です。しかし、文脈から察するに、Jefはこれをより大きなものに発展させる野望を持っていたようです。それは、後にMacintoshのプログラミング言語となったもの(代わりにPascalになったもの)かもしれません。さらに、Jefが当時のプログラミング言語(ALGOL、APL、BASIC、Cobol、Fortran、Lisp、Pascal、PL/1、SNOBOL)について述べた意見をまとめた extenso な補遺があります。これは、Jefがそれらを何らかの意味で「競争相手」または少なくとも先行者と考えていたからでしょう。明らかに彼は独自の新しい言語を作成することに野望を抱いていました。時代を超えて受け継がれるこの考え方は、既存の言語が十分に良くないと感じていたからです。
😆 Jefは特にBASIC(当時のパーソナルコンピュータの共通語でした。アセンブリ言語は除く)を好まず、それについて遠慮なく述べました。「BASICは非常に弱い言語であり、多くの場当たり的な方法で補強されています。プログラミング言語のどんな学生でも簡単に欠点を見つけられます。それにもかかわらず、それは長年使用され続けるでしょう。これはその設計そのものではなく、その環境への賛辞です。BASICの当然の人気の高さは、言語を購入する際に、プログラマーの労力と時間を最小限に抑えることが、伝統的なコンピュータサイエンスの精神で記述された言語の機能よりも重要であることが多いことを示しています。」
Jef Raskin, The Apple Calculator Language Primer
その寿命について彼が間違っていなかったことは確かです。彼は後に(2005年まで生きていました)Visual Basic、RealBasic、およびそれらの派生品についてどう思ったのか、私は不思議に思います。
❤️ 私の最初の商用ソフトウェアはRealBasicで書かれました。今でも懐かしく思い出します。RealBasicは、言語、IDE、標準ライブラリのセットとしてシンプルでエレガントでした。少し遅かったかもしれませんが(ああ、現代のコンパイラやJITを使えば今ならあれで何ができるだろうか!)。
Fortran、PL/1、Pascalについては、後者はMacintoshでヘビーに使われていましたが、Mac OS Xまで、彼は…苦々しい? その成功に少し恨みを感じているようでした? それらについて彼はこう言いました。「宣言型言語として、それらは人間の思考の流れをシミュレートするのに本質的に劣っています。宣言の利点はよくわかっていますし、例えばPascalがFORTRANよりも制御構造を改善したことには喜びを感じます。しかし、これらはすべて詳細で、些細な種類の改善です。言語がすべきことは、些細なことを取り除き、問題を解決する際に考える必要がある詳細を最小限に抑えることです。Pascalのデータ構造、宣言、制御構造は、それらの詳細をより明確にし、したがってクリーンにしました。それは真の改善ですが、残念ながら規律と厳格さの方向性に傾いています。Pascalはしばしば、モダンでよく設計された言語として指摘されます。確かに、許容できるほど効率的です。その効率性は、コンパイラライターとシステムプログラマーの生活を楽にするための多くの設計上の選択によるものです。ユーザーはしばしば無視されます。」
Jef Raskin, The Apple Calculator Language Primer
彼はLispについてもあまり高く評価していませんでした。LispはSmalltalk、ひいてはObjective-Cに大きく影響を与えました。「LISPは、プログラミングの世界の興味深い一角であり、プログラマーの時間に対して比較的効率的です。しかし、再帰の過剰と、一般的な日常活動へのアプローチの欠如に苦しんでいます。」
Jef Raskin, The Apple Calculator Language Primer
しかし、APLについては、彼は十分すぎるほど良いことを言っています。彼は賞賛(彼が見たところ)を歌うためのセクション全体を持っています。ここに引用するには多すぎますが、読むことをお勧めします。APLはC/C++、そしておそらくPythonにもある程度影響を与えたのは事実ですが、全体としてAPLはプログラミング言語の進化の樹において行き止まりであることが証明されました。現代的な感覚で今見ると、その構文はパロディ、不条理なもののように見えます。Obfuscated C Code Contestで基本的に不正をするために誰かが発明したようなものです。そして、私のポイントにたどり着くまで辛抱強く付き合ってくれたあなたに感謝しますが、だからこそ、彼の小さな「Apple Calculator Language」が実際にはそれほど魅力的であることに私は驚いています。左から右への評価のシンプルさ、彼の「塊(clumps)」の驚くべきエレガンス…これには驚くほど新鮮な何かがあります。仕様書でそれを読むのは少し退屈なので、私は—まあ、Claude Opus 5が—私の(そしておそらくあなたの)娯楽のために動作する実装を作成しました!
ペーパーテープ
式を入力してリターンを押す
リターン
場所
2
ラジアン
1
まだ何も保存されていません
クリア
テープを消去
すべての名前を忘れる
開始点
一つを押すと実行されます。また、エントリ行にドロップするので、分解できます。
言語全体が1枚のカードに
どのように読むか
厳密に左から右へ。6/3+2*5 は、6を3で割り、2を足し、5を掛ける、つまり20です。括弧は最初に解決されるべきものをグループ化します。隣り合った数字は塊を作ります:34 5 67。演算は左側の塊全体に適用されますが、右側からは要素を1つだけ取ります。だから、1 2 3 4+4 3 2 1 は 5 6 7 8 3 2 1 になります。負の数はアンダースコアで表され、減算がそれらと混同されることはありません:_45.4。波括弧は自分用のメモを保持し、無視されます:{このようになります}。
二つのものの間
+ − * /
通常の4つ
TOTHE
べき乗。
2 TOTHE .5 は平方根です。
..
ここからそこまでカウントします。
1..9、または逆順に、5..2
MOD
余り
MIN MAX
小さい方、大きい方
< > = <= >= <>
真なら1、偽なら0
AND OR XOR
それらを必要とする人のために
INSERT
各要素の間に演算子を挿入します:1..100 INSERT +
:
名前の下に保存します。
5: fingers
何も印刷されません
[ ]
位置で要素を選択します。1から数えます。
一つのものの後
SIN COS TAN
および
ARCSIN ARCCOS ARCTAN
LOG LN
10を底とする対数、eを底とする対数
FLOOR CEILING
下へ、上へ
ROUND TRUNCATE
最も近い値、または単に切り捨て
NOT ODD EVEN
1または0で答えます
LENGTH
要素の数。
LENも機能します
PICK
塊からランダムに1つ選択
NUMBER LETTER
文字からコードへ、およびその逆
STRING VALUE
数字から桁へ、およびその逆
意味のある名前
PLACES
表示される小数点以下の桁数。
7: PLACES
RADIANS
ラジアンなら1、度なら0
PI E
定数、それらはそのままです
プライマーと異なる点
Raskinの原稿は、そのルール自体と矛盾するいくつかの計算例を含むドラフトです。162の他の例のすべてがここで印刷通りに実行されます。これら4つは実行されず、ルールが勝ちました:2..6 3..1 は 2 3 4 5 6 3 2 1 と印刷されますが、プライマーは3段落前に1..4+4..1 を計算して、はるかに長い塊を得ています。左から右への評価が勝ちます。0 1 0 1 OR (0 0 1 1) は 0 0 0 1 と印刷されますが、これはANDが言うことと同じです。100°F は 32.8°C と印刷されます。実際は37.8です。5.1 17 _5.1 FLOOR は 5 15 _6 と印刷されます。17は15になりません。プライマーが読者に委ねている2つの場所は、ここで次のように解決されます。ROUNDは、5つの例すべてに適合する唯一のルールである、偶数の隣に半分を送ります。NOTは、全体から1を引いたものであり、プライマーが0と1以外には使用しないように警告している理由です。
もっと投稿
バグ
Appleが愛する&Appleが嫌うアプリ
Core Dataしかないと、すべてが…のように見える
NSCopyObject、苦しみ続ける迷惑者
Wade、私の親愛なる元尊敬する同僚、あなたは自分自身を凌駕しました。これが多くの人に評価されるものに成長することを願っています。ブラボー。
Ben 応答