Erfahrungen mit Racket

Es gibt ja bekanntlich nur zwei Arten von Programmiersprachen:
  • Die, über die jeder schimpft
  • Die, die keiner benutzt
Nöö, es gibt nur interessante und langweilige Sprachen! YMMV

Ich denke du übersiehst das Programmiersprachen nicht nur - aber eben auch! - Produktionsmittel sind. Das ist wie mit natürlichen Sprachen: Was wäre die Welt arm wenn alle nur noch english (oder was auch immer) reden würden. Und wie sieht es mit alten Sprachen aus ? Latein, Griechisch, Sanskrit? Meinst du wirklich dass die Beschäftigung mit solche exotischen Sprachen sinnlos ist und nur spielerei nur weil sie nur wenige sprechen? Das ist mitnichten so! Ein guter Geschmack zeigt sich u.A. daran dass der Horizont weiter reicht als das was aktuell zur industriellen Produktion gebraucht wird. Ansonsten gäbe es nämlich keinen echten Fortschritt..

Wenn der "Verfuger" mit weniger Aufwand in kürzerer Zeit eine leichter wartbare Software mit besser unterstützem Ökosystem in höherer Qualität als der "Entwickler" in ${EXOTIC_LANGUAGE} auf die Beine stellt - wer von beiden leistet den wertvolleren Beitrag?

Die Frage ist was du unter "hoher Qualität" verstehst. Ich sehe in der Software-Landschaft recht wenig davon: bloated, buggy, unausgereift. OK, ich will fair sein: Es gibt auch gute Sachen und echte Fortschritte. Aber das macht es nicht wesentlich besser...

s.a. Homo ludens.
 
Zuletzt bearbeitet:
Wenn ich ein Racket Binary erstelle, geht doch die Plattformunabhängigkeit verloren. Aber wenn es nur auf meiner Insellösung (PC) läuft, dann spielt das ja auch keine Rolle.
 
Ich habe inzwischen aufgegeben, Menschen fuer Racket begeistern zu wollen. Wer mit seiner gelernten und genutzten Programmiersprache zufrieden ist, wird nicht wechseln. Da ist leider jede Diskussion sinnlos. Wer auf der Suche ist, stolpert frueher oder spaeter von selbst ueber Lisp und seine Dialekte. Nur die wenigsten Menschen werden ``erleuchtet'' und erkennen bzw. erfahren die Schoenheit und Eleganz von Lisp. Fuer alle anderen sieht Lisp nur komisch aus mit den ganzen Klammern. Ich habe ausserdem selten eine so freundliche und hilfsbereite community wie die Lisp community getroffen.
Zumindest mir hast Du eine Initialzündung spendiert, die ich wohlwollend angenommen habe.:)
 
Ich habe noch ein Problem und bitte usere Racket Fachkundigen um Hilfe.

Mit c habe ich immer

Code:
system("mpg123 http://50.7.129.122:8433/");

benutzt, wenn ich meinen Lieblingssender hören wollte.

Wie realisiere ich das in racket? Benutze ich command-line oder process? Beides habe ich mir angesehen, konnte es aber bisher nicht umsetzen. Ich denke, es wird command-line sein. Ein Beispiel wäre sehr hilfreich, danke!:)
 
JavaScript ist was für Leute, die nicht programmieren können. Sie sollten es insgesamt lieber lassen.

Wie hast du noch gleich Anwendungen im Browser bis zum Erscheinen von Alternativen zu JavaScript entwickelt? Gar nicht?

Ich stelle übrigens lieber gut als schnell Software "auf die Beine", aber ich bin auch kein Silicon-Valley-Vollpfosten mit schlecht sitzendem Anzug.

Gerade im Silicon Valley ist doch die Anzugdichte extrem gering. :)

Auf wie viele Jahre professioneller Softwareentwicklung kannst du denn zurückblicken? Was war denn die letzte Software, die du professionell (mit)entwickelt hast, und in welcher Sprache?

Wird eine Sprache dadurch besser, dass irgendeine sonstwie miese, aber beliebte Software in ihr geschrieben ist?

