Unterschiede zwischen Smalltalk und Python?

8

Ich studiere gerade Smalltalk. Es sieht Python sehr ähnlich (im Gegenteil, Python ist Smalltalk sehr ähnlich), also habe ich mich als Python-Enthusiast gefragt, ob es sich wirklich lohnt, es zu studieren.

Abgesehen von Message Passing, was sind weitere wichtige konzeptionelle Unterschiede zwischen Smalltalk und Python, die mir erlauben könnten, neue Programmierhorizonte zu sehen?

    
Stefano Borini 12.08.2009, 23:17
quelle

5 Antworten

17

In Python sind die "grundlegenden" Konstrukte wie if/else , boolesche Operatoren und Loops zum Kurzschließen Teil der Sprache selbst. In Smalltalk sind das alles nur Nachrichten. In diesem Sinne, während sowohl Python als auch Smalltalk zustimmen, dass "alles ein Objekt ist", geht Smalltalk weiter, indem es auch behauptet, dass "alles eine Nachricht ist".

[EDIT] Einige Beispiele.

Bedingte Anweisung in Smalltalk:

%Vor%

Beachten Sie, dass and: nur eine Nachricht auf Boolean ist (wird selbst als Ergebnis der Übergabe der Nachricht > an x erzeugt), und das zweite Argument von and: ist kein einfacher Ausdruck, sondern a blockieren, wodurch eine faule (dh kurzgeschlossene) Auswertung ermöglicht wird. Dies erzeugt ein weiteres Boolean -Objekt, das auch die Nachricht ifTrue:ifFalse: unterstützt, wobei zwei weitere Blöcke (d. H. Lambdas) als Argumente verwendet werden und das eine oder das andere abhängig vom Wert des Boolean ausgeführt wird.

    
Pavel Minaev 12.08.2009, 23:24
quelle
9

Als jemand, der neu im Smalltalk ist, sind die zwei Dinge, die mir wirklich auffallen, das bildbasierte System, und diese Reflexion ist überall. Diese beiden einfachen Fakten scheinen alles andere, was im System cool ist, hervorzubringen:

  • Das Bild bedeutet, dass Sie alles tun, indem Sie Objekte manipulieren, einschließlich Code schreiben und kompilieren
  • Mit Reflection können Sie den Status eines Objekts überprüfen. Da Klassen Objekte sind und ihre Quellen Objekte sind, können Sie Code
  • untersuchen und manipulieren
  • Sie haben Zugriff auf den aktuellen Ausführungskontext, so dass Sie sich den Stack ansehen können, und von dort den kompilierten Code und die Quelle dieses Codes usw.
  • Der Stapel ist ein Objekt, Sie können es also speichern und später fortsetzen. Bingo, Fortsetzungen!

Alles oben Gesagte beginnt auf eine coole Art und Weise zusammenzukommen:

  • Mit dem Browser können Sie die Quelle von buchstäblich allem erkunden, einschließlich der VM in Squeak
  • Sie können Änderungen vornehmen, die sich auf Ihr Live-Programm auswirken. Sie müssen also nicht neu starten und navigieren Sie zu dem, an dem Sie gerade arbeiten
  • Noch besser, wenn Ihr Programm eine Ausnahme auslöst, können Sie den Live-Code debuggen. Sie beheben den Fehler, aktualisieren den Zustand, wenn dieser inkonsistent wird, und lassen dann Ihr Programm weiterlaufen.
  • Der Browser wird Ihnen sagen, ob er denkt, dass Sie einen Tippfehler gemacht haben
  • Es ist absurd einfach, die Klassenhierarchie auf- und abwärts zu durchsuchen oder herauszufinden, auf welche Nachrichten ein Objekt reagiert oder welcher Code eine bestimmte Nachricht sendet oder welche Objekte eine bestimmte Nachricht empfangen können
  • Sie können den Status eines Objekts im System
  • überprüfen und bearbeiten
  • Sie können zwei beliebige Objekte buchstäblich mit "werden:" schalten, wodurch Sie verrückte Dinge tun können, wie zB ein beliebiges Objekt auszuwerfen und es dann von woanders einzufügen, wenn es eine Nachricht sendet.

Das Bildsystem und die Reflexion haben all diese vollkommen natürlichen und normalen Dinge für einen Smalltalker seit ungefähr dreißig Jahren gemacht.

    
Dial Z 13.08.2009 09:34
quelle
7

Smalltalk hatte in der Vergangenheit eine erstaunliche IDE eingebaut. Ich habe diese IDE in vielen Sprachen verpasst.

Smalltalk hat auch die schöne Eigenschaft, dass es typischerweise in einem lebenden System ist. Du startest sauber und fang an, Dinge zu verändern. Dies ist im Grunde ein Objekt persistentes Speichersystem. Davon abgesehen ist dies sowohl gut als auch schlecht. Was Sie ausführen, ist Teil Ihres Systems und Teil dessen, was Sie versenden. Das System kann ziemlich gut eingerichtet werden, bevor es verteilt wird. Der Nachteil ist, dass das System alles hat, was Sie als Teil dessen, was Sie versenden, ausführen. Sie müssen sehr vorsichtig Verpackung für die Neuverteilung sein.

Nun, es ist schon eine Weile her, seit ich mit Smalltalk zusammengearbeitet habe (ungefähr 20 Jahre). Ja, ich weiß, lustige Zeiten für diejenigen, die Mathe machen. Smalltalk ist eine nette Sprache, es macht Spaß darin zu programmieren, es macht Spaß zu lernen, aber ich habe es ein wenig schwer gefunden Dinge zu versenden.

Viel Spaß damit, wenn du es tust. Ich habe mit Python gespielt und es geliebt.

Jacob

    
TheJacobTaylor 12.08.2009 23:24
quelle
2

Der Sprachaspekt ist oft nicht so wichtig und viele Sprachen sind ziemlich samey ,

Von dem, was ich sehe, teilen Python und Smalltalk die OOP-Ideale ... unterscheiden sich aber in ihrer Implementierung und der Leistungsfähigkeit in der präsentierten Sprachschnittstelle.

Der wahre Wert kommt in dem, was die subtilen Unterschiede in der Syntax im Hinblick auf Implementierung ermöglichen. Werfen Sie einen Blick auf Self und andere Meta-schwere Sprachen.

Schauen Sie über die Syntax und die unmittelbare Semantik hinaus, um zu sehen, was die kleinen Unterschiede der Implementierung ermöglichen.

Zum Beispiel:

  

Alles in Smalltalk-80 ist für Änderungen innerhalb eines laufenden Programms verfügbar

Welche Unterschiede zwischen Python und Smalltalk erlauben eine tiefere Manipulation, wenn überhaupt? Wie ermöglicht die Sprache die Implementierung des Compilers / Runtime?

    
Aiden Bell 12.08.2009 23:25
quelle
1

Die Smalltalk-Sprache selbst ist sehr wichtig. Es besteht aus einer kleinen Menge leistungsstarker, orthogonaler Funktionen, die die Sprache sehr erweiterbar machen. Wie Alan Lovejoy sagt: "Smalltalk macht auch Spaß, weil das Definieren und Verwenden von domänenspezifischen Sprachen kein nachträglicher Einfall ist, es ist der einzige Weg, wie Smalltalk funktioniert." Die Sprachnotation ist von entscheidender Bedeutung, weil: "Unterschiede in der Ausdruckskraft der verwendeten Programmnotation von Bedeutung sind." Lesen Sie den ganzen Artikel hier .

    
Richard Eng 26.11.2015 02:49
quelle

Tags und Links