<?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=Dylan_%28Programmiersprache%29</id>
	<title>Dylan (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=Dylan_%28Programmiersprache%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Dylan_(Programmiersprache)&amp;action=history"/>
	<updated>2026-05-30T01:34:30Z</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=Dylan_(Programmiersprache)&amp;diff=139636&amp;oldid=prev</id>
		<title>imported&gt;Invisigoth67: typo, form</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Dylan_(Programmiersprache)&amp;diff=139636&amp;oldid=prev"/>
		<updated>2025-10-28T12:47:53Z</updated>

		<summary type="html">&lt;p&gt;typo, form&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 = Dylan&lt;br /&gt;
 | Paradigma = [[Objektorientierte Programmierung|objektorientiert]]&lt;br /&gt;
 | Erscheinungsjahr = 1992&lt;br /&gt;
 | AktuelleVersion = 2023.1.0&lt;br /&gt;
 | AktuelleVersionFreigabeDatum = 15. Juni 2023&lt;br /&gt;
 | Typisierung = stark, dynamisch&lt;br /&gt;
 | Implementierung = Gwydion Dylan, Open Dylan&lt;br /&gt;
 | Beeinflusst_von =  [[Common Lisp Object System|CLOS]], [[LISP]], [[EuLisp]], [[ALGOL]], [[Scheme]]&lt;br /&gt;
 | Beeinflusste = [[Goo (Programmiersprache)|Goo]], [[Lasso (Programmiersprache)|Lasso]], [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]]&lt;br /&gt;
 | Betriebssystem = [[plattformübergreifend]]&lt;br /&gt;
 | Website = [https://opendylan.org/ opendylan.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dylan&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Dy&amp;#039;&amp;#039;&amp;#039;namic &amp;#039;&amp;#039;&amp;#039;Lan&amp;#039;&amp;#039;&amp;#039;guage&amp;#039;&amp;#039;) ist eine [[Programmiersprache]], die Anfang der 1990er Jahre von einer Gruppe unter der Führung von [[Apple]] initiiert und spezifiziert wurde.&lt;br /&gt;
&lt;br /&gt;
Ziel war es,&lt;br /&gt;
* die besten Aspekte von [[Lisp]] und [[Smalltalk (Programmiersprache)|Smalltalk]] zu kombinieren&lt;br /&gt;
* den Benutzern statischer Programmiersprachen eine attraktive dynamische Alternative zu bieten&lt;br /&gt;
* auf kleinen Maschinen nutzbar zu sein&lt;br /&gt;
* hohe Dynamik während des [[Prototyping (Softwareentwicklung)|Prototypings]] und bei der Entwicklung zu bieten&lt;br /&gt;
* Werkzeuge anzubieten, die kommerzielle [[Performance (Informatik)|Performance]] in Produktionscode bieten.&lt;br /&gt;
&lt;br /&gt;
Dylan war ursprünglich zum Einsatz auf Apples [[Newton (PDA)|Newton]] PDAs vorgesehen, wurde dort aber aus Termin- und vermutlich auch Prestigegründen durch [[NewtonScript]] ersetzt, eine auf der Programmiersprache [[Self (Programmiersprache)|Self]] basierende Eigenentwicklung Apples.&lt;br /&gt;
&lt;br /&gt;
== Abgrenzung von anderen Programmiersprachen ==&lt;br /&gt;
Dylans objektorientiertes Paradigma steht in der Tradition von [[Common Lisp]] und unterscheidet sich von den meisten objektorientierten Programmiersprachen (wie C++, Java, Python, Ruby) im Abstraktionsprinzip des [[Polymorphismus]], das in beiden Fällen unterschiedlich umgesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Programmiersprachen wie Java kapseln Daten in Objekte, etwa eine Klasse Bruch, die Zähler und Nenner enthält. Operationen die mit diesen Objekten arbeiten, etwa die Addition, werden ebenfalls als Eigenschaft des Objekts/der Klasse gesehen und in der Klasse selbst verwaltet.&lt;br /&gt;
&lt;br /&gt;
Wie der Folgende Pseudocode-Abschnitt zeigt, sind sowohl Daten als auch Methoden (Operationen) Teil des Objekts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Bruch a;&lt;br /&gt;
a.nenner = 10;&lt;br /&gt;
a.zaehler = 1;&lt;br /&gt;
Bruch b;&lt;br /&gt;
b.nenner = 1;&lt;br /&gt;
b.zaehler = 5;&lt;br /&gt;
a.addiere(b);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit virtuellen Methoden ermöglicht dieser Ansatz [[Polymorphismus]]. Das bedeutet, dass ein Objekt seine Operationen &amp;quot;selbst mitbringt&amp;quot; und der Programmierer zur Laufzeit nicht festlegen muss, wie z.&amp;amp;nbsp;B. eine Addition für verschiedene Objekte ausgeführt werden soll.&lt;br /&gt;
&lt;br /&gt;
Hat man zum Beispiel zwei Klassen &amp;lt;code&amp;gt;Bruch&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;KomplexeZahl&amp;lt;/code&amp;gt;, welche beide die Elternklasse &amp;lt;code&amp;gt;Zahl&amp;lt;/code&amp;gt; haben, die eine Methode &amp;lt;code&amp;gt;betrag()&amp;lt;/code&amp;gt; definiert, so kann der Betrag einer komplexen Zahl oder eines Bruches mit &amp;lt;code&amp;gt;a.betrag()&amp;lt;/code&amp;gt; berechnet werden, ohne im [[Quelltext]] unterscheiden zu müssen, ob es sich bei &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; um einen Bruch oder eine [[komplexe Zahl]] handelt.&lt;br /&gt;
&lt;br /&gt;
Dieser Ansatz verspricht einen Abstraktionsgrad, weil eine gut implementierte Klasse dem Programmierer wesentlich Arbeit abnimmt. Ein Objekt &amp;quot;weiß&amp;quot; selbst am besten wie man seinen Betrag berechnet.&lt;br /&gt;
&lt;br /&gt;
Der Nachteil dieses Ansatzes ist, dass man Operationen, welche man nicht genau einem Objekt zuordnen kann, nun in eine Klasse stecken muss. Die Addition zweier Zahlen &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; ist so ein Fall. Entspricht &amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt; nun &amp;lt;code&amp;gt;A.addiere(B)&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;B.addiere(A)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Multiple Dispatch ===&lt;br /&gt;
Dylan setzt den Polymorphismus auf eine andere Weise um. Operationen und Methoden werden außerhalb der Klasse definiert, an die Stelle von &amp;lt;code&amp;gt;A.addiere(B)&amp;lt;/code&amp;gt; tritt nun &amp;lt;code&amp;gt;addiere(A,B)&amp;lt;/code&amp;gt;. Innerhalb der Klasse werden lediglich Datenfelder beschrieben und Zugriffsrechte verteilt.&lt;br /&gt;
&lt;br /&gt;
Mit geringen Abweichungen in der Berechnung der [[Class Precedence List]] ist Dylans Multiple Dispatch eine exakte Übernahme der [[Multimethode#Multimethoden in Common Lisp|Multimethoden]] von [[Common Lisp]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
define class &amp;lt;Bruch&amp;gt; (&amp;lt;object&amp;gt;)&lt;br /&gt;
    slot nenner;&lt;br /&gt;
    slot zaehler;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
define method addiere(a :: &amp;lt;Bruch&amp;gt;, b :: &amp;lt;Bruch&amp;gt;) =&amp;gt; (ergebnis)&lt;br /&gt;
// Implementierung&lt;br /&gt;
end;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird eine Klasse für komplexe Zahlen implementiert, so lässt sich die Methode &amp;lt;code&amp;gt;addiere&amp;lt;/code&amp;gt; einfach für weitere Datentypen erweitern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
define method addiere(a :: &amp;lt;KomplexeZahl&amp;gt;, b :: &amp;lt;KomplexeZahl&amp;gt;) =&amp;gt; (ergebnis)&lt;br /&gt;
// Implementierung&lt;br /&gt;
end;&lt;br /&gt;
define method addiere(a :: &amp;lt;Bruch&amp;gt;, b :: &amp;lt;KomplexeZahl&amp;gt;) =&amp;gt; (ergebnis)&lt;br /&gt;
// Implementierung&lt;br /&gt;
end;&lt;br /&gt;
define method addiere(a :: &amp;lt;KomplexeZahl&amp;gt;, b :: &amp;lt;Bruch&amp;gt;) =&amp;gt; (ergebnis)&lt;br /&gt;
// Implementierung&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine weitere Methode kann nun unabhängig von Klassen mit Zahlen arbeiten und rechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
define method rechteck_umfang(laenge, breite) =&amp;gt; (umfang)&lt;br /&gt;
    2*(addiere(laenge, breite))&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzumerken ist, dass die Klassen für die Parameter &amp;lt;code&amp;gt;laenge,breite&amp;lt;/code&amp;gt; nicht festgelegt sind. Bei Ausführung der Berechnung wird automatisch die richtige Implementierung von &amp;lt;code&amp;gt;addiere&amp;lt;/code&amp;gt; herausgesucht. Dies nennt sich [[Multiple Dispatch]] und entspricht der Tradition objektorientierter Programmierung in Sprachen der Lisp-Familie, wie etwa in Common Lisp mit dem Common Lisp Object System [[CLOS]].&lt;br /&gt;
&lt;br /&gt;
== Implementierungen ==&lt;br /&gt;
&lt;br /&gt;
=== Apple Dylan / Harlequin Dylan / Functional Developer / Open Dylan ===&lt;br /&gt;
&lt;br /&gt;
Nachdem Apple 1998 die Entwicklung von Dylan endgültig einstellte, ging der Quellcode an die englische Firma Harlequin über. Harlequin wurde kurz darauf von Global Graphics übernommen und die Entwicklung von Harlequin Dylan in eine eigenständige Firma, Functional Objects (auch „FunO“), ausgegliedert. Die Dylan-Implementierung mit [[Integrierte Entwicklungsumgebung|IDE]] wurde fortan unter dem Namen „Functional Developer“ verkauft. 2004 wurde Functional Developer schließlich an die Gwydion Dylan Maintainer als Open-Source-Projekt übergeben (FunO stellte seine Geschäftstätigkeit Anfang 2006 vollständig ein). Die Software heißt seitdem Open Dylan.&lt;br /&gt;
&lt;br /&gt;
Neben einer interaktiven Shell (ähnlich [[Ruby (Programmiersprache)|Rubys]] IRB oder [[BeanShell]]), bietet die IDE einen [[Klassenbrowser|Object-Browser]], mit dem sich der Zustand laufender Programme analysieren lässt. Beide Tools können sowohl auf lokale als auch auf anderen Rechnern laufende Dylan-Programme angewendet werden.&lt;br /&gt;
&lt;br /&gt;
Die IDE ist momentan nur unter [[Windows]] verfügbar, der [[Compiler]] läuft mittlerweile jedoch auch unter [[Mac OS X]] und [[Linux]].&lt;br /&gt;
&lt;br /&gt;
=== Gwydion Dylan ===&lt;br /&gt;
&lt;br /&gt;
Gwydion Dylan, benannt nach einem Zauberer aus einer walisischen Sage, wurde ursprünglich an der [[Carnegie Mellon University]] entwickelt.&lt;br /&gt;
Es handelt sich dabei um einen Compiler, der C-Code erzeugt. Dieser Code muss mittels eines C-Compilers in Maschinencode übersetzt werden. Dadurch können Gwydion-Dylan-Programme auf vielen Plattformen laufen. Die Implementierung ist jedoch weniger vollständig als Open Dylan.&lt;br /&gt;
&lt;br /&gt;
=== Mindy ===&lt;br /&gt;
&lt;br /&gt;
Mindy ist ein Dylan-Interpreter, dessen Entwicklung mittlerweile eingestellt wurde. Er wurde benutzt, um die [[Bootstrapping (Programmierung)|erste Version des Gwydion-Compilers zu kompilieren]]. Die Bezeichnung ist ein [[rekursives Akronym]] von MINDY Is Not Dylan Yet.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* &amp;#039;&amp;#039;[https://opendylan.org/ Open-Dylan-Website]&amp;#039;&amp;#039; (englisch)&lt;br /&gt;
* [[CRE (Podcast)|CRE]]: &amp;#039;&amp;#039;[https://cre.fm/cre031-programmiersprachen-und-dylan Programmiersprachen und Dylan]&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Objektorientierte Programmiersprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Invisigoth67</name></author>
	</entry>
</feed>