Scheme vs. FUD

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
lunar

Edit (Leonidas): Von Thread "Suche Idee zum Erlernen von Python..." abgetrennt.
sma hat geschrieben:Oh, einen eigenen kleinen Lisp bzw. Scheme-Interpreter zu bauen, ist eine Aufgabe der Art, wie ich sie spannend finde. Und man lernt Scheme, IMHO sollte jeder diese Sprache kennen. Ist wie Latein oder Griechisch: Wird vielleicht nicht mehr aktiv gesprochen (benutzt), aber entscheidend für die Entwicklung jüngerer Sprachen und für die Kultur der Software-Entwicklung.
Tja, da googled man nach "Scheme" und der vierte Treffer führt gleich mal zu Scheme - Geißel der Menschheit. Das erinnert mich irgend *sehr stark* an die Ansichten einiger Leute aus meiner ehemaligen Klasse zur lateinischen Sprache ;)

Btw, das soll niemanden davon abhalten, Scheme zu lernen, ich stimmte sma da mal zu, sowohl Scheme als Latein sind nützliches Grundwissen (zumal Scheme auch den Einstieg in elisp erleichtert, damit man wunderbare Emacs-Modes programmieren kann ;) )

Edit (Leonidas): Von Thread "Suche Idee zum Erlernen von Python..." abgetrennt.
Zuletzt geändert von lunar am Montag 9. Juni 2008, 19:52, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Tja, da googled man nach "Scheme" und der vierte Treffer führt gleich mal zu Scheme - Geißel der Menschheit.
Ganz ehrlich, man kann Scheme einiges anhängen, aber das was der da schreibt ist kompletter FUD. Scheme ist definitiv einer der übersichtlichsten Lisp-Dialekte die es gibt, R5RS war ausreichend kurz um ihn mal eben im Zug durchzulesen.

Weiterhin: Scheme ist langsam. Das ist totaler Blödsinn. Eine Sprache ist nicht per-se langsam oder schnell. Die Implementierung machts. Mit PLT gibt es zwar eine tolle Implementierung (mit einem JIT und mehreren GCs), aber sie ist nicht schnell, womöglich aber vergleichbar mit Python. Wenn man was schnelleres will kann man Chicken oder Gambit nehmen - man könnte sich sogar auf das was Stalin bietet beschränken, dann bekommt man recht schnellen Code raus. Punkt 3 wird überfällig, wenn man sich mal Bigloo anschaut. In welchen Code möchtest du denn dein Scheme-Zeug kompilieren? Native? Klar. CIL? Sicher. JVM? Natürlich.

Das eine Programmiersprache korrekter als eine andere überhaupt sein kann, das können wir ruhig ins Land der Träume verweisen. Das Scheme mehr Funktionen hat als andere Programiersprachen hat das ist wahl. Aber es hat Sprachlich mehr drauf. Nehmen wir mal exakte Zahlen, Funktionen höherer Ordnung, Continuations. Klar, kann man sich in C irgendwie hinhacken, aber da beide Sprachen Turingvollständig sind, ist das ein blödsinniges Argument. Scheme vorzuwerfen dass es nicht Objektorientiert sei, ist wie einem Apfel vorzuwerfen dass es keine Birne ist. Scheme hat eine Menge OO-Libs, mit TinyTalk gibt es womöglich etwas brauchbares. OOP muss in Scheme aber nicht sein. CL hat hingegen mit CLOS eines der ausgeklügeltsten Objektsysteme überhaupt.

Das Scheme keine Typen hat ist ebenso quatsch, Scheme ist wie Python stark dynamisch typisiert. Scheme kennt durchaus Atome oder Symbole. Aber wie wir in Python wissen, garantiert Typisierung auch keine korrekten Programme und die Typisierung in C kann sich etwa mit der von Haskell nicht wirklich messen.

Das man syntaktisch korrekten und semantisch falschen Code schreiben kann ist auch keine Neuerung. Ich erwarte bei dem Punkt doch wenigstens die Nennung einer Sprache bei der das so ist. In C(++) hat man neben semantischen Problemen auch noch Memory Corruption. Ooops.

Schweres debuggen: get an editor. Debuggen im Interpreter ist definitiv einfacher als kompilierte Sachen zu debuggen. PLT hat einen schönen Stepper und zeigt auch schön geklammerte Blöcke. Für CL gibt es mit SLIME eine der erstaunlichsten Entwicklungsumgebungen die es jemals gab. Bei Problemen kann man in CL die Ausführung verlassen, den Code durchsehen und weiterlaufen lassen. Siehe Maxima.

