Frage

Für eine lange Zeit habe ich verschiedene Sprachen versucht, das Feature-Set Ich möchte zu finden und ich habe nicht in der Lage gewesen, es zu finden. Ich habe Sprachen, die anständig für verschiedene Projekte von mir passen, aber ich habe mit einem Schnittpunkt dieser Sprachen kommen, die mich 99,9% meiner Projekte in einer einzigen Sprache zu tun erlaubt. Ich möchte folgende Möglichkeiten:

  • Aufbauend auf der .NET oder eine .NET-Implementierung
  • Hat einige Abhängigkeiten von der .NET-Laufzeit sowohl bei der Kompilierung und Laufzeit (dies ist wichtig, da eine der wichtigsten Fälle Einsatz in Embedded-Entwicklung ist, wo die .NET-Laufzeit vollständig Brauch ist)
  • Hat einen Compiler, der 100% .NET-Code ohne unmanaged Abhängigkeiten
  • ist
  • Unterstützung beliebiger Ausdruck nisten (siehe unten)
  • Unterstützt benutzerdefinierten Operator Definitionen
  • Unterstützt Typinferenz
  • Optimiert Endrekursion
  • Hat explizit unveränderlich / wandelbar Definitionen (nicety - Ich bin gekommen, dies zu lieben, aber ohne sie leben kann)
  • Unterstützt echte Makros für starkes metaprogramming (absolute must-have)

Die primären zwei Sprachen Ich habe mit gearbeitet sind Boo und Nemerle, aber ich habe auch um mit F # gespielt.

Hauptbeschwerden gegen Nemerle: Der Compiler schreckliche Fehlerberichterstattung hat, ist die Umsetzung Buggy wie die Hölle (Compiler und Bibliotheken) können die Makros nur in einer Funktion oder als Attribute angewendet werden, und es ist ziemlich starke Abhängigkeit weise (wenn auch nicht genug, dass es ein dealbreaker).
Hauptbeschwerden gegen Boo: Keine willkürliche Ausdruck nisten (dealbreaker), Makros sind schwer zu schreiben, keine benutzerdefinierte Operator Definition (potenzielle dealbreaker)
. Hauptbeschwerden gegen F #:. Hässliche Syntax, schwer zu verstehen metaprogramming, unfreie Lizenz (episch dealbreaker)

Je mehr ich darüber nachdenke, desto mehr denke ich über meine eigene Sprache zu entwickeln.

Vorteile:

  • Holen Sie sich die genaue Syntax Ich mag
  • Holen Sie sich eine Durchlaufzeit, die ein gutes Geschäft sein wird schneller; schwer zu quantifizieren, aber ich würde nicht überrascht, 1.5x die Produktivität der Entwickler, vor allem aufgrund der Testinfrastrukturen sehen dies für bestimmte Projekte aktiviert
  • Ich kann leicht benutzerdefinierte Funktionen für den Compiler in dem schön mit meiner Laufzeit zu spielen
  • Ich bekomme etwas, das entwickelt und arbeitet genau , wie ich will - so viel wie dies wie NIH klingt, dies wird mein Leben einfacher
  • machen

Nachteile:

  • Es sei denn, es Popularität zu bekommen, werde ich mit der Last der Wartung geklebt werden. Ich weiß, ich kann zumindest die Nemerle Menschen über bekommen, da ich denke, jeder will etwas professionelle, aber es braucht ein ganzes Dorf.
  • Durch die erste con, ich bin vorsichtig es in einem professionellen Umfeld einzusetzen. Das heißt, ich bin mit Nemerle bereits und meinen eigenen benutzerdefinierten modifizierte Compiler verwenden, da sie die Aufrechterhaltung es nicht gut aus.
  • Wenn es Popularität nicht gewinnen, werden die Entwickler zu finden, sehr viel schwieriger sein, in einem solchen Ausmaß, dass Paul Graham vielleicht nicht einmal duldet.

auf all dies So basiert, was ist der allgemeine Konsens - das ist eine gute Idee oder schlechte Idee? Und vielleicht hilfreich, habe ich keine großen Vor- oder Nachteile verpasst?

Edit: Vergessen die Verschachtelung Beispiel hinzuzufügen - hier ist ein Fall, in Nemerle:

def foo = 
    if(bar == 5)
        match(baz) { | "foo" => 1 | _ => 0 }
    else bar;

Bearbeiten # 2: Dachte es wäre nicht ein Beispiel für die Art von Code verletzt zu geben, das in dieser Sprache konvertiert werden, wenn es zu existieren (allein S. Lott Antwort genug sein, um es mich zu verscheuchen aus, es zu tun) . Der Code macht intensiven Gebrauch von benutzerdefinierten Syntax (Opcode: =, quoteblock, usw.), Ausdruck nisten, etc. Sie können ein gutes Beispiel Besuche hier: hier .

War es hilfreich?

Lösung

Leider gibt es keine Messwerte oder die Geschichten um gescheitert Sprachen. Nur erfolgreiche Sprachen. Offensichtlich überwiegen die Fehler, die Erfolge.

Was stütze ich diese auf? Zwei gemeinsame Erfahrungen.

  1. Einmal oder zweimal im Jahr, ich habe einen Platz für ein Produkt / Sprache / Werkzeug / Rahmen zu ertragen, dass alles absolut ändern wird. Meine Antwort ist in den letzten 20 Jahren oder so konstant. Zeigen Sie mir jemanden, der Unterstützung und mein Unternehmen braucht, wird sie unterstützen. Und das ist das. Nie von ihnen hören wieder. Sagen wir, ich habe 25 von ihnen gehört.

  2. Eine oder zwei Mal pro Jahr, ich habe mit einem Kunden zu arbeiten, die Technologie verwaiste hat. An einem gewissen Punkt in der Vergangenheit gebaut einige clevere Programmierung ein Werkzeug / Rahmen / Bibliothek / Paket, das intern für mehrere Projekte verwendet wurde. Dann verließ, dass Programmierer. Niemand sonst kann Figur, die verflixte Sache, und sie wollen, dass wir sie ersetzen / umschreiben. Leider können wir es auch nicht herausfinden, und unser Vorschlag ist von Grund auf neu zu schreiben. Und sie beklagen, dass ihr Genie den Satz von Anwendungen in einem Zeitraum von Wochen gebaut, kann es Monate dauern, uns nicht, sie neu zu schreiben in Java / Python / VB / C #. Sagen wir, ich habe 25 geschrieben oder so von dieser Art von Vorschlägen.

Das ist nur ich, ein Berater.

Tatsächlich eine besonders traurige Situation war eine Firma, die gesamter IT-Software-Portfolio wird von einem cleveren Kerl mit einer eigenen Sprache und Tool geschrieben wurde. Er hatte nicht verlassen, aber er hat erkannt, dass seine Sprache und Toolset Weg hinter der Zeit gefallen waren - der Stand der Technik hatte bewegt, und er hatte nicht.

Und der Umzug war - natürlich - in einer unerwarteten Richtung. Seine Sprache und Werkzeuge waren in Ordnung, aber die Welt begonnen hatte relationale Datenbanken zu übernehmen, und er hatte absolut keine Möglichkeit, seine Junk-Upgrade von flachen Dateien zu entfernen. Es war etwas, das er nicht vorausgesehen hatte. Tatsächlich war es etwas, konnte er unmöglich vorhersehen. [Sie werden nicht in diese Falle tappen, werden Sie?]

Also, wir sprachen. Er schrieb viele Anwendungen in Plain-Old VAX Fortran (ja, das ist schon lange her.) Und er schrieb es nur altes relationale SQL Zeug zu verwenden (Ingres, zu der Zeit.)

Nach einem Jahr der Codierung wurden sie Leistungsprobleme haben. Sie nannten mich alle großen Sachen zu überprüfen zurück, den sie in Austausch der Eigenbau Sprache getan hatte. Leider hatten sie das schlimmstmögliche relationale Datenbank-Design gemacht. Am schlimmsten möglich. Sie haben ihre Dateikopien genommen, verschmilzt, sortieren, und was nicht, und jede Low-Level-Dateisystemoperation implementiert SQL verwenden, das Duplizieren von Datenbankzeilen nach links, rechts und in der Mitte.

