Frage

Nikhil Kothari Script # ist ziemlich sicher eine der erstaunlichsten Konzepte, die ich in gesehen habe die JavaScript-Arena schon seit geraumer Zeit. Diese Frage ist nicht über JavaScript, sondern um die Sprache Kompilierung in der .NET-Laufzeit.

Ich bin eher daran interessiert, wie die .NET-Plattform, einer einen Compiler für eine Sprache schreiben kann, die bereits einen Compiler (wie C #) hat die separate Ausgabe von dem ursprünglichen Compiler generiert, während die ursprünglichen Compiler ermöglicht zu erzeugen Ausgang für die gleiche Quelle während der gleichen Erstellungsoperation, die ganze Zeit Referenzierung / als auch die Ausgabe des anderen Compiler.

Ich bin nicht ganz sicher, ob ich auch den Prozess gut genug, um zu verstehen, die Frage mit den richtigen Details zu fragen, aber das ist die Art, wie ich zur Zeit den Prozess zu sehen, wie pro Diagramme in dem Script # docs. Ich habe viele Dinge Gedanken über komplexe Sprache Design und Zusammenstellung beteiligt in der Lage sein kann, wie dieser Vorteil von Konzepten zu nehmen und ich bin daran interessiert, was andere Leute über die Konzepte denken.

-

Edit: Danke für die Kommentare, so weit; zu Ihrer Information, in seinem eigenen Recht, sehr interessant und ich mag es mehr erforschen, aber meine Frage ist eigentlich, wie ich in der Lage wäre meinen eigenen Compiler / s zu schreiben, die auf derselben Quelle zur gleichen Zeit ausgeführt werden können mehrere verschiedene Arten von (potentiell) voneinander abhängigen Ausgangs Herstellung des CLR verwenden. Script # dient als Beispiel, da es erzeugt JavaScript und eine Versammlung mit der gleichen C # Quelle, die ganze Zeit machen die kompilierte Assembly mit dem JavaScript zusammenarbeiten. Ich bin gespannt, was die verschiedenen Ansätze und theoretische Konzepte sind etwas dieser Art in der Gestaltung.

War es hilfreich?

Lösung

Es ist wichtig zu erkennen, dass ein alle Compiler tut, ist (in diesem Fall C #) eine Ausgangssprache nehmen, analysieren sie so dass der Compiler hat eine Darstellung, die Sinn für sie und nicht die Menschen (das ist die abstrakte Syntaxbaum) macht, und macht dann eine naive Codegenerierung in die Zielsprache (MSIL ist das Ziel für die Sprachen, die auf der .NET-Laufzeit ausgeführt werden).

Nun, wenn das Skript # -Code in eine Baugruppe gedreht wird und interagiert mit anderen .NET-Code, die sich dieser Compiler bedeutet muss msil werden zu generieren. Skript # verwendet csc.exe für diese, die nur die Standard c # comiler ist. Nun JavaScript zu generieren, muss es entweder c # oder msil nehmen, analysieren sie und erzeugen Sie Javascript an den Browser zu senden. Die docs sagt es einen benutzerdefinierten c # hat -> js Compiler genannt ssc.exe.

Um die Dinge in Wechselwirkung treten konsequent sowohl auf der Client-Seite und die Server-Seite es eine Reihe von Referenzanordnungen hat, die in .NET geschrieben ist, sondern auch Javascript zusammengestellt. Dies ist kein Compiler spezifisches Problem allerdings ist dieser Bezug Baugruppen die Skript # Laufzeit ist. Die Laufzeit ist wahrscheinlich verantwortlich für viele der magischen Skript # Sie aber sind wahrzunehmen.

Andere Tipps

Also lassen Sie uns sagen, Sie C # in Javascript erstellen möchten. Sie fragen, ob Sie die Vorteile der vorhandenen C # Compiler, so dass anstelle der Kompilierung C # in Javascript direkt Sie tatsächlich konvertieren die MSIL erzeugt durch den C # -Compiler in Javascript nehmen?

Sicher, man kann das tun. Sobald Sie die MSIL binäre haben, können Sie tun, was Sie wollen es.

Microsoft hat ein Forschungsprojekt namens Volta , die unter anderem msil zu JavaScript kompiliert.

  

Entwickler-Toolset für Gebäude   Multi-Tier-Webanwendungen mit   bestehende und vertraute Werkzeuge,   Techniken und Muster. Voltas   deklarative Tier-Splitting ermöglicht   Entwickler Architektur verschieben   Entscheidungen über die Verteilung bis die   allerletzten Moment verantwortlich.   Auch dank einer gemeinsamen Programmierung   Modell in mehreren Stufen, Volta   ermöglicht neue End-to-End-Profilerstellung und   Tests auf höheren Ebenen der   Anwendungsleistung, Robustheit,   und Zuverlässigkeit. Unter Verwendung der deklarativen   Tier-Splitting, können Entwickler verfeinern   Architekturentscheidungen auf dieser Basis   Profildaten. Das spart Zeit und   Kosten im Zusammenhang mit manuellen zugeordnet   Refactoring. In der Tat Volta erweitert   die NET-Plattform weiter zu ermöglichen,   die Entwicklung von Software + Services   Anwendungen unter Nutzung bestehender und   vertraute Werkzeuge und Techniken.

     

Sie Architekt und bauen Sie Ihre   Anwendung als .NET-Client   Anwendung, die Zuordnung der Teile der   die Anwendung, die auf dem Server ausgeführt   Tier-und Client-Schicht spät in dem   Entwicklungsprozess. Sie können Ziel   entweder Web-Browser oder die CLR als   Kunden und Volta übernimmt die   Komplexität der Tier-Splitting. Das   Compiler erstellt Cross-Browser   JavaScript für das Client-Schicht, Web   Services für die Serverebene, und alle   Kommunikation, Serialisierung,   Synchronisation, Sicherheit und andere   vorformulierten Code, um die Reihen zu binden   zusammen. In der Tat Volta bietet eine   Best-Effort-Erfahrung in mehreren   Umgebungen, ohne dass   Anpassung der Anwendung an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top