<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=BLISS_%28Programmiersprache%29</id>
	<title>BLISS (Programmiersprache) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=BLISS_%28Programmiersprache%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=BLISS_(Programmiersprache)&amp;action=history"/>
	<updated>2026-06-05T14:08:21Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=BLISS_(Programmiersprache)&amp;diff=1912109&amp;oldid=prev</id>
		<title>imported&gt;Hensys1: /* growthexperiments-addlink-summary-summary:1|1|0 */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=BLISS_(Programmiersprache)&amp;diff=1912109&amp;oldid=prev"/>
		<updated>2025-05-13T06:07:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:1|1|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Programmiersprache&lt;br /&gt;
| Name = BLISS&lt;br /&gt;
| Logo = &lt;br /&gt;
| Paradigma = [[Strukturierte Programmierung|strukturiert]], [[Imperative Programmierung|imperativ]] ([[Prozedurale Programmierung|prozedural]])&lt;br /&gt;
| Erscheinungsjahr = 1970&lt;br /&gt;
| Entwickler = [[Carnegie Mellon University]]&lt;br /&gt;
| AktuelleVersion = BLISS-64&lt;br /&gt;
| AktuelleVersionFreigabeDatum = &lt;br /&gt;
| Typisierung = ungetypt&lt;br /&gt;
| Implementierung= &lt;br /&gt;
| Dialekte = Common BLISS&lt;br /&gt;
| Beeinflusst_von = [[ALGOL]]&lt;br /&gt;
| Beeinflusste = &lt;br /&gt;
| Betriebssystem = [[Cross-platform]]: [[PDP-10]], [[PDP-11]], [[DEC Alpha]], [[DEC PRISM]], [[IA-32|Intel IA-32]], [[IA-64|Intel IA-64]], [[Virtual Address eXtension|VAX]]&lt;br /&gt;
| Lizenz = &lt;br /&gt;
| Website = &lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;BLISS&amp;#039;&amp;#039;&amp;#039; ist eine [[Systemprogrammierung|Systemprogrammiersprache]], die um 1970 an der [[Carnegie Mellon University]] von [[W. A. Wulf]], [[D. B. Russell]] und [[A. N. Habermann]] entwickelt wurde. Es war die bekannteste Systemprogrammiersprache, bevor einige Jahre später  [[C (Programmiersprache)|C]] aufkam.  Von da an wurde C wichtiger als BLISS.  In den ersten Jahren der Existenz von C gab es bei den  [[Bell Labs]] einige Projekte, die BLISS gegenüber C im Vorteil sahen.&lt;br /&gt;
&lt;br /&gt;
BLISS ist eine untypisierte [[Blockstruktur|blockstrukturierte]] Programmiersprache, bei der [[Ausdruck (Programmierung)|Ausdrücke]] im Vordergrund stehen und nicht [[Anweisung (Programmierung)|Anweisungen]].  Sie enthält Konstrukte für   [[Ausnahmebehandlung]], [[Koroutine]]n und [[Makro]]s. BLISS bietet keine  [[Sprunganweisung|GOTO-Anweisung]] an.&lt;br /&gt;
&lt;br /&gt;
Der Name BLISS steht für  „Basic Language for Implementation of System Software“; manchmal wird die Abkürzung wegen des Autors William Wulf auch als   „Bill&amp;#039;s Language for Implementing System Software“ interpretiert.&lt;br /&gt;
&lt;br /&gt;
Der ursprüngliche [[Compiler]] der Carnegie-Mellon-Universität war berühmt wegen seiner weitreichenden [[Optimum|Optimierungen]] und bildete den Hintergrund des Lehrbuchs  &amp;#039;&amp;#039;[[The Design of an Optimizing Compiler]]&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Die [[Digital Equipment Corporation]] entwickelte und pflegte BLISS-Compiler für die  [[PDP-10]], [[PDP-11]], [[DEC Alpha]], [[DEC PRISM]], [[IA-32|Intel IA-32]], [[IA-64|Intel IA-64]] und [[Virtual Address eXtension|VAX]] und verwendete sie in den  1980er Jahren intensiv hausintern.  Die meisten [[Dienstprogramm]]e für das [[Betriebssystem]]  [[Virtual Memory System|VMS]] waren in BLISS-32 geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften der Sprache ==&lt;br /&gt;
Aus dem Handbuch:&lt;br /&gt;
{{Zitat&lt;br /&gt;
 |Text=BLISS hat viele Vorrichtungen anderer moderner Hochsprachen: Blockstruktur, eine automatische Stapelverarbeitung und Mechanismen für Definition und Aufruf rekursiver Prozeduren. […] Es bietet eine Vielzahl vordefinierter Datenstrukturen  und […] Einrichtungen für Tests und Iteration. […]&lt;br /&gt;
&lt;br /&gt;
Andererseits fehlen in  BLISS bestimmte Vorrichtungen anderer Hochsprachen.  Es hat keine eingebauten Vorrichtungen für Ein-/Ausgabe, weil ein Betriebssystemprojekt normalerweise seine eigene Ein-/Ausgabe entwickelt […] Es erlaubt den Zugriff auf maschinenspezifische Vorrichtungen, weil Systemsoftware dies oft verlangt.  BLISS hat Eigenschaften, die unter Hochsprachen ungewöhnlich sind.  Ein Name […] wird durchgängig als die Adresse einer Speichereinheit interpretiert und nicht als Wert in einer Speichereinheit. […] Außerdem ist BLISS eine ‚Ausdruckssprache‘ und keine „Anweisungssprache“.&lt;br /&gt;
Das heißt, dass jedes Konstrukt der Sprache außer den Deklarationen ein Ausdruck ist.  Ausdrücke liefern einen Wert und verursachen möglicherweise auch eine Aktion wie etwa eine Änderung des Speichers, einen Wechsel der Steuerung oder die Ausführung einer Programmschleife. Das Gegenstück zu einer Wertzuweisung beispielsweise ist in BLISS strenggenommen ein Ausdruck, der selbst einen Wert hat. Der Wert eines Ausdrucks kann in BLISS entweder benutzt oder ignoriert werden. […]  Schließlich verfügt BLISS über eine Makro-Vorrichtung, die eine Flexibilität erlaubt, wie man sie sonst nur in Makro-Assemblern findet.&lt;br /&gt;
 |Quelle=[[Digital Equipment Corporation]]&lt;br /&gt;
 |ref=&amp;lt;ref&amp;gt;{{Webarchiv |url=http://63.249.85.132/langs/bliss/bliss.pdf |text=Bliss Language Manual |wayback=20070929171251 }} (PDF, 1987).&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Grundlegende  Eigenschaften von BLISS sind die folgenden:&lt;br /&gt;
&lt;br /&gt;
* Alle &amp;#039;&amp;#039;&amp;#039;Konstanten&amp;#039;&amp;#039;&amp;#039; sind Ganzwortwerte für die verwendete Maschine, das heißt also, auf einer 16-bit-Maschine wie der [[PDP-11]] umfasst eine Konstante 16 Bit, auf einer [[Virtual Address eXtension|VAX]] 32 Bit und auf einer  [[PDP-10]] 36 Bit.&lt;br /&gt;
&lt;br /&gt;
* An den Namen einer &amp;#039;&amp;#039;&amp;#039;Variablen&amp;#039;&amp;#039;&amp;#039; wird immer die &amp;#039;&amp;#039;Adresse&amp;#039;&amp;#039; der Variablen gebunden, nicht ihr &amp;#039;&amp;#039;Wert&amp;#039;&amp;#039;.  Beispielsweise bedeutet die Instruktion &amp;lt;code&amp;gt;Z+8&amp;lt;/code&amp;gt;, dass die Zahl 8 auf die Adresse von Z addiert wird, nicht auf ihren Wert.  Wenn der Wert von Z erhöht werden soll, muss die Adresse erst durch Voranstellen eines Punkts &amp;#039;&amp;#039;dereferenziert&amp;#039;&amp;#039; werden, das heißt also &amp;lt;code&amp;gt;.Z+8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Bezeichner&amp;#039;&amp;#039;&amp;#039; für Variablen und Konstanten müssen vor ihrer Verwendung deklariert werden, typischerweise mit dem Schlüsselwort  &amp;lt;code&amp;gt;OWN&amp;lt;/code&amp;gt;. Der Compiler wird dann normalerweise einen Speicherplatz dafür allozieren; eine Variable kann aber auch mit der Deklaration  &amp;lt;code&amp;gt;BIND&amp;lt;/code&amp;gt; an eine bestimmte [[Speicheradresse]] oder ein Maschinenregister gebunden werden.&lt;br /&gt;
* Eine &amp;#039;&amp;#039;&amp;#039;Wertzuweisung&amp;#039;&amp;#039;&amp;#039; wird mit dem Symbol &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; notiert. Die Anweisung &amp;lt;code&amp;gt;Z=8&amp;lt;/code&amp;gt; spezifiziert eine Ganzwortkonstante mit dem Wert 8 und speichert sie an der Adresse von &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt;. Im Licht anderer Programmiersprachen ungewöhnlich ist, dass auch die Anweisung &amp;lt;code&amp;gt;Z+12=14&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;12+Z=14&amp;lt;/code&amp;gt; zulässig ist, welche den Wert 14 an die um 12 erhöhte Adresse von &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; speichert.&lt;br /&gt;
* Für den &amp;#039;&amp;#039;&amp;#039;Vergleich&amp;#039;&amp;#039;&amp;#039; werden Schlüsselwörter wie &amp;lt;code&amp;gt;EQL&amp;lt;/code&amp;gt; („gleich“), &amp;lt;code&amp;gt;GTR&amp;lt;/code&amp;gt; („größer“)  und  &amp;lt;code&amp;gt;NEQ&amp;lt;/code&amp;gt; („ungleich“) verwendet.  Das folgende Programmstück weist den Absolutwert von &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; an die Adresse von &amp;lt;code&amp;gt;Q&amp;lt;/code&amp;gt; zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;margin-left:3em;&amp;quot;&amp;gt;Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Blöcke (zusammengesetzte Anweisungen)&amp;#039;&amp;#039;&amp;#039; sind ähnlich zu denen von  [[ALGOL]]:  Ein Block beginnt mit &amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt;, endet mit &amp;lt;code&amp;gt;END&amp;lt;/code&amp;gt; und kann eigene lokale Variablen definieren.  Eine besondere Rolle spielt das Semikolon („;“). In Algol dient es dazu, einzelne Anweisungen voneinander zu trennen; in BLISS bestimmt es, ob der Wert eines Ausdrucks erhalten bleibt oder nicht. Das folgende Beispiel stammt aus dem &amp;#039;&amp;#039;Bliss Language Manual&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Z = BEGIN&lt;br /&gt;
    LOCAL TEMP;&lt;br /&gt;
    TEMP = .X;&lt;br /&gt;
    X = .Y;&lt;br /&gt;
    Y = .TEMP;&lt;br /&gt;
    .X EQL .Y&lt;br /&gt;
    END&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird eine lokale Variable &amp;lt;code&amp;gt;TEMP&amp;lt;/code&amp;gt; definiert, mit deren Hilfe die Inhalte zweier Variablen ausgetauscht werden. Anschließend werden die Variablen noch auf Gleichheit getestet und, weil hinter dieser Anweisung kein Semikolon steht, bleibt das Ergebnis des Vergleichs (0 oder 1) erhalten und wird der Variablen &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; zugewiesen.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Unterprogramme&amp;#039;&amp;#039;&amp;#039; werden mit dem Schlüsselwort  &amp;lt;code&amp;gt;ROUTINE&amp;lt;/code&amp;gt; eingeleitet.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Makros&amp;#039;&amp;#039;&amp;#039; werden mit dem Schlüsselwort &amp;lt;code&amp;gt;MACRO&amp;lt;/code&amp;gt; eingeleitet.&lt;br /&gt;
&lt;br /&gt;
* BLISS kennt  &amp;#039;&amp;#039;&amp;#039;arrays&amp;#039;&amp;#039;&amp;#039;, die hier als &amp;#039;&amp;#039;structures&amp;#039;&amp;#039; bezeichnet und mit dem Schlüsselwort  &amp;lt;code&amp;gt;VECTOR&amp;lt;/code&amp;gt; deklariert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Komplexe Fallunterscheidungen&amp;#039;&amp;#039;&amp;#039; mit Hilfe von &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Ausdrücken&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Zählschleifen&amp;#039;&amp;#039;&amp;#039; mit Hilfe von &amp;lt;code&amp;gt;INCR&amp;lt;/code&amp;gt;-Ausdrücken&lt;br /&gt;
* Eingebaute Funktionen zur Verarbeitung von Zeichenketten&lt;br /&gt;
* Automatische Datenkonvertierungen, zum Beispiel zwischen Zahlen und Zeichenketten&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Das folgende Beispiel stammt aus dem  &amp;#039;&amp;#039;Bliss Language Manual&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
MODULE E1 (MAIN = CTRL) =&lt;br /&gt;
BEGIN&lt;br /&gt;
FORWARD ROUTINE&lt;br /&gt;
    CTRL,&lt;br /&gt;
    STEP;&lt;br /&gt;
ROUTINE CTRL =&lt;br /&gt;
!+&lt;br /&gt;
! This routine inputs a value, operates on it, and&lt;br /&gt;
! then outputs the result.&lt;br /&gt;
!-&lt;br /&gt;
    BEGIN&lt;br /&gt;
    EXTERNAL ROUTINE&lt;br /&gt;
        GETNUM,     ! Input a number from terminal&lt;br /&gt;
        PUTNUM;     ! Output a number to terminal&lt;br /&gt;
    LOCAL&lt;br /&gt;
        X,          ! Storage for input value&lt;br /&gt;
        Y;          ! Storage for output value&lt;br /&gt;
    GETNUM(X);&lt;br /&gt;
    Y = STEP(.X);&lt;br /&gt;
    PUTNUM(.Y)&lt;br /&gt;
    END;&lt;br /&gt;
ROUTINE STEP(A) =&lt;br /&gt;
!+&lt;br /&gt;
! This routine adds 1 to the given value.&lt;br /&gt;
!-&lt;br /&gt;
    (.A+1);&lt;br /&gt;
END&lt;br /&gt;
ELUDOM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Versionen ==&lt;br /&gt;
&lt;br /&gt;
* BLISS-10&lt;br /&gt;
* BLISS-11 – ein [[Crosscompiler]] für die PDP-11&lt;br /&gt;
* BLISS-16&lt;br /&gt;
* BLISS-16C – die DEC-Version von BLISS-11&lt;br /&gt;
* BLISS-32&lt;br /&gt;
* BLISS-36&lt;br /&gt;
* BLISS-64&lt;br /&gt;
* Common BLISS – eine portable Teilmenge&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* W. A. Wulf, D. B. Russell, A. N. Habermann: &amp;#039;&amp;#039;BLISS: A Language for Systems Programming&amp;#039;&amp;#039;. [[Communications of the ACM|CACM]] 14(12), Dez. 1971, S. 780–790.&lt;br /&gt;
* W. A. Wulf, R. K. Johnson, C. B. Weinstock, S. O. Hobbs, C. M. Geschke: &amp;#039;&amp;#039;The Design of an Optimizing Compiler&amp;#039;&amp;#039;. New York: Elsevier, 1975, ISBN 0-444-00158-1.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://63.249.85.132/langs PDF-Dateien mit Handbüchern (englisch)]&lt;br /&gt;
* [http://compilers.iecc.com/comparch/article/87-07-029 Alan Lehotsky berichtet über die Verwendung von BLISS bei DEC (englisch)]&lt;br /&gt;
* [http://63.249.85.132/langs/bliss/bliss.pdf Language Reference Manual]&lt;br /&gt;
* [http://vms.process.com/scripts/fileserv/fileserv.com?BLISS-ARTICLE „BLISS: A Language for Systems Programming“ von W.A. Wulf, D.B. Russell, und A.N. Habermann. (PostScript)]&lt;br /&gt;
* [http://vms.process.com/scripts/fileserv/fileserv.com?BLISS-INTRO Session notes for „Introduction to BLISS“ von Matthew D. Madison. (PostScript)]&lt;br /&gt;
&lt;br /&gt;
Downloads&lt;br /&gt;
* [http://pdp-10.trailing-edge.com/bb-m836d-bm/ BLISS-10]&lt;br /&gt;
* [http://pdp-10.trailing-edge.com/bls36v42/ BLISS-36]&lt;br /&gt;
* [http://h71000.www7.hp.com/freeware/freeware70/bliss/ BLISS-11, BLISS-32 and BLISS-64]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Bliss}}&lt;br /&gt;
[[Kategorie:Programmiersprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Hensys1</name></author>
	</entry>
</feed>