Fragen zu Smalltalk

CAMISOLITE

Well-Known Member
Hallo, ich beschäftige mich gerade mit Objective-C und Smalltalk. Bei letzterem ist mir insbesondere Squeak ins Auge gefallen.

Gibt es hier Leute, die schon Erfahrungen mit Smalltalk und Squeak (oder einem anderen Anbieter) gemacht haben ?

Also ich bin ja ein Fan von "nur Programmieren was zum Problem gehört" und dem Weglassen von immer wiederkehrenden allgemeinen Problemstellungen, die durch die Programmiersprache und/oder die Entwicklungswerkzeuge verursacht werden. Andererseits weiß ich aus meiner jahrelangen Java-Erfahrung auch, daß Konzepte wie Garbage-Collection durchaus auch problematisch werden können (Stichwort: Performance, Resourcenhunger). Nun denn, man kann natürlich in jeder Sprache performanten und grausigen Code produzieren, davon mal ganz ab.

In diesem Zusammenhang sind mir zwei Dinge aufgefallen.

1. Generierung von reinem C-Code soll aus Smalltalk-Code möglich sein, die Performance soll der von "kommerziellen Smalltalk-Anwendungen" entsprechen. (Squeak only). Fragt sich hier natürlich, wie diese kommerziellen Anwendungen performen, warum kein Vergleich zu anderen Sprachen gemacht wird.

2. Die VM soll angeblich deutlich geradliniger arbeiten (->Speicherverbrauch) als die von Java. Das behauptet zumindest ein Typ, der das auf seinem FreeBSD-Server einsetzt.

Ich suche nun nach Bestätigungen oder Widersprüchen von Anwendern.

Wie ist die Performance der Smalltalk-VMs (insbesonder Squeak) im Vergleich zu Java oder vielleicht auch anderen Sprachen zu sehen ?

Bringt die Umwandlung in C wirklich Vorteile ? Okay es ist C, aber wie stabil läuft die Anwendung dann noch und wie effizient ist der Code um die Vorteile von C überhaupt nutzen zu können ?
 
Antworten zu Smalltalk

Hi CAMISOLITE,

natürlich gibt es Leute die mit Smalltalk rumspielen :) siehe auch lang/squeak und lang/visualworks.

Dazu möchte ich vorher ein paar Dinge bemerken:
- in der Regel lieben, oder hassen die Leute Smalltalk
- Smalltalk ist nicht Smalltalk ... man sollte lieber von der Implementierung sprechen, also Squeak, VisualWorks, etc.

CAMISOLITE schrieb:
1. Generierung von reinem C-Code soll aus Smalltalk-Code möglich sein, die Performance soll der von "kommerziellen Smalltalk-Anwendungen" entsprechen. (Squeak only). Fragt sich hier natürlich, wie diese kommerziellen Anwendungen performen, warum kein Vergleich zu anderen Sprachen gemacht wird.
Bei Squeak wird der Kern der VM in einer Untermenge der Syntax von Squeak definiert (genannt Slang). Slang kann in C umgewandelt werden, allerdings schreckliches C meiner Meinung nach. Um diesen C-Kern werden dann Platform-spezifische, handgeschriebene C-Sourcen für die Anpassung an dieselbige gepackt. Alles zusammen ergibt nach dem make die fertige VM.
Ich glaube mit Smalltalk MT fährst das besser, wenn du in Smalltalk entwickeln und am Ende C generieren willst.

CAMISOLITE schrieb:
2. Die VM soll angeblich deutlich geradliniger arbeiten (->Speicherverbrauch) als die von Java. Das behauptet zumindest ein Typ, der das auf seinem FreeBSD-Server einsetzt.
Bitte um Definition von "geradliniger arbeiten"?!? Persönliche halte ich die ewigen Vergleich zwischen Java und Smalltalk zum Kotzen (Auch wenn ich mal selbst einen geschrieben habe ...).

CAMISOLITE schrieb:
Wie ist die Performance der Smalltalk-VMs (insbesonder Squeak) im Vergleich zu Java oder vielleicht auch anderen Sprachen zu sehen ?
Vermutungen: Ich glaube die Squeak VM ist ein ganzes Stück langsamer als die Java VM (Interpreter). Die VisualWorks VM ist mit der Java VM vergleichbar (JIT). Aber ist Performanz in der Regel nicht eher weniger wichtig? Die Vorteile von Smalltalk sind in der Regel:
- produktiveres Arbeiten
- weniger Code
- mehr Möglichkeiten
Was die Performanz angeht so sollte man bei Smalltalk auch die GUI mit einbeziehen. Das alte MVC in Squeak ist sehr schnell, während Morphic in Squeak langsam und Wrapper und Pollock in VisualWorks extrem lahm sind.

CAMISOLITE schrieb:
Bringt die Umwandlung in C wirklich Vorteile ? Okay es ist C, aber wie stabil läuft die Anwendung dann noch und wie effizient ist der Code um die Vorteile von C überhaupt nutzen zu können ?
Also die Squeak VM ist stabil wie Sau :) Es ist einfach notwendig die VM in C zu wandeln ... ohne Henne kein Ei und ohne Ei keine Henne.

Wenn du Smalltalk und Speed verbinden willst, dann schau dir am besten VisualWorks und DLLC Connect an.

Gruß Chris
 
Erstmal danke für die prompte Antwort.

