Erweiterung der C # -Sprache, wie viel Aufwand / Gewinn?

8

Einführung

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.

1. Mehrere Ausgabeargumente

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).

2. Zusätzliche Operatoren

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%

3. Automatische Namenseinfügung für statische Klassen

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.

    
CitizenInsane 27.05.2012, 01:36
quelle

2 Antworten

3

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).

    
Ani 27.05.2012, 01:43
quelle
7

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. ..

    
Mathias 27.05.2012 05:10
quelle

Tags und Links