Wird eine Sprache dadurch besser, dass niemand damit Software zur Lösung realer Probleme entwickelt?

Ernstzunehmende Software, die dein Geld verwaltet, ist übrigens in COBOL geschrieben.

Kenne ich - ähnlich hässlich wie Python, Java, JavaScript und Konsorten. ;)

Was wäre die Welt arm wenn alle nur noch english (oder was auch immer) reden würden. Und wie sieht es mit alten Sprachen aus? Latein, Griechisch, Sanskrit?

Den Vergleich halte ist für nicht ganz passend. Schließlich sind Latein, Altgriechisch und Sanskrit (bzw. waren mal) "industrielle" Sprachen mit all den Unzulänglichkeiten real eingesetzer Sprachen (Dialekte, Mehrdeutigkeiten etc.).

Besser halte ich den Vergleich mit Esperanto, das meist von einer überheblichen Klientel gepriesen wird, die aber im Endeffekt nichts mitzuteilen hat, schon gar nicht an Kommunikation interessiert ist und nur ihre vermeintliche Überlegenheit demonstrieren möchte.

Meinst du wirklich dass die Beschäftigung mit solche exotischen Sprachen sinnlos ist und nur spielerei nur weil sie nur wenige sprechen?

Das habe ich niemals behauptet und würde ich auch nicht. Die spielerische Beschäftigung mit Technik ist sehr wichtig und betreibe auch ich ausgiebig.

Für bedenklich halte ich die Einstellung, die Entwicklung von Software zur Lösung realer Probleme - mit all den Kompromissen, die das erfordert - sei eine verwerfliche und verachtenswerte Angelegenheit. Nur wer in "reinen" Sprachen nicht existente Probleme beackert, ist der Huldigung würdig. :ugly:

Das ist mitnichten so! Ein guter Geschmack zeigt sich u.A. daran dass der Horizont weiter reicht als das was aktuell zur industriellen Produktion gebraucht wird. Ansonsten gäbe es nämlich keinen echten Fortschritt..

Korrekt. Wenn man aber bar jeder praktischen Erfahrung in der realen Welt von den Sternen träumt, die irdischen Probleme als Implementierungsdetails abkanzelt und kein Verständnis für die Entwicklung (sic!) von Programmiersprachen hat, kommt halt am Ende keine Software, sondern nichts raus.

Ich bin vielleicht altmodisch, aber bei Softwareentwicklung sollte für meinen Geschmack am Ende auch Software rauskommen.

Die Frage ist was du unter "hoher Qualität" verstehst. Ich sehe in der Software-Landschaft recht wenig davon: bloated, buggy, unausgereift. OK, ich will fair sein: Es gibt auch gute Sachen und echte Fortschritte. Aber das macht es nicht wesentlich besser...

Man schaue sich das ursprüngliche Unix an, dass zu seiner Geburt unglaublich buggy, unausgereift und voller Kompromisse war. Bei vielen Forumsteilnehmern hier wäre es schon aufgrund der Krücke C gnadenlos durchgefallen.
 
Unter Win10 wird durch die kompilierte gui.exe zunächst die schwarze cmd.exe aufgerufen die dann die gui.exe staretet was natürlich häßlich ist. Ich kenne mich mit der Programmierung unter Windows nicht weiter aus. Kann mir jemand sagen wie das zu vermeiden ist?
 
Wie hast du noch gleich Anwendungen im Browser bis zum Erscheinen von Alternativen zu JavaScript entwickelt?

Niemand, der den Browser für eine geeignete Umgebung für "Anwendungen" hält, sollte einen Tag ohne eine Backpfeife erleben. Es sind schlechte Menschen, die Falsches tun. Der Mangel an Alternativen für ein gegebenes Problem bedeutet keineswegs, dass dieses Problem einer Lösung bedarf.

Auf wie viele Jahre professioneller Softwareentwicklung kannst du denn zurückblicken? Was war denn die letzte Software, die du professionell (mit)entwickelt hast, und in welcher Sprache?

Soll das jetzt ein Pissing Contest werden, wer den virtuell Längeren hat? Dann beende ich das Gespräch an dieser Stelle.

