
Es gibt Kultfilme, Spiele, Bücher oder Musik - sie lieben eine enge Gemeinschaft, Profis und Kritiker. Es gibt jedoch keinen kommerziellen Erfolg und keine weit verbreitete Popularität. In solchen Situationen bin ich normalerweise schmerzhaft verärgert.
In der Entwicklung sind gute Technologien auch nicht immer weit verbreitet. Zum Beispiel F #. Alles, was ich über ihn weiß, ist eine wild coole, aber völlig unbeliebte Sprache, nach der Entwickler nicht mehr einfach zu ihren üblichen Sprachen zurückkehren können.
Ich habe versucht, den Grund herauszufinden. Und im Allgemeinen - wer sind die Leute, die darüber schreiben, und warum tun sie das, wenn das Geschäft keine Sprache braucht? Um dies zu tun, klopfte ich an, um mit der russischsprachigen F # -Community in Telegram zu sprechen. Hier ist unser runder Tisch.
Wie fange ich an, F # zu lernen?
Airat Khudaigulov (
Szer ): Ich selbst
komme aus C #. Wir hatten Arbeiten im Zusammenhang mit Akka.NET, das von Akka nach Scala portiert wurde. Der Hafen ist ausgezeichnet, aber es gab keine Beispiele für seltene Dokumentationsfälle, sie befanden sich immer im Scala-Dock. Als ich dieses Dock las, tauchte eine Frage in meinem Kopf auf - warum ist alles in Scala in ein paar Zeilen geschrieben und ich leide in C #?
Der Ausweg wurde gefunden - F #. Seitdem und keine Tränen.
Roman Liman (
kagetoki ): Es hat sich als leistungsstarkes Werkzeug zur Lösung sehr realer Alltagsprobleme eines jeden Programmierers herausgestellt. Die Schwierigkeiten, die in der OOP-Welt von C # und Java als Norm und Unvermeidlichkeit angesehen wurden, sind überhaupt nicht unvermeidlich und können leicht verhindert werden, anstatt überwunden zu werden.
Phil Ranzhin (
fillpackart ): Einmal auf Habré habe ich ein großes Interview mit Vagif
Abilov gelesen. Zu dieser Zeit verstand ich das Paradigma der funktionalen Programmierung überhaupt nicht und jede Information darüber ärgerte mich ernsthaft. Also das Interview.
Vagif Abilov :
Dieses Material kann hier gelesen werden . Dies war kurz nach meiner Rede auf der Moskauer DotNext-Konferenz. Kurz gesagt, ich begann F # zu studieren, um kompakteren Code (weniger Code - weniger Übel) zu schreiben und mit unveränderlichen Datenstrukturen zu arbeiten. Natürlich hindert niemand einen C # - oder Java-Programmierer daran, seine Datenstrukturen als unveränderlich zu definieren, aber die Grundlage für Sprachen, die OOP implementieren, ist die Möglichkeit von Mutationen in Datenstrukturen, und diese Möglichkeit wird nirgendwo hingehen. Mit der funktionalen Programmierung können Sie keine Anstrengungen unternehmen, um Daten vor falschen Änderungen in einer Multithread-Umgebung zu schützen. Die Daten kümmern sich um sich selbst und sind unveränderlich.
Phil Rangin :
Wagif sagte immer wieder, dass F # nach zeremoniellem C # und Java viel besser für die Entwicklung geeignet sei. Ich wusste damals nicht, wer Vagif war, aber natürlich entschied ich sofort für mich, dass er nichts verstand. C # ist nicht zeremoniell, C # ist genau das, was es sein sollte. Kraftvoll und schön. Ich habe beschlossen, einen Artikel darüber zu schreiben, wie lächerlich funktionale Programmierung ist. Ich nahm eine einfache Aufgabe an und begann, sie in C # und F # zu implementieren, um meinen Standpunkt zu veranschaulichen. F # kam mir dabei so sehr in den Sinn, dass ich den Artikel noch nicht fertig geschrieben habe. Ich begann diese Technologie zu studieren.
Roman Liman : Viele Dinge, die zur Laufzeit in C # getestet werden, sind jetzt auf Comp-Zeit migriert. Es scheint also, als hätte ich das erste Mal versucht, statisch zu tippen - eine direkte Offenbarung ist gefallen.
Wenn Sie in F # sieben Codezeilen benötigen, wird in C # der entsprechende Code ohne Übertreibung auf 200-300 erweitert (und dies zählt nur nützlichen Code). Der Compiler selbst generiert für Sie eine Reihe von Boilerplates, zum Beispiel strukturelle Gleichheit.
Phil Rangin : Ich habe noch nie F # -Code debütiert, weil in meinem F # -Code alle Fehler bei der Kompilierung abgefangen werden. Ich scherze nicht.
Ist es schwer, F # zu lernen?
Roman Lyman : Wie schwer ist es zu lernen? Für mich ist es überhaupt nicht schwer. Das Einzige am Anfang ist ein wenig angespannt, wenn Sie zuerst auf ein funktionales Paradigma und unveränderliche Typen stoßen. Dies ist jedoch kein Sprachwechsel, sondern ein Paradigmenwechsel.
Die Syntax ist zunächst nicht offensichtlich, daher ist es besser, Bravour beiseite zu lassen und über die Sprache zu lesen, als zu hoffen, dass das Wissen von C # ausreicht.
Ayrat Khudaigulov : F # unterstützt alles, was in C # enthalten ist, außer goto (die Sprache ist vollständig ausdrucksbasiert, es wäre seltsam, einen zwingenden Übergang im berechneten Ausdruck vorzunehmen) und das geschützte Schlüsselwort (dies ist beabsichtigt, da es offensichtlich nicht schwierig ist). Alles andere, was OOP wir lieben - abstrakte Klassen, Schnittstellen, Autoattribute, Verwendungen und Tri-Ketchy - ist natürlich. Auch für Fans des Bytezählens ist alles vorhanden: Ref / Out-Parameter, Veränderlichkeit, Spans, Unmanaged, Zeiger, Stackalloc.
Alle Funktionen in C # haben im Vergleich zu F # eine Verzögerung von ein paar Jahren (Generika, Async / Warten + Aufgabe, LINQ, Mustervergleich und vieles mehr). Und viele Merkmale im Allgemeinen bezweifle ich, dass sie jemals auftreten werden (Summentypen, die durch diskriminierte Gewerkschaften repräsentiert werden, Curry mit nativen Funktionen). In frischem C # 8.0 versprechen sie Rekorde und ein rekursives Matchmuster. Achtung Frage - warum warten?
Und noch eine Frage: Warum sollte man eine neue Sprache lernen, um genau so darin zu schreiben? Um die Vorteile zu erhalten, die F # bietet, C # jedoch nicht, müssen Sie die andere Seite der Macht verstehen. Und es ist nicht einfach.
John Doe : Als C # -Entwickler bin ich den Entwicklern von F # für Generika und Asynchronität mit einem menschlichen Gesicht in C # dankbar. Wenn jemand es nicht weiß, erschienen diese Megafits dank F # in C #.
Vagif Abilov : In dem berühmten Buch „Pragmatic Programmer“ wird Entwicklern empfohlen, jedes Jahr eine neue Programmiersprache zu lernen. Ich kann mich nicht rühmen, diesen Rat genau befolgt zu haben, aber meiner Meinung nach ist das Wichtigste, was die Autoren ihnen sagen wollten - der Programmierer sollte immer bereit sein, die Prinzipien des Schreibens seiner Programme zu überarbeiten.
Viele sind im Allgemeinen zu beschäftigt mit Programmiersprachen als Lebenskredo. Wenn Sie von Java zu Clojure gewechselt sind, werden sie manchmal so behandelt, als ob ein Christ zum Islam konvertiert wäre. Warum eigentlich so viel Aufmerksamkeit? Wenn Sie neue Programmiersprachen lernen, können Sie häufig unsere Gewohnheiten beim Arbeiten mit alten Sprachen überdenken. Diejenigen, die mit F # vertraut sind, schreiben in C # anders.
Roman Melnikov (
Neftedollar ): In F # ist OOP seitdem korrekter (obwohl es in C # vollständig mit OOP kompatibel ist) fördert die Programmierung auf Abstraktionsschnittstellen anstelle von expliziten Klassen.
Was denken sie über die Schöpfer der Sprache?
Nikolay Matyushin : Einmal habe ich zur Unterstützung von Tipe-Anbietern auf .NET Core beigetragen. Lange Zeit arbeiteten sie nicht, und eine Person aus der russischsprachigen Gemeinschaft und ich beschlossen, herauszufinden, was das Problem war. Beim Stöbern haben wir festgestellt, dass es in .NET Core keine Funktion gibt, die Assembly (Objekt) in einer Datei speichert - diese Funktion wurde von Anbietern verwendet.
Wir haben ein oder zwei Wochen an einem Prototyp verbracht, der dies tat. Es stellte sich heraus, dass es eine schreckliche Krücke war, die aber teilweise funktionierte. Die ganze Zeit haben wir in der Ausgabe über den Github gesprochen, und dann kam Don Syme, schrieb „Wenige Stunden Arbeit“ und reparierte die Tipe-Anbieter.
Vagif Abilov : Der Schöpfer der Sprache Don Syme ist erschwinglich und demokratisch. Ich hoffe, er kommt zu einer russischen Konferenz, damit russische Entwickler ihn persönlich kennenlernen können.
Roman Lyman : Syme ist ein Genie. Erstaunlicherweise schuf er all diese Schönheit fast alleine.
Pavel Smirnov : Er ist mein Programmieridol.
Airat Khudaigulov : Don Syme hat übrigens Generika in .NET gepusht, sonst hätten wir uns auf C # gesetzt und alles von Objekt und zurück fest übertragen, wie es in Java war (und teilweise ist). Syme entwickelt die Sprache mit Blick auf C #, um die Kompatibilität mit den neuen Funktionen zu gewährleisten, was wahrscheinlich strategisch korrekt ist. Dies bedeutet jedoch, dass ein Echo von schlechten Entscheidungen in C # auch in F # gelangen kann. Er ist auch gegen die Einführung von "abstrusen" FP-Funktionen (hi Scala) und die Neuordnung der Sprache als Sie können andere Leute abschrecken und die Standardbibliothek aufblasen (Hallo C ++).
Ich denke, Syme ist ein Held. Ich stimme seiner Auffassung von der Sprache als multiparadigmal zu, aber ich würde etwas in die Sprache oben eintauchen.
Warum Sprache nicht beliebt ist
Roman Lyman : Die Sprache ist meiner Meinung nach nicht beliebt, weil FP im Allgemeinen weniger beliebt ist als OOP. Außerdem gibt es eine Eintrittsschwelle. Und dann - Trick 22. Projekte auf F # schreiben nicht, weil es nur wenige Programmierer auf dem Markt gibt und Programmierer diese Sprache nicht lernen, weil es keine Projekte auf dem Markt gibt.
Phil Rangin : Ich kenne keine Leute, die funktionale Programmierung üben würden, aber objektorientiert bevorzugen würden. Hier hatte F # besonders Pech - es passt nur zu denen, die an die Symbiose dieser Paradigmen glauben.
Pavel Smirnov : Viele hielten ihn aufgrund der Richtlinien von Microsoft für tot - F # war nur eine Plattform, um Funktionen für C # zu übertreffen. Die Sprache war jedoch zunächst eher für die Datenwissenschaft als für die industrielle Entwicklung positioniert.
Roman Melnikov : Resharper. Für C # ist dies ein wichtiges Thema, und viele haben bereits dafür ausgegeben. Ohne Resolver ist das Schreiben in C # etwas krank. Sie müssen viel mit Stiften schreiben, z. B. das Hervorheben von Zuordnungen. Und der Resharper entfernt viel Schmerz von den Sycharpern. Es gibt keinen solchen Schmerz in F #, aber diejenigen, die einen Resharper haben, können nicht alle Reize einer Sprache schätzen, die nicht auf Tuling beruht.
Vagif Abilov : Meiner Meinung nach liegt der Grund für die Verzögerung hinter Scalas Erfolg in der Dominanz von Microsoft, die immer noch bestimmt, welche Priorität auf der Windows-Plattform besteht. Während F # von Microsoft Research entwickelt wurde, wurde es vom Unternehmen immer als Sprache für Enthusiasten positioniert. Microsoft verfügt über Metriken, die die wirtschaftliche Machbarkeit der Entwicklung einer bestimmten Technologie in Abhängigkeit vom aktuellen Umsatz belegen. Natürlich sieht jedes SharePoint nach diesen Metriken attraktiver aus als F #. Aber ein Tropfen zermürbt einen Stein.
Phil Rangin : Ich glaube, er wird feuern. Die ganze Leistung von .NET gepaart mit der modernsten Syntax und dem idiomatischsten Ansatz in der Geschichte kann nicht anders, als zu schießen.
Roman Melnikov : Die Aussichten sind erstaunlich. F # steigt allmählich in die Datenanalyse ein, beispielsweise dank Typanbietern. Es gibt Compiler in js und der elmish magic library (im Wesentlichen Elm für .NET).
Miguel De Icaza unterstützt aktiv F #, und in Xamarin war seine Unterstützung immer wie C #. Es gibt einen Compiler in ErlangCore, der auch unglaublich cool ist. In F # können Sie ein vollständiges Backend und Frontend schreiben.
SAFE-Stack ist eine verrückte Sache, mit getippten API-Aufrufen, coolen Wrappern auf Websockets (Elmish.Bridge) und vielem mehr.
Vagif Abilov : Ich freue mich sehr, dass F # verwendet wird. Ich arbeite in einem norwegischen Rundfunkprojekt. Unser System lädt Mediendateien für Fernseh- und Radioprogramme in die „Cloud“ hoch, um sie zum Anzeigen und Hören von Computern und Mobilgeräten verfügbar zu machen. Das System ist in F # geschrieben und verwendet Akka.NET. Dies ist nicht das einzige Projekt in unserer Organisation, das F # verwendet. Besonders erfreulich ist, dass die Anzahl solcher Projekte sowie die Anzahl der Entwickler, die bereit sind, auf diese Sprache umzusteigen, zunimmt.
Wofür ist F # geeignet?
Phil Rangin : F # passt perfekt in die KI-Entwicklung. Diese Sprache ist buchstäblich gemacht, um mich von den Schwierigkeiten zu abstrahieren und mich auf die Hauptsache zu konzentrieren. Wenn Sie KI machen, besteht Ihre Aufgabe darin, Ihre Denkweise über das Verhalten der Maschine zu bestimmen. In solchen Fällen ist der Code Ihre Zwischensprache, die nicht in der Lage ist, zu komplexe Dinge auszudrücken. Hier kann F # so abstrakt sein, dass es Sie und Ihr Auto, das Geschichte schreibt, nicht beeinträchtigt.
Vagif Abilov : Es ist auf alle Aufgaben anwendbar und eignet sich besonders gut für die Aufgaben der Domänenmodellierung. Im letztjährigen Interview über Habré habe ich unklug gesagt, dass funktionale Sprachen eher für Algorithmen und ein Backend und in geringerem Maße für die Programmierung einer Benutzeroberfläche und von Webseiten geeignet sind.
Dann bemerkte jemand in den Kommentaren, dass es eine solche funktionale Sprache Elm gibt, die speziell für die Programmierung von Webseiten geschrieben wurde. Der Kommentator hatte absolut recht. Seitdem verwende ich Fable, mit dem Sie Webanwendungen in F # schreiben können, indem Sie sie in JavaScript kompilieren. Eine erstaunliche Erfahrung, die Kombination von F # + Fable (und der Fable-Elmish-Bibliothek) eröffnet Entwicklern, die nichts in CSS wie mir verstehen, den Zugang zur Webprogrammierung.
Pavel Sirnov : Datengetriebene Entwicklung - eine prägnante FP-Sprache, die
Typanbieter unterstützt. Schauspielermodell - MailboxProcessor in der Standardbibliothek ist ein Märchen.
Roman Melnikov : Es löst
Webaufgaben perfekt und lässt sich in
Reaktionskomponenten integrieren. Die Aufgaben der Datenanalyse und des maschinellen Lernens (
fslab.org ), der ETL-Aufgaben und der Entwurfsaufgaben für die Geschäftslogik werden
angesprochen. Mit dem Typsystem können Sie so schreiben, dass keine falschen Zustände
vorliegen .
Tolle Parsing-Aufgaben (Fparsec). Ideal zum Schreiben eigener Sprachen. Das gleiche TypeScript wurde ursprünglich in F # geschrieben. Der
Code für die GPU ist geschrieben.
Ich selbst schreibe fsx-Skripte darauf anstelle von Bash und Python für meinen Computer.
Ja, unter Mikrocontrollern bekommen Sie es nicht. Aber ich denke, viele Leute können darauf verzichten.
Wo bekomme ich Informationen?
Bücher
Das Internet
Telegramm
Ein paar Worte zur Community
Roman Liman : Die Community ist cool, alle sind sich einig über den Wunsch, F # für Geld zu schreiben. Daher wird allen Neuankömmlingen sehr geholfen, die Community zu vergrößern und ihre Chancen auf Arbeit zu erhöhen.
Phil Rangin : Gefährliche
Kultisten . Aber sie haben recht.
Pavel Smirnov : Die russischsprachige Gemeinde F # ist ein sehr komfortabler Ort. Am meisten gefällt mir, dass ihnen ihre Sprache nicht gleichgültig ist, wie es in anderen bekannteren Ökosystemen der Fall ist.
Nikolai Matyushin : Vielleicht aufgrund der Tatsache, dass die Sprache nicht sehr beliebt ist und giftige Menschen nicht verweilen.
Roman Melnikov : Es gibt Dramen, die die Sprache nicht beeinflussen. Aber das Leben wird interessanter.