Des Lesens und Schreibens kundige Programmierung

Des Lesens und Schreibens kundige Programmierung ist eine Annäherung an die Programmierung eingeführt durch Donald Knuth als eine Alternative zum strukturierten Programmierparadigma der 1970er Jahre.

Das des Lesens und Schreibens kundige Programmierparadigma, wie konzipiert, durch Knuth, vertritt eine Bewegung weg davon, Programme auf diese Art und Ordnung zu schreiben, die durch den Computer auferlegt ist, und ermöglicht stattdessen Programmierern, Programme in der Ordnung zu entwickeln, die durch die Logik und den Fluss ihrer Gedanken gefordert ist. Des Lesens und Schreibens kundige Programme werden als eine ununterbrochene Ausstellung der Logik auf einer gewöhnlichen menschlichen Sprache viel wie der Text eines Aufsatzes geschrieben, in der Makros verbergen die Abstraktionen, und traditioneller Quellcode werden eingeschlossen.

Des Lesens und Schreibens kundige Programmierwerkzeuge werden verwendet, um zwei Darstellungen von einer des Lesens und Schreibens kundigen Quelldatei zu erhalten: Ein passender für die weitere Kompilation oder Ausführung durch einen Computer, den "verwirrten" Code und einen anderen, um als formatierte Dokumentation anzusehen, die, wie man sagt, von der des Lesens und Schreibens kundigen Quelle "gewebt" wird. Während die erste Generation von des Lesens und Schreibens kundigen Programmierwerkzeugen sprachspezifischer Computer war, sind die späteren Sprachagnostiker und bestehen über den Programmiersprachen.

Konzept

Ein des Lesens und Schreibens kundiges Programm ist eine Erklärung der Programm-Logik in einer natürlichen Sprache wie Englisch, das Schnipsel von Makros und traditionellem Quellcode eingestreut ist. Makros in einer des Lesens und Schreibens kundigen Quelldatei sind einfach titelähnliche oder erklärende Ausdrücke auf einer menschlichen Sprache, die menschliche geschaffene Abstraktionen beschreiben, während sie das Programmierproblem und Verbergen von Klötzen des Codes oder der Makros der niedrigeren Ebene beheben. Diese Makros sind den Algorithmen im in der lehrenden Informatik normalerweise verwendeten Pseudocode ähnlich. Diese willkürlichen erklärenden Ausdrücke werden genaue neue Maschinenbediener, geschaffen im Fluge vom Programmierer, eine Metasprache oben auf der zu Grunde liegenden Programmiersprache bildend.

Ein Vorverarbeiter wird verwendet, um willkürliche Hierarchien, oder eher "miteinander verbundenes 'Web' von Makros einzusetzen", um den compilable Quellcode mit einem Befehl ("Gewirr") und Dokumentation mit einem anderen zu erzeugen (weben). Der Vorverarbeiter stellt auch eine Fähigkeit zur Verfügung, den Inhalt der Makros auszuschreiben und zu bereits geschaffenen Makros in jedem Platz im Text der des Lesens und Schreibens kundigen Programm-Quelldatei beizutragen, dadurch über das Bedürfnis verfügend, die Beschränkungen zu beachten, die durch traditionelle Programmiersprachen auferlegt sind oder den Fluss des Gedankens zu unterbrechen.

Vorteile

Gemäß Knuth sorgt des Lesens und Schreibens kundige Programmierung für Programme der höheren Qualität, da es Programmierer zwingt, die Gedanken hinter dem Programm ausführlich festzusetzen, schlecht durchdachte offensichtlichere Designentscheidungen treffend. Knuth behauptet auch, dass des Lesens und Schreibens kundige Programmierung ein erstklassiges Dokumentationssystem zur Verfügung stellt, das nicht eine Erweiterung ist, aber natürlich im Prozess der Ausstellung von jemandes Gedanken während einer Programm-Entwicklung angebaut wird. Die resultierende Dokumentation erlaubt Autoren, ihre eigenen Gedanke-Prozesse in jeder späteren Zeit wiederanzufangen, und erlaubt anderen Programmierern, den Aufbau des Programms leichter zu verstehen. Das unterscheidet sich von der traditionellen Dokumentation, in der einem Programmierer den Quellcode geboten wird, der einer Bearbeiter-auferlegten Ordnung folgt, und den Gedanke-Prozess hinter dem Programm aus dem Code und seinen verbundenen Anmerkungen entziffern muss. Wie man auch fordert, erleichtern die Metasprache-Fähigkeiten zur des Lesens und Schreibens kundigen Programmierung das Denken im Allgemeinen, Geben einer höheren "Vogelperspektive" des Codes und des Steigerns der Zahl von Konzepten, die die Meinung erfolgreich behalten und bearbeiten kann. Anwendbarkeit des Konzepts zur Programmierung auf einem in großem Umfang, dieses von Handelssorte-Programmen wird durch eine Ausgabe des Codes von TeX als ein des Lesens und Schreibens kundiges Programm bewiesen.

