Studie zeigt C als beliebteste Sprache in offenen Projekten
-
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
{\sum\limits{10}i}\qquad\mbox{} und \mbox{}\qquad\ \footnotesize{\sum\limits{a}i}$$ (hexadezimal)
mit 4 bzw 3 Zeichen in math. Schulnotation.
-
u-ser_l schrieb:
nicht zu vergessen die zwei recht kompakten Referenzimplementationen
{\sum\limits{10}i}\qquad\mbox{} und \mbox{}\qquad\ \footnotesize{\sum\limits{a}i}$$ (hexadezimal)
mit 4 bzw 3 Zeichen in math. Schulnotation.
Gehört unter das Sigma nicht ein "i=0" ?
-
volkard schrieb:
Gehört unter das Sigma nicht ein "i=0" ?
i=1 muss unten hin.
u-ser_l: trotzdem 3 informationen: summe_von_bis, kürzer gehts nicht.
-
da fehlt nichts - wenn Laufvariable und Untergrenze unmißverständlich sind, kann man sie weglassen.
-
;fricky schrieb:
btw, eine bekannte von mir hat tatsächlich bis vor etwa 4 jahren noch in APL programiert
und was benutzt man seit 4 Jahren statt APL ?
-
sag jetzt nicht 'java'
-
u-ser_l schrieb:
;fricky schrieb:
btw, eine bekannte von mir hat tatsächlich bis vor etwa 4 jahren noch in APL programiert
und was benutzt man seit 4 Jahren statt APL ?
Java.