Frage

Ich habe gerade gehört Podcast von Chris Smith spricht über F# in dem er darüber spricht, wie f# eine Sprache ist, die es Ihnen ermöglicht Nehmen Sie Probleme auf andere Weise an als in C#/vb.net, dh anstelle von "Bits um" Sie "Sie" Ketten mit Datenumwandlungen zusammenstellen "und wie F#" wie XML "wird, etwas, das Sie zusätzlich zu Ihrer Sprache der Wahl verwenden (C# oder VB .Net) um bestimmte Probleme effizienter zu lösen.

Dies brachte mich zum Nachdenken Über die Beziehung der .NET -Sprachen, so verstehe ich sie:

  • C# und vb.net sind syntaktisch, aber nicht wesentlich anders, IE ein C# -Programmierer würde VB.NET nicht lernen, um "Probleme auf eine neue Art und Weise anzugehen"
  • Ein C #- oder VB.NET -Programmierer würde jedoch F# lernen, um "Programmierprobleme anzugehen auf funktionale Weise"

Aber was ist mit Ironpython und Ironruby? Chris erwähnte, dass "F# viel von Ruby und Python gelernt hat", also würde ich denken, dass F# eine ähnliche Beziehung wie IronRuby/Ironpython hat und C# zu vb.net muss. Ein wenig herumgiegt mir jedoch das IronRuby und Ironpython sind beide auf dem DLR gebaut, aber F# ist nicht.

Wie sollen die Beziehungen zwischen F#, IronRuby und Ironpython am besten verstanden werden?

War es hilfreich?

Lösung

F# und Ironpython/IronRuby sind leichte Jahre, abgesehen von einer Sprachperspektive. F# ist eine funktionale, hochtypte kompilierte Sprache. IronRuby/Ironpython werden dynamisch typisiert, interpretierte Sprachen.

Ich glaube, Ironpython unterstützt zusätzlich die Zusammenstellung, aber ich bin nicht zu 100% sicher und weniger über Ruby.

Die Beziehung zwischen VB.NET und C# ist viel näher.

Andere Tipps

In vielerlei Hinsicht sind F# und Ruby/Python oberflächlich ähnlich. Alle drei Sprachen ermöglichen es Ihnen, Ideen genau auszudrücken, ohne Ihren Code mit vielen Typen zu übertragen. F# unterscheidet sich jedoch sehr von Ruby und Python, da F# eine statisch typisierte Sprache ist, während Ruby und Python dynamisch getippt werden. Der idiomatische F# Code erwähnt selten Typen, aber der Compiler färbt Typen und alle Typfehler werden vom Compiler während der Kompilierung gekennzeichnet. Für Ruby und Python generiert die Verwendung eines Wertes am falschen Typ nur zur Laufzeit Fehler. Die Dynamik von Ruby und Python bedeutet, dass beide für die Metaprogrammierung mehr zugänglich sind als bei F# (Typ können beispielsweise zur Laufzeit geändert werden). Auf der anderen Seite wird F# für die meisten Aufgaben (vergleichbar mit C#) leistungsfähiger sein und viele schöne funktionale Abstraktionen wie diskriminierte Gewerkschaften mit Musteranpassung bietet. Es ist sicherlich wahr, dass Sie eine dieser Sprachen, die gut gelernt sind, Sie unterschiedlich über Probleme nachdenken als in C# oder VB.NET, aber Ihr Ansatz wird wahrscheinlich auch zwischen F# und Python/Ruby sehr unterschiedlich sein.

Ich würde sagen, F# hat viel mehr von Ocaml gelernt als von Ruby und Python Combined. Der einzige wirkliche Vergleich ist, dass F# ML auf die gleiche Weise wie Ironpython/Ruby zu .NET bringt, die Python/Ruby zu .NET bringt.

F# ist eher eine "Tool" -Prangssprache, bei der es spezifische Probleme gibt, die am besten mit einem funktionalen Ansatz angegangen werden. F# ist von Natur aus fadensicher, was Hoffnung gibt, dass es bei der Skalierung einer Anwendung auf die Verwendung mehrerer Prozessoren hilfreich sein wird. Ich sehe F#, um Komponenten zu erstellen, die in VB.NET oder C# verwendet werden, um bestimmte Probleme zu lösen.

Es gibt Aspekte von F#, die dynamischen Sprachen ähnlich sind. Jaredpars Antwort fasst es jedoch wirklich zusammen. F# befindet sich in seiner eigenen Kategorie der funktionalen Programmierung, in der IronRuby und Ironpython dynamische Sprachen und C#/VB OO -Sprachen sind. Sie können alle die gleichen Dinge tun und hängt nur davon ab, wie Sie es tun möchten. Jedes hat seine Vor- und Nachteile für ein bestimmtes Problem.

Hinweis: Dies ist meistens eine Zusammenstellung meiner Gedanken und Beobachtungen zu diesem Thema. Ich bin tagsüber ein C# -Programmierer und bei Nacht Python.

Ja, ich stimme einigen Sachen zu, die gesagt wurden, aber ich habe etwas Zeit und möchte meine Gedanken ausarbeiten und teilen.

F# ist eine funktionale Sprache. Was bedeutet, dass Sie sozusagen wirklich mehr mit den Verben besorgt sind. Es wird immer noch statisch getippt und läuft auf der CLR, aber Sie strukturieren Ihren Code unterschiedlich und arbeiten Probleme anders durch. Normalerweise denken die Leute, dass funktionale Sprachen in der Struktur mathematischer sind und formal leichter zu beweisen sind. Natürlich wird dies allgemein als größtenteils akademisch angesehen.

C# und andere statisch getippte OO -Sprachen konzentrieren sich sehr stärker auf die Substantive, um meine Analogie zu fördern. Sie strukturieren also Ihren Code und arbeiten Probleme daran. Natürlich gibt es auch natürliche Probleme bei der Aufrechterhaltung des Zustands und bei nicht detministischen Methoden auf Objekten, die in OO-Sprachen häufiger auftreten.

Und natürlich hat F# einige Funktionen und Ideen, die von OO -Sprachen ausgeliehen wurden, während C# Ideen und Funktionen von funktional entlehnt hat.

Durch den Vergleich von Python und C# geht es mehr um den Unterschied zwischen dynamischer und statischer Tippen (obwohl Python einige funktionale Merkmale bietet, die C# noch nicht tut). Die dynamische Eingabe ist in der Regel weitaus einfacher zu behandeln, dass Selbstbeobachtungs-/Reflexionsaktivitäten und Laufzeitmodifikationen verarbeitet werden, während das Risiko von Laufzeitfehlern aufgrund von Tippfehler oder falschen Objekten in "regulärem" Code hinzugefügt wird.

Statische Sprachen haben normalerweise einen Entwickleraufwand, den dynamische Sprachen nicht haben. Der Overhead scheint normalerweise darauf zurückzuführen zu sein, dass Schichten erstellen müssen, um die Dinge abstrahieren und Erbschafthierarchien und Schnittstellen zu erstellen, um mit der erforderlichen/gesuchten Abstraktion zu arbeiten. Da Sie versuchen, Abhängigkeiten von Typen zu vermeiden.

Es scheint, als ob Statiksprachen in größeren Teams viel einfacher zu verwalten sein können. Außerdem erhalten Sie die Vorteile, mit allen Überprüfungen und Werkzeugen sehr einfach zu refactoring.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top