Also das war eine der unfundiertesten Kritiken die jemals geschrieben worden sind. Wenn man statt Scheme irgendeine andere Sprache eingesetzt hat, würden die Argumente etwa genauso stimmen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Weißt du was? Ich bin absolut deiner Meinung ;) Ich habe das auch nicht gepostet, weil es irgendeiner Diskussion würdig ist, sondern weil ich das Ranking auf Google witzig fand ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich halte ausgesprochen wenig von Java! Warum?
  1. Java ist unübersichtlich. Ich kenne keine Sprache, in der man sich so in der Stdlib verlieren kann.
  2. Java ist langsam, weil kein richtiger Programmierer seine Zeit damit verschwendet, die JVM für schnell reagierende Desktopanwendungen zu optimieren.
  3. Java-Bytecode ist interpretiert und erleidet dadurch nochmals Performancedefizite.
  4. Java ist nicht korrekter als andere Programmiersprachen. Zwar mag die Definition mathematisch vollständig und korrekt sein (als Laie ist mir das unmöglich nachzuvollziehen, daher nehme ich es einfach mal an, weil es mir so oft schon gesagt wurde) - aber die Implementierung ist genauso fehleranfällig wie die anderer Programmiersprachen
  5. Java hat nicht mehr Funktionen als andere Programmiersprachen. Auch wenn uns in der Vorlesungen Klassen (functions of higher order) als tolle Neuerung verkauft wurden, das ist nichts neues! Das kann man alles in C auch. Bestes Beispiel: Zur Not kann man sich einen Klassen in C programmieren, etwa mit gobject!
  6. Java ist nicht funktional. Das macht die Wartung der Programme schwerer, und erhöht deren Komplexität deutlich. Und, nein, diese "Pseudo-Funktionen-Höherer-Ordnung" ist ja wohl wirklich ein Witz (eine verschachtelte Klasse zu übergeben ist absolut lächerlich). Daher werden natürlich auch (wirklich geniale) Konzepte, wie ``map()`` oder ``filter()`` nicht realisierbar.
  7. Java ist nicht typsicher, ganz einfach, weil es keine Typen gibt. In C entspräche das genau einem Typ: "int" (implizit "void*"), mit denen man auch alles realisieren kann... wenn man nur immer weiß, was denn da jetzt nun übergeben wird. Das erhöht nicht nur die Fehleranfälligkeit von Codes beträchtlich, sondern führt auch noch zu einer viel schwereren Wartbarkeit (wenn nicht exzessiv Kommentare verwandt wurden).
  8. In Java kann man oft syntaktisch korrekten, aber semantisch inkorrekten Code erzeugen, indem man die Klammerung etwas verändert. Diese Fehler sind ausgesprochen schwierig zu finden.
  9. Java läßt sich nur sehr schlecht debuggen. Einen Fehler zu finden dauert oft ewig, oft liegt es dann wirklich nur an verkehrten Typdeklarationen: Katastrophal
Ich denke meine Version ist eigentlich gut gelungen. Viele Punkte konnte ich so lassen wie sie waren, insbesondere Punkt 7 weil er weder für Scheme noch für Java stimmt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

@Leonidas
Deins ist wahrer als der FUD über Scheme *lach
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Ich habe das auch nicht gepostet, weil es irgendeiner Diskussion würdig ist, sondern weil ich das Ranking auf Google witzig fand ;)
Das Ranking kann ich mir auf zweierlei Arten erklären:
  1. Die Leute findens total lächerlich und linken auf ihren Seiten darauf, damit andere auch was zum lachen haben
  2. Die Leute sind denkfaul und scheitern an Scheme wegen der Klammern, dann linken sie auf andere Leute die ebenso gescheitert sind. "Das kenn ich nicht, das mag ich also nicht."
Es ist natürlich in der Tat so, dass Scheme etwas "anders" ist, wenn man von anderen Sprachen kommt, aber einige der Einwände sind genauso blödsinnig wie das Python keine geschweiften Klammern verwendet. Das kann ja nichts sein, denkt sich Daniel Achim U. Jones und schreibt mal schön einen Flame. Natürlich ist jede Sprache anders, es wäre ebenso verkehrt von Java zu erwarten, dass es wie C ist. Oder was auch immer.

Ich möchte hier Scheme auch nicht sonderlich in Schutz nehmen, denn eines ist die Sprache leider momentan: für den sofortigen Einsatz mit schnellen Resultaten absolut ungeeignet. ich bin auch nicht wirklich gut und habe für einen Code der in Python 2 Zeilen lang ist in Scheme einen Nachmittag investiert. Aber versetzen wir uns einige Jahre zurück, etwa mitte der 80er Jahre. Da war die Auswahl der Programmiersprachen aus heutiger Sicht nicht wirklich prickelnd und sogar Elisp war ja im Vergleich schon eine großartige Programmiersprache, nicht ohne grund setzt Emacs da drauf.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Hätte ich gewusst, was für ein Off-Topic ich damit anstöße, hätte ich das Posting gelassen ;) Nichts für ungut, aber dir ist das Thema dieses Threads schon bewusst, oder? Wenn wir über Scheme diskutieren willst, dann bin ich da gerne dabei, aber bitte in einem neuen Thread ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Wenn wir über Scheme diskutieren willst, dann bin ich da gerne dabei, aber bitte in einem neuen Thread ;)
Ich hasse es Threads zu trennen, weil das immer so eine nervige Arbeit ist aber ok, hier ist der geteilte Thread.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Zum Theme "Wie schön man FUD verbreiten kann" möchte ich an http://www.mdlug.de/bibo/projects/web/cgi/ erinnern...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dem Thread wollte ich noch folgende interessante Betrachtung der Historie von Scheme vom Scheme-Erfinder Guy Steele hinzufügen.

Interessant ist der Umweg über die Objektorientierung - genauer die von Actor inspirierten Paradigmen. Somit ist Scheme auch das Ergebnis der Erkenntnis, dass man Objektorientierung verallgemeinern kann.

Witzig ist auch, dass Scheme genauso wie Forth den Namen einer Beschränkung im Dateisystem des verwendeten Implementierungsrechners verdankt.

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sma hat geschrieben:Witzig ist auch, dass Scheme genauso wie Forth den Namen einer Beschränkung im Dateisystem des verwendeten Implementierungsrechners verdankt.
Und auch das Steele am Entwurf von Java beteiligt war, was so unterschiedlich und so langweilig im Vergleich ist, wie es nur geht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Steele hatte Erfahrungen im Schreiben von Standards. An der eigentlichen Entwicklung von Java war er meines Wissens nicht beteiligt. Er hatte allerdings 1998 einige Ideen, wie es weiter gehen könnte. Ist dann aber nix passiert. Jetzt arbeitet er an einer neuen Sprache speziell für Leute, die rechnen wollen und hat dort die Ideen umgesetzt.

Stefan
Antworten