Als Entwickler schreibe ich jeden Tag viel mathematischen Code und möchte der C # -Sprache sehr wenig syntaktischen Zucker hinzufügen, um das Schreiben und Überprüfen von Code zu erleichtern.
Ich habe bereits über diesen Thread und diesen anderen one für mögliche Lösungen und möchte einfach nur wissen, welche Richtung es am besten zu gehen hat und wie viel Mühe es bedeuten kann, nur für die drei folgenden syntaktischen Probleme zu lösen *.
*: Ich kann ohne beschriebene syntaktische Zucker überleben, aber wenn es nicht zu viel Arbeit und Rube-Goldberg -Design für den einfachen Kompilierungsprozess ist, kann es interessant sein weiter zu untersuchen.
Ich würde gerne schreiben:
%Vor%Anstelle von:
%Vor% NB: out
-Parameter werden zuerst gesetzt und foo
werden wie üblich deklariert (oder verwenden die gleiche Art von Syntax).
Ich hätte gerne ein paar neue unäre / binäre Operatoren. Ich weiß nicht viel, wie man für diese definiert (und es scheint ziemlich kompliziert zu sein, keine Mehrdeutigkeit beim Parsen von Quellen einzuführen), möchte trotzdem etwas wie:
%Vor%Anstelle von:
%Vor%Es ist extrem unattraktiv, Mathematik .BlaBlaBla () überall in einem Berechnungscode zu wiederholen, anstatt direkt und einfach BlaBlaBla zu schreiben.
Sicherlich kann dies gelöst werden, indem lokale Methoden hinzugefügt werden, um Math .BlaBlaBla innerhalb der Berechnungsklasse zu umbrechen. Jedenfalls wäre es besser, wenn es überhaupt keine Mehrdeutigkeit gibt oder wenn Mehrdeutigkeit mit einer Art implicit
-Schlüsselwort gelöst wird, um bei Bedarf automatisch Klassennamen einzufügen.
Zum Beispiel:
%Vor%würde werden:
%Vor% * Der Compiler generiert möglicherweise einfach eine Warnung, um anzuzeigen, dass die Mehrdeutigkeit gelöst wurde, weil eine implicit
Lösung definiert wurde.
NB: 3) ist zufriedenstellend genug, um 2) zu lösen.
Ich wäre einer der Ersten, die eine Mainstream-C # unterstützen, die von Benutzern erweitert werden kann. Jedoch kann ich aus verschiedenen Gründen (Design, Zeit oder Kosten-Nutzen) nicht sehen, dass C # so erweiterbar ist wie du ( oder ich ) wollen. Eine von C # abgeleitete Sprache, die ich sehr gut für Meta-Programmierung und Erweiterung der Funktionalität / Syntax gefunden habe, ist Nemerle .
Boo ist eine weitere .NET-Sprache mit guten Meta-Programmierfunktionen. Es ist jedoch so weit von C # entfernt, dass ich es nicht als angemessene Antwort auf diese Frage betrachtete (aber es der Vollständigkeit halber trotzdem hinzugefügt habe).
Haben Sie überlegt, F # anstelle von C # zu verwenden? Meiner Erfahrung nach hat sich F # hervorragend für wissenschaftlich / mathematisch orientierten Code eignet, mehr als C #.
Dein erstes Szenario ist mit Tupeln bedeckt; Sie können eine Funktion wie let f a b = (a+b, a-b)
schreiben, die ein Tupel von 2 Werten direkt zurückgibt, Sie können ziemlich leicht überladen Operatoren oder fügen Sie Ihre eigenen hinzu, und Module können Ihnen mit dem 3. helfen. Und F # arbeitet relativ reibungslos mit C # zusammen, so dass Sie sogar F # für die Teile auswählen können, bei denen es praktisch ist, und den Rest Ihres Codes in C # behalten. Es gibt andere Feinheiten, die auch für wissenschaftlichen Code ( Maßeinheiten zum Beispiel) gut funktionieren. ..
Tags und Links c#