Programmiersprache Theorie
Programmiersprache Theorie (PLT) ist ein Zweig von Informatik Das befasst sich mit dem Design, der Implementierung, Analyse, Charakterisierung und Klassifizierung von formelle Sprachen bekannt als Programmiersprachen und von ihrem Individuum Merkmale. Es fällt in die Disziplin der Informatik, sowohl je nach als auch Auswirkungen auf die Informatik Mathematik, Softwareentwicklung, Linguistik und sogar Kognitionswissenschaft. Es ist ein gut anerkannter Zweig der Informatik und ein aktiver Forschungsgebiet geworden, wobei die Ergebnisse in zahlreichen veröffentlicht werden Zeitschriften sowohl PLT als auch in allgemeinen Informatik- und Ingenieurpublikationen gewidmet.
Geschichte
In gewisser Hinsicht geht die Geschichte der Programmiersprache Theorie sogar der Entwicklung von Programmiersprachen selbst voraus. Das Lambda -Kalkül, entwickelt von Alonzo Church und Stephen Cole Kleene In den 1930er Jahren wird von einigen als die erste Programmiersprache der Welt angesehen, obwohl dies beabsichtigt war Modell Berechnung eher als Mittel für Programmierer zu sein beschreiben Algorithmen zu einem Computersystem. Viele modern Funktionale Programmiersprachen wurde beschrieben, dass er ein "dünnes Furnier" über den Lambda -Kalkül bereitstellt,[1] und viele sind leicht beschrieben.
Die erste Programmiersprache, die erfunden wurde, war Plankalkül, das entworfen wurde von Konrad Zuse In den 1940er Jahren, aber erst 1972 bekannt (und erst 1998 umgesetzt). Das erste weithin bekannte und erfolgreiche Programmiersprache auf hoher Ebene war Forran, entwickelt von 1954 bis 1957 von einem Team von IBM Forscher angeführt von John Backus. Der Erfolg von FORTRAN führte zur Bildung eines Wissenschaftlerausschusses, um eine "universelle" Computersprache zu entwickeln. Das Ergebnis ihrer Bemühungen war Algol 58. Separat, John McCarthy von MIT aufgetreten LispelnDie erste Sprache mit Ursprung in der Wissenschaft, um erfolgreich zu sein. Mit dem Erfolg dieser ersten Bemühungen wurden die Programmiersprachen in den 1960er Jahren und darüber hinaus zu einem aktiven Forschungsthema.
Einige andere Schlüsselereignisse in der Geschichte der Programmiersprache Theorie seitdem:
1950er Jahre
- Noam Chomsky entwickelte die Chomsky -Hierarchie Im Bereich der Linguistik, eine Entdeckung, die sich direkt auf die Programmiersprachentheorie und andere Zweige der Informatik ausgewirkt hat.
1960er Jahre
- Das Simula Die Sprache wurde von entwickelt von Ole-Johan Dahl und Kristen Nygaard; Es gilt allgemein als das erste Beispiel für eine objektorientierte Programmiersprache; Simula führte auch das Konzept von vor Coroutinen.
- Im Jahr 1964, Peter Landin ist der erste, der realisiert, dass der Lambda -Kalkül der Kirche zur Modellierung von Programmiersprachen verwendet werden kann. Er stellt das vor SECD -Maschine welche "interpretieren" Lambda -Ausdrücke.
- Im Jahr 1965 stellt Landin die vor J Operator, im Wesentlichen eine Form von Fortsetzung.
- Im Jahr 1966 führt Landin vor ICH SCHWIMME, ein abstrakter Computer Programmiersprache in seinem Artikel Die nächsten 700 Programmiersprachen. Es hat einflussreich für die Gestaltung von Sprachen, die zum zur Haskell Programmiersprache.
- 1966,, Corrado Böhm stellte den Programmiersprache Cuch (Curry-Church) vor.[2]
- 1967,, Christopher Strachey Veröffentlicht seine einflussreiche Vorlesungsnotizen Grundlegende Konzepte in ProgrammiersprachenEinführung der Terminologie R-Werte, L-Werte, parametrischer Polymorphismus, und Ad -hoc -Polymorphismus.
- Im Jahr 1969,, J. Roger Hindley Veröffentlichungen Die Haupttypscheme eines Objekts in der Kombinationslogik, später in die verallgemeinert Hindley -Milner Geben Sie Inferenz ein Algorithmus.
- Im Jahr 1969,, Tony Hoare führt die vor Hoare Logik, eine Form von Axiomatische Semantik.
- Im Jahr 1969,, William Alvin Howard beobachtete, dass ein "hochrangiger" Proof -System, bezeichnet als natürlicher Abzug, kann direkt in seinem interpretiert werden intuitionistisch Version als typisierte Variante der Berechnungsmodell bekannt als Lambda -Kalkül. Dies wurde als die bekannt Curry -Howard -Korrespondenz.
1970er Jahre
- 1970,, Dana Scott Veröffentlicht zuerst seine Arbeiten an Denotationssemantik.
- 1972,, Logikprogrammierung und Prolog wurden so entwickelt, dass Computerprogramme als mathematische Logik ausgedrückt werden.
- Ein Team von Wissenschaftlern bei Xerox Parc angeführt von Alan Kay sich entwickeln Smalltalk, eine objektorientierte Sprache, die weithin für ihre innovative Entwicklungsumgebung bekannt ist.
- 1974,, John C. Reynolds entdeckt System f. Es wurde bereits 1971 vom mathematischen Logiker entdeckt Jean-yves Girard.
- Ab 1975,, Gerald Jay Sussman und Guy Steele entwickeln Programmiersprache Schema, ein Lisp -Dialekt integriert lexikaler Scoping, ein einheitlicher Namespace und Elemente aus dem Schauspielermodell einschließlich erstklassiger Kontinuationen.
- Backus bei der 1977 Turing Award Vorlesung, griff den aktuellen Stand der Industrielachen an und schlug eine neue Klasse von Programmiersprachen vor, die heute bekannt als Programmierung auf Funktionsebene Sprachen.
- 1977,, Gordon Plotkin vorstellt Programmierbarer Funktionen, eine abstrakt typisierte funktionale Sprache.
- 1978,, Robin Milner führt die vor Hindley -Milner -Inferenzalgorithmus vom Typ Hindley -Milner zum Ml. Typentheorie Diese Anwendung wurde als Disziplin für Programmiersprachen angewendet und hat im Laufe der Jahre zu enormen Fortschritten in der Typtheorie geführt.
1980er Jahre
- 1981,, Gordon Plotkin veröffentlicht seine Zeitung über Strukturierte operative Semantik.
- 1988,, Gilles Kahn veröffentlichte seine Arbeit auf natürliche Semantik.
- Dort entstanden Prozesskalkül, so wie die Berechnungskalkül der Kommunikationssysteme von Robin Milner, und die Kommunizieren von sequentiellen Prozessen Modell von C. A. R. Hoaresowie ähnliche Modelle der Parallelität wie die Schauspielermodell von Carl Hewitt.
- 1985 die Veröffentlichung von Miranda Farks ein akademisches Interesse an faul-bewerteten reinen funktionalen Programmiersprachen. Ein Komitee wurde gebildet, um einen offenen Standard zu definieren, der zur Veröffentlichung des Haskell 1.0 -Standards im Jahr 1990 führte.
- Bertrand Meyer erstellte die Methodik Entwurf durch Vertrag und hat es in die eingebaut Eiffel -Programmiersprache.
1990er Jahre
- Gregor Kiczales, Jim des Rivieres und Daniel G. Bobrow veröffentlichte das Buch Die Kunst des MetaObject -Protokolls.
- Eugenio Moggi und Philip Wadler führte die Verwendung von vor Monaden Für die Strukturierung von Programmen geschrieben in Funktionale Programmiersprachen.
Es gibt mehrere Studienbereiche, die entweder in der Programmiersprache Theorie liegen oder einen tiefgreifenden Einfluss darauf haben. Viele davon haben eine beträchtliche Überlappung. Darüber hinaus verwendet PLT viele andere Zweige von Mathematik, einschließlich Computerbarkeitstheorie, Kategoriestheorie, und Mengenlehre.
Formelle Semantik
Formale Semantik ist die formale Spezifikation des Verhaltens von Computerprogrammen und Programmiersprachen. Drei gemeinsame Ansätze zur Beschreibung der Semantik oder "Bedeutung" eines Computerprogramms sind Denotationssemantik, Betriebssemantik und Axiomatische Semantik.
Typentheorie
Typtheorie ist das Studium von Typsysteme; Welche "eine verfolgbare syntaktische Methode zum Nachweis des Fehlens bestimmter Programmverhalten durch Klassifizierung von Phrasen nach den Arten von Werten, die sie berechnen".[3] Viele Programmiersprachen unterscheiden sich durch die Eigenschaften ihrer Typsysteme.
Programmanalyse und Transformation
Die Programmanalyse ist das allgemeine Problem der Untersuchung eines Programms und der Bestimmung der wichtigsten Merkmale (z. B. das Fehlen von Klassen von Programmfehler). Die Programmumwandlung ist der Prozess der Transformation eines Programms in einer Form (Sprache) in eine andere Form.
Vergleichende Programmiersprache Analyse
Die vergleichende Programmiersprachenanalyse versucht, Programmiersprachen basierend auf ihren Merkmalen in verschiedene Typen zu klassifizieren. Große Kategorien von Programmiersprachen werden oft als bekannt als Programmierparadigmen.
Generika und Metaprogrammierung
Metaprogrammierung ist die Erzeugung von Programmen höherer Ordnung, die bei Ausführung Programme (möglicherweise in einer anderen Sprache oder in einer Teilmenge der Originalsprache) produzieren.
Domänenspezifische Sprachen
Domänenspezifische Sprachen sind Sprachen konstruiert, um Probleme eines bestimmten Teils der Domäne effizient zu lösen.
Compiler -Konstruktion
Compiler Theorie ist die Theorie des Schreibens Compiler (oder allgemeiner, Übersetzer); Programme, die ein Programm in einer Sprache in eine andere Form übersetzen. Die Handlungen eines Compilers werden traditionell unterteilt Syntaxanalyse (Scannen und Parsing), Semantische Analyse (Feststellung, was ein Programm tun sollte), Optimierung (Verbesserung der Leistung eines Programms, wie durch einige Metrik angegeben; typischerweise Ausführungsgeschwindigkeit) und Codegenerierung (Generierung und Ausgabe eines äquivalenten Programms in einer Zielsprache; oft die Befehlssatz einer CPU).
Laufzeitsysteme
Laufzeitsysteme Beziehen Sie sich auf die Entwicklung der Programmiersprache Laufzeitumgebungen und ihre Komponenten, einschließlich virtuelle Maschinen, Müllsammlung, und Fremdfunktion Schnittstellen.
Zeitschriften, Veröffentlichungen und Konferenzen
Konferenzen sind der Primärveranstalter für die Präsentation von Forschung in Programmiersprachen. Die bekanntesten Konferenzen sind die Symposium über Prinzipien von Programmiersprachen (Popl), Programmiersprache Design und Implementierung (PLDI), die Internationale Konferenz über funktionale Programme (ICFP), das Internationale Konferenz über objektorientierte Programmierung, Systeme, Sprachen und Anwendungen (Oopsla) und das International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS).
Bemerkenswerte Zeitschriften, die PLT -Forschung veröffentlichen ACM -Transaktionen zu Programmiersprachen und Systemen (Toplas), Journal of Functional Programming (JFP), Journal of Functional and Logic Programming, und Höherer Ordnung und symbolische Berechnung.
Siehe auch
Verweise
- ^ http://www.c2.com/cgi/wiki?modelsofComputation
- ^ C. Böhm und W. Gross (1996). Einführung in den Kuch. In E. R. Caianiello (Hrsg.), Automatenheorie, p. 35-64/
- ^ Benjamin C. Pierce. 2002. Typen und Programmiersprachen. MIT Press, Cambridge, Massachusetts, USA.
Weitere Lektüre
- Abadi, Martín und Cardelli, Luca. Eine Theorie der Objekte. Springer-Verlag.
- Michael J. C. Gordon. Programmiersprache Theorie und ihre Implementierung. Prentice Hall.
- Gunter, Carl und Mitchell, John C. (Hrsg.). Theoretische Aspekte objektorientierter Programmiersprachen: Typen, Semantik und Sprachdesign. MIT Press.
- Harper, Robert. Praktische Grundlagen für Programmiersprachen. Entwurfsversion.
- Knuth, Donald E. (2003). Ausgewählte Papiere auf Computersprachen. Stanford, Kalifornien: Zentrum für das Studium von Sprache und Informationen.
- Mitchell, John C. Grundlagen für Programmiersprachen.
- Mitchell, John C. Einführung in die Programmiersprache Theorie.
- O'hearn, Peter. W. und Tennent, Robert. D. (1997). Algolähnliche Sprachen. Fortschritte in der theoretischen Informatik. Birkhauser, Boston.
- Pierce, Benjamin C. (2002). Typen und Programmiersprachen. MIT Press.
- Pierce, Benjamin C. Erweiterte Themen in Typen und Programmiersprachen.
- Pierce, Benjamin C. et al. (2010). Software -Fundamente.
Externe Links
- Lambda das ultimative, ein Community -Weblog für professionelle Diskussionen und Repository von Dokumenten zur Programmiersprache Theorie.
- Tolle Werke in Programmiersprachen. Gesammelt von Benjamin C. Pierce (Universität von Pennsylvania).
- Klassische Papiere in Programmiersprachen und Logik. Gesammelt von Karl Cry (Carnegie Mellon Universität).
- Programmiersprache Forschung. Verzeichnis von Mark Leone.
- λ-Calculus: damals & heute durch Dana S. Scott Für die Hundertjahrnahrung der ACM -Turing
- Große Herausforderungen in Programmiersprachen. Panel -Sitzung bei Popl 2009.