Frage

Ich weiß, das sehr abstrakt ist, aber ich glaube, es ist sehr konzentriert.

Es gibt viele Hochsprachen heute: C # , Java , VB , Python , usw. ., die alle zu abstrahieren Low-Level-Komplexität und bieten eine benutzerfreundliche Programmiererfahrung erstellt. Hochsprachen können reduzieren, und die meiste Zeit vollständig zu entfernen, die Notwendigkeit, auf niedrige Ebene, prozessspezifische Operationen (wie die Zeigermanipulation und Speicherverwaltung) durchzuführen. Viele auch entfernen Plattform Details (wie Dateimanipulation, Benutzeroberfläche Generation usw.)

Meine zwei Fragen sind:

  1. Was kann / soll abstrahiert werden? Gibt es mehr Low-Level-Semantik präsentieren Hochsprachen in der heutigen, der wird / sollte sich weiter abstrahiert werden?
  2. An welchem ??Punkt ein Allzweck-, höhere Programmiersprache sehr hoch -Niveau , auch bekannt als zielorientiert ?
War es hilfreich?

Lösung

Eines der Probleme, mit darunter sehr hohen Abstraktionen in einer Sprache ist, dass manchmal sind sie nicht ausreichend für alles, was Sie zu tun bekommen wollen, so können Sie die untere Ebene Abstraktionen am Ende brauchen, auch. Das Problem bei mit hohem und niedrigen Pegeln Abstraktionen in derselben Sprache ist, dass die hohen Abstraktionen undichte sehr leicht werden können, wenn man sie über geringe Abstraktionen sondieren kann.

Java, zum Beispiel, ist nicht einmal das hohe Niveau einer Sprache, aber es konzipiert ist, sicher zu sein (in dem Sinne, dass Abstraktionen nicht auslaufen) in erster Linie. Daher sind einige Dinge einfach unmöglich, in Java zu tun. Zum Beispiel können Sie nicht von Java Garbage Collector in Java schreiben, oder rollen Sie Ihren eigenen Objektsystemzeiger Guss Polymorphismus, oder ein Betriebssystem schreiben (zumindest keine traditionelles eins).

Im Gegensatz dazu bieten D sowohl hohe Niveau und niedriges Niveau ausgestattet. D's Garbage Collector zum Beispiel geschrieben in D. Das klingt gut und zum größten Teil sie ist. Wenn Sie jedoch Abstraktionsebene in einer einzigen Code-Basis können die Abstraktionen Mixen austreten, vor allem wenn man Abgüsse oder Gewerkschaften verwenden, um die Art System zu besiegen. Deshalb, um erfolgreich Programm in D Sie gelegentlich bewusst einige Low-Level-Details sein könnte müssen befassen sich mit undichten Abstraktionen, auch wenn Sie diese nicht zur Hand für die Aufgabe benötigen.

Andere Tipps

  1. Was kann / soll abstrahiert werden? Es kommt immer darauf an Ihrem Ziel. Es gibt keine klare Linie hier, aber ich denke, es kommt darauf an, wie viel Kontrolle benötigen Sie? Es ist in der Regel ein ziemlich schwerer Kompromiss zwischen Abstraktion und Möglichkeiten.
  2. Wann ist ein Allzweck-, Hochsprache werden zielorientiert? Sobald Sie die Sprache / Programmierumgebung sagen können, was Sie statt dessen, was will, sollte es tun.

In Wirklichkeit aber ... die Linie ist völlig willkürlich natürlich.

Tcl hat einen offiziellen Vorschlag ( Tcl Verbesserungsvorschlag (TIP) 131 , dass so ziemlich löst das Problem für gut. Alles was es braucht ist ein Freiwilliger, die Arbeit zu tun. es gibt sogar eine Skelett-Implementierung mit nur einige der Details weggelassen.

Einige Sprachen Domain Specific können extrem sein „hohe Niveau“. Ein gutes Beispiel hierfür ist Inform (verwendet, um Text schreiben Abenteuer), wo die Programmiersprache nicht viel anders aus einfachem Englisch ist. Hier ist ein Auszug aus einem Beispielprojekt :

The fireplace is scenery in the Entrance Hall. The description is "Unlit, vacant
[if Search is happening]. It is almost as though you are not expected[end if]."
The sound of the fireplace is "whistling wind". Understand "fire" or "whistling" 
or "wind" as the fireplace. Instead of burning the fireplace: say "There is no 
fuel prepared for a fire."

Dies ist tatsächlich Quellcode. :)