Ob ich die Sprache lieben oder hassen werde, kann ich noch nicht sagen. Zumindest gehöre ich definitv nicht zu denjenigen, für die es ausschließlich C++ gibt (eher im Gegentum).

Deinen (und anderen) Ausführungen entnehme ich, daß der Smalltalk-Binärcode/Bytecode/das Image/<korrekten Namen einsetzen> nicht portabel zwischen den Implementierungen ist. Die Sprache ansich (=Syntax) ist genormt und zwischen den Implementierungen identisch (etwaige mitgelieferte Klassenbibliotheken außen vor). Das binäre Endergebnis ist nicht identisch und hängt damit stärker von der Laufzeitumgebung (=Implementierung) ab als z.B. bei Java (eine Jave-Klasse läuft gleichermaßen auf eine VM von SUN, IBM, BEA, GCJ ...).

Habe ich das so richtig verstanden ?


Habe übrigens den Artikel zum Thema VM-Resourcenverbrauch wiedergefunden:

Java - a love/hate relationship

Mir geht es übrigens nicht darum, abermals Java Smalltalk gegenüberzustellen. Ich brauche nur einen ersten Hinweis darauf, wo ich Smalltalk (bzw. eines seiner Implementierungen) performancetechnisch einordnen kann.

Die Produktivität steigt bei Verwenden einer klar objektorientierten Sprache wie Smalltalk sicherlich. Aber - wie so oft - zählt auch die Performance. Übrigens habe ich gelesen (in einem Vergleich Java<->ST, ja schon wieder ein Vergleich), daß Java schlecht sei, weil man ja nur ein Ergebnis erzeugen könne (portabler Bytecode) und bei ST könne man sich "aussuchen", ob man lieber plattformunabhängigen Code oder optimierten plattformabhängigen Code haben möchte. Leider bleibt es meist bei solchen Behauptungen. Any Comments ?

Smalltalk MT sieht zwar sehr interessant aus, aber ist ja wohl auf Windows fixiert. Mir schwebt eher eine Implementierung vor, die nicht an eine bestimmte Plattform gekettet ist. Was ist mit GNU Smalltalk ? Empfehlung oder eher "Finger weg" ?
 
Hi CAMISOLITE,

ja, ein Smalltalk Image läuft immer nur auf der zugehörigen VM. Also squeak.image auf squeak, visual.im auf visual, etc.. Aber es gibt gute Chancen, Smalltalk Sourcen sowohl in VisualWorks, als auch in Squeak nutzen zu können, solange man sich am ANSI Smalltalk orientiert. Das heißt aber auch ohne GUI.

Übrigens habe ich gelesen (in einem Vergleich Java<->ST, ja schon wieder ein Vergleich), daß Java schlecht sei, weil man ja nur ein Ergebnis erzeugen könne (portabler Bytecode) und bei ST könne man sich "aussuchen", ob man lieber plattformunabhängigen Code oder optimierten plattformabhängigen Code haben möchte. Leider bleibt es meist bei solchen Behauptungen. Any Comments ?
Naja ... Java ist nicht "schlecht" und Smalltalk auch nicht. Was derjenige meint, könnte folgendes bedeuten:
- Codeübersetzung per Compiler Compiler von Smalltalk nach C (siehe Slang in Squeak oder Smalltalk MT)
- Zusammenpacken von VM und Image in ein Binary, was natürlich ausser der Plattformabhängigkeit nichts bringt.
Beides könnte es auch bei Java geben. Allerdings erachte ich diesen sehr voreingenommenen Kommentar als etwas übertrieben.

Was ist mit GNU Smalltalk ? Empfehlung oder eher "Finger weg" ?
GNU Smalltalk wird kaum benutzt und kaum entwickelt. Es gibt nur wenige Bibliotheken. Für mich wäre das nix.

Was vielleicht noch interessant für dich ist, wäre Smalltalk/X oder #Smalltalk. Mit beiden bin ich aber noch nicht in Kontakt gekommen.

Den größten Erfolg wird man mit Squeak und VisualWorks haben. Seaside, eine der Killerapplikationen im Augenblick, wird in Squeak entwickelt und nach VisualWorks portiert. SmallWiki 1 wurde in VisualWorks entwickelt und von mir nach Squeak portiert. Version 2 wird gleich in Squeak entwickelt. Beide Smalltalk sind also vergleichbar und haben lebhafte Communities.

Auf Arbeit verwende ich VisualWorks, privat zusätzlich Squeak. Macht Spaß :)

Gruß Chris
 
Nochmals danke für Deine Anmerkungen. Also mit VisualWorks muß ich mich jetzt wohl gezwungenermaßen eh beschäftigen (es heißt hier allerdings LearningBook). Mal sehen wie mir das dann so gefallen wird.

Smalltalk/X scheint mir für meine Belange sehr interessant zu sein. Squeak hat den Sympathiepunkt, daß es komplett offen ist und überall (?) läuft.

#Smalltalk (oder doch Smalltalk# oder S# ?) steckt offensichtlich noch in den Kinderschuhen. Außerdem habe ich weder Ambitionen noch Zwänge, mich mit .NET zu beschäftigen.

Habe also nun drei Kandidaten. Werde in einigen Monaten vielleicht mal hier ein Resumee ziehen bezüglich Smalltalk im allgemeinen und seinen (diesen drei) Implementierungen im speziellen.
 
Zurück
Oben