Was ist mehr im Geist der Julia Sprache und Philosophie?

8

Ich habe vor kurzem angefangen, in Julia zu Forschungszwecken zu programmieren. Als ich durchging, fing ich an, die Syntax zu lieben, ich erlebte die Community hier in SO positiv und nun überlege ich, Code aus anderen Programmiersprachen zu portieren.

Wenn Sie mit hochrechnenden, teuren Prognosemodellen arbeiten, wäre es schön, sie alle in einer modernen Sprache wie Julia zu haben.

Ich möchte ein Projekt erstellen und frage mich, wie ich es gestalten soll. Es geht mir sowohl um eine Performance- als auch um eine Sprachperspektive (d. H .: Wäre es besser, Module zu erstellen - Submodule - Funktionen oder etwas anderes wäre besser? Ist es besser, Wörterbücher oder benutzerdefinierte Typen zu verwenden?).

Ich habe mir verschiedene GitHub-Projekte in meinem Bereich angesehen, aber ich habe keinen gemeinsamen Standard gefunden. Daher frage ich mich: Was ist mehr im Geist der Julia Sprache und Philosophie?

BEARBEITEN:

Es wurde darauf hingewiesen, dass diese Frage möglicherweise zu allgemein ist. Daher möchte ich mich darauf konzentrieren, wie es besser wäre, Module zu strukturieren (d. H. Separate Module für Hauptfunktionen und Subroutinen im Vergleich zu Modulen und Submodulen usw.). Ich glaube, das würde ausreichen, um ein Gefühl dafür zu bekommen, was im Sinne der Julia-Sprache und -Philosophie betrachtet werden könnte. Weitere Beispiele und Referenzen sind natürlich willkommen.

    
merch 29.09.2016, 01:52
quelle

1 Antwort

12

Das Beste, was Sie finden werden, ist, dass es einen "offiziellen" Style-Guide . Der Rest des "Julianischen" Stils ist schlecht definiert, aber es gibt einige Möglichkeiten, ihn heuristisch zu definieren.

Zunächst bedeutet es, die Software um den Mehrfachversand und das Typsystem herum zu gestalten. Eine Software, die einer Julianischen Designphilosophie folgt, definiert normalerweise keine Funktionen wie test_pumpkin und test_pineapple , sondern verwendet für die Typen test und Pumpkin Versendungen auf Pineapple . Dies ermöglicht sauberen / verständlichen Code. Es wird Aufgaben in kleine typstabile Funktionen aufteilen, die eine gute Leistung ermöglichen. Es wird wahrscheinlich auch sehr allgemein geschrieben sein, so dass der Benutzer Elemente verwenden kann, die Untertypen von AbstractArray oder Number sind, und die Fähigkeit des Dispatch nutzen, um ihre Software mit Zahlen arbeiten zu lassen, von denen sie noch nie gehört haben. (In diesem Zusammenhang werden benutzerdefinierte Typen über Wörterbüchern empfohlen, wenn Sie Leistung benötigen. Für einen Typ müssen Sie jedoch alle Felder am Anfang kennen, was bedeutet, dass einige Wörterwörterbücher erforderlich sind.)

Eine Software, die einer Julianischen Designphilosophie folgt, kann auch eine DSL (Domain-Specific Language) implementieren, um eine einfachere Schnittstelle zum Benutzer zu ermöglichen. Anstatt den Benutzer zu zwingen, archaischen Standards zu folgen, die von C / Fortran abstammen, oder große sich wiederholende Einzelteile und Eingaben zu schreiben, kann das Paket Makros zur Verfügung stellen, die dem Benutzer erlauben, das Problem heuristisch zu definieren, das die Software löst.

Andere Punkte, die Teil der Julianischen Designphilosophie sind, stehen zur Debatte. Ist richtig Julia Code devectorized? Ich würde nein sagen, und die Schleife fusionieren Broadcast . ist eine leistungsfähige Möglichkeit, um "vektorisierten" MATLAB-Code zu schreiben und es wie eine devectorized Schleife durchführen zu müssen. Ich habe jedoch gesehen, dass andere devectorisierte Stile bevorzugen.

Beachte auch, dass Julia sich sehr von etwas wie Python unterscheidet, wo du in Julia im Grunde "deine eigene Art und Weise bauen kannst, etwas zu tun". Da es keine Leistungseinbußen für Funktionen / Typen gibt, die in Paketen und nicht in Base deklariert sind, können Sie Ihre eigene Julia-Welt erstellen, indem Sie Makros verwenden, um eigene "funktionsähnliche" Objekte usw. zu definieren. Ich meine, Sie können Java-Stile in Julia neu erstellen wenn Sie wollten .

    
Chris Rackauckas 29.09.2016, 02:22
quelle

Tags und Links