Haben Sie schon einmal frustriert, dass Visual Studio bestimmte Watch-Ausdrücke nicht neu bewertet, wenn Sie mit dem Debugger durch Code gehen?Reinheit der Methoden in C#, Bewertung und benutzerdefinierten Compiler?
Ich habe und tut jemand hier kümmert sich um reine Methoden? Methoden ohne Nebenwirkungen? Es gibt so viele großartige Dinge über C#, die ich liebe, aber ich kann keine reinen Funktionen schreiben, das heißt, statische Methoden ohne Nebenwirkungen.
Was wäre, wenn Sie Ihren eigenen C# -Compiler erstellen würden, wo Sie so etwas schreiben könnten.
function int func(readonly SomeRefType a, int x, int y) { return /*...*/; }
Nicht nur die über eine Freisprechfunktion, ach, ich es nicht eine Methode aufrufen, die Funktion gewährleistet ist keine Nebenwirkungen haben. Das C# -Schlüsselwort readonly
könnte hier verwendet werden, um genau das anzugeben, und einen Vertrag für reine Funktionen bereitstellen. Diese Art von Funktionen kann immer evakuiert werden, ohne Nebenwirkungen zu verursachen. Dies ist eine Möglichkeit für Visual Studio, meine Funktionen in der Uhr immer zu bewerten, trotz der fehlerhaften Annahme, dass alle Methodenaufrufe und Benutzeroperatoren Nebenwirkungen haben. Eine Methode, bei der alle Parameter kopierweise sind, kann niemals Nebenwirkungen haben, Visual Studio erkennt dies jedoch nicht.
Ich liebe C++ für das, was Sie zur Kompilierzeit tun können, und ich vermisse diese Dinge in C#, ich denke, C# verdunkelt den Benutzer ein wenig und im Grunde keine bestimmte Ausdruckskraft zuzulassen, Programmierer zu verletzen. Viele Dinge, die tatsächlich beziehen, was Sie zur Kompilierzeit tun können, würde ich gerne mehr Meta-Programme sehen, die Programme sind, die vom Compiler ausgeführt werden, um Ihr ursprüngliches Programm zu kompilieren.
z.B. Während C# Booleans hat und keine Dinge wie if (var a = obj as MyRefType)
zulassen, generiert es den entsprechenden Code nicht. Ich habe etwas herumgegrubbelt und bemerkt, wie C# keine passende IL für zellenlose Bedingungen erzeugt, zum Beispiel x > y ? 1 : 0
, es gibt eine IL-Anweisung für genau das, was der C# -Compiler nicht benutzt.
Möchten Sie in einem Open-Source-.NET-Compiler eingesetzt werden? Was sieht wie C# aus, ist aber etwas ganz anderes, ausdrucksstarker, flexibler und völlig in Bezug darauf, was man damit anfangen kann?
SpeC# tut es nicht? –
SpeC# fügt nur vor und nach der Prüfung bedingte Prüfungen zur Kompilierzeit hinzu und überprüft die Reinheit der Methoden nicht auf Nebenwirkungen. –