私は今 Smalltalk を勉強しています。Python に非常に似ているように見えるので (実際には逆に、Python は Smalltalk に非常に似ています)、Python 愛好家として、それを研究する価値があるかどうか疑問に思っていました。
メッセージの受け渡し以外に、Smalltalk と python の間の注目すべき概念上の違いは何ですか?
if/else
Python では、 、短絡ブール演算子、ループなどの「基本的な」構造は、言語自体の一部です。Smalltalk では、それらはすべて単なるメッセージです。その意味で、Python と Smalltalk は「すべてがオブジェクトである」という点で同意していますが、Smalltalk は「すべてがメッセージである」とも主張しています。
[編集] いくつかの例。
Smalltalk の条件ステートメント:
((x > y) and: [x > z])
ifTrue: [ ... ]
ifFalse: [ ... ]
and:
が単なるメッセージ on (メッセージをBoolean
に渡した結果として生成される) であり、 の 2 番目の引数が単純な式ではなく、遅延 (つまり、短絡) 評価を可能にするブロックであることに注意してください。これは、メッセージをサポートする別のオブジェクトを生成し、引数としてさらに 2 つのブロック (ラムダ) を取り、ブール値に応じていずれかを実行します。>
x
and:
Boolean
ifTrue:ifFalse:
smalltalkを初めて使用する人として、私が本当に驚かされるのは、画像ベースのシステムであり、その反射はいたるところにあります。これらの2つの単純な事実は、システム内の他のすべてのクールなものを生み出すように見えます。
上記のすべてがクールな方法で一緒になり始めます:
画像システムと反射は、約30年間、小さな話者にとってこれらすべてを完全に自然で正常なものにしました。
Smalltalk には歴史的に素晴らしい IDE が組み込まれていました。私は多くの言語でこの IDE を見逃していました。
Smalltalk はまた、生きたシステムの中にあるという素晴らしい性質を持っています。クリーンな状態で開始し、変更を開始します。これは基本的に、オブジェクト永続ストレージ システムです。そうは言っても、これは良いことでもあり悪いことでもあります。実行するものはシステムの一部であり、出荷するものの一部です。システムは、配布する前に非常にうまくセットアップできます。欠点は、出荷するものの一部として実行するすべてのものがシステムに含まれていることです。再配布する場合は、慎重に梱包する必要があります。
さて、そうは言っても、私が Smalltalk を使用してからしばらく経ちました (約 20 年)。はい、数学を行う人にとっては楽しい時間です。Smalltalk は素晴らしい言語で、プログラミングも学習も楽しいものですが、実際に実装するのは少し難しいと感じています。
もしよろしければ、遊んで楽しんでください。私は Python で遊んでいて、大好きです。
ジェイコブ
Smalltalk 言語自体は非常に重要です。これは、言語の拡張性を高める強力な直交機能の小さなセットで構成されています。Alan Lovejoy 氏は次のように述べています。言語表記は、「使用されるプログラミング表記の表現力の違いが問題になる」ため、非常に重要です。詳細については、こちらの記事全文をお読みください。
多くの場合、言語の側面はそれほど重要ではなく、多くの言語はまったく同じです。
私が見た限りでは、Python と Smalltalk は OOP の理想を共有していますが、実装と提示された言語インターフェースの能力は大きく異なります。
真の価値は、構文の微妙な違いが実装に関して許容するものにあります。Self やその他のメタヘビー言語を見てみましょう。
構文と即時のセマンティクスを超えて、微妙な違いが実装で何を可能にするかを調べてください。
例えば:
Smalltalk-80 のすべては、実行中のプログラム内から変更できます
Python と Smalltalk の違いにより、より深い操作が可能になりますか? 言語はコンパイラ/ランタイムの実装をどのように可能にしますか?