Falsche Auffassungen

Des Lesens und Schreibens kundige Programmierung wird sehr häufig missverstanden, um sich nur auf die formatierte Dokumentation zu beziehen, die von einer allgemeinen Datei sowohl mit dem Quellcode als auch mit den Anmerkungen, oder zu umfangreichen mit dem Code eingeschlossenen Kommentaren erzeugt ist. Diese falsche Auffassung hat zu Ansprüchen geführt, dass Anmerkungsförderungswerkzeuge, wie das Perl Einfache Alte Dokumentationssystem, "des Lesens und Schreibens kundige Programmierwerkzeuge" sind. Jedoch, weil diese Werkzeuge das "Web von abstrakten Konzepten" nicht durchführen, sich hinter dem System von Makros der natürlichen Sprache verbergend, oder eine Fähigkeit zur Verfügung stellen, die Ordnung des Quellcodes von einer maschinenauferlegten Folge bis einen günstigen zum Menschenverstand zu ändern, können sie nicht des Lesens und Schreibens kundige Programmierwerkzeuge im von Knuth beabsichtigten Sinn richtig genannt werden.

Beispiel

Ein klassisches Beispiel der des Lesens und Schreibens kundigen Programmierung ist die des Lesens und Schreibens kundige Durchführung des Standardwortzählen-Programms von Unix. Knuth hat eine CWEB Version dieses Beispiels im Kapitel 12 seines Des Lesens und Schreibens kundigen Programmierbuches präsentiert. Dasselbe Beispiel wurde später für das noweb des Lesens und Schreibens kundige Programmierwerkzeug umgeschrieben. Dieses Beispiel stellt eine gute Illustration der Grundelemente der des Lesens und Schreibens kundigen Programmierung zur Verfügung.

Entwicklung von Makros

Der folgende Schnipsel des des Lesens und Schreibens kundigen Programms zeigt, wie willkürliche beschreibende Ausdrücke in einer natürlichen Sprache in einem des Lesens und Schreibens kundigen Programm verwendet werden, um Makros zu schaffen, die als neue "Maschinenbediener" auf der des Lesens und Schreibens kundigen Programmiersprache handeln, und Klötze des Codes oder der anderen Makros verbergen. Die Preiserhöhungsnotation besteht aus doppelten Winkelklammern ("

Der Zweck des WC ist, Linien, Wörter und/oder Charaktere in einer Liste von Dateien aufzuzählen. Der

die Zahl von Linien in einer Datei ist......../mehr Erklärungen /

Hier dann ist eine Übersicht der Datei wc.c, der durch das noweb Programm wc.nw definiert wird:

Wir müssen die Standardeingabe/Ausgabe-Definitionen einschließen, da wir formatierte Produktion senden

wollen

zu stdout und stderr.

#include

</Quelle>

Bemerken Sie auch, dass das Entwirren der Klötze in jedem Platz in der des Lesens und Schreibens kundigen Programm-Textdatei getan werden kann, nicht notwendigerweise in der Ordnung, sind sie sequenced im Umgeben-Klotz, aber wie durch die Logik gefordert wird, die im erklärenden Text widerspiegelt ist, der das ganze Programm einwickelt.

Das Programm als ein Web - Makros ist nicht nur Abteilungsnamen

Makros sind nicht dasselbe als "Abteilungsnamen" in der Standarddokumentation. Des Lesens und Schreibens kundige Programmiermakros können jeden Klotz des Codes hinter sich verbergen, und innerhalb irgendwelcher auf niedriger Stufe Maschinensprachmaschinenbediener, häufig innerhalb von logischen Maschinenbedienern solcher als"" "", oder "" verwendet werden. Das wird durch den folgenden Schnipsel des des Lesens und Schreibens kundigen Programms illustriert.

Der gegenwärtige Klotz, der das Zählen tut, war wirklich einer von

das einfachste, um zu schreiben. Wir schauen auf jeden Charakter und Änderungsstaat, wenn es beginnt oder beendet

ein Wort.

während (1) {\

c = *ptr ++;

wenn (c> '' && c

Tatsächlich können Makros für jeden willkürlichen Klotz des Codes oder der anderen Makros eintreten, und sind so allgemeiner als verfeinernd oder von unten nach oben "chunking", oder als subsectioning. Knuth sagt, dass, als er das begriffen hat, er begonnen hat, an ein Programm als ein Web von verschiedenen Teilen zu denken.

Ordnung der menschlichen Logik, nicht dieser des Bearbeiters

In einem noweb des Lesens und Schreibens kundigen Programm außer der freien Ordnung ihrer Ausstellung, den Klötzen hinter Makros, die einmal mit eingeführt sind"

Wenn wir diese Variablen lokal zur Hauptsache machen würden, würden wir diese Initialisierung tun

müssen

ausführlich; jedoch C sind globals automatisch zeroed. (Oder eher, ``statisch

zeroed. (Bekommen Sie es?)

langer tot_word_count, tot_line_count,

tot_char_count;

/* Gesamtzahl von Wörtern, Linien, Rotforellen * /

</Quelle>

Aufzeichnung des Gedankenfadens

Die Dokumentation für ein des Lesens und Schreibens kundiges Programm wird als ein Teil erzeugt, das Programm zu schreiben. Statt zur Verfügung gestellter Anmerkungen weil bemerkt Seite zum Quellcode ein des Lesens und Schreibens kundiges Programm enthält die Erklärung von Konzepten auf jedem Niveau, mit Konzepten der niedrigeren Ebene nachgegeben ihr passender Platz, der bessere Kommunikation des Gedankens berücksichtigt. Die Schnipsel des des Lesens und Schreibens kundigen über der Show, wie eine Erklärung des Programms und seines Quellcodes verwebt wird. Solche Ausstellung von Ideen schafft den Fluss des Gedankens, der einer literarischen Arbeit ähnlich ist. Knuth hat einen "Roman" geschrieben, der den Code des Computerstrategie-Spiels Riesiges Höhle-Abenteuer erklärt.

Werkzeuge

Die erste veröffentlichte des Lesens und Schreibens kundige Programmierumgebung war WEB, das von Donald Knuth 1981 für sein Schriftsetzen-System von TeX eingeführt ist; es verwendet Pascal als seine zu Grunde liegende Programmiersprache und TeX für das Schriftsetzen der Dokumentation. Das ganze hat kommentiert, dass Quellcode von TeX in TeX von Knuth veröffentlicht wurde: Das Programm, der Band B seiner 5-bändigen Computer und Schriftsetzens. Knuth hatte ein des Lesens und Schreibens kundiges Programmiersystem genannt der DOKTOR schon in 1979 privat verwendet. Er wurde durch die Ideen von Pierre-Arnoul de Marneffe begeistert. Der freie CWEB, der von Knuth und Silvio Levy geschrieben ist, ist WEB, das an C und C ++ angepasst ist, läuft auf am meisten Betriebssystemen und kann TeX und PDF Dokumentation erzeugen.

Es gibt verschiedene andere Durchführungen des des Lesens und Schreibens kundigen Programmierkonzepts:

  • noweb ist der Programmiersprache des Quellcodes unabhängig. Es ist für seine Einfachheit weithin bekannt: Gerade sind zwei Textpreiserhöhungsvereinbarung und zwei Werkzeug-Beschwörungen erforderlich, um es zu verwenden, und es berücksichtigt, dass Text im HTML formatiert, anstatt das System von TeX durchzugehen.
  • FunnelWeb ist ein anderes LP-Werkzeug, das HTML-Dokumentationsproduktion erzeugen kann. Es hat mehr komplizierte Preiserhöhung (mit, jedem Befehl von FunnelWeb entkommend), aber hat viele flexiblere Optionen (sieh). Wie noweb ist es der Programmiersprache des Quellcodes unabhängig.
  • Nuweb kann eine einzelne LP-Quelle in jede Zahl von Codedateien in jeder Mischung von Sprachen zusammen mit der Dokumentation im LATEX übersetzen. Es tut es in einer einzelnen Beschwörung; es hat getrennt nicht weben und verwirren Befehle. Es hat die Dehnbarkeit von noweb nicht, aber es kann das Auflistungspaket des LATEX verwenden, um hübschen Druck und das hyperref Paket zur Verfügung zu stellen, um Hypertext-Links in der PDF Produktion zur Verfügung zu stellen. Es hat auch das umfassende Indexieren und in Möglichkeiten einschließlich Querverweise aus dem erzeugten Code zurück zur Dokumentation sowohl als automatisch erzeugte Anmerkungen als auch als Schnuren Quer-verweise anzubringen, die der Code verwenden kann, um sein Verhalten zu melden. Vimes ist ein Typ-Kontrolleur für die Z Notation, die den Gebrauch von nuweb in einer praktischen Anwendung zeigt. Ungefähr 15,000 Linien der nuweb Quelle werden in fast 15,000 Linien von C/C ++ Code und mehr als 460 Seiten der Dokumentation übersetzt. Sieh Außenverbindungen.
  • Molly ist ein LP-Werkzeug, das in Perl geschrieben ist, der zum Ziel hat, es mit dem "sich faltenden HTML" und "den virtuellen Ansichten" auf dem Code zu modernisieren und zu erklettern. Es verwendet "noweb" Preiserhöhung für die des Lesens und Schreibens kundigen Quelldateien. Sieh Außenverbindungen.
  • Codnar ist ein umgekehrtes des Lesens und Schreibens kundiges als ein Rubinroter Edelstein verfügbares Programmierwerkzeug (sieh Außenverbindungen). Statt des maschinenlesbaren Quellcodes, der aus den des Lesens und Schreibens kundigen Dokumentationsquellen wird herauszieht, wird die des Lesens und Schreibens kundige Dokumentation aus den normalen maschinenlesbaren Quellcodedateien herausgezogen. Das erlaubt diesen Quellcodedateien, editiert und wie gewöhnlich aufrechterhalten zu werden. Die Annäherung ist dem ähnlich, das durch populäre API-Dokumentationswerkzeuge wie JavaDoc verwendet ist. Solche Werkzeuge erzeugen jedoch API-Bezugsdokumentation, während Codnar einen geradlinigen Bericht erzeugt, der den Code beschreibt, der dem ähnlich ist, das durch klassische LP-Werkzeuge geschaffen ist. Codnar kann mit API-Dokumentationswerkzeugen koexistieren, sowohl ein Bedienungshandbuch als auch einen geradlinigen Bericht erlaubend, von demselben Satz von Quellcodedateien erzeugt zu werden.
  • Der Textaufbereiter von Leo ist ein Umreißen-Redakteur, der fakultativen noweb und CWEB Preiserhöhung unterstützt. Der Autor von Leo mischt zwei verschiedene Annäherungen: Erstens ist Leo ein Umreißen-Redakteur, der mit dem Management von großen Texten hilft; zweitens vereinigt Leo einige der Ideen von der des Lesens und Schreibens kundigen Programmierung, die in seiner reinen Form (d. h. der Weg wird sie durch das Knuth Webwerkzeug und/oder die Werkzeuge wie "noweb" verwendet), nur mit etwas Grad der Schaffenskraft und dem Gebrauch des Redakteurs in einem Weg möglich ist, der nicht genau von seinem Autor (in modifizierten @root Knoten) vorgesehen ist. Jedoch machen das und andere Erweiterungen (@file Knoten) Umriss-Programmierung und Textverwaltung erfolgreich und leicht und in mancher Hinsicht ähnlich der des Lesens und Schreibens kundigen Programmierung.
  • Die Programmiersprache von Haskell hat heimische Unterstützung für die des Lesens und Schreibens halbkundige Programmierung, die durch CWEB, aber mit einer einfacheren Durchführung begeistert ist. Wenn man auf Produktion von TeX zielt, schreibt man eine einfache LATEX-Datei, wo Quellcode durch eine gegebene Umgebungsumgebung gekennzeichnet wird; LATEX kann aufgestellt werden, um diese Umgebung zu behandeln, während der Bearbeiter von Haskell nach den richtigen Anschreibern sucht, um Behauptungen von Haskell zu identifizieren, um zu kompilieren, die Dokumentation von TeX entfernend, als ob sie Anmerkungen waren. Jedoch, wie beschrieben, oben, ist das nicht des Lesens und Schreibens kundige Programmierung im von Knuth beabsichtigten Sinn. Die funktionelle, modulare Natur von Haskell macht des Lesens und Schreibens kundige Programmierung direkt auf der Sprache etwas leichter, aber es ist fast so nicht wichtig wie eines der WEB-Werkzeuge, wo "Gewirr" auf willkürliche Weisen reorganisieren kann.

Siehe auch

  • Sweave - ein Beispiel des Gebrauches des "noweb" artigen Des Lesens und Schreibens kundigen Programmierwerkzeugs innerhalb der R Sprache für die Entwicklung von dynamischen statistischen Berichten
  • Sprechender

Weiterführende Literatur

  • (schließt Software ein).

Links

häufig gestellte

Kurve von Lorenz / Logistische Karte
Impressum & Datenschutz