Unze (Programmiersprache)

Unze ist eine Mehrparadigma-Programmiersprache, die im Programmiersystemlaboratorium an Université catholique de Louvain für die Programmiersprache-Ausbildung entwickelt ist. Es hat ein kanonisches Lehrbuch: Konzepte, Techniken und Modelle der Computerprogrammierung.

Oz wurde zuerst von Gert Smolka und seinen Studenten 1991 entworfen. 1996 hat die Entwicklung von Oz in der Zusammenarbeit mit der Forschungsgruppe von Seif Haridi und Peter Van Roy am schwedischen Institut für die Informatik weitergegangen. Seit 1999 ist Oz ständig von einer internationalen Gruppe, dem Konsortium von Mozart entwickelt worden, das ursprünglich aus der Universität von Saarland, dem schwedischen Institut für die Informatik und dem Université catholique de Louvain bestanden hat. 2005 wurde die Verantwortung, Entwicklung von Mozart zu führen, einer Kerngruppe, dem Ausschuss von Mozart mit dem ausdrücklichen Zweck übertragen, Entwicklung von Mozart zu einer größeren Gemeinschaft zu öffnen.

Das System von Mozart Programming ist die primäre Durchführung von Oz. Es wird mit einer offenen Quelllizenz vom Konsortium von Mozart veröffentlicht. Mozart ist zu verschiedenen Geschmäcken nach Unix, FreeBSD, Linux, Windows von Microsoft und Mac OS X. getragen worden

Spracheigenschaften

Unze enthält die meisten Konzepte der Hauptprogrammierparadigmen, einschließlich der Logik, funktionell (sowohl faul als auch eifrig), befehlend, objektorientiert, Einschränkung, verteilte und gleichzeitige Programmierung. Unze hat beide eine einfache formelle Semantik (sieh Kapitel 13 des Buches, das unten erwähnt ist), und eine effiziente Durchführung. Unze ist eine Parallelitätsorientierte Sprache, weil der Begriff von Joe Armstrong, dem Hauptentwerfer der Sprache von Erlang eingeführt wurde. Eine Parallelitätsorientierte Sprache macht Parallelität sowohl leicht zu verwenden als auch effizient. Unze unterstützt eine kanonische GUI Sprache QTk.

Zusätzlich zur Mehrparadigma-Programmierung sind die Hauptkräfte von Oz in der Einschränkungsprogrammierung und verteilten Programmierung. Wegen seines factored Designs ist Oz im Stande, ein netzdurchsichtiges verteiltes Programmiermodell erfolgreich durchzuführen. Dieses Modell macht es leicht, offene, mit der Schuld tolerante Anwendungen innerhalb der Sprache zu programmieren. Für die Einschränkungsprogrammierung führt Oz die Idee von "Berechnungsräumen" ein; diese erlauben benutzerbestimmte Such- und dem Einschränkungsgebiet orthogonale Vertriebsstrategien.

Sprachübersicht

Datenstrukturen

Unze basiert auf einer Kernsprache mit sehr wenigen datatypes, die in praktischere durch syntaktischen Zucker erweitert werden können.

Grundlegende Datenstrukturen:

  • Zahlen: das Schwimmen von Punkten oder ganzer Zahl (echte ganze Zahl).
  • Aufzeichnungen: Um Daten zu gruppieren:
  • Listen: eine einfache geradlinige Struktur,

2 | (4 | (6 | (8|nil))) % syntaktischer Zucker

2|4|6|8|nil % mehr syntaktischer Zucker

[2 4 6 8] % noch mehr syntaktischer Zucker

</pre>

Jene Datenstrukturen sind Werte (unveränderliche), erste Klasse und dynamisch überprüfter Typ.

Funktionen

Funktionen sind Werte der ersten Klasse, höherer Ordnung funktionelle Programmierung erlaubend:

Spaß {Tatsache N }\

wenn N =

Variablen von Dataflow und Aussageparallelität

Wenn das Programm auf eine ungebundene Variable stößt, wartet es auf einen Wert:

Faden

Z = X+Y % wird warten bis sowohl X als auch Y werden zu einem Wert gebunden.

{Durchsuchen Z} % zeigt den Wert von Z.

Ende

fädeln Sie X = 40 Ende ein

fädeln Sie Y = 2 Ende ein

</pre>

Es ist nicht möglich, den Wert einer dataflow Variable zu ändern, sobald es gebunden wird:

X = 1

X = 2-%-Fehler

</pre>

Variablen von Dataflow machen es leicht, gleichzeitige Strom-Agenten zu schaffen:

Spaß {Ints N Max }\

wenn N == Max dann Null

sonst