Wird eine Sprache dadurch besser, dass niemand damit Software zur Lösung realer Probleme entwickelt?

Ja, weil sie dann nicht so vollgemüllt wird. Guck dir mal PHP an, eine Sprache, die entwickelt wurde, um ein reales Problem zu lösen.

Man schaue sich das ursprüngliche Unix an, dass zu seiner Geburt unglaublich buggy, unausgereift und voller Kompromisse war. Bei vielen Forumsteilnehmern hier wäre es schon aufgrund der Krücke C gnadenlos durchgefallen.

Das ursprüngliche Unix hatte noch gar kein C.
 
habe das Binary dort hin kopiert und aus der Konsole gestartet:
Nur kurz, weil ja eigentlich Off-Topic: Ich hoffe, du siehst den Unterschied bei den Fehlern. Das permission denied resultiert also aus der Schutzfunktion w^x. Wenn du auf OpenBSD also Racket nutzen willst und die Binarys in deinem Homeverzeichnis ausführen willst, wirst du über /home eine separate Partition mit dem wxallowed-Flag mounten müssen.

Rob
 
Wie realisiere ich das in racket? Benutze ich command-line oder process?
Naja. Völlig logisch :) mit
Code:
(system "mpg123 http://50.7.129.122:8433/")
siehe dazu auch:
http://docs.racket-lang.org/reference/subprocess.html?q=system#(def._((lib._racket/system..rkt)._system))

Wobei system blockierend ist. Das heißt, Dein Prozess läuft erst weiter, wenn das mit system aufgerufene Programm wieder beendet ist.
Willst Du es lieber asynchron, dann nutze process
 
Nur kurz, weil ja eigentlich Off-Topic: Ich hoffe, du siehst den Unterschied bei den Fehlern. Das permission denied resultiert also aus der Schutzfunktion w^x. Wenn du auf OpenBSD also Racket nutzen willst und die Binarys in deinem Homeverzeichnis ausführen willst, wirst du /home in eine separate Partition mit dem wxallowed-Flag mounten müssen.

Rob

Korrekt, oder das binary nach ``/usr/local/bin/'' kopieren.
 
Wenn man aber bar jeder praktischen Erfahrung in der realen Welt von den Sternen träumt, die irdischen Probleme als Implementierungsdetails abkanzelt und kein Verständnis für die Entwicklung (sic!) von Programmiersprachen hat, kommt halt am Ende keine Software, sondern nichts raus.
Ich denke du baust hier einen Popanz auf. Kritik ist kein abkanzeln. Schau dir die Entwicklung (sic! ) von Programmiersprachen an, da ist jede aus der Kritik an ihren Vorgängern entstanden. Z.B. ASM -> C/Algol -> C++ -> C#/D/Rust oder was auch immer. Auf dem Weg wurden immer Ideen oder Techniken anderer Sprachen übernommen. Und manches schon erreichte wurde wieder vergessen und irgendwann wieder hervorgekramt. C++ und andere OOP Sprachen haben von Simula und Smaltalk gelernt, und dann noch untereinander, - jeweils durchaus unterschiedlich und anderes. Was sich mittel- und längerfristig durchsetzt hat dann oft mit Gründen zu tun die mit den Qualitäten der Sprachen recht wenig zu tun haben, - soziale, wirtschaftliche und manches mehr.

Die Entwicklung der Lisp-Familie ist ein gewisser Sonderfall da die Compis lange Zeit nicht potent genug waren um die Anforderungen der Sprache zu erfüllen. Aber das hat sich inzwischen geändert und die Sprache wird in Bytecode oder Maschienencode kompiliert. Die haben also gelernt. Und die Makro-Sprachen die es inzwischen in modernen Sprachen zu deren Vorteil gibt (Erlang, Rust, C++ Template & Co) sind ohne das Beispiel von Lisp kaum denkbar.

