Smalltalkは古くて瀕死の言語として広く認識されて 何も真実からそれ以上であることができませんでした。
Smalltalkはまだ非常に関連性があります。 これは、技術的な背景を持っていない人々にプログラミングを教えるための優れた教育言語です。 これは、スタートアップのための最上級のプロトタイピング言語です。 これは、世界中の大小の両方の企業で使用される産業力のあるエンタープライズ言語です。 多くは、その見通しを改善するために、近年では変更されているので、今日の近代的なSmalltalkを使用して検討する良い理由があります。
今日は本番環境でSmalltalkを使用する必要はありませんが、Smalltalkで何かをコーディングしてみて、それがどのように感じているかを見てみてください。 Smalltalkのオブジェクト指向(OO)パラダイムの実装は非常に優れているため、Objective-C、Python、Ruby、CLOS、PHP5、Perl6、Erlang、Groovy、Scala、Dart、Swiftなどのoo言語の世代全体に影響を与えています。
Smalltalkを学ぶことで、今日のOO言語の便利な機能がどのようになったかを理解することができます。 Smalltalkを学ぶことはまた、あなたの仲間の間でプログラミングスキルに大きなエッジを与えることができ、それは初心者にプログラミングを教えるた
Smalltalkは私たちに何を与えましたか?
Smalltalkはソフトウェア業界への貢献の豊富な遺産を持っています。 それが導入した機能と技術のこのリストを見てください:
- Smalltalkは、ソフトウェアをプラットフォームに依存しないようにする言語仮想マシン(またはVM)に世界を導入しました。 これは、Java(JVM)と.NET、およびAndroid(Dalvik)を支えるのと同じ技術です。
- Smalltalkはまた、Javaなどのバイトコードソフトウェアのパフォーマンスを劇的に向上させるための技術であるJIT(just-in-time)コンパイルを開拓しました。
- Smalltalkの最初の近代的なIDE(統合開発環境)は、テキストエディタ、システムまたはクラスブラウザ、オブジェクトまたはプロパティインスペクタ、およびデバッガを含んでいた。 これにより、Visual Studio、Xcode、IntelliJ IDEAなど、今日の開発者が好む多くのIdeが生まれました。 個人的には、これらのIdeのどれも、シンプルさ、優雅さ、および開発の速度においてSmalltalkのIDEと比較することはできないと思います。
- 当初から、Smalltalkにはクロージャがあり、これは字句スコープのファーストクラス関数です。 本質的に、クロージャは、それらが定義された場所に非ローカル変数を見ることができるコールバック関数です。 これは、よりコンパクトで読みやすいコードを書くのに役立ちます。 クロージャは、Java、C#、PHPなどの多くの主要な言語にその方法を見つけています。
- Smalltalkは、実行中のオンザフライ検査やコード変更などの”ライブ”プログラミングと高度なデバッグ技術をサポートする最初の言語ツールでした。 今日、Visual Studioの”Edit and Continue”を使用したC#とHotSwapを使用したJavaでのライブデバッグが可能です。
- SmalltalkはMVC(Model-View-Controller)を世界に導入しました。 MVCは、ユーザーインターフェイスを実装するためのソフ これは、デスクトップGUIアプリケーションやwebアプリケーションで人気があります。 最近では、ほとんどのweb開発者が最初に学ぶアーキテクチャです。
- 大部分は、Smalltalkがテスト駆動開発(またはTDD)とエクストリームプログラミング(またはXP)を提供する責任があります。
- Smalltalkは”duck typing”を家庭用の言葉にしました(あなたの家にプログラマがいる場合)。 Duck typingは、リフレクション機能が正しい動作を保証するために使用されるときに、実行時まで”型チェック”が延期される場所です。 今日では、Java、Python、Common Lisp、Go、Groovy、Objective-C、PHPなど、多くの言語でduckタイピングが行われています。
- Smalltalkはオブジェクトデータベースの開発を開拓しました。 彼らは主流にそれを作っていませんでしたが、オブジェクトデータベースにはニッチ市場があります。 オブジェクトデータベース製品の最良の例は、gemstone/Sであり、スケーラブルで高性能な多層分散システムに適しています。
- Smalltalkは最初のリファクタリングブラウザを提供しました。 もちろん、リファクタリングのサポートは、今日のほとんどのIdeで見つけることができます。
- Smalltalkはグラフィカルユーザーインターフェイス(またはGUI)と”what you see is what you get”(WYSIWYG)ユーザーインターフェイスの開発に尽力しました。
しかし、Smalltalkを学ぶことで私をより良い開発者にするにはどうすればよいですか?
Smalltalkには、時代を先取りしたいくつかのキラー機能があります:
- イメージベースの永続性
- オブジェクト:すべてがオブジェクトであり、オブジェクトはメッセージを介してのみ通信します(“最も純粋な”OOであり、最も初期のものの一つ)
- “ライブ”プログラミング
- オンザフライコード変更などの高度なデバッグ技術
- シンプルで整理されたIDEインターフェイス
- ドメイン固有言語(dsl): Smalltalkが動作する唯一の方法なので、プログラマはそのドメインに自然な言語と表記法を使用して問題のドメインに焦点を当てる必要があります
そしてSmalltalkを特別なものにする他のいくつかの機能もあります。
本質的に、生産的な言語と学習ツールとしてのSmalltalkの主な利点は、Javaなどの主流のOO言語における認知ストレスのすべてではないにしても、ほとんどを Smalltalkは構文的な混乱や気が散る機能を提供しません。 あなたが手元の問題やアプリケーションにすべてのあなたの注意を集中できるように、それは単にあなたの方法の外に取得します。 私が言っているのは、邪魔されていないOO言語を学ぶことは、別の観点からOOの概念を理解すると、実際にはより良いJavaプログラマになるというこ
認知ストレスを解消することは、Python、Ruby、Elixir、Elm、Goなど、多くの言語の基本的な目標です。 あなたがそれを感じていなくても、ストレスはそこにあります。 SmalltalkやPythonでのプログラミングはむしろ禅に似ているとよく言われています。 これは言語のシンプルさの美しさと価値であり、Smalltalkはこれをスペードで持っています。
Smalltalkでは、OOはクラスとメソッド、メタクラスとリフレクション、そして最も重要なメッセージパッシングの最も基本的な概念に蒸留されています。 Smalltalkは、そのオブジェクトの純度と一貫性のおかげで、オブジェクト指向プログラミングとその最高の効果にそれを使用する方法の深くより良い理
Smalltalkのシンプルさは、特に技術的な背景を持っていない場合、プログラミングを学ぶための理想的な教育言語にもなります。 言語とツールのシンプルさは、言語の手続きではなく、プログラミング技術の学習にあなたのエネルギーを集中することができます。
Smalltalkはどのように機能しますか? プログラミングに対するイメージベースのアプローチ
Smalltalkの名声に対する主な主張は、ソフトウェア作成に対するイメージベースのアプローチです。 イメージとは、実行中のアプリケーションまたはシステム内のすべてのオブジェクトを含むメモリのスナップショットです。 プログラムの実行状態全体をカプセル化します。 イメージはディスクに保存することができ、実行は後で中断した場所から正確に再開することができます!
Smalltalkのイメージは少しばかげて聞こえるかもしれませんが、実際には今日で広く使用されているものに強く似ています:VMwareやVirtualBoxのようなOS仮想化のシステ Smalltalkはもともと1970年代にXerox PARCで作成されたスタンドアロンのオペレーティングシステムであったことを覚えておく必要があります。
Smalltalkの画像は、webページのDOM(Document Object Model)にも強く似ています。 Webアプリケーションは本質的にそれ自体がシステムであり、webブラウザに隔離され、ホストのファイルシステムやその他のリソースへの直接アクセス Webブラウザが閉じると、動的webサイトの状態が保存またはキャッシュされ、次回ブラウザが再開されたときに、webサイトをブラウザで復元できます(いく
卑しいスプレッドシートでさえ、イメージの概念に密接に焦点を当てています。 これは、実行状態全体をカプセル化します。 ホストのシステムリソースにアクセスできません。 それは救われ、元通りにすることができます。 そして、あなたは、スプレッドシートはまだ独自の言語で洗練されたモデルやアプリケーションを開発するために使用されていることを知っている必要があります。
だから、イメージの概念はかなり普及しています。 ソフトウェアを開発するには、イメージコンセプトのバージョンがLivelyカーネルでJavaScript用に作成されているのはとても良い方法です。
Smalltalkのすべてはオブジェクトです
例外はありません:すべてがオブジェクトです。 プリミティブデータ型はありません。 選択や反復などの制御構造はありません! Smalltalkのすべては、オブジェクトにメッセージを送信することによって行われます。 これは、Smalltalkがとてもシンプルでエレガントで、学ぶのが簡単になるものです。 これは、言語を構文的に非常にきれいにするものです。
たとえば、次のコードスニペットは、非再帰的な階乗演算をサポートするようにNumberクラスを拡張しています:
Number extend
ifFalse: .
^ (c fold: ) ]]].
7 factorial printNl.
7 my_factorial printNl. "should be the same result as the previous line"
ここで、ifTrue:は、式(self<2)を評価した結果のBooleanオブジェクトに送信されるキーワードメッセージです。 キーワードmessageの引数は、コードブロック(角括弧で囲まれています)です。 実際には、ifTrue:は2つの部分のキーワードメッセージの最初の部分であり、2番目の部分はifFalse:です。
単項メッセージnewがOrderedCollectionクラスに送信され、新しいコレクションが作成されます。 PrintNlメッセージは、my_factorialメッセージを番号7に送信した結果(オブジェクト)に送信されます。 全体のことは、ほとんど自然言語のように読み取ります!
Smalltalkでの計算リフレクション
Smalltalkでのリフレクションは、プログラムが実行時に独自の構造と計算を検査する手段として特に価値があります。 これは巨大な力を与え、プログラムが新しいクラスやメソッドで自分自身を拡張したり、”誰がこのメッセージを私に送ったのですか?”
計算リフレクションは、エラーを処理する強力な方法を実装するために使用されます。 オブジェクトが実装していないメッセージを送信すると、元のメッセージの再構成とともにdoesNotUnderstand:メッセージが受信されます。 プログラムがdoesNotUnderstand:メッセージでできることはたくさんありますが、新しい機能で自分自身を拡張することも含まれています!
イメージの概念と反射により、Smalltalkはアプリケーション/IDEの境界を排除することもできます。 アプリケーションの開発、デバッグ、および実行に必要なものはすべてイメージにあります。 アプリケーション環境を離れる必要はありません。 これは、すべてがより禅のようで生産的になるソフトウェア開発への完全に全体的なアプローチです。
Smalltalkのルネッサンス
Smalltalkの世界での開発の最後の15年間は、言語をはるかに魅力的にしました。
Smalltalkは、Javascriptに変換するAmber Smalltalkを使用したフロントエンドwebプログラミングのために利用可能になりました。 Amberの開発は完全にブラウザで行われます。 Amberの驚くべきことの1つは、JavaScriptライブラリをインポートすると、そのオブジェクトをSmalltalkオブジェクトと同じように扱うことができるということです。
2002年にSeaside web frameworkがリリースされ、Smalltalkにおけるweb開発のための最も人気のあるツールとなった。 その継続ベースのアプローチは、webアプリケーションの従来の”呼び出し/戻り”メカニズムを提供しました。 これは、二重要求や戻るボタンの問題などの問題を解決するのに役立ちます。 その時代のために非常に革命的で、まだ一般的に他のwebフレームワークで採用されていません。
Pharoプロジェクトは、現代のソフトウェア工学と開発技術に焦点を当てるために2008年に始まりました。 それはsmalltalkを、由緒あるSmalltalk-80方言に基づいていたSqueakと呼ばれる以前のオープンソースプロジェクトよりもはるかに遠くにもたらしました。 Pharoプロジェクトはまた、Glamorous Toolkitと呼ばれる新しい種類のIDEの研究を生み出しました。 それはあなたのプログラミング環境があなたの必要性に合うために”moldable”べきであるという考えに基づいています。
昨年、高く評価されているDolphin Smalltalkはオープンソースになり、Smalltalkのファンのための別の素晴らしいオプションを提供しました。 Dolphin Smalltalkは、Smalltalk IDEの最高の実装の一つを持っていることで頻繁に賞賛されています。
Smalltalkのレガシー: プログラミングを楽しくする
JVM、Eclipse IDE、クロージャ、”ライブコーディング”、MVC、TDD、VMware、さらには普通の古いwebアプリなど、現代のソフトウェア開発の多くの機能を使 Objective-C、Python、Ruby、Groovy、Scala、Dart、Swiftなど、使用している言語をより高く評価してください。
これらの優れた機能と技術のすべてを生み出した言語で作業することは、ソフトウェア開発者としての知識、精神的な鋭敏さ、生産性を大幅に向上させるユニークな機会を提供します。 “Fun”という言葉は、ソフトウェア工学についての議論に必ずしも入るわけではありませんが、SmalltalkとそのOO兄弟は、ソフトウェア工学を楽しくすることがで