Er war in seiner Privat Vision von der perfekten Sprache so verstrickt, dass er nicht auf eine relativ häufige, pervasive neue Technologie anpassen kann.

Andere Tipps

Ich sage für ihn gehen.

  • Es wäre eine tolle Erfahrung, unabhängig von Wetter es zu Produktion macht oder nicht.
  • Wenn Sie es IL machen kompilieren nach unten, dann müssen Sie keine Sorge über nicht in der Lage, Ihre kompilierten Assemblys mit C #
  • wiederverwenden
  • Wenn Sie glauben, dass Sie gültige Beschwerden über die Sprachen haben Sie oben aufgeführt, ist es wahrscheinlich, dass viele, wie Sie denken. Natürlich für jeden 1000 Interessenten könnte es 1 bereit zu Ihnen, es zu halten - aber das ist immer das Risiko

Aber hier sind ein paar Dinge zu sein, warnte etwa:

  • Sie sich jetzt Ihre Sprachspezifikation IN STEIN vor der Entwicklung. Stellen Sie sicher, jede und alle Sprachfunktionen sind vor der Hand herausgefunden - auch Dinge, die Sie in Zukunft nur wünschen können. Meiner Meinung nach, ist C # fällt langsam in die "oh-just-one-more-Sprache-Erweiterung" Falle, die zu seinem eventuellen Untergang führen wird.
  • Seien Sie sicher, dass es optimiert zu machen. Ich weiß nicht, was Sie bereits wissen; aber wenn Sie nicht wissen, dann lernen;.) Niemand wird die Sprache wollen die schöne Syntax hat aber läuft so langsam wie IE JavaScript-Implementierung

Viel Glück: D

Als ich meine Karriere in den frühen 90er Jahren zum ersten Mal gestartet, schien diese Begeisterung zu sein von jeder seine eigenen in-house Sprachen zu entwickeln. Meine erste 3 Jobs waren mit Unternehmen, die dies getan hatte. Ein Unternehmen hatte sogar ihr eigenes Betriebssystem entwickelt!

Aus Erfahrung würde ich sagen, dass dies eine schlechte Idee, aus den folgenden Gründen:

1) Sie werden Zeit Debuggen der Sprache selbst zusätzlich zu dem Code-Basis auf ihm verbringen
2) Alle Entwickler Sie mieten müssen durch die Lernkurve der Sprache
gehen 3) Es wird schwer sein, Entwickler zu gewinnen und zu halten, da in einer eigenen Sprache arbeitet, ist eine Sackgasse für jemandes Karriere

Der Hauptgrund, warum ich links die drei Arbeitsplätze waren, weil sie proprietäre Sprachen hatten, und Sie werden feststellen, dass nicht viele Unternehmen diesen Weg nehmen mehr.)

Ein weiteres Argument, das ich machen würde, ist, dass die meisten Sprachen ganze Teams Vollzeit-Job haben, die es ist, die Sprache zu entwickeln. Vielleicht würden Sie eine Ausnahme sein, aber ich würde sehr überrascht sein, wenn Sie in der Lage sein würden, dieses Niveau der Entwicklung von nur Arbeiten an der Sprache in Teilzeit entsprechen.

  

Hauptbeschwerden gegen Nemerle: Die   Compiler hat schreckliche Fehlerberichterstattung,   die Umsetzung ist buggy wie die Hölle   (Compiler und Bibliotheken), die Makros   kann nur in einer Funktion angewandt werden,   oder als Attribut, und es ist ziemlich   starke Abhängigkeit weise (wenn auch nicht   genug, dass es ein dealbreaker).

Ich sehe Ihr Beitrag vor mehr als zwei Jahren geschrieben wurde. Ich rate Ihnen Nemerle Sprache heute versuchen. Der Compiler ist stabil. Es gibt keine Blocker Bugs für heute. Die VS-Integration viele Verbesserungen hat, auch gibt es SharpDevelop Integration.

Wenn Sie ihm eine Chance geben, werden Sie nicht enttäuscht sein.

NIEMALS Ihre eigene Sprache entwickeln.

Die Entwicklung Ihre eigene Sprache ist Falle ist ein Idiot, und schlimmer wird es Ihnen zu begrenzen, was Ihre Phantasie zur Verfügung stellen kann, aber auch fordern, dass Sie sowohl Ihre Entwicklungsumgebung arbeiten und das eigentliche Programm, das Sie schreiben.

Die Fälle, in denen dies nicht sind so ziemlich gilt, wenn Sie Larry Wall sind, die AWK Jungs, oder ein Teil einer wesentlichen Gruppe von Menschen zu testen, die Grenzen der Programmierung gewidmet ist. Wenn Sie in eine dieser Kategorien sind, dann brauchen Sie nicht meinen Rat, aber ich bezweifle stark, dass Sie eine Nische Targeting sind, wo es keine geeigneten Programmiersprache für die Aufgabe ist und die Eigenschaften der Menschen, um die Aufgabe zu tun.

Wenn Sie so klug sind, wie Sie scheinen (eine wahrscheinliche Möglichkeit) zu sein, mein Rat ist, zu gehen und das Design der Sprache tun iterieren zunächst ein paar Mal darüber, fragen einige intelligente Burschen Sie in Smart vertrauen Programmiersprache bezogenen Gemeinschaften über die konkrete Ausgestaltung Sie kamen und dann die Entscheidung treffen.

Sie können in dem Prozess erkennen, das Design zu schaffen, das nur eine schnelle Hack auf Nemerle geben würde es alles, was Sie zum Beispiel benötigen. Viele Dinge können nur passieren, wenn harte Gedanken über ein Problem, und die endgültige Lösung vielleicht nicht, was Sie im Sinn tatsächlich hatte, als das Projekt begann.

Worst-Case-Szenario, sind Sie mit der tatsächlichen Durchführung der Design stecken, aber dann werden Sie es Korrektur gelesen und reifen haben, und Sie werden mit einem hohen Grad an Sicherheit wissen, dass es ein guter Weg war zu nehmen.

Ein verwandter Ratschlag, klein anfängt, nur die Eigenschaften definieren Sie unbedingt benötigen und dann auf sie bauen den Rest zu erhalten.

Schreiben Sie Ihre eigene Sprache ist kein einfaches Projekt .. Vor allem ein in jeder Art von „professionellen Einstellung“ verwendet werden

Es ist ein großen Menge Arbeit, und ich würde bezweifeln Sie Ihre eigene Sprache schreiben konnte, und noch keine großen Projekte schreiben, die sie benutzen - Sie so lange verbringen das Hinzufügen von Funktionen, die Sie benötigen, Beheben von Fehlern und allgemeine Sprach-Design Sachen.

Ich würde stark empfehlen eine Sprache wählen, die am nächsten ist, was Sie wollen, und es erstreckt zu tun, was Sie brauchen. Es wird nie genau, was Sie wollen, aber im Vergleich zu der Zeit verbringen Sie werden Ihre eigene Sprache zu schreiben, würde ich sagen, das ist ein kleiner Kompromiss ..

Scala hat einen .NET-Compiler. Ich weiß nicht, den Status dieses though. Es ist eine Art ein Bürger zweiter Klasse in der Scala Welt (die mehr auf die JVM ist). Aber es könnte eine gute tradeof sein, um die .NET-Compiler zu übernehmen, anstatt eine neue Sprache von Grund auf neu zu schaffen.

Scala ist eine Art schwach in der Meta-Programmierung Abteilung ATM. Es ist möglich, dass der Bedarf an metaprogramming etwas von anderen Sprachfunktionen reduziert. Auf jeden Fall glaube ich nicht, dass jemand traurig wäre, wenn Sie metaprogramming Features für sie umzusetzen waren. Auch gibt es eine Compiler-Plug-in-Infrastruktur auf dem Weg.

Ich denke, die meisten Sprachen werden nie alle die Rechnung passen.

Vielleicht möchten Sie Ihre 2 Lieblings Sprachen (in meinem Fall C # und Scheme ) kombinieren und nutzen sie zusammen .

Aus fachlicher Sicht ist dies wahrscheinlich keine gute Idee, though.

Es wäre interessant, einige der Dinge zu hören, Sie denken, Sie können in vorhandenen Sprachen nicht. Welche Projekte werden Sie auf, dass die Arbeit nicht in C # getan werden kann?

Ich bin nur Kuriosität!

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