Ich bin vielleicht altmodisch, aber bei Softwareentwicklung sollte für meinen Geschmack am Ende auch Software rauskommen.
Da bin ich auch altmodisch, - die Frage ist allein für wen? Ich schreibe sei ca. 40 Jahren in meiner Freizeit in unterschiedlich Sprachen und auf unterschiedlichen Platformen in kleinen und mittleren Projekten Software und zwar so lange bis sie mir (sic!) gefällt. Und dann wird es geschreddert! :-) Vieles davon habe ich nur gemacht um zu verstehen was hinter den Vorhängen abläuft. Ich das nichts? Ist nur das von Wert was industriell oder kommerziell erfolgreich ist? So mag man als professioneller Entwickler denken oder denken müssen der sein Geld damit verdienen muss. Aber die Welt ist größer...

Was es zu begreifen gilt ist dass es unterschiedliche Perspektiven auf das gleiche Problem gibt. Man kann wirklich nicht sagen was die richtige oder falsche, die bessere oder schlechtere Perspektive ist. Es gibt also keinen Grund die eine auf, und die andere abzuwerten, es kommt eben jeweils darauf an unter welcher Perspektive man die Dinge aus welchem Grund vor welchem Hintergrund aktuell betrachtet.
 
Naja. Völlig logisch :) mit
Code:
(system "mpg123 http://50.7.129.122:8433/")
siehe dazu auch:
http://docs.racket-lang.org/reference/subprocess.html?q=system#(def._((lib._racket/system..rkt)._system))

Wobei system blockierend ist. Das heißt, Dein Prozess läuft erst weiter, wenn das mit system aufgerufene Programm wieder beendet ist.
Willst Du es lieber asynchron, dann nutze process
Danke, ich kenn das von der Qt Klassenbibliothek.

Meine einfachste Lösung:

Code:
#lang racket

(require racket/system)

(system "mpg123 http://50.7.129.122:8433/ &")

raco exe flower.rkt

Funktioniert einwandfrei. Wen es interessiert, es ist der Oldie Sender flower power radio, der Musik für meine Generation spielt.:)
 
Wäre dafür nicht ein Shellscript sinnvoller? Oder soll das am Ende noch mehr können?
 
Nur kurz, weil ja eigentlich Off-Topic: Ich hoffe, du siehst den Unterschied bei den Fehlern. Das permission denied resultiert also aus der Schutzfunktion w^x. Wenn du auf OpenBSD also Racket nutzen willst und die Binarys in deinem Homeverzeichnis ausführen willst, wirst du über /home eine separate Partition mit dem wxallowed-Flag mounten müssen.
Danke, hab ich verstanden. Aber jetzt wird es mir wieder zu speziell, dann müßte ich ja extra eine neue Partition anlegen ....
 
:rolleyes: Was ist das denn für ein Mist?

yo-dawg-we-heard-you-like-javascript-so-we-put-javascript-in-your-javascript-so-you-can-javascript-w.jpg
 
Hättest du nicht einfach evaljs schreiben und können, hätte ihm sicher die Birne zerschossen :ugly:

Das erinnert mich an ein altes setting von mir: VMWare host mit Windows als guest um dort den VMWare client zu installieren um damit per RDP von remote den VMWare host zu konfigurieren. :-) Das darf man wirklich niemandem erzaehlen, aber es hat damals funktioniert.
 
Zählt Y Combinator?
Bedingt. Ich würde es nicht mit Google vergleichen. :-)

Das erklärt m.E. auch den Erfolg von JavaScript - aber Python auch: Die Leute wollen nicht programmieren, die wollen so lange fertige Snippets aneinanderreihen, bis das Gesamtding irgendwie lauffähig ist. Mit einer lesbaren Sprache muss man denen da nicht kommen.
Ja. Das gabs aber zu allen Zeiten. Früher warens halt die Basic-Programmierer. Später VBA und VisualBasic. Nu sind es halt die Javascript- und PHP-Krauter. :-)

Wobei ich das nicht grundsätzlich verurteilen will. Wenn jemand dadurch seine Probleme lösen kann die er in Abwesenheit solcher Sprachen nicht lösen könnte, dann ist das ja erst mal in Ordnung.

Probleme gibts ja erst dann, wenn solche Bastellösungen professionell eingesetzt werden.

