
Smalltalkは通常、古くて死にかけている言語-過ぎ去った時代の骨as品として認識されています。 真実からそれ以上のものはありません。
Smalltalkは依然として非常に重要です。 これは、技術的背景のない人々にプログラミングを教えるのに最適な言語です。 スタートアップ向けの優れたプロトタイピング言語です。 これは
、世界中の大企業と中小企業の両方で使用される強力な産業用言語
です 。 最近、Smalltalkの機能を改善するために多くのことが行われているため、今日のSmalltalkの使用を検討する正当な理由があります。
産業用プログラミングでSmalltalkを使用する必要はありませんが、Smalltalkに何かを書いて自分の気持ちを聞いてみてください。 Smalltalkでのオブジェクト指向パラダイムの実装は非常に優れているため、Objective-C、Python、Ruby、CLOS、PHP 5、
Perl 6 、Erlang、Groovy、Scala、DartなどのOO言語の世代全体に影響を与えているため、よく知っているはずです。 、Swiftなど。
Smalltalkを学習することにより、現代言語のこれらすべての便利な機能がどのように現実になったかを理解できます。 Smalltalkを学習することで、仲間同士で優位に立つことができ、プログラミングを学習するための優れたツールにもなります。
Smalltalkは何を提供してくれましたか?
Smalltalkのソフトウェア業界への貢献は膨大です。 彼が紹介したこの機能とテクノロジーのリストをご覧ください。
- Smalltalkは、ソフトウェアをプラットフォームに依存しないようにする仮想マシン(VM)を世界に紹介しました。 これは、Android(Dalvik)と同様に、Java(JVM)および.NETがサポートするテクノロジーと同じです。
- Smalltalkは、 ジャストインタイム( JIT)コンパイルの先駆者であり、Javaなどのバイトコードソフトウェアのパフォーマンスを劇的に向上させる技術です。
- Smalltalkは、テキストエディター、システムおよびクラスブラウザー、オブジェクトおよびプロパティインスペクター、デバッガーを含む最初の近代的な開発環境(IDE)を導入しました。 これにより、Visual Studio、Xcode、IntelliJ IDEAなど、現在開発者が使用している多くのIDEが登場しました。 個人的には、これらのIDEはどれも、Smalltalkと比較して、シンプルさ、エレガントさ、開発のスピードを比較できないと信じています。 オリジナルはまだ最高です!
- 当初から、Smalltalkにはクロージャーがありました。 クロージャーは、字句スコープを持つファーストクラスの関数です。 実際、 クロージャーは、定義された場所で非ローカル変数を見ることができるコールバック関数です。 これにより、よりコンパクトで読みやすいコードを書くことができます。 クロージャーは、Java、C#、PHPなどの多くの言語で使用されます。
- Smalltalkは、 実行時のコードのチェックや変更など、ライブプログラミングと高度なデバッグ技術をサポートする最初の言語です。 現在、Visual Studioの「編集と続行」機能とHotSwapを使用するJavaを使用して、C#でリアルタイムデバッグが可能です。
- Smalltalkは、 MVC (Model-View-Controller)の概念を世界に紹介しました。 MVCは、ユーザーインターフェイスを実装するためのソフトウェアアーキテクチャテンプレートです。 デスクトップグラフィックアプリケーションやWebアプリケーションで人気があります。 現在、これは主にWeb開発者によって研究されているのと同じアーキテクチャです。
- ほとんどの場合、Smalltalkはテスト駆動開発 (TDD)とエクストリームプログラミング (XP)を担当します。これらは、現在のアジャイルプラクティスで非常に重要です。
- Smalltalkは、「アヒルのタイピング」を一般的な表現にしました(それがまだあなたの家を歩き回っているなら)。 アヒルのタイピングでは、適切な動作を確保するためにリフレクションが使用される場合、プログラムが実行されるまでタイプチェックが遅延します。 今日、Java、Python、Common Lisp、Go、Groovy、Objective-C、PHPなど、多くの言語でアヒルのタイピングが行われています。
- Smalltalkは、オブジェクトデータベースの使用を初めて導入しました。 それらは広く使用されていませんが、オブジェクトデータベースにはまだ独自のニッチ市場があります。 オブジェクトデータベースの最良の例はGemStone / Sです 。これは、スケーラブルで高性能な多層分散システムに適しています。
- Smalltalkは最初のリファクタリングブラウザを導入しました。 もちろん、リファクタリングのサポートは、ほとんどの最新のIDEにあります。
- Smalltalkは、グラフィカルユーザーインターフェイス(GUI)と「何が得られるかを見る」ユーザーインターフェイス(WYSIWYG)の開発において重要な役割を果たしました。
しかし、Smalltalkを学ぶことで、私はどのように優れた開発者になれますか?
Smalltalkには、時代をはるかに超える多くの機能があります。
- 画像ベースの保持
- オブジェクト:すべてはオブジェクトであり、オブジェクトはメッセージのみを交換します(OOPの最も「クリーンな」実装であり、最も古いものの1つ)
- ライブプログラミング
- コードをオンザフライで変更するなどの高度なデバッグ方法
- シンプルで整理されたIDE
- Subject-Oriented Languages (DSL):Smalltalkの唯一の働き方なので、プログラマーは問題に自然な言語と表記法を使用して問題に焦点を合わせる必要があります。
また、Smalltalkを特別なものにする
機能がいくつかあり
ます 。
基本的に、生産的な言語および学習ツールとしてのSmalltalkの主な利点は、Javaなどの産業用OO言語の認知ストレスのすべてではないにしても、ほとんどを取り除くことです。 Smalltalkには、シンタックスジャンクや混乱を招く機能は含まれていません。 彼は礼儀正しくあなたに道を譲るので、あなたはすべての注意を問題やアプリケーションに集中させることができます。 Javaはより複雑である(そして30文字のクラス名を持っている)ため、Javaが悪い言語ではありません。 OO言語の学習は、追加の機能を必要としないため、OOPの概念を別の観点から理解するとすぐに、実際に
優れた Javaプログラマーになることができると言っています。
認知ストレスの解消は、Python、Ruby、Elixir、Elm、Goなどの多くの言語の目標です。
感じなくてもストレスがあります。 SmalltalkやPythonでのプログラミングはZenに似ているとよく言われます。 あなたの意識は、目の前の課題に沿って簡単かつ自然に流れるだけです。 これが言語のシンプルさの美しさと価値であり、Smalltalkはその可能性を最大限に引き出しています。
Smalltalkでは、OOPの概念は、クラスとメソッド、メタクラスとリフレクション、そして最も重要なメッセージングの基本概念に洗練されています。 Smalltalkは、オブジェクトの純度と一貫性のおかげで、オブジェクト指向プログラミングとそれを最大限の効率で使用する方法を深く理解できます。
Smalltalkのシンプルさは、特に技術トレーニングを受けていない場合、プログラミングを教えるための理想的な教育言語にもなります。 言語とツールのシンプルさにより、言語の構成や形式主義ではなく、
プログラミング方法の学習に集中することができます。
「ライブ」デバッガーは、編集-テスト-デバッグサイクルを大幅に削減します。Smalltalkはどのように機能しますか? 画像ベースのプログラミングアプローチ
Smalltalkが成功する主な理由は、ソフトウェア開発への画像ベースのアプローチです。
イメージは、実行中のアプリケーションのすべてのオブジェクトを含むメモリのスナップショットです。 プログラムの実行状態全体をカプセル化します。 画像をディスクに保存し、後で中断したところから正確に更新できます!
Smalltalkイメージは少し変わったように聞こえるかもしれませんが、実際には、今日広くITで使用されているもの、つまりVMwareやVirtualBoxなどのOS仮想化のシステムイメージに非常に似ています。 Smalltalkはもともと1970年代にXerox PARCによって作成されたスタンドアロンのオペレーティングシステムであったことに注意してください。
Smalltalkイメージは、WebアプリケーションのDOM(ドキュメントオブジェクトモデル)に似ています。 Webアプリケーションは、本質的にはWebブラウザーで分離されたオペレーティングシステムであり、ホストファイルシステムやその他のリソースに直接アクセスできないことに注意してください。 Webブラウザーを閉じると、動的Webサイトの状態を保存またはキャッシュでき、次回ブラウザーを再開したときに、Webサイトをブラウザーに復元できます(いくつかの制限があります)。
スプレッドシートでさえ、画像の概念に非常に近いものです。 彼女はすべての必要な情報をカプセル化します。 彼女はシステムリソースにアクセスできません。 保存および復元できます。 また、複雑なモデルやアプリケーションを独自の言語で開発するためにスプレッドシートがまだ使用されていることを知っておく必要があります。
一般的に、画像の概念は広く普及しています。 これは、
Lively Kernelの JavaScript用にイメージのバージョンが作成されたソフトウェアを開発するのに非常に便利な方法です。
Smalltalkのすべてはオブジェクトです
例外なく:すべてはオブジェクトです。 プリミティブデータ型はありません。 選択や反復のような制御構造はありません! Smalltalkのすべては
、 オブジェクトに メッセージを送信
することによって行われ
ます 。 これにより、Smalltalkは非常にシンプルでエレガントで、学習しやすくなっています。 これが言語を構文的にきれいにするものです。
たとえば、次のコードスニペットは
Number
クラスを拡張して、非再帰的階乗演算をサポートします。
Number extend [ my_factorial [ (self < 2) ifTrue: [ ^1 ] ifFalse: [ |c| c := OrderedCollection new. 2 to: self do: [ :i | c add: i ]. ^ (c fold: [ :a :b | a * b ] ) ] ]]. 7 factorial printNl. 7 my_factorial printNl. “should be the same result as the previous line”
ifTrueは次のとおりです。これは、式
(self <2)によって返されるブールオブジェクトに送信される
キーメッセージです。 メッセージの引数はコードブロックです(角括弧で示されます)。 実際、
ifTrue:これは2つの引数を持つメッセージの最初の部分であり、2番目の部分は
ifFalse:です。単項メッセージ
newは 、新しいコレクションを作成するために
OrderedCollection
クラスに送信されます。
printNlメッセージ
は 、
my_factorialメッセージ
を番号7に送信した結果(オブジェクト)に送信されます。これはすべて、自然言語に非常に似ています!
Smalltalkのリフレクション
Smalltalkのリフレクションは、実行時に独自の構造と計算をチェックするメカニズムとして特に価値があります。 これは非常に強力なメカニズムであり、プログラムが新しいクラスやメソッドを使用して自分自身を拡張したり、「このメッセージを私に送ったのは誰ですか?」
リフレクションは、強力なエラー処理メソッドを実装するために使用されます。 オブジェクトは、実装していないメッセージを
受け取ると、メッセージ
doesNotUnderstand:と元のメッセージのコードを
受け取ります。 メッセージ
dosNotUnderstandでプログラムができることはたくさんあります。機能の拡張などです!
画像と反射の概念により、SmalltalkはアプリケーションとIDEの間の境界線を埋めることもできます。 アプリケーションの開発、デバッグ、起動に必要なものはすべてイメージに含まれています。 アプリケーション環境を離れる必要はありません。 これは、すべてをより禅的で生産的にするソフトウェア開発への完全に包括的なアプローチです。
Smalltalkの復活
Smalltalkの世界における過去15年間の開発により、この言語はより魅力的になりました。
JavaScriptに変換される
Amber Smalltalkを使用してWebインターフェイスをプログラミングするためにSmalltalkが利用できるようになりました。 アンバーはブラウザでのみ実行されます。 Amberの驚くべき機能の1つは、JavaScriptライブラリをインポートすると、そのオブジェクトをSmalltalkオブジェクトと同じ方法で処理できることです。
2002年に
Seaside Webプラットフォームがリリースされ、これが最も人気のあるSmalltalk Web開発ツールになりました。 継続ベースのアプローチは、Webアプリケーションに通常の「呼び出し/戻り」メカニズムを提供しました。 これにより、二重リクエストと[戻る]ボタンで問題を解決できました。 当時は非常に革新的であり、他のWebフレームワークにはまだ実装されていません。
Pharoプロジェクトは、最新のソフトウェア開発プラクティスに焦点を当てるために2008年に始まりました。 彼は、Smalltalk-80方言に基づいて、以前のオープンソースプロジェクトであるSqueakよりもはるかに進んだSmalltalkを開発しました。 Pharoプロジェクトは、
Glamorous Toolkitと呼ばれる新しいタイプのIDEの研究も開始しました。 プログラミング環境はニーズに合わせて「柔軟」でなければならないという考えに基づいています。
昨年、多くのDolphin Smalltalkに愛されたプロジェクトはオープンプロジェクトになり、Smalltalkファンに別の素晴らしいオプションを提供しました。
Dolphin Smalltalkは 、最高のIDE実装の1つを持つと
称賛されること
がよくあります。
Smalltalk Legacy:プログラミングをお楽しみください
JVM、Eclipse IDE、クロージャ、ライブプログラミング、MVC、TDD、VMware、さらにはシンプルなWebアプリケーションなどの最新のソフトウェア開発ツールを使用する場合は、Smalltalkの起源を考え、何をすべきかを尊重してください。 Objective-C、Python、Ruby、Groovy、Scala、Dart、Swiftなど、使用している言語に感謝します。
これらすべての素晴らしい機能とテクノロジーの元となる言語を使用することで、ソフトウェア開発者としての知識、心の鋭さ、生産性を大幅に向上させるユニークな機会が得られます。 「快楽」という言葉は、ソフトウェアエンジニアリングに関する議論で常に使用されるわけではありませんが、SmalltalkとそのOO兄弟は、ソフトウェア開発を喜びに変えることができる認知障壁とプログラミングの容易さを提供すると思います。
著者について
Richard Engは退職したカナダのソフトウェア開発者で、IT業界で30年以上の経験があります。 ビデオグラフィックス、データベース、財務、リアルタイムソフトウェア、iOSおよびAndroid向けモバイルアプリケーション、およびWeb開発の分野で働いていました。 彼は主にCで書きましたが、FORTRAN、タンデムTAL、C ++、C#、Objective-C、Java、Smalltalk、Python、Goも使用しました。 彼は現在、Smalltalk Renaissanceキャンペーンをリードしています。 リチャードはほとんどの時間を記事とエッセイの執筆に費やしています。