Studie zeigt C als beliebteste Sprache in offenen Projekten
-
u-ser_l schrieb:
mit object-message-passing-Syntax:
Hans sage: 'hallo'
mit Methoden-Syntax:
Hans.sage('hallo')
^^syntax ist doch ziemlich egal, mir gehts um die beiden varianten synchrones und asynchrones message passing. ersteres sind einfache 'gosubs' und damit statisch und single-CPU-bezogen, können direkt zu maschinencode gemacht werden usw. der asynchrone fall braucht ein laufzeitsystem, objekte sind prozesse und haben eine message-queue. (siehe z.b. sowas wie erlang). sowas finde ich 'natürlicher' als diese methoden-aufruferei. zudem haste damit automatisch unterstützung für multiprozessorsysteme (solche faxen wie OpenMP für C++ sind von vorn herein überflüssig), multitasking-probleme wie race conditions schon auf unterster ebene erscheinen garnicht erst, weil's durch die message-queues entkoppelt ist, usw. wie machts smalltalk eigentlich? synchron oder asynchron?
u-ser_l schrieb:
Aus dem object-message-passing folgen dann die weiteren notwendigen Eigenschaften der OOP wie Polymorphie, information hiding usw.
polymorphie folgt nicht daraus. polymorphie entspringt doch der komponenten-orientierten programmierung. oder nicht?
-
Polymorphie folgt insofern aus obj.-mess'g.-passing, als: ein und dieselbe message kann je nach Klasse des Empfängers verschiedene Bedeutungen haben, sprich: Polymorphie in Form von überladenen Nachrichten bzw Operatoren (= Spezialfall von Nachrichten beim object-mess'g-passing)
@(A)synchronität: message passing ist (zumindest beim klassischen Smalltalk-80) synchron. Es gibt gewisse Steuerungsmöglichkeiten, indem man Blocks verschickt - ein Block wird ja erst in dem Moment ausgewertet, wenn er nachrichten wie value oder value: ... empfängt.
Ich meine gelesen zu haben, daß frühe evtl experimentelle Smalltalk-Versionen vor 80 auf asynchrones message passing aufgebaut waren, kann das aber momentan nicht nachprüfen.
-
Die flexibelste Sprache ist und bleibt (Common) Lisp:
(loop for i from 1 to 10 sum i) ===> 55 (loop for i from 1 to 10 collect i) ===> (1 2 3 4 5 6 7 8 9 10)
Welche andere Sprache bietet einem schon die Möglichkeit eine DSL so schön zu implementieren?
-
Smalltalk!
(1 to: 10) inject: 0 into: [ :sum :item | sum + item ]. => 55 (1 to: 10) collect: [ :item ]. => #(1 2 3 4 5 6 7 8 9 10)
aber die lisp-Versionen sind auch ganz schön ...
-
u-ser_l schrieb:
Smalltalk!
(1 to: 10) inject: 0 into: [ :sum :item | sum + item ]. => 55 (1 to: 10) collect: [ :item ]. => #(1 2 3 4 5 6 7 8 9 10)
aber die lisp-Versionen sind auch ganz schön ...
Das ist doch total kryptisch, da sehe ich jetzt keinen Vorteil gegenüber der LISP-Notation (also der Lisp-Syntax und nicht der DSL von loop).
-
ich formulier's mal um, damit es dem Lisp-Beispiel ähnlicher wird:
(1 to: 10) inject: 0 into: [ :s :i | s + i ]. (1 to: 10) collect: [ :i ].
was ist daran kryptisch ? Das ist schön und elegant.
-
außerdem ist es in Smalltalk kürzer:
(loop for i from 1 to 10 sum i) (loop for i from 1 to 10 collect i) => 18 Wörter (1 to: 10) inject: 0 into: [ :s :i | s + i ]. (1 to: 10) collect: [ :i ]. => 16 Wörter
-
u-ser_l schrieb:
ich formulier's mal um, damit es dem Lisp-Beispiel ähnlicher wird:
(1 to: 10) inject: 0 into: [ :s :i | s + i ]. (1 to: 10) collect: [ :i ].
was ist daran kryptisch ? Das ist schön und elegant.
das ist verdammt schön und elegant. ich hatte mich deshalb damals auch sofort in smalltalk verliebt.
-
u-ser_l schrieb:
(1 to: 10) inject: 0 into: [ :s :i | s + i ]. (1 to: 10) collect: [ :i ].
was ist daran kryptisch ?
So gut wie fast alles.
-
u-ser_l schrieb:
außerdem ist es in Smalltalk kürzer:
(loop for i from 1 to 10 sum i) (loop for i from 1 to 10 collect i) => 18 Wörter (1 to: 10) inject: 0 into: [ :s :i | s + i ]. (1 to: 10) collect: [ :i ]. => 16 Wörter
die wörter zu zählen, würde ich mal nicht als maß nehmen. ich finde zum beispiel die syntax von Visual Basic in den OOP-sachen schöner als die von C++. da schreibt man alles sehr langatmig aus und kommt auf sehr sehr viele wörter. trotzdem fließt es mir aus den fingern und ich lese es wie einen roman, während bei C++ sowohl beim schreiben als auch beim lesen oft ein ruckeln zu verzeichnen ist.
-
volkard schrieb:
das ist verdammt schön und elegant. ich hatte mich deshalb damals auch sofort in smalltalk verliebt.
nanu ?
-
u-ser_l schrieb:
volkard schrieb:
das ist verdammt schön und elegant. ich hatte mich deshalb damals auch sofort in smalltalk verliebt.
nanu ?
versteh mich nicht falsch. ich liebe smalltalk nicht. ich mag es nichtmal wirklich. wir haben uns auseinandergelebt, sagt man da wohl. ich mag heute C++, aber ich hasse die syntax von C++. ist wohl sowas wie mit einer klugen toleranten fürsorglichen schönen ehefrau, die stinkefüße hat; Inschallah.
-
Nimm Python.
-
u-ser_l schrieb:
(loop for i from 1 to 10 sum i) (loop for i from 1 to 10 collect i) => 18 Wörter (1 to: 10) inject: 0 into: [ :s :i | s + i ]. (1 to: 10) collect: [ :i ]. => 16 Wörter
aber die ausgabe fehlt oder?
// scala, mit ausgabe List.range(1,11).foreach(print) // ausgabe: 12345678910 print (List.range(1,11).foldRight(0)(_+_)) // ausgabe: 55
-
;fricky schrieb:
u-ser_l schrieb:
(loop for i from 1 to 10 sum i) (loop for i from 1 to 10 collect i) => 18 Wörter (1 to: 10) inject: 0 into: [ :s :i | s + i ]. (1 to: 10) collect: [ :i ]. => 16 Wörter
aber die ausgabe fehlt oder?
// scala, mit ausgabe List.range(1,11).foreach(print) // ausgabe: 12345678910 print (List.range(1,11).foldRight(0)(_+_)) // ausgabe: 55
Und du meinst C++ wäre kryptisch??
-
1:10 sum (1:10)
-
C++-Progger, Der wahre schrieb:
Und du meinst C++ wäre kryptisch??
naja, *räusper*, zugegeben, das aufsummieren sieht schlimm aus. aber so geht's auch noch:
print (Array.range(1, 11).reduceLeft(_+_)) // ausgabe: 55
Tim schrieb:
1:10 sum (1:10)
auch ohne ausgabe, ne? welche sprache?
-
noch was zum raten: wo geht das
sum of 1 to 10
^^ausgabe 55. kein scherz, geht wirklich.
-
40 Zeichen und mit Ausgabe
seq 10;seq -s ' ' 10|dc -e '?+++++++++p' 1 2 3 4 5 6 7 8 9 10 55
-
;fricky schrieb:
Tim schrieb:
1:10 sum (1:10)
auch ohne ausgabe, ne? welche sprache?
Matlab, und das gibt aus wenn kein Semikolon am Ende.