Ist es möglich, dass F# wird optimiert, mehr als andere .Net-Sprachen in der Zukunft?
Ist es möglich, dass Microsoft in der Lage sein, um F# - Programme, die entweder auf die VM-Ausführung Zeit, oder eher zur compile-Zeit, zu erkennen, dass ein Programm gebaut wurde, mit einer funktionalen Sprache-und automatisch parallelisieren es besser?
Ich jetzt glauben, es gibt keine solche Mühe zu versuchen, und führen Sie ein Programm, das gebaut wurde, als single-threaded-Programm als ein multi-threaded Programm automatisch.
Ist zu sagen, dass der Entwickler code ein single threaded Programm. Und würde der compiler spuckt eine kompilierte Programm, das ist multi-threaded komplett mit Mutexe und Synchronisation, wo nötig.
Würden diese Optimierungen werden sichtbar, die im task-manager in der Prozess-thread-Anzahl, oder wäre es eine niedrigere Stufe als das?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das ist in Naher Zukunft unwahrscheinlich. Und wenn es passiert, ich denke, es wäre eher an der IL-Ebene (Assembler umschreiben) eher als die Sprache der Ebene (z.B. etwas bestimmtes zu F#/compiler). Es ist eine interessante Frage, und ich erwarte, dass einige schöne Gedanken gewesen zu betrachten, und werden weiterhin an dieser für eine Weile, aber in der nahen Zukunft, ich denke, der Fokus wird auf machen es einfacher für Menschen, um direkt den threading/Parallelisierung von Programmen, sondern als nur mit alles geschieht wie von Geisterhand.
(Funktionen der Sprache wie F# async-workflows und Bibliotheken, wie der task-parallel-library und anderen, sind gute Beispiele für die nahe Zukunft einen Fortschritt hier, Sie können tun die meisten der schwerarbeit für Sie, vor allem, wenn Ihr Programm ist eher deklarativ als Imperativ, sondern Sie erfordern immer noch der Programmierer, um opt-in, do-Analyse für die Richtigkeit/Sinnhaftigkeit, und wahrscheinlich machen Sie leichte Veränderungen an der Struktur des Codes, damit es überhaupt funktioniert.)
Sowieso, das ist alles Spekulation; wer kann sagen was die Zukunft bringen wird? Ich bin gespannt (und hoffentlich einiges passieren). 🙂
Sein, dass F# ist abgeleitet von Ocaml und Ocaml-Compiler kann optimieren Ihre Programme weit besser als andere Compiler, es wahrscheinlich getan werden könnte.
Ich glaube, es ist nicht möglich, autovectorize code in eine allgemein nützliche Art und Weise und der funktionale Programmierung Facette von F# ist im wesentlichen irrelevant in diesem Zusammenhang.
Das größte problem ist nicht zu erkennen, wenn Sie durchführen können subcomputations parallel, es ist die Bestimmung, wenn, dass wird nicht die Leistung beeinträchtigen, D. H., wenn die Teilvorgänge dauern wird, ausreichend lange zu berechnen, dass es sich lohnt, der performance-hit mit einer parallel zu laichen.
Wir recherchiert haben dies im detail in den Kontext des wissenschaftlichen Rechnens und wir haben bereits ein hybrid-Ansatz in unseren F# für Numerik-Bibliothek. Unsere parallele algorithmen basieren auf Microsoft Task Parallel Library, erfordern einen zusätzlichen parameter, der eine Funktion geben die geschätzte Komplexität der Berechnung einer Teilaufgabe. So können unsere Implementierung zu vermeiden übermäßige Unterteilung und eine optimale Leistung sicherzustellen. Außerdem ist diese Lösung ideal für die Programmiersprache F#, da die Funktion parameter beschreibt die Komplexität ist in der Regel eine anonyme erste-Klasse-Funktion.
Cheers,
Jon Harrop.
Ich denke, die Frage verfehlt den Punkt der .NET-Architektur-- F#, C# und VB (etc.) alle kompilierten IL, die dann kompiliert wird, um Maschinen-code durch den JIT-compiler. Die Tatsache, dass ein Programm geschrieben, in einer funktionalen Sprache ist nicht relevant-- wenn es gibt Optimierungen (wie tail-Rekursion, etc.) zur Verfügung der JIT-compiler aus dem IL, der compiler sollte es nutzen.
Natürlich, dies bedeutet nicht, dass das schreiben funktionaler code ist irrelevant-- es gibt selbstverständlich Möglichkeiten, zu schreiben, IL, die parallelisieren besser-aber viele dieser Techniken könnten genutzt werden .NET-Sprache.
So, es gibt keine Notwendigkeit zur Kennzeichnung des IL aus F# um zu prüfen, potenzielle Parallelität aus, wäre noch so eine Sache, die wünschenswert wäre.
Gibt es aktive Forschung für autoparallelization und auto-Vektorisierung für eine Vielzahl von Sprachen. Und man könnte hoffen (da ich wirklich gern F#), Sie würden concive ein Weg, um festzustellen, ob eine "Reine" Seite-Effekt-freie Teilmenge verwendet wurde und dann parallelisieren, dass.
Auch da Simon Peyton-Jones, der Vater von Haskell arbeitet bei Microsoft, ich habe eine harte Zeit nicht beliving es gibt einige fantastische Sachen kommen.
Es ist möglich, aber unwahrscheinlich. Microsoft verbringt, die meisten der Zeit, die Unterstützung und Implementierung von Funktionen angefordert durch Ihren größten Kunden. Das bedeutet in der Regel C#, VB.Net und C++ (nicht unbedingt in dieser Reihenfolge). F# scheint nicht, wie es ist hoch auf der Liste der Prioritäten.
Microsoft entwickelt derzeit 2 Wege für die Parallelisierung von code: PLINQ (Pararllel Linq, die viel zu verdanken funktionalen Sprachen) und die Task Parallel Library (TPL) war ursprünglich Teil des Robotics Studio. Eine beta-Version von PLINQ ist verfügbar hier.
Ich würde mein Geld auf PLINQ immer die norm für auto-Parallelisierung von .NET-code.