Studie zeigt C als beliebteste Sprache in offenen Projekten
-
kann es jemand mit 4 Zeichen ?
-
Irgendwie am Thema vorbei, mir ging es eigentlich um die Implementierung von DSLs innerhalb einer Sprache und nicht darum wer den Kleinsten hat.
-
u-ser_l schrieb:
kann es jemand mit 4 Zeichen ?
Wenn du Sprachen in der Art von HQ9+ zulässt, mach ich es dir mit 0 bis 1 Zeichen.
-
ist Forth genügend DSL-fähig ? Denke schon.
11 1 DO I . LOOP 0 11 1 DO I + LOOP .
-
\newcount\s\s=0\newcount\n\n=1\loop\number\n\ \advance\s by\n\advance\n by1\ifnum\n<10\repeat\number\s\end 1 2 3 4 5 6 7 8 9 10 55
-
sum [1..10]
In Haskell (ist auch nur ein modernes Lisp)! Auch ist es nicht schlimm wie in der Lispversion mehr Woerter zu nutzen. Nennt sich literate programming. Die Smalltalkversion wird dem nicht gerecht.
-
knivil schrieb:
Nennt sich literate programming.
Der arme Knuth.
-
u-ser_l schrieb:
ist Forth genügend DSL-fähig ? Denke schon.
11 1 DO I . LOOP 0 11 1 DO I + LOOP .
Kann ich nicht beurteilen, dazu müsstest du schon noch ein Beispiel dazulegen wie es aussehen würde, wenn du Forth nutzt und keine in Forth implementierte DSL.
Bei Common Lisp wäre eine Lisp-Variante:
(let ((sum 0)) (dotimes (i 10) (incf sum (1+ i))) (print sum)) (let ((numbers nil)) (dotimes (i 10) (push (1+ i) numbers)) (print (nreverse numbers)))
Egal wie man es macht, die loop-Varianten versteht jeder sofort ohne nachzudenken.
-
LISPer schrieb:
u-ser_l schrieb:
ist Forth genügend DSL-fähig ? Denke schon.
11 1 DO I . LOOP 0 11 1 DO I + LOOP .
Kann ich nicht beurteilen, dazu müsstest du schon noch ein Beispiel dazulegen wie es aussehen würde, wenn du Forth nutzt und keine in Forth implementierte DSL.
Bei Common Lisp wäre eine Lisp-Variante:
(let ((sum 0)) (dotimes (i 10) (incf sum (1+ i))) (print sum)) (let ((numbers nil)) (dotimes (i 10) (push (1+ i) numbers)) (print (nreverse numbers)))
Egal wie man es macht, die loop-Varianten versteht jeder sofort ohne nachzudenken.
Der letze Satz bezieht sich auf Common Lisp.
-
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.