<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>meier-online &#187; CLU</title>
	<atom:link href="http://meier-online.com/tag/clu/feed/" rel="self" type="application/rss+xml" />
	<link>http://meier-online.com</link>
	<description>Der Blog von Karsten Meier</description>
	<lastBuildDate>Sun, 09 Oct 2011 13:27:57 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Turing Award für Barbara Liskov</title>
		<link>http://meier-online.com/2009/03/turing-award-fur-barbara-liskov/</link>
		<comments>http://meier-online.com/2009/03/turing-award-fur-barbara-liskov/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 18:52:17 +0000</pubDate>
		<dc:creator>meier</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Abstraktion]]></category>
		<category><![CDATA[CLU]]></category>
		<category><![CDATA[Liskov]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[yield]]></category>

		<guid isPermaLink="false">http://meier-online.com/?p=272</guid>
		<description><![CDATA[Der Turing Award ist wohl die bedeutendste Auszeichnung in der Informatik. Ein guter Grund, sich mit den Errungenschaften von Frau Liskov zu beschäftigen. Ihr Team hat in den Siebzigern die Programmiersprache CLU entwicklet. In dieser Zeit war für die normalen Programmierer die heißeste Frage, ob man tatsächlich Programme ohne goto-Befehle schreiben kann. Zentrales Thema wie [...]]]></description>
			<content:encoded><![CDATA[<p>Der Turing Award ist wohl die bedeutendste Auszeichnung in der Informatik. Ein guter Grund, sich mit den Errungenschaften von Frau Liskov zu beschäftigen. Ihr Team hat in den Siebzigern die Programmiersprache <em>CLU</em> entwicklet. In dieser Zeit war für die normalen Programmierer die heißeste Frage, ob man tatsächlich Programme ohne <em>goto</em>-Befehle schreiben kann.<span id="more-272"></span></p>
<p>Zentrales Thema wie für viele Fortschritte in der Informatik ist Abstraktion. <em>CLU</em> basierte auf abstrakten Datentypen: Datentypen, deren innere Ansicht der Programmierer nicht kennen muss,<br />
den sie wurden zusammen mit Zugriffsoperationen definiert. Diese Vorgehensweise ist heute unter dem Stichwort objektorientiertes Programmieren allgemein üblich geworden.</p>
<p>Aber <em>CLU</em> bot auch Möglichkeiten, den Kontrolfluß zu abstrahieren. Ein Konzept, das offenbar der Zeit noch weiter voraus war. So kannte <em>CLU</em> das <em>yield</em>-Statement, welches erst in neuerer Zeit dank der Programmiersprache Ruby populär geworden ist. Es ist schon deshalb schwierig zu verstehen, weil auch das Wort &#8220;yield&#8221; keine so klare Bedeutung hat. Übersetzen kann man es mit abgeben, auswerfen, freisetzen. Während in Programmen klassische Prozeduren (oder auch Methoden) die Kontrolle exklusiv halten, und bestenfalls andere Prozeduren aufrufen,  gibt <em>yield</em> die Kontrolle und gegebenenfalls Objekte an ein übergebenes Codestück ab.  Auf diese Weise kann dann tatsächlich der Kontrollfluss abstrahiert werden.</p>
<p>Wie kann man sich das vorstellen? Wir schauen uns die Funktionsweise am Beispiel Ruby an:</p>
<p><img class="aligncenter size-full wp-image-276" title="Funktionsweise von yield in Ruby" src="http://meier-online.com/blog/uploads/yield.png" alt="Funktionsweise von yield in Ruby" width="461" height="201" /></p>
<p>Beim Aufruf einer Methode wird auch der in <em>do &#8230;end</em> definierte Codeblock der Methode zugänglich gemacht. Die Methode entscheidet dann, ob, wann, und wie oft sie den Codeblock aufruft. Weiterhin kann der <em>yield</em>-Befehl Parameter sozusagen auswerfen, die dann im Codeblock verfügbar sind. Umgekehrt liefert der Codeblock ein Rückgabewert, der im Methodenrumpf zur Verfügung steht.</p>
<p>Die Anwendungsfälle sind zahlreich. Man kann automatisch Resourcen ausbalancieren. Beispielsweise  kann man so dafür sorgen, das geöffnete Dateien beim verlassen eines Blockes wieder geschlossen werden. Man kann tatsächlich Kontrollstrukturen schreiben: In Ruby ist die <em>for</em>-Struktur so definiert. So kann man <em>for</em> nicht nur für Zahlen, sondern auch für Dateizeilen, Ergebnisse von Datenbankabfragen oder XML-Strukturen nutzen. Auch das Web-Framework Ruby-On-Rails macht exzessiven Gebrauch von <em>yield</em>.</p>
<p>Soweit meine Laudatio, beim ACM finden Sie die offzielle Laudatio für den <a href="http://www.acm.org/membership/turing-award2008">Turing Award für Barabara Liskov</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://meier-online.com/2009/03/turing-award-fur-barbara-liskov/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