Ich gehöre auch zu den Leuten, die lieber ein schlechteres Rad selbst bauen als ein fremdes Rad mit integriertem Außenspiegel, Scheibenwischer, Waschbecken und Abenteuerspielplatz an ihre Software zu schrauben. Ich bin Entwickler, kein Verfuger.
Kommt natürlich drauf an. Aber wenn es zu einem Problem eine qualitativ gute, fertige und zum eigenen Projekt passende Lösung gibt, dann ist das i.d.R. vorzuziehen. Nicht nur, weil es Zeit spart, sondern weil Du dann auch ein ausgereiftes Modul hast das nicht noch in sich Kinderkrankheiten trägt, mit denen Du Dich dann herumschlagen musst.

Und es ist schon ein Unterschied, ob man irgendwie irgendwas zusammensucht und das dann versucht aneinander anzupassen, als wenn man gezielt fertige Lösungen evaluiert und sauber in sein Projekt integriert.

Vielleicht sollte man viel mehr Menschen APL zeigen
Oh-ha :-)

Die C-Syntax ist nicht kompliziert, die C-Syntax ist nur gelegentlich sehr kompakt.
Doch. Verglichen mit Lisp ist sie kompliziert.
Lisp kannst Du eigentlich herunterbrechen auf
(funktionsname arg1 arg2 argN)
Bei C fängt es schon damit an, dass es eben nicht nur Funktionen gibt. Es gibt zusätzlich noch Statements und Operatoren.
Klar gibt es hüben wie drüben auch Abkürzungen, aber das ist nicht das was ich meinte.

Zu meiner Schulzeit waren Pascal und u.U. BASIC ja noch die Lehrsprachen der Wahl.
Man hatte aber auch nicht so viel Auswahl. Zumindest wenn es bezahlbar sein sollte.
Und Pascal ist ja jetzt auch nicht so ne schlechte Wahl.
 
Probleme gibts ja erst dann, wenn solche Bastellösungen professionell eingesetzt werden.

Womit wir wieder bei Electron (Slack, VS Code, ...) wären. Allerdings würde ich fast anregen, diese Diskussion im Scriptsprachenthread (oder besser gleich in einem eigenen) zu führen. Sonst ist die Forenleitung wieder empört. :)

wenn es zu einem Problem eine qualitativ gute, fertige und zum eigenen Projekt passende Lösung gibt, dann ist das i.d.R. vorzuziehen. Nicht nur, weil es Zeit spart, sondern weil Du dann auch ein ausgereiftes Modul hast das nicht noch in sich Kinderkrankheiten trägt, mit denen Du Dich dann herumschlagen musst.

Alte, gut abgehangene (und vermutlich schon deshalb nur noch schwer wartbare) Module einzubinden geht eben nur so lange gut, bis du an ihre Grenzen stößt und/oder jemand bemerkt, dass da seit zwanzig Jahren ein Bug drin ist. Das zu fixen ist nicht selten umständlicher als schnell eine Eigenbaulösung zu schreiben. Da weißt du dann sogar halbwegs, warum sie wie funktioniert.


Keine Sorge - APL kann ich (absichtlich) auch nicht ... ;)

Bei C fängt es schon damit an, dass es eben nicht nur Funktionen gibt. Es gibt zusätzlich noch Statements und Operatoren.

Bei Lisp gibt es Paare (mit merkwürdiger Punktnotation), schwer erklärbare Standardmakros wie loop, nicht mal in C vorhandene, hysterisch historisch bedingte Funktionen wie cdr (insbesondere in Ausprägungen wie cadr)... dass das ziemlich praktisch ist (obwohl ich trotzdem lieber die Abkürzungen first, second, ... benutze), steht außer Frage. Aber der Kern ist: Es ist eigentlich einfach, aber. In C hast du eindeutig weniger Ausnahmen von der Regel.

Und Pascal ist ja jetzt auch nicht so ne schlechte Wahl.

Es tut mir ein bisschen leid zu sehen, dass Nachwuchs-Pascaler kaum noch zu finden sind. Die sind anscheinend (Quelle: entwickler-ecke.de) alle bei C# gelandet. Gleicher "Designer", völlig andere Ausrichtung.
 
Zurück
Oben