Ich denke, eine hypothetische Zukunft Sprache ermöglicht Ihnen einen Prüfer anstelle einer Implementierung zu schreiben. Der Compiler analysiert dann, dass die Prüfer und (Versuche) schreiben eine Implementierung für Ihre spec. (Natürlich muss der Compiler manchmal brutale Gewalt versagen oder zurückfallen, weil es keinen Anhalt Löser ist.)

Im Grunde eine logische Sprache mit lächerlichen Optimierungen im Vergleich zu zwingen, die Antwort auf Brute.

Auch wenn Bestätigungscode sein kann, länger als Implementierungscode, wirkt es so viel bessere Dokumentation und ist näher an, was ein spec aussieht. Sie handeln mehr Code-Eingabe Zeit für weniger Dokumentation / spec / code desyncing.

Zum Beispiel:

int32 Remainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures Math.Abs(result) < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures result >= 0
    ensures result < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}

Ergebnisse in:

//warning: suggested precondition: denominator != int32.MinValue due to Math.Abs
int32 Remainder(int32 numerator, int32 denominator) {
    return numerator % denominator;
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    return ((numerator % denominator) + denominator) % denominator;
}

Hrm, ich glaube, ein paar Sprachen versuchen, einige zusätzliche Abstraktionen anzuführen. Clojure mit STM und Erlang mit dem Schauspieler-Modell

  1. Über das einzige, was ich sehe, dass ich nicht sehen kann, wie es gemacht werden würde, ist eine Sprache mit Gleichzeitigkeit überprüft ähnlich statisch typisierte Prüfung. Ich sage das, weil das Halteproblem besteht.
  2. Wenn es meinen Rasen mäht, macht mich Kaffee am Morgen, Schecks per E-Mail und sagt mir, was in den Nachrichten geschehen ist.

Ich denke, dass Frameworks der nächste Schritt ist.

  • Zur Zeit einige „Sprachen“ sind für UAT (die in der Nähe zu dem, was man ein Ziel nennen konnte und mit einem Ziel erfordert Tests , weil es der einzige Weg ist, könnte es erklärt werden, zB Fit für den Testteil); Diese könnten mit Programmiersprachen eingebunden werden.
  • So ziemlich jede Sprache wird immer Zugang zu mehr und mehr High Level-Schnittstellen (dh Abstraktion ), die weniger und weniger Code von Ihnen und abstrahiert von den OS (sehen wie einfach es ist GUI-Anwendung jetzt in C #, im Vergleich zu C ++ MFC, im Vergleich zu C ++ Win32-API).
  • machen
  • Wie für die Programmiersprachen sie mehr der besten Eigenschaften anderer Entwicklungsmethoden bekommen konnte: Ich denke an Aspektorientierte Programmierung , die viele OO Problem lösen helfen könnte, und ist bereits teilweise umgesetzt in irgendeine Form in C # und Java (wie Fragen in Bezug auf die Protokollierung, Transaktionen ...).
  • UML ultimative Ziel ( war ?) Die UML viesw zu ermöglichen, zusammen mit den Details Diagramme Code ausreicht, um das System; UML ist auch eine Sprache (in der größeren Bedeutung).
  • IDE auch enthalten sein sollten: Sie können nun festlegen, wie ein Dialog aus der IDE Größe ändern sollte, während Sie häufig Code hatte es vor. Später können Sie in der Lage sein, zu Stil Ihre gesamte Anwendung oder Website aus einer Dropdown-Liste von Themen wie jede Haut-able Anwendung. Und noch viel mehr kommen könnte.

Stellen Sie sich die Vereinigung der in einer einheitlichen Umgebung, weil die Entwicklungsumgebung ein großer Teil der Entwicklung ist ebenso wie die Bibliotheken hat man Zugriff auf und die Zugriffsebene.

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