
Wir alle hören von legendären Filmen, Spielen, Büchern oder Musikkompositionen, die von der Community der anspruchsvollen, professionellen und kritischen Kritiker vehement gelobt werden, aber niemals greifbaren kommerziellen Erfolg oder die Aufmerksamkeit eines breiteren Publikums auf sich ziehen. Solche Situationen machen mich zutiefst frustriert.
Wenn es um Entwicklung geht, gerät gute Technik manchmal auch nie ins Rampenlicht. Nehmen Sie zum Beispiel F #. Ich weiß nur, dass es eine super coole, aber völlig unpopuläre Sprache ist, die es Entwicklern schwer macht, nach dem Kennenlernen zu den Sprachen zurückzukehren, an die sie gewöhnt sind.
Ich habe versucht herauszufinden, was die Geschichte dahinter ist. In der Tat, wer sind die Leute, die es benutzen und warum tun sie das, wenn die Sprache im Geschäftsleben nicht gefragt ist? Um Antworten zu finden, habe ich mich der russischsprachigen F # -Community auf Telegram angeschlossen - unserem Runden Tisch für die Diskussion.
Wie hast du angefangen, F # zu lernen?
Ayrat Hudaygulov (
Szer ): Ich bin ursprünglich von C # hierher gewandert. Wir hatten einmal einen Job, der mit Akka.NET zu tun hatte - einem Scala-Port von Akka. Der Port selbst war in Ordnung, aber es fehlten Beispiele für seltene Fälle im Benutzerhandbuch, obwohl sie immer im Scala-Handbuch enthalten waren. Während ich dieses Handbuch las, fragte ich mich immer wieder: Warum dauert es nur ein paar Zeilen, um es in Scala zu schreiben, während ich so viel Mühe habe, dasselbe in C # zu tun?
Ich habe die Lösung beim Umstieg auf F # gesehen. Ich hatte seitdem keine zweiten Gedanken mehr.
Roman Liman (
kagetoki ): Es stellte sich heraus, dass es ein leistungsstarkes Werkzeug zur Lösung der alltäglichen Probleme war, mit denen jeder Entwickler konfrontiert sein kann. Die Hürden, die früher in der Welt von C # und Java als unvermeidliche Norm für OOP angesehen wurden, sind in der Tat nicht so unvermeidlich und können leicht verhindert und nicht überwunden werden.
Phil Ranzhin (
fillpackart ): Ich habe einmal ein langes Interview mit Vagif Abilov über Habr gelesen. Damals konnte ich mich einfach nicht mit dem Paradigma der funktionalen Programmierung auseinandersetzen, daher würde mich jede verwandte Information ernsthaft verärgern. Dieses Interview war keine Ausnahme.
Vagif Abilov (
VagifAbilov ):
Hier ist der Link zu dem fraglichen Artikel . Ich habe es kurz nach einem Vortrag auf der DotNext-Konferenz in Moskau getan. Um es kurz zu machen, ich habe angefangen, F # zu lernen, um meinen Code präziser zu gestalten (weniger Code bedeutet weniger Übel) und persistente Datenstrukturen zu verwenden. Sicher, nichts hindert einen C # - oder Java-Entwickler daran, seine Datenstrukturen als persistent zu deklarieren, aber die Fähigkeit, Datenstrukturen zu mutieren, ist ein grundlegendes Merkmal von OOP-Sprachen und wird ihnen immer inhärent sein. Die funktionale Programmierung erspart Ihnen den Aufwand, der normalerweise für den Schutz der Daten vor unangemessenen Mutationen in einer Multithread-Umgebung aufgewendet wird. Die Daten kümmern sich um sich selbst, da sie unveränderlich sind.
Phil Ranzhin : Vagif sagte immer wieder, dass F # nach dem streng formalen C # und Java viel entwicklungsfreundlicher zu sein schien. Ich wusste damals nicht, wer Vagif war, aber ich dachte natürlich, der Typ hätte nicht die geringste Ahnung. C # ist nicht übermäßig formal, C # ist genau so, wie es sein sollte. Es ist kraftvoll und schön. Ich beschloss, einen Artikel darüber zu schreiben, wie absurd funktionale Programmierung schließlich war. Ich nahm ein einfaches Problem und begann es sowohl in C # als auch in F # zu implementieren, um meinen Standpunkt zu beweisen. Aber als ich daran arbeitete, fand ich F # so gut, dass ich den Artikel aufgab. Stattdessen begann ich tiefer in die Technologie einzutauchen.
Roman Liman : Ein Großteil der Dinge, die C # zur Laufzeit überprüft, wird jetzt zur Kompilierungszeit erledigt, sodass es sich anfühlt, als würde man zum ersten Mal mit statischer Typisierung spielen - eine echte Offenbarung.
Ohne es zu übertreiben, wenn Sie sieben Codezeilen in F # benötigen, benötigen Sie 200-300 Zeilen, um den entsprechenden Code in C # zu schreiben (um nur nützlichen Code zu berücksichtigen). Der Compiler übernimmt die gesamte Boilerplate-Generierung für Sie, z. B. die strukturelle Gleichheit.
Phil Ranzhin : Ich habe meinen F # -Code noch nie
getestet, da in meinem F # -Code alle Fehler beim Kompilieren erstickt werden. Ich mache keine Witze.
Ist es schwer, F # zu lernen?
Roman Liman : Wie schwer ist es, es zu lernen? Ich würde sagen, überhaupt nicht schwer. Es könnte schwierig sein, dies zunächst in Angriff zu nehmen, wenn Sie sich noch nie zuvor mit dem Funktionsparadigma und den unveränderlichen Typen befasst haben. Dieses Problem hat jedoch mit dem Wechsel zwischen Paradigmen und nicht mit Sprachen zu tun.
Die Syntax ist zunächst nicht offensichtlich. Zähmen Sie also Ihre Arroganz und lesen Sie über diese Sprache. Hoffen Sie nicht, dass Sie mit Ihren Kenntnissen in C # davonkommen.
Ayrat Hudaygulov : F # unterstützt alles, was C # tut, außer goto (da die Sprache vollständig ausdrucksbasiert ist, scheint es seltsam, einen zwingenden Sprung in einen berechenbaren Ausdruck zu machen) und das geschützte Schlüsselwort (es war wie
beabsichtigt beabsichtigt ) das Hinzufügen wäre ein Kinderspiel). Der Rest von allem, was wir an OOP lieben - die abstrakten Klassen, Schnittstellen, automatisch implementierten Eigenschaften, Verwenden, Try-Catch usw. - Es ist natürlich alles da. Byte-Counting-Enthusiasten werden auch zufrieden sein, was mit den Ref / Out-Parametern, Veränderlichkeit, Spans, Unmanaged, Zeigern, Stackalloc zu tun hat.
Alle C # -Funktionen werden mit einer Verzögerung von einigen Jahren im Vergleich zu F # hinzugefügt (Generika, Async / Warten + Aufgabe, LINQ, Mustervergleich und viele andere). Darüber hinaus werden viele Merkmale wahrscheinlich nie in die Sprache gelangen (Summentypen als diskriminierte Gewerkschaften, Currying nativer Funktionen). Es wird erwartet, dass das bevorstehende C # 8.0 mit Datensätzen und rekursivem Mustervergleich erweitert wird. Die Frage ist, warum warten?
Eine andere Frage ist: Warum eine neue Sprache lernen, um sie auf die alte Weise zu benutzen? Um die Vorteile von F #, die in C # fehlen, wirklich zu nutzen, müssen Sie die andere Seite der Macht verstehen. Niemand sagte, es sei einfach.
John Doe : Als C # -Entwickler bin ich den Entwicklern von F # für Generika und asynchrone Programmierung mit einem menschlichen Gesicht in C # dankbar. Für diejenigen, die es nicht wussten, kamen diese Mega-Features dank F # zu C #.
Vagif Abilov : Der Autor der beliebten Pragmatic Development empfiehlt Entwicklern, jedes Jahr eine neue Programmiersprache zu lernen. Ich kann nicht sagen, dass ich mich religiös an diesen Rat halte, aber ich denke, die Autoren wollten wirklich sagen, dass Entwickler immer bereit sein müssen, die Prinzipien zu überarbeiten, nach denen sie ihren Code schreiben.
Viele Menschen verehren Programmiersprachen wie ihren Glauben. Einige werden einen Wechsel von Java zu Clojure wie eine Konversion vom Christentum zum Islam behandeln. Warum um alles in der Welt sollte es so wichtig sein? Das Erlernen neuer Programmiersprachen gibt uns oft die Gelegenheit, unsere alten Arbeitsweisen mit den bereits bekannten Sprachen zu überdenken. Wenn man sich mit F # vertraut macht, schreibt man C # -Code auf eine neue Art und Weise.
Roman Melnikov (
Neftedollar ): Der OOP-Teil von F # ist korrekter (obwohl er vollständig mit der C # -Version von OOP kompatibel ist), da er Sie dazu ermutigt, abstrakte Schnittstellen anstelle expliziter Klassen zu verwenden.
Was denkst du über die Designer dieser Sprache?
Nikolay Matyushin : Ich habe einmal geholfen, die Unterstützung von Datentypanbietern in .NET Core einzuführen. Sie würden eine ganze Weile nicht arbeiten, und nachdem ich ein anderes Mitglied unserer russischsprachigen Gemeinschaft angeworben hatte, beschloss ich herauszufinden, was genau falsch war. Nach einigem Graben stellten wir fest, dass .NET Core keine Funktion zum Speichern des Assembly-Objekts in einer Datei hat - diese Funktion wurde von Typanbietern benötigt.
Wir haben ein oder zwei Wochen damit verbracht, einen Prototyp zu entwickeln, der dazu in der Lage ist. Wir haben einen chaotischen Hack zusammengestellt, aber er hat funktioniert (zumindest teilweise). Während dieser ganzen Zeit posteten wir weiter in Githubs Ausgaben, bis Don Syme vorbeikam, sagte, es sei "ein paar Stunden Arbeit" und reparierte die Typanbieter.
Vagif Abilov : Der Sprachdesigner Don Syme ist aufgeschlossen und aufgeschlossen. Ich hoffe, er wird sich eines Tages bis zu einer russischen Konferenz wagen, um russische Entwickler persönlich zu treffen.
Roman Liman : Syme ist ein Genie. Es ist unglaublich, dass er hinter diesem wunderschönen Design so ziemlich alleine war.
Pavel Smirnov : Er ist mein Vorbild in der Welt des Programmierens.
Ayrat Hudaygulov : Übrigens, Don Syme war derjenige, der Generika in .NET einführte, sonst würden wir immer noch alles von und nach Objekt in C #
hart umwandeln , wie es in Java der Fall war (und teilweise ist). Syme erweitert die Sprache mit einem Rückblick auf C #, um die Kompatibilität mit den neuen Funktionen zu gewährleisten, was aus strategischer Sicht wahrscheinlich das Richtige ist. Dies bedeutet jedoch, dass der Nachgeschmack von schlechten Entscheidungen in C # auch in F # eindringen kann. Er ist auch gegen die Einführung von nerdigen FP-Funktionen (Hallo Scala!) Und eine Überkomplikation der Sprache, da all dies andere Leute abschrecken und die Standardbibliothek aufblähen kann (Hallo C ++!).
Ich denke, Syme ist ein Held. Ich stehe ihm bei seiner Vision der Sprache als Multiparadigma bei, aber ich würde der Sprache wahrscheinlich mehr Funktionen hinzufügen.
Warum ist die Sprache nicht sehr beliebt?
Roman Liman : Ich würde sagen, die Sprache ist nicht beliebt, weil FP im Allgemeinen weniger beliebt ist als OOP. Außerdem gibt es die steile Lernkurve. Der Rest ist eine Catch 22-Situation. Nur wenige Projekte sind in F # codiert, weil dem Markt F # -Programmierer fehlen, während Programmierer diese Sprache nicht lernen, weil dem Markt relevante Projekte fehlen.
Phil Ranzhin : Ich kenne niemanden, der funktionale Programmierung üben und gleichzeitig das objektorientierte Modell bevorzugen würde. In diesem Sinne ist F # besonders unglücklich, da es nur für diejenigen gut funktioniert, die an die symbiotische Vereinigung beider Paradigmen glauben.
Pavel Smirnov : Viele betrachteten es als totgeborenes Kind, weil Microsoft F # nur zu einer Plattform für das Spielen mit Funktionen für C # gemacht hat. Die Sprache war jedoch ursprünglich eher auf die Datenwissenschaft als auf die industrielle Entwicklung ausgerichtet.
Roman Melnikov : ReSharper. Es ist wichtig für C #, und viele Leute haben bereits in C # investiert. Das Schreiben von C # -Code ohne ReSharper ist angesichts des Umfangs der manuellen Konfiguration, z. B. zum Hervorheben von Zuordnungen, harte Arbeit. Somit lindert ReSharper C # -Entwicklern eine Menge Schmerzen im Arsch. F # verursacht diesen Schmerz nicht in erster Linie, aber diejenigen, die ReSharper verwenden, können die ganze Schönheit einer Sprache, die nicht auf Werkzeugen beruht, nicht wirklich schätzen.
Vagif Abilov : Meiner Meinung nach liegt der Grund für den Erfolg von Scala in der dominierenden Position von Microsoft, die immer noch die Prioritäten auf der gesamten Windows-Plattform bestimmt. Trotz der Tatsache, dass F # in Microsoft Research entwickelt wurde, hat das Unternehmen es immer als Sprache für Enthusiasten positioniert. Microsoft verfügt über eigene Metriken für die wirtschaftliche Machbarkeit des Wachstums einer bestimmten Technologie auf der Grundlage der aktuellen Verkaufsleistung. Daher sehen Projekte wie SharePoint nach diesen Metriken sicherlich viel sexy aus als F #. Kleine Striche fielen jedoch große Eichen.
Phil Ranzhin : Ich bin zuversichtlich, dass es abheben wird. Die Leistungsfähigkeit von .NET in Kombination mit der modernsten Syntax und dem beispiellosen idiomatischen Konzept wird sich zwangsläufig durchsetzen.
Roman Melnikov : Die Zukunft sieht unglaublich vielversprechend aus. F # ebnet seinen Weg zur Datenanalyse, zum Beispiel dank Typanbietern. Es gibt auch js Compiler und die Magic Elmish Library (die eigentlich Elm für .NET ist).
Miguel de Icaza ist ein begeisterter Unterstützer von F #, daher hatte Xamarin immer die gleiche F # -Unterstützung wie C #. Es gibt auch einen Compiler in ErlangCore, was auch ziemlich genial ist. Mit F # können sowohl Backend als auch Frontend codiert werden. SAFE-Stack ist umwerfend, mit getippten API-Aufrufen, coolen Web-Socket-Wrappern (Elmish. Bridge) und vielen anderen Dingen.
Vagif Abilov : Ich freue mich zu hören, dass F # in der Praxis verwendet wird. Ich arbeite an einem Projekt eines norwegischen Rundfunkunternehmens, bei dem das System Fernseh- und Radio-Mediendateien in die Cloud hochlädt, um sie für die Wiedergabe von Computern und Mobilgeräten verfügbar zu machen. Das System ist in F # geschrieben und nutzt Akka.NET. Dies ist nicht das einzige Projekt unserer Organisation in F #. Noch vielversprechender ist, dass die Anzahl solcher Projekte ebenso steigt wie die Anzahl der Entwickler, die bereit sind, auf diese Sprache umzusteigen.
Wofür ist F # gut?
Phil Ranzhin : F # ist perfekt für die KI-Entwicklung. Diese Sprache ist buchstäblich dazu gedacht, meinen Geist von Ärger zu trennen und mich auf das Wichtige zu konzentrieren. Wenn Sie an KI arbeiten, besteht Ihre Aufgabe darin, Ihre Denkweise an das Verhalten der Maschine anzupassen. In solchen Fällen ist Ihr Code Ihre Zwischensprache, die nicht in der Lage ist, zu komplizierte Ideen zu beschreiben. Aber F # kann abstrakt genug sein, um Sie und Ihre Maschine Geschichte schreiben zu lassen.
Vagif Abilov : Es kann zur Lösung von Problemen verwendet werden und eignet sich besonders für domänengesteuertes Design. In meinem letztjährigen Interview über Habr habe ich dumm gesagt, dass funktionale Sprachen in größerem Umfang auf Algorithmen und Backend anwendbar sind als auf die Programmierung von Benutzeroberflächen und Webseiten.
Jemand erwähnte dann im Kommentarbereich, dass es eine funktionale Sprache Elm gab, die speziell für die Programmierung von Webseiten entwickelt wurde. Die Person, die den Kommentar hinterlassen hat, hatte absolut Recht. Seitdem verwende ich Fable, mit dem Web-Apps in F # geschrieben und in JavaScript kompiliert werden können. Der Effekt war hervorragend: Die Kombination von F # plus Fable (und der Fable-Elmish-Bibliothek) eröffnet solchen CSS-anspruchsvollen Entwicklern wie mir den Zugang zur Webprogrammierung.
Pavel Smirnov : Datengetriebene Entwicklung - es ist eine prägnante FP-Sprache mit der Unterstützung von Typ bietet. Das MailboxProcessor-Darstellermodell als Teil der Standardbibliothek ist ein Genuss!
Roman Melnikov : Es löst Webprobleme perfekt und lässt sich gut in Reaktionskomponenten integrieren. Es löst Datenanalyse- und maschinelle Lernprobleme (fslab.org), ETL-Probleme und Probleme beim Entwurf von Geschäftslogik - sein Typensystem ermöglicht das Codieren so, dass falsche Zustände vermieden werden.
Es funktioniert wunderbar zum Parsen (Fparsec). Es eignet sich hervorragend zum Entwerfen und Interpretieren Ihrer eigenen Sprachen. Nehmen Sie einfach TypeScript - es wurde ursprünglich in F # geschrieben. Es kann verwendet werden, um GPU-Code zu schreiben.
Ich selbst verwende F # anstelle von Bash und Python, um fsx-Skripte für meinen Computer zu codieren.
Es ist wahr, dass Sie damit keine Mikrocontroller programmieren können. Aber ich denke, einige Leute können darauf verzichten.
Wo bekomme ich Informationen?
Bücher
Internet
Telegramm
fsharp_news
fsharp_chat
Eine kurze Beschreibung der Community
Roman Liman : Die Community ist fabelhaft: Sie wird von dem Wunsch angetrieben, F # kommerziell zu codieren. Daher werden Neulinge begrüßt und erhalten enorme Unterstützung, um die Community zu vergrößern und die Chancen der Mitglieder auf Arbeitssuche zu erhöhen.
Phil Ranzhin : Diese gefährlichen
Kultanhänger ! Aber sie haben recht.
Pavel Smirnov : Die russischsprachige F # Community ist ein schöner Ort. Was mir am besten gefällt, ist, dass sie sich wirklich um ihre Lieblingssprache kümmern, genau wie Menschen in anderen, bekannteren Ökosystemen.
Nikolay Matyushin : Das liegt wahrscheinlich daran, dass die Sprache nicht sehr beliebt ist, sodass giftige Menschen nicht bleiben.
Roman Melnikov : Die Community hat ihren Anteil an Dramen, die die Sprache selbst nicht beeinflussen, aber das Leben aufregender machen.