Studie zeigt C als beliebteste Sprache in offenen Projekten
-
LISPer schrieb:
dazu müsstest du schon noch ein Beispiel dazulegen wie es aussehen würde, wenn du Forth nutzt und keine in Forth implementierte DSL.
das ist Forth und keine DSL
11 1 DO I . LOOP 0 11 1 DO I + LOOP .
-
aber wenn Dir das nicht kryptisch genug ist - kein Problem:
: {{ 1 ; : }= 11 ; : #?@ I . ; : !&x DO ; : +*-u LOOP ; }= {{ !&x #?@ +*-u
-
u-ser_l schrieb:
aber wenn Dir das nicht kryptisch genug ist - kein Problem:
: {{ 1 ; : }= 11 ; : #?@ I . ; : !&x DO ; : +*-u LOOP ; }= {{ !&x #?@ +*-u
Ist da Deine Katze ueber die Tastatur gelaufen oder wie kommt so etwas zustande?
-
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).