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?
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.
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:
Alles oben Gesagte beginnt auf eine coole Art und Weise zusammenzukommen:
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.
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
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?
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 .