Funktionale Programmierung mit Haskell



  • Insbesondere garbage collection, das ultimate feature und Killerargument von Java trat das erstemal 1960 in From von Lisp hervor. 1960 ... und da soll Java noch 'ne Revolution sein?



  • knivil schrieb:

    Insbesondere garbage collection, das ultimate feature und Killerargument von Java trat das erstemal 1960 in From von Lisp hervor. 1960 ... und da soll Java noch 'ne Revolution sein?

    bitte sag dass du das nicht ernst meinst und nur trollen willst.



  • Shade Of Mine schrieb:

    bitte sag dass du das nicht ernst meinst und nur trollen willst.

    Klar, aber welchen Teil meinst du davon? 😃

    Ich war mir nicht ganz sicher, wann garbage collection in Lisp auftauchte, aber das sagt wikipedia dazu (jaja, wikipedia wieder):

    Garbage collection was invented by John McCarthy around 1959 to solve the problems of manual memory management in Lisp.



  • knivil schrieb:

    Shade Of Mine schrieb:

    bitte sag dass du das nicht ernst meinst und nur trollen willst.

    Klar, aber welchen Teil meinst du davon? 😃

    Wahrscheinlich "ultimates feature" und "Killerargument".



  • knivil schrieb:

    Insbesondere garbage collection, das ultimate feature und Killerargument für Java von Sun trat das erstemal 1960 in From von Lisp hervor. 1960 ... und da soll Java noch 'ne Revolution sein?



  • Ein netter Mensch schrieb:

    Java von Sun

    Achja? Kannst du das auch beweisen? Quelle? Link?



  • Shade Of Mine schrieb:

    Es ist unmöglich ein Hello World Programm zu schreiben wenn man sich an diese Definition halten muss.

    Verwirrend irgendwie.

    Vielleicht mal folgendes Beispiel.

    Man angenommen, du willst eine Zeichenkette ausgeben. Du übergibst jetzt der Funktion den Status des Universums und die Zeichenkette. Die Funktion liefert dir darauf hin eine "Kopie" des Universums zurück, in welcher die Zeichenkette "Hello World" auf dem Bildschirm erschienen ist. Diese Kopie reichst du jetzt in die nächste Funktion weiter, die Seiteneffekte haben soll.

    Das ganze macht man natürlich nicht explizit. D.h. dieses weiterreichen der Kopien des Universums wird versteckt, indem man so verkettet, dass man nicht mehr explizit schreiben muss, wo welche Kopie des Universums hinkommt. Dieses Verketten kann man dann durch Monade ausdrücken.

    Wenn man das gemacht hat, so sieht ein Hello World in Haskell genau so aus.

    main = do
        putStrLn "Hello World!"
    

    Der Vorteil ist. Wenn eine Funktion keine(!) Kopie des Universums zurück gibt, so wissen wir, dass sie auf jeden Fall das Universum nicht verändert hat. Dadurch kann man eine Menge an Fehlerquellen ausschließen.



  • Sorry, habe jetzt gerade den Faden verloren. Wer will welche Links fuer was? Ja, mit Java meine ich die Programmiersprache von Sun. Und klar ultimate feature und Killerargument sind (leicht) ironisch gemeint.



  • tfa schrieb:

    Ein netter Mensch schrieb:

    Java von Sun

    Achja? Kannst du das auch beweisen? Quelle? Link?

    Bitteschön.



  • Ein netter Mensch schrieb:

    tfa schrieb:

    Ein netter Mensch schrieb:

    Java von Sun

    Achja? Kannst du das auch beweisen? Quelle? Link?

    Bitteschön.

    Ein einfaches "Nein" hätte gereicht.



  • Hey Ihr,

    Was die ursprüngliche Frage angeht, in jedem Falle würde ich das besuchen der Vorlesung "funktionale Programmierung" empfehlen. Viele Konzepte der funProg tauchen in real-world Sprachen auf. (so haben z.B. vb.net oder auch c# beide mittlerweile anonyme Funktionen, sog. Lambdaausdrücke, welche aus der funProg kommen)

    Außerdem lohnt es sich auch in jedem Fall, Haskell zu kennen. Denn Haskell ist nicht nur die einzige reine funktionale Programmiersprache. Haskell bietet auch das ausgereifteste Typsystem. Und gerade ein solches Typsystem gibt dem Programmierer ein geniales abstraktionswerkzeug in die Hand.

    Funktionale Programmierung wird auch heute schon direkt in Firmen eingesetzt. Und auch wenn das noch nicht die Regel ist, die liste der Firmen steigt beinahe täglich.

    Hier mal ein paar beispiele:

    - AT&T
    - Credit Suisse
    - Deutsche Bank AG
    - Galois
    - Gamr7
    - Linspire
    - Nokia Forschung
    - Qualcomm

    Im übrigen hat Haskell auch die coolste Community auf diesem Planeten 🙂

    Also, mach das, lernen FunProg 🙂

    grüße
    frosch03



  • ähm ... daß java neuerdings von LISP abstammt, ist aber jetzt nicht die gängige Lehrmeinung, oder ? 😮

    Ich empfehle da mal, einen Blick auf Smalltalk und dessen VM zu werfen, dann zu vergegenwärtigen, daß Smalltalk in den 70er Jahren entwickelt wurde, und schließlich die Sache mit LISP und java noch mal zu überdenken ... (v) 😃



  • u_ser-l schrieb:

    ähm ... daß java neuerdings von LISP abstammt, ist aber jetzt nicht die gängige Lehrmeinung, oder ? 😮

    Die Leute die Java entworfen haben, stammen eben aus dem Lisp-Umfeld. James Gosling hat zB einen Emacs geschrieben, Guy Steele hat Scheme erfunden und den Common Lisp Standard initiiert etc.

    Da Lisp einfach die erste dynamische Programmiersprache war, kann man Lisp schon als Mutter aller dynamischer Programmiersprachen ansehen. Die meisten früheren "Computer Scientists" sind deshalb auch mit Lisp in Verbindung gekommen. Und viele Techniken wurden ja in den Lispmaschinen entworfen bzw. erforscht.



  • Der Aussage, daß LISP in gewissem Sinne die "Mutter aller dynamischen Sprachen" ist, weil es die erste solche war, kann ich zustimmen.

    Dann wäre Assembler im Großen und Ganzen (von Plankalkül, Konsolenschaltern und einigen anderen Ausnahmen mal abgesehen) die "Mutter aller Programmiersprachen", weil es die erste war. Bin mir nicht sicher, ob diese Feststellung einen hohen Erkenntniswert hat 🤡

    Aber wir sind uns sicher einig, daß die Ähnlichkeiten von java mit Smalltalk und mit C++ die mit LISP überwiegen.



  • Kann man die Frage nach der "Mutter der Sprachen" vielleicht mit diesem PDF zusammenfassen?

    http://www.oreilly.com/news/graphics/prog_lang_poster.pdf



  • ja



  • schönes Diagramm. Ein Pfeil von Fortran nach Basic wäre vielleicht nicht verkehrt.



  • Das ist nur die direkte Abstammung. Was ist aber mit dem ganzen Erbgut, das so mal hier mal da verstreut wurde?

    Dann wäre Assembler im Großen und Ganzen ...

    Nein, Sprache bedeutet Grammatik (am besten keine triviale). Ausserdem: Was haengt ihr euch so an dem Begriff Mutter auf? Normalerweise gibt es da auch noch einen Vater ...

    Funktionale Programmierung wird auch heute schon direkt in Firmen eingesetzt.

    Schon heute? Hallo, ich glaube bei dir sind die entscheidenen Entwicklungen des Informationszeitalters unbemerkt vorbeigerauscht. Siehe google und amazon.



  • knivil schrieb:

    Nein, Sprache bedeutet Grammatik (am besten keine triviale).

    Also die Assembler haben ja eine Grammatik. Und mit den meist vorhandenen Makro-Funktionen ist die nun auch nicht gerade als trivial zu bezeichnen. Und die Syntax für die Indizierung ist nun auch nicht unbedingt vom Himmel gefallen. Bloß weil sich die Sprachkonstrukte keine hohe Abstraktion erlauben, sondern meist 1:1 auf Maschinenbefehle abbilden, so unterliegen sie ja doch schon einer Grammatik.



  • Nein, Sprache bedeutet Grammatik (am besten keine triviale).

    Die Grammatik einer Sprache ist nicht gleichzusetzen mit einer Sprache, sie ist ein Bestandteil derselben.

    Ausserdem: Was haengt ihr euch so an dem Begriff Mutter auf? Normalerweise gibt es da auch noch einen Vater ...

    Na sieh mal, daran kannst du doch schon erkennen, dass es nicht um den Begriff als solchen geht, sondern vielmehr um das wofür er sinnbildlich steht.

    Ich denke auch nicht, dass man diese Rolle einer einzelnen Sprache zuordnen kann.

    bei dir sind die entscheidenen Entwicklungen des Informationszeitalters unbemerkt vorbeigerauscht. Siehe google und amazon.

    Könntest du ganz kurz andeuten, was du genau damit meinst? Oder war das einfach nur so dahergeplappert? 🙂


Anmelden zum Antworten