<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Die zweitschönste Nebensache der Welt (Artikel mit Tag apl2 mainframe)</title>
    <link>http://www.aplblog.de/</link>
    <description>Über APL und andere gute Dinge</description>
    <dc:language>de</dc:language>
    
    <generator>Serendipity 0.9.1 - http://www.s9y.org/</generator>
    <pubDate>Sat, 23 Aug 2008 17:28:51 GMT</pubDate>

    <image>
        <url>http://www.aplblog.de/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Die zweitschönste Nebensache der Welt - Über APL und andere gute Dinge</title>
        <link>http://www.aplblog.de/</link>
        <width>100</width>
        <height>21</height>
    </image>
<item>
    <title>Noch tückischer</title>
    <link>http://www.aplblog.de/archives/319-Noch-tueckischer.html</link>
<category>APL2</category>    <comments>http://www.aplblog.de/archives/319-Noch-tueckischer.html#comments</comments>
    <wfw:comment>http://www.aplblog.de/wfwcomment.php?cid=319</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.aplblog.de/rss.php?version=2.0&amp;type=comments&amp;cid=319</wfw:commentRss>
    <author>nospam@example.com (Axel Holzmüller)</author>
    <content:encoded>
Die meisten Abweichungen zwischen APL2 Versionen für den Mainframe und für Workstations führen bei Ausführung  auf einer Workstation umgehend zu einem Fehler. Bei selektiven Zuweisungen wäre das z.B. ein SYNTAX ERROR. So ärgerlich das auch sein mag - vor allem, wenn sie zu Hunderten auftauchen - man kann die Inkompatibilität stante pede beheben. Die Diagnose liegt auf Hand, mit der Behandlung kann sofort begonnen werden.&lt;br /&gt;
&lt;br /&gt;
Leider ist dies nicht immer der Fall. Die fehlende Füllfunktion für den Each-Operator (&quot;No fill function is implemented for the Each operator&quot;) muss nicht zum &lt;a href=&quot;http://aplblog.de/archives/304-Tueckisch.html&quot;  title=&quot;Tückisch&quot;&gt;sofortigen Abbruch&lt;/a&gt; der betroffenen Anweisung führen. Die Auswirkungen der Inkompatibilität können auch erst viel später in den unendlichen Tiefen einer komplexen Anwendung auftreten.&lt;br /&gt;
&lt;br /&gt;
So geschehen mit&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;pre class=&quot;serendipity_apl_font&quot;&gt;⍕¨NUM_ARRAY&lt;/pre&gt;&lt;/font&gt;&lt;br /&gt;
Wie häufig ist das rechte Argument von Format hier numerisch, im vorliegenden Fall allerdings auch leer. Das Ergebnis ist natürlich (wegen &quot;Each&quot;) wiederum eine leere Struktur, aber leider eine numerische und keine alphanumerische, wie vernünftigerweise zu erwarten wäre - und wie es APL2 Mainframe auch vorsieht.&lt;br /&gt;&lt;a href=&quot;http://www.aplblog.de/archives/319-guid.html#extended&quot;&gt;&quot;Noch tückischer&quot; vollständig lesen&lt;/a&gt;    </content:encoded>
                
    <pubDate>Sun, 27 Apr 2008 23:01:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.aplblog.de/archives/319-guid.html</guid>
    <category>apl2</category>
<category>apl2 mainframe</category>
<category>apl2 workstation</category>
<category>inkompatibilität</category>
</item>
<item>
    <title>Eine Ewigkeit</title>
    <link>http://www.aplblog.de/archives/316-Eine-Ewigkeit.html</link>
<category>APL2</category>    <comments>http://www.aplblog.de/archives/316-Eine-Ewigkeit.html#comments</comments>
    <wfw:comment>http://www.aplblog.de/wfwcomment.php?cid=316</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.aplblog.de/rss.php?version=2.0&amp;type=comments&amp;cid=316</wfw:commentRss>
    <author>nospam@example.com (Axel Holzmüller)</author>
    <content:encoded>
Nicht ganz so lange kann der Test auf Identität jeweils zweier aufeinanderfolgender Zeichenketten in einem Vektor aus 1 Million solcher Elemente dauern. Allerding nur auf dem Mainframe und mit &quot;N-wise Reduce&quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;pre class=&quot;serendipity_apl_font&quot;&gt;2≡/VEC&lt;/pre&gt;&lt;/font&gt;&lt;br /&gt;
So harmlos dieser Ausdruck auch aussieht, er hat es in sich. Für den vorliegenden Fall langer Vektoren VEC mit relativ kurzen Zeichenketten (z.B. mit Länge 10) als Elemente habe ich nicht die Geduld gehabt ein Ergebnis abzuwarten. Denn selbst eine Schlewife, in deraufeinanderfolgende Vektorelemente vergleichen werden, wäre schon lange mit dem Thema durch gewesen. Erst rech natürlich die typische APL-Lösung ohne N-wise Reduce, selbst bei mehr als 1 Million zu vergleichender Objekte. &lt;br /&gt;
&lt;br /&gt;
Später habe ich erfahren, das dieser Ausdruck mit den Daten wie hier beschrieben auf einem IBM Mainframe nach ca. 38 Stunden mit dem Ergebnis rausrückte. Für einen heutigen Großrechner eine halbe Ewigkeit.&lt;br /&gt;&lt;a href=&quot;http://www.aplblog.de/archives/316-guid.html#extended&quot;&gt;&quot;Eine Ewigkeit&quot; vollständig lesen&lt;/a&gt;    </content:encoded>
                
    <pubDate>Sun, 13 Apr 2008 23:18:40 +0200</pubDate>
    <guid isPermaLink="false">http://www.aplblog.de/archives/316-guid.html</guid>
    <category>apl2 mainframe</category>
<category>apl2 workstation</category>
<category>performance</category>
</item>
<item>
    <title>Mit Punkt oder Komma</title>
    <link>http://www.aplblog.de/archives/313-Mit-Punkt-oder-Komma.html</link>
<category>APL2</category>    <comments>http://www.aplblog.de/archives/313-Mit-Punkt-oder-Komma.html#comments</comments>
    <wfw:comment>http://www.aplblog.de/wfwcomment.php?cid=313</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.aplblog.de/rss.php?version=2.0&amp;type=comments&amp;cid=313</wfw:commentRss>
    <author>nospam@example.com (Axel Holzmüller)</author>
    <content:encoded>
Ich hatte von Anfang an ein gute Gefühl bei REPLACEX, eine der wichtigen Neuerungen des &lt;a href=&quot;http://aplblog.de/archives/290-Rechtzeitig-zur-fuenften-Jahrezeit.html&quot;  title=&quot;Neues in CSD11&quot;&gt;APL2 Service Level 11&lt;/a&gt; vom November letzten Jahres. Im ICE von Hamburg nach Berlin hatte ich vor der GSE Herbsttagung 2007 Gelegenheit, REPLACEX ein wenig zu testen. Die Ergebnisse des Vergleichs mit REPLACEV, einer Funktion aus 1 UTILITY, mit verschieden langen Vektoren bzw. Teilvektoren waren überragend. Je länger die Zeichenkette, in der die Ersetzungen vorgenommen wurden, desto größer wurde der Unterschied zugunsten von  REPLACEX.&lt;br /&gt;
&lt;br /&gt;
REPLACEX funktionierte sogar noch, als REPLACEV mit WS FULL endgültig aufgeben musste. Dabei ist REPLACEV keine schlechte APL2-Variante für das Ersetzen der Vorkommen einer Zeichenkette durch eine beliebige andere.&lt;br /&gt;
&lt;br /&gt;
Dies waren Versuche außerhalb jeglicher ernsthafter Anwendungen. Tatsächlich gehört das Ersetzen von Teilstrukturen durch Strukturen mit unterschiedlicher Dimension nicht zu den Stärken von APL, nicht nur in Sachen Performance. Das ist anders bei jeweils gleicher Größe. Der einfachste Fall, der im wirklichen Leben auch oft vorkommt, ist das Ersetzen von Dezimalpunkten durch Kommata und umgekehrt.&lt;br /&gt;&lt;a href=&quot;http://www.aplblog.de/archives/313-guid.html#extended&quot;&gt;&quot;Mit Punkt oder Komma&quot; vollständig lesen&lt;/a&gt;    </content:encoded>
                
    <pubDate>Sun, 30 Mar 2008 22:58:01 +0200</pubDate>
    <guid isPermaLink="false">http://www.aplblog.de/archives/313-guid.html</guid>
    <category>apl2</category>
<category>apl2 mainframe</category>
<category>apl2 workstation</category>
<category>inkompatibilität</category>
<category>performance</category>
</item>
<item>
    <title>Tückisch - Epilog</title>
    <link>http://www.aplblog.de/archives/306-Tueckisch-Epilog.html</link>
<category>APL2</category>    <comments>http://www.aplblog.de/archives/306-Tueckisch-Epilog.html#comments</comments>
    <wfw:comment>http://www.aplblog.de/wfwcomment.php?cid=306</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.aplblog.de/rss.php?version=2.0&amp;type=comments&amp;cid=306</wfw:commentRss>
    <author>nospam@example.com (Axel Holzmüller)</author>
    <content:encoded>
&lt;a href=&quot;http://aplblog.de/archives/304-Tueckisch.html&quot;  title=&quot;Auf Abwegen&quot;&gt;Ich vergaß&lt;/a&gt; ...&lt;br /&gt;
&lt;br /&gt;
Wie bringe ich nun Workstation APL2 dazu, mit dem Ausdruck 3↑¨⍳N das zu tun, was die APL-Welt auch für N=0 erwartet?&lt;br /&gt;
&lt;br /&gt;
Ganz ohne Änderung geht das natürlich nicht. Aber glücklicherweise ist ken &quot;if N=0 then ... else ...&quot; nötig, ich brauche nicht einmal eine neue Zeile. Mit APL ist vieles einfacher, als mit (fast) allen Programmiersprachen der uns bekannten Welt.&lt;br /&gt;
&lt;br /&gt;
Es auch hier so, wie mit vielen Dingen in der Mathematik: Man nehme etwas hinzu, so dass man sich auf bekannten Grund bewegt, tue das, was man nicht lassen kann, und werfe abschließend Überflüssiges wieder weg.&lt;br /&gt;
&lt;br /&gt;
Konkret in unserem Fall: 1↓3↑¨0,⍳N, wobei nun das Ergebnis für N=0 ein Leervektor vom richtigen Typ ist.&lt;br /&gt;
&lt;br /&gt;
Hat man keinen Mainframe mit APL2 zur Hand, kann man sich eine konforme Implementierung bei APL+Win ansehen. &lt;p&gt;    </content:encoded>
                
    <pubDate>Mon, 11 Feb 2008 21:01:56 +0100</pubDate>
    <guid isPermaLink="false">http://www.aplblog.de/archives/306-guid.html</guid>
    <category>apl2</category>
<category>apl2 mainframe</category>
<category>apl2 workstation</category>
</item>
<item>
    <title>Tückisch</title>
    <link>http://www.aplblog.de/archives/304-Tueckisch.html</link>
<category>APL2</category>    <comments>http://www.aplblog.de/archives/304-Tueckisch.html#comments</comments>
    <wfw:comment>http://www.aplblog.de/wfwcomment.php?cid=304</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.aplblog.de/rss.php?version=2.0&amp;type=comments&amp;cid=304</wfw:commentRss>
    <author>nospam@example.com (Axel Holzmüller)</author>
    <content:encoded>
Die Liste der dokumentierten Abweichungen zwischen den APL2-Implementierungen auf dem Mainframe und für Workstations ist glücklicherweise recht kurz. Viele der hier dokumentierten Inkompatibiltäten haben mich bisher noch nicht tangiert. &lt;a href=&quot;http://aplblog.de/archives/302-AErgerlich.html&quot;  title=&quot;SelecSpec with Brackets&quot;&gt;Andere&lt;/a&gt; haben es aber in sich und sollten so bald wie möglich aus der Dokumentation verschwinden, so wie auch folgende &quot;Deviation&quot;.&lt;br /&gt;
&lt;br /&gt;
Gestern hat mich wieder mal &quot;No fill function is implemented for the Each operator&quot; erwischt, besser gesagt eine Zeile eines vom Mainframe auf einen PC migrierte Funktion. Das Symptom war ein LENGTH ERROR, der Grund war die falsche Behandlung der Anwendung einer Funktion samt Each-Operator auf einen numerischen Leervektor.&lt;br /&gt;
&lt;br /&gt;
Gemäß der reinen Lehre sollte 3↑¨⍳0 einen Leervektor aus dreielementigen numerischen Vektoren ergeben, oder anders ausgedrückt 0⍴⊂3⍴0. Das ist klar, wenn man N in 3↑¨⍳N sukzessive verringert. Stets erhält man einen Vektor der Länge N mit dreielementigen numerischen Vektoren als Elemente. Im Falle N=0 wählt APL2 für Letzteres den Prototyp ↑0⍴3↑¨⍳N, also 3⍴0.&lt;br /&gt;&lt;a href=&quot;http://www.aplblog.de/archives/304-guid.html#extended&quot;&gt;&quot;Tückisch&quot; vollständig lesen&lt;/a&gt;    </content:encoded>
                
    <pubDate>Fri, 08 Feb 2008 17:25:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.aplblog.de/archives/304-guid.html</guid>
    <category>apl2</category>
<category>apl2 mainframe</category>
<category>apl2 workstation</category>
</item>
<item>
    <title>Ärgerlich</title>
    <link>http://www.aplblog.de/archives/302-AErgerlich.html</link>
<category>APL2</category>    <comments>http://www.aplblog.de/archives/302-AErgerlich.html#comments</comments>
    <wfw:comment>http://www.aplblog.de/wfwcomment.php?cid=302</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.aplblog.de/rss.php?version=2.0&amp;type=comments&amp;cid=302</wfw:commentRss>
    <author>nospam@example.com (Axel Holzmüller)</author>
    <content:encoded>
Ich habe mich ja schon an den SYTNAX ERROR bei selektiven Zuweisungen der Form (R/M[;I])←V und aller möglichen Varianten gewöhnt. Für das Mainfame APL2 ist dies ein absolut gültiger Versuch, Werte in &quot;M&quot; zu verändern.&lt;br /&gt;
&lt;br /&gt;
Das Workstation APL2 spielt da leider nicht mit. Glücklicherweise akzeptiert es aber die Indexfunktion anstelle der Indexierung mit den eckigen Klammern. So können vom Mainframe kommende selektive Zuweisungen dieser Art schnell ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
Das wird allerdings ein wenig nervig, wenn diese Syntax-Fehler kein Ende nehmen. Bei der hier vorliegen Inkompatibilität handelt es sich wohl um die am häufigsten vorkommende.&lt;br /&gt;
&lt;br /&gt;
Deshalb, und weil es sich bei obiger Zuweisung mit den eckigen Klammern um eine elegante, gut zu lesende  Schreibweise handelt, ist es mehr als wünschenswert, dass diese Abweichung des Workstation APL2 von Mainframe Standard endlich beseitigt wird.&lt;p&gt;    </content:encoded>
                
    <pubDate>Thu, 07 Feb 2008 22:40:11 +0100</pubDate>
    <guid isPermaLink="false">http://www.aplblog.de/archives/302-guid.html</guid>
    <category>apl2</category>
<category>apl2 mainframe</category>
<category>apl2 workstation</category>
<category>inkompatibilität</category>
</item>
<item>
    <title>CTN ist nicht gleich CTN</title>
    <link>http://www.aplblog.de/archives/301-CTN-ist-nicht-gleich-CTN.html</link>
<category>APL2</category>    <comments>http://www.aplblog.de/archives/301-CTN-ist-nicht-gleich-CTN.html#comments</comments>
    <wfw:comment>http://www.aplblog.de/wfwcomment.php?cid=301</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.aplblog.de/rss.php?version=2.0&amp;type=comments&amp;cid=301</wfw:commentRss>
    <author>nospam@example.com (Axel Holzmüller)</author>
    <content:encoded>
Bekannterweise gibt es zwischen APL2 für den Mainframe und Workstation APL2 einige Unterschiede. Es sind nicht viele, aber bei größeren Anwendungen können sie die direkte Ausführbarkeit nach einer Portierung auf den PC ernsthaft behindern.&lt;br /&gt;
&lt;br /&gt;
Diese dokumentierten Abweichungen betreffen im Wesentlichen die Sprache, wie sie in der APL2 Language Reference beschrieben ist. Schnittstellen wohin auch immer und sonstige APL2-Vorrichtungen unterliegen von vornherein keinem Kompatibilitätszwang.&lt;br /&gt;
&lt;br /&gt;
Dazu gehören offensichtlich auch die &quot;Supplied Routines&quot;, mitgelieferte assoziierbare Funktionen. Selbst Namensgleichheit bedeutet nicht automatisch Gleichheit in der Funktionsweise. Recht drastisch macht das CTN deutlich:&lt;br /&gt;&lt;a href=&quot;http://www.aplblog.de/archives/301-guid.html#extended&quot;&gt;&quot;CTN ist nicht gleich CTN&quot; vollständig lesen&lt;/a&gt;    </content:encoded>
                
    <pubDate>Thu, 07 Feb 2008 21:04:28 +0100</pubDate>
    <guid isPermaLink="false">http://www.aplblog.de/archives/301-guid.html</guid>
    <category>apl2</category>
<category>apl2 mainframe</category>
<category>apl2 workstation</category>
</item>
</channel>
</rss>
