Studie zeigt C als beliebteste Sprache in offenen Projekten



  • Berechnet Summe von 1 bis 10 ohne Ausgabe:

    +++[>+++<-]>+[[<+>>+<-]>[<+>-]<-]<
    

    dazu passende Ausgabe:

    >++++++++++[->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>[-<<+>>]>[-<<->>]<<-[->+<]<[->+<]>>[-<<+>>]+++[->++++<]>[-<++++>]<[-<+>]<.[-]+++[->++++<]>[-<++++>]<[-<+>]<.[-]<
    


  • Nerds unter sich. 🙄



  • Volkard sein Posting war glaube ich Brainfuck, oder irre ich mich?



  • Ivo schrieb:

    Volkard sein Posting war glaube ich Brainfuck, oder irre ich mich?

    Jo, Brainfuck.



  • Ivo schrieb:

    : {{ 1 ; : }= 11 ; : #?@ I . ; : !&x DO ; : +*-u LOOP ; }= {{ !&x #?@ +*-u
    

    Ist da Deine Katze ueber die Tastatur gelaufen oder wie kommt so etwas zustande?

    ja, so ähnlich - der Fiebertraum eines Programmierers kurz vor dem Aufwachen, nach zwei Pizzas spät abends 🙂

    Das ist natürlich dasselbe wie

    11 1 DO I . LOOP
    

    nur mit den 5 Ersetzungen, die jeweils zwischen : und ; stehen:
    {{ für 1
    !&x für DO
    usw.



  • Ivo schrieb:

    Volkard sein Posting

    *Kopfschmerzen



  • noch einer 🙂

    seq 10|tr '
    > ' +|cut -b-20|bc
    
    55
    


  • Ok, jetzt habt ihr ja alles durch. Dann können wir ja zum Thema zurück.
    Mit DSL meine ich so etwas:

    #include <stdio.h>
    
    #define SEQ(start, end) do { int i = start; for(; i <= end; ++i) {
    #define QES } } while(0);
    
    #define SUM(start, end) do { int sum = 0; SEQ(start, end) sum += i; QES
    #define MUS } while(0);
    
    int main()
    {
    /***************DSL begin*************************/
    
        SEQ(1, 10) printf("%d ", i); QES
        SUM(1, 10) printf("%d ", sum); MUS
    
    /***************DSL end***************************/
    }
    

    Man sieht natürlich die offensichtlichen Schwächen von C was das Erweitern der Sprache angeht (das notwendige QES am Ende). Man könnte das natürlich deutlich flexibler und komplexer gestalten, aber um die Implementierung ging es hier ja nicht, sondern um das Aussehen beim anwenden.



  • ^^mach so:

    #define SEQ(start, end, func) do { int i = start; for(; i <= end; ++i) {char s[8]; sprintf(s, "%d ", i); func(s);}}while(0)
    

    und dann

    SEQ(1, 10, puts);
    // oder
    SEQ(1, 10, printf);
    

    🙂



  • in Forth geht das sehr ähnlich, nur kürzer und ohne Präpro-'Ferkeleien' 🙂

    : SEQ DO ;
    : QES LOOP ;
    : SUM 0 -ROT DO ;
    : MUS LOOP ;
    11 1 SEQ I . QES
    11 1 SUM I + DUP . MUS
    


  • ^^das kürzeste ist immer noch das: http://www.wolframalpha.com/input/?i=1+to+10
    mit allen outputs und noch mehr.
    🙂



  • soll heißen: es gibt viele Einsatzbereiche, für welche C gut geeignet ist, aber die Implementation von DSLs gehört sicherlich nicht dazu. Dazu braucht man Sprachen mit kleinem Sprachkern, der viel an grammatischem Freiraum läßt (Forth, LISP, Smalltalk, Tcl usw.)



  • ;fricky schrieb:

    ^^das kürzeste ist immer noch das: http://www.wolframalpha.com/input/?i=1+to+10

    das sind aber 7 Zeichen.

    daran sieht man wieder, wie wichtig die Auswahl einer passenden Implementations-Sprache selbst bei kleineren Projekten ist. In APL reichen die 5 Zeichen +/i10 - 43% Platzersparnis.



  • u-ser_l schrieb:

    ;fricky schrieb:

    ^^das kürzeste ist immer noch das: http://www.wolframalpha.com/input/?i=1+to+10

    das sind aber 7 Zeichen.

    zähl nicht einzelne zeichen sondern wörter (also bedeutungstragende einheiten) und beachte auch den reichhaltigen output. da kommt dein scheussliches APL nicht mit.
    btw, eine bekannte von mir hat tatsächlich bis vor etwa 4 jahren noch in APL programiert (bei einem grossen reiseunternehmen). nicht zu fassen.
    🙂



  • ;fricky schrieb:

    zähl nicht einzelne zeichen sondern wörter (also bedeutungstragende einheiten) und beachte auch den reichhaltigen output. da kommt dein scheussliches APL nicht mit.

    Wenn man nur Wörter und Zahlen zählt, hat Brainfuck mit 0 davon gewinnen. *freu* *hüpf*



  • Notwendigen Whitespace muss man natürlich mitzählen, sonst würde man mit Whitespace alle Programme in 0 Zeichen schreiben können.



  • u-ser_l schrieb:

    ;fricky schrieb:

    ^^das kürzeste ist immer noch das: http://www.wolframalpha.com/input/?i=1+to+10

    das sind aber 7 Zeichen.

    daran sieht man wieder, wie wichtig die Auswahl einer passenden Implementations-Sprache selbst bei kleineren Projekten ist. In APL reichen die 5 Zeichen +/i10 - 43% Platzersparnis.

    Man bekommt es auch in weniger hin: http://www.wolframalpha.com/input/?i=1to10 (5Zeichen). Damit dürfte WolframAlpha wohl der Gewinner sein, man schafft in Matlab zwar mit 1:10 die Zahlen in weniger Zeichen, aber für die Summe benötigt man noch ein sum davor und WA schafft beides in 5 Zeichen.
    Allerdings ist WA keine Programmiersprache und läuft somit außer Konkurrenz (man kann das Ergebnis nicht in einem Programm weiterverwenden).



  • volkard schrieb:

    ;fricky schrieb:

    zähl nicht einzelne zeichen sondern wörter (also bedeutungstragende einheiten) und beachte auch den reichhaltigen output. da kommt dein scheussliches APL nicht mit.

    Wenn man nur Wörter und Zahlen zählt, hat Brainfuck mit 0 davon gewinnen. *freu* *hüpf*

    nee, du hast mich nicht verstanden. BF besteht doch aus lauter 1-zeichen wörtern
    beispiel:
    deutsch: volkard ist doof -> 3
    brainfuck: +++++++. -> 8
    ^^ naja, vielleicht kannste mehrere BF-zeichen zu 'makros' zusammenfassen, aber das gilt nicht. ein 'wort' in dem sinne ist die kleinste einheit, die aussagekraft enthält.

    LISPer schrieb:

    Notwendigen Whitespace muss man natürlich mitzählen, sonst würde man mit Whitespace alle Programme in 0 Zeichen schreiben können.

    ist das nicht wie brainfuck, also auch so'n 1-zeichen wortschatz (allerdings unsichtbar)?
    🙂



  • ;fricky schrieb:

    nee, du hast mich nicht verstanden. BF besteht doch aus lauter 1-zeichen wörtern
    beispiel:
    deutsch: volkard ist doof -> 3
    brainfuck: +++++++. -> 8
    ^^ naja, vielleicht kannste mehrere BF-zeichen zu 'makros' zusammenfassen, aber das gilt nicht. ein 'wort' in dem sinne ist die kleinste einheit, die aussagekraft enthält.

    ++++++++ ist in BF aber auch nur 8.
    Ähm. Runterhacken von SUM auf S U M wäre nicht erlaubt?
    Oder von to auf t o.
    Vielleicht hätte ich Kommentare setzen sollen. 🤡



  • nicht zu vergessen die zwei recht kompakten Referenzimplementationen

    \footnotesize{\sum\limits{10}i}\qquad\mbox{} und \mbox{}\qquad\ \footnotesize{\sum\limits{a}i}$$ (hexadezimal)

    mit 4 bzw 3 Zeichen in math. Schulnotation.


Anmelden zum Antworten