10

私は今 Smalltalk を勉強しています。Python に非常に似ているように見えるので (実際には逆に、Python は Smalltalk に非常に似ています)、Python 愛好家として、それを研究する価値があるかどうか疑問に思っていました。

メッセージの受け渡し以外に、Smalltalk と python の間の注目すべき概念上の違いは何ですか?

4

5 に答える 5

18

if/elsePython では、 、短絡ブール演算子、ループなどの「基本的な」構造は、言語自体の一部です。Smalltalk では、それらはすべて単なるメッセージです。その意味で、Python と Smalltalk は「すべてがオブジェクトである」という点で同意していますが、Smalltalk は「すべてがメッセージである」とも主張しています。

[編集] いくつかの例。

Smalltalk の条件ステートメント:

((x > y) and: [x > z])
  ifTrue: [ ... ]
  ifFalse: [ ... ]

and:が単なるメッセージ on (メッセージをBooleanに渡した結果として生成される) であり、 の 2 番目の引数が単純な式ではなく、遅延 (つまり、短絡) 評価を可能にするブロックであることに注意してください。これは、メッセージをサポートする別のオブジェクトを生成し、引数としてさらに 2 つのブロック (ラムダ) を取り、ブール値に応じていずれかを実行します。>xand:BooleanifTrue:ifFalse:

于 2009-08-12T23:24:01.217 に答える
10

smalltalkを初めて使用する人として、私が本当に驚かされるのは、画像ベースのシステムであり、その反射はいたるところにあります。これらの2つの単純な事実は、システム内の他のすべてのクールなものを生み出すように見えます。

  • この画像は、コードの記述やコンパイルなど、オブジェクトを操作することですべてを実行できることを意味します
  • リフレクションを使用すると、任意のオブジェクトの状態を検査できます。クラスはオブジェクトであり、そのソースはオブジェクトであるため、コードを検査および操作できます
  • 現在の実行コンテキストにアクセスできるので、スタックを確認でき、そこから、コンパイルされたコードとそのコードのソースなどを確認できます。
  • スタックはオブジェクトであるため、保存して後で再開できます。ビンゴ、続き!

上記のすべてがクールな方法で一緒になり始めます:

  • ブラウザを使用すると、SqueakのVMを含め、文字通りすべてのソースを探索できます。
  • ライブプログラムに影響を与える変更を加えることができるため、再起動して、作業中のものに移動する必要はありません。
  • さらに良いことに、プログラムが例外をスローしたときに、ライブコードをデバッグできます。バグを修正し、一貫性がなくなった場合は状態を更新してから、プログラムを続行します。
  • ブラウザは、タイプミスをしたと思われるかどうかを通知します
  • クラス階層を上下に参照したり、オブジェクトが応答するメッセージ、特定のメッセージを送信するコード、特定のメッセージを受信できるオブジェクトを見つけるのは非常に簡単です。
  • システム内の任意のオブジェクトの状態を検査および操作できます
  • 任意の2つのオブジェクトをbecome:で文字通り場所を切り替えることができます。これにより、任意のオブジェクトをスタブアウトし、メッセージが送信された場合に他の場所から怠惰にプルするなどのクレイジーな処理を実行できます。

画像システムと反射は、約30年間、小さな話者にとってこれらすべてを完全に自然で正常なものにしました。

于 2009-08-13T09:34:40.513 に答える
7

Smalltalk には歴史的に素晴らしい IDE が組み込まれていました。私は多くの言語でこの IDE を見逃していました。

Smalltalk はまた、生きたシステムの中にあるという素晴らしい性質を持っています。クリーンな状態で開始し、変更を開始します。これは基本的に、オブジェクト永続ストレージ システムです。そうは言っても、これは良いことでもあり悪いことでもあります。実行するものはシステムの一部であり、出荷するものの一部です。システムは、配布する前に非常にうまくセットアップできます。欠点は、出荷するものの一部として実行するすべてのものがシステムに含まれていることです。再配布する場合は、慎重に梱包する必要があります。

さて、そうは言っても、私が Smalltalk を使用してからしばらく経ちました (約 20 年)。はい、数学を行う人にとっては楽しい時間です。Smalltalk は素晴らしい言語で、プログラミングも学習も楽しいものですが、実際に実装するのは少し難しいと感じています。

もしよろしければ、遊んで楽しんでください。私は Python で遊んでいて、大好きです。

ジェイコブ

于 2009-08-12T23:24:14.757 に答える
3

Smalltalk 言語自体は非常に重要です。これは、言語の拡張性を高める強力な直交機能の小さなセットで構成されています。Alan Lovejoy 氏は次のように述べています。言語表記は、「使用されるプログラミング表記の表現力の違いが問題になる」ため、非常に重要です。詳細については、こちらの記事全文をお読みください。

于 2015-11-26T02:49:51.803 に答える
2

多くの場合、言語の側面はそれほど重要ではなく、多くの言語はまったく同じです。

私が見た限りでは、Python と Smalltalk は OOP の理想を共有していますが、実装と提示された言語インターフェースの能力は大きく異なります。

真の価値は、構文の微妙な違いが実装に関して許容するものにあります。Self やその他のメタヘビー言語を見てみましょう。

構文と即時のセマンティクスを超えて、微妙な違いが実装で何を可能にするかを調べてください。

例えば:

Smalltalk-80 のすべては、実行中のプログラム内から変更できます

Python と Smalltalk の違いにより、より深い操作が可能になりますか? 言語はコンパイラ/ランタイムの実装をどのように可能にしますか?

于 2009-08-12T23:25:26.237 に答える