{Verzögern 1000 }\

N | {Ints N+1 Max }\

Ende

Ende

Spaß {Summe S Strom }\

Fall-Strom der Null dann S

[] H|T dann S | {Summe H+S T} beenden

Ende

lokal X Y in

fädeln Sie X = {ein Ints 0 1000} beenden

fädeln Sie Y = {ein Summe 0 X} beendet

{Durchsuchen Y }\

Ende</pre>

Wegen des Weges dataflow Variablen arbeitet es ist möglich, Fäden überall im Programm zu stellen, und es wird versichert, dass es dasselbe Ergebnis haben wird. Das macht gleichzeitige Programmierung sehr leicht. Fäden sind sehr preiswert: Es ist möglich, hunderttausend Fäden zu haben, die sofort laufen.

Beispiel: Probe-Abteilungssieb

Dieses Beispiel schätzt einen Strom von Primzahlen mit dem Probe-Abteilungsalgorithmus durch das rekursive Schaffen gleichzeitiger Strom-Agenten, die Nichtprimzahlen herausfiltern:

Spaß {Sieb Xs }\

Fall Xs der Null dann Null

[] X|Xr dann Ys in

fädeln Sie Ys = {Filter Xr Spaß {$ Y} Y mod X \= ein 0 Ende} beendet

X | {sieben Ys }\

EndeEnde</pre>

Indolenz

Unze verwendet eifrige Einschätzung standardmäßig, aber faule Einschätzung ist möglich:

Spaß faul {Tatsache N }\

wenn N =

Nachricht vorübergehende Parallelität

Das gleichzeitige Aussagemodell kann mit der Nachricht erweitert werden, die einfache Semantik durchführt:

erklären Sie

lokaler Strom-Hafen in

Hafen = {Strom von NewPort }\

{Senden Hafen 1} %-Strom ist jetzt 1 |_ (' _' zeigt eine ungebundene und namenlose Variable an)

{Senden Hafen 2} %-Strom ist jetzt 1|2 |_

...

{Senden Hafen n} %-Strom ist jetzt 1|2 |.. |n |_

Ende

</pre>

Mit einem Hafen und einem Faden kann der Programmierer asynchrone Agenten definieren:

Spaß {NewAgent Init Spaß }\

Msg in

Faden {FoldL Msg Spaß Init} beendet

{NewPort Msg }\

Ende</pre>

Staat und Gegenstände

Es ist wieder möglich, das Aussagemodell zu erweitern, um staatliche und objektorientierte Programmierung mit der sehr einfachen Semantik zu unterstützen; wir schaffen eine neue veränderliche Datenstruktur genannt Zellen:

lokal Ein X in

A = {NewCell 0 }\

A: = 1-%-Änderungen der Wert zu 1

X = @A-% wird verwendet, um auf den Wert Eines zuzugreifen

Ende</pre>

Mit diesen einfachen semantischen Änderungen können wir das ganze objektorientierte Paradigma unterstützen.

Mit einem kleinen syntaktischen Zucker-OOP integriert gut in Oz.

Klassenschalter

attr val

meth init (Wert)

val: = Wert

Ende

meth durchsuchen

{Durchsuchen @val }\

Ende

meth inc (Wert)

val: = @val+Value

EndeEnde

lokaler C in

C = {Neuer Schalter init (0) }\

{C Inc (6) }\

{durchsuchen C }\

Ende</pre>

Ausführungsgeschwindigkeit

Die Ausführungsgeschwindigkeit eines Programms, das durch den Bearbeiter von Mozart (Version 1.4.0 erzeugt ist, die Oz 3 durchführt), ist sehr langsam. Auf einer Reihe von Abrisspunkten ist es durchschnittlich ungefähr 50mal langsamer als dieser des gcc Bearbeiters für die c Sprache, die Abrisspunkt-Aufgaben lösend.

Siehe auch

  • Alice, die gleichzeitige funktionelle Einschränkungsprogrammiersprache von der Universität von Saarland
  • Curry, eine funktionelle Logikprogrammiersprache
  • Quecksilber, eine funktionelle Logikprogrammiersprache
  • Dataflow, programmierend
  • Seheinleitung, eine objektorientierte, funktionelle Logikprogrammiersprache
  • Peter Van Roy und Seif Haridi (2004). Konzepte, Techniken und Modelle der Computerprogrammierung. MIT Presse. Dort unterstützt online Material für dieses Buch. Das Buch, eine Einführung in die Grundsätze von Programmiersprachen, verwendet Oz als sein bevorzugtes Idiom für Beispiele.

Links


Qualcomm / Manius Valerius Maximus Corvinus Messalla
Impressum & Datenschutz