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.


Anmelden zum Antworten