Icon lebt!

  • Hallo zusammen,


    für alle, die es interessieren sollte:

    An diesem Wochenende konnte man live verfolgen, wie aus einer Fehlermeldung eine Optimierung der Programmiersprache Icon resultierte.


    Jemand versuchte, Icon anhand der üblichen Vorgehensweise auf einem MAC zu portieren. Das Ergebnis war ernüchternd, so schickte er der "Globalen Icon Mailing List" eine eMail.

    Eine Diskussion setzte ein, um ein gemeinsames Verständnis zu gewinnen. Als alle Beteiligten ungefähr auf einer Linie waren, setzte Stille ein.


    Untätige Stille?

    Betriebsame Stille?


    Dann schickte Gregg Townsend (einer der Betreuer von Icon) eine eMail mit der Lösung. Das Icon-Laufzeitsystem ist jetzt um den Faktor 2 schneller als vorher. Die Behandlung von "Externwerten" wurde verbessert - Externwerte sind zentraler Bestandteil der letzten beiden Icon-Tutorials #30 und #31. Indirekt spielen sie auch bei den rund 60 Seiten des Icon-Tutorials Teil 32 die entscheidende Rolle.


    Und nu?

    Für den MAC gibt es eine neue Konfiguration.


    Der aktuelle Quellcode ist unter GitHub verfügbar.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited 2 times, last by Andreas ().

  • Betrifft die Optimierung dann auch nur macOS oder ist die allgemein auf allen Zielplattformen verfügbar?


    Übrigens wären Links (z.B. bei der Erwähnung von Github) schön gewesen. Hab's aber auch so gefunden.


    Deine vielfachen Erwähnungen von Icon haben ein wenig meine Neugier geweckt und da ich ja ursprünglich mit Assembler und Pascal angefangen habe, und seitdem aber hauptsächlich C und C++ für Kompilate einsetze, konnte ich sofort alle Codebeispiele verstehen. Irgendwie lustig. Danke für die Verweise auf Icon.

    Wenn ihr schnell hilfreiche Antworten wollt, lest bitte diesen Artikel (Fehlerberichte - wie Sie Softwarefehler melden sollten) und beherzigt die darin enthaltenen Ratschläge. Herzlichen Dank!

  • Warum sollte Icon auch nicht leben? :)


    Ist doch schön, dass die Sprache schon so gefestigt ist und solche Changes eher mal die Ausnahme sind :)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Hey Andreas,


    muss gestehen das ich auch neugierig geworden bin. Was hat dich dazu gebracht dich so intensiv mit Icon zu beschäftigen? Wo sind deiner Meinung nach die vorteile der Programmiersprache gegenüber anderen?


    Gruß

    Waldi

  • Hallo Waldi,


    vielen Dank für Deine Frage, inspiriert sie doch, die grauen Zellen rotieren zu lassen - und längst verschollen geglaubte Anekdoten zum Besten zu geben.



    Meine Programmierer-Laufbahn begann einstens auf einem VC-20. Zuerst Basic, dann habe ich einen Assembler/Disassembler programmiert, eigene Basic-Befehle (so z.B. zum Sortieren und Suchen in Listen [Arrays] kreiert und das Commodore-Basic damit aufgepeppt.


    Als ich dann irgendwann Molekülorbitale berechnet habe und Matrizenmultiplikationen / Matrizeninversionen in Assembler durchgeführt hatte, bin ich ganz schnell auf einen Amiga 2000 gewechselt.


    Da fing ich dann auch wieder mit Basic an - bin dann aber recht schnell auf "Compilersprachen" aufgestiegen. Die beste davon war Draco ((c) by Chris Gray) - nach wie vor mein Favorit, wenn es um Programmiersprachen geht.


    (Platz 2: PCQ - ein Pascal-Eigengewächs eines Patrick Quaid, der leider schon von uns gegangen ist.)


    Platz 3 meiner Favoriten war dann Icon (Ralp Griswold - auch schon von uns gegangen).


    Die Jahre schwanden dahin, das Studium war beendet, das nächste auch. Der Amiga wich einem PC, Turbo-Pascal und dann Delphi waren dann Tummelfelder für eigene Ideen.


    Als dann alles programmiert war, was ich in meiner Firma einsetzen wollte, habe ich dann jahrelang nichts mehr programmiert. Die Datenträger für Turbo-Pascal waren weg, der für Delphi auch.


    Irgendwann juckte es wieder in den Fingern, ein Jucken, wie es nur Programmierer kennen...


    Alle möglichen Programmiersprachen, die man kostenlos irgendwo herunterladen konnten, habe ich ausprobiert. Aber irgendwie hat mich nichts mehr begeistern können. Bis mir wieder Icon in den Sinn kam.

    Wir schreiben das Jahr 2003. Ich musste nach Ägypten und nahm die Icon-Handbücher und eine geniale Programmieridee mit. Nach der Zeit in Ägypten war die Idee ausgereift. Kurze Zeit später lief dann eine IDE in Icon für Icon geschrieben. Mit einem Hilfesystem, mit Syntax-Highlihting, mit Code-Snippets, mit vorgefertigtem Code, der fehlerfrei auf Tastendruck / Maustaste im eigenen Quellcode stand. Quasi fehlerfreie Software-Entwicklung ermöglichte.


    Seit der Zeit habe ich mal mehr mal weniger intensiv in Icon programmiert.


    2012 hat mir meine Freundin einen Raspberry Pi geschenkt.


    Projekt 1: Lazarus wegen ätzender Langsamkeit deinstalliert


    Projekt 2: Als erster Icon auf den Raspberry portiert. Hui! hat das Spaß gemacht!!!


    2013 war ich dann auf Madeira und habe mir nebenbei die ersten 10 MagPis reingezogen. Und der Gedanke reifte, mal ein umfangreiches Tutorial zu Icon zu schreiben. Das Konzept war bereits auf Madeira ausgereift, so dass ich dieses praktisch ohne Änderungen umgesetzt habe. Jeden Monat habe ich regelmäßig mehrere Icon-Tutorials verfasst. Zuerst in English, dann nur noch in Deutsch. Und das erste Tutorial habe ich dann als meinen 100. Beitrag (ca. März 2014) im Forum eingestreut. Und danach regelmäßig so alle 25 bis 50 Beiträge einen weiteren.


    Irgendwann wurden die Tutorials so umfangreich - und der Zeitaufwand für Projekte meiner Firma ebenso - dass ich neue Icon-Tutorials zurückgestellt habe. Aktuell arbeite ich am Teil #32 und überschreite damit die Seite 500 - soviel am Rande dazu.



    Ach, Du hast noch eine Frage gestellt...


    Wo sind deiner Meinung nach die vorteile der Programmiersprache gegenüber anderen?




    Ein sehr überschaubarer Befehlssatz (Konstrukte/Kontrollstrukturen, Schlüsselworte, eingebaute Funktionen), eigentlich keine Datentypen, fast alle Typumwandlungen sind implizit möglich, keine Pointer/Zeiger, Quellcode ist - sofern strukturiert geschrieben - sehr leicht lesbar.

    In Icon kann man, wenn man es durchblickt hat, ohne jegliche Hilfsmittel programmieren. Ich bin ja im März umgezogen. Ich kann jetzt nicht mal sagen, wo die Icon-Bücher gelandet sind... ich habe sie seit der Zeit nicht mehr gebraucht - aber auch so einiges programmiert.


    Egal, welche Programmiersprache jemand mal gelernt hat, in Icon finden sich die meisten schnell zurecht. Ich kann mir auch vorstellen, dass Icon eine Einstiegssprache sein kann. Bis auf Co-Expressions ist alles weitere leichte Kost.


    Was mir persönlich (als in die Jahre gekommenes alterndes Säugetier) sehr gut gefällt: Es gibt nicht alle naselang eine neue Version. Die aktuelle Version 9.5.1 kam im Juni 2013 heraus - da hatte mein Tutorial schon über 10 Teile, die allesamt unter Icon 9.5.0 entstanden. Alle Code-Beispiele aus der 9.5.0-Ära funktionierten ohne jegliche Änderung auch unter 9.5.1.


    Erzähl das mal einem Python-Novizen! Warum er unter Python 2.x print "bla" und unter Python 3.x print("bla") schreiben muss.



    Icon war eine der ersten - und wahrscheinlich die erste PublicDomain- - Programmiersprache, deren Code ohne nennenswerte Änderungen zwischen den Betriebssystemen portabel war. Der meiste Code läuft unter Linux, Windows, auf'm Mac, und den ganzen alten Systemen, auf die Icon mal portiert wurde.


    Die Entwicklungszeit von in Icon entwickelten Lösungen braucht sich hinter keiner anderen Main-Stream-Sprache zu verstecken. Ich habe das in den letzten Jahren sehr häufig erlebt, dass andere noch über Konzepte diskutiert haben, da lief die Icon-Anwendung schon.


    Seit Jahren laufen Icon-Anwendungen stabil auch in industrieller Umgebung.

    Tja, und wie das Beispiel des vergangenen Wochenendes zeigt: Icon lebt!


    Als Entwickler finde ich es sehr inspirierend, sich direkt mit den Entwicklern von Icon (oder wie ich sie letztens genannt habe: Icon-Pfleger) auszutauschen. Das ist Konversation auf Augenhöhe. Da versucht niemand, jemanden klein zu halten oder blöd anzumachen. Auch Fragen von blutigen Anfängern werden von den Koryphäen so beantwortet, als hätte man das geschilderte Problem selber erst vor 5 Minuten gelöst.


    Icon wurde mittlerweile Ursprung weiterer Programmiersprachen (Unicon, Idol, Goaldie, JCon, ObjectIcon, ...)



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Renão,


    da musste ich schmunzeln:

    Warum sollte Icon auch nicht leben? :)


    Ist doch schön, dass die Sprache schon so gefestigt ist und solche Changes eher mal die Ausnahme sind :)

    ... schon so gefestigt ... Icon wurde so um 1977 herum entwickelt. Hat also 40 Jahre auf dem Buckel, knapp 10 weniger als C.


    Aber gefestigt ist eine schöne Wortwahl!


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Irgendwie erinnert mich das an einen ehemaligen Kollegen der ausschliesslich in HP VEE (später Agilent VEE, heute Keysight VEE) programmiert hat. Das ist eine graphische Programmiersprache die als Konkurrenz zu LabView gedacht war.

    Manchmal kann man nicht erklären warum sich bestimmte Produkte durchsetzen und andere eben nicht. Vee und LabView waren anfangs gleichwertig. Durchgesetzt hat sich LabView, und Vee vegetiert heute in einem Nischendasein dahin. An der Produktseite von keysight kann man erkennen, dass VEE nicht mehr aktiv vermarktet wird.

    Jedenfalls hat uns der Kollege mit seinen Spaghetti unheimlich genervt (weil es eine graphische Sprache ist sieht es wirklich so aus!), und weil er kein C konnte, mussten wir alles von Hand in etwas vernünftiges portieren (in diesem Fall C++). Der Kunde konnte kein VEE, und wollte das auch nicht. Und VEE ist eine Interpretersprache und nicht kompilierbar und hat auch sonst eine Menge Nachteile.


    Von daher kommt jetzt auch meine Frage.

    Wenn ich professionell Code schreibe, und den letztendlich an den Kunden weitergebe so dass der selbständig den Code warten/verbessern/weiterentwickeln kann, dann muss man sich zuvor auf eine Sprache einigen. Wenn ich jetzt in Icon programmiere, mein Kunde aber nicht (was sehr wahrscheinlich ist), dann muss ich meinen Code zumindest als API (.obj Modul) bereitstellen koennen. Hat Icon eine Schnittstelle zu C/C++?

    Gibt es ein Framework für Icon. wie z.B. wxWidgets oder Qt?

  • Na gut, mein Vergleich mit JavaScript hinkt gewaltig, ist aber für mich das Paradebeispiel für eine große Sprache, die immer wieder große Changes mit sich bringt.


    Andere, ähnlich alte Sprachen, wie bspw. C++ haben aber auch alle Jahre wieder ihre Neuauflagen und erhalten neue Features, die aber für alte Software häufig Verschlimmbesserungen mit sich bringen.


    Daher bin ich ehrlicherweise froh zu sehen, dass Icon seine Nische weiterhin hat und sich behutsam weiterentwickelt. So geht doch auch der eine oder andere unsinnige Trend dann einfach mal daran vorbei ;).

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Hallo nurazur,


    Von daher kommt jetzt auch meine Frage.

    Wenn ich professionell Code schreibe, und den letztendlich an den Kunden weitergebe so dass der selbständig den Code warten/verbessern/weiterentwickeln kann, dann muss man sich zuvor auf eine Sprache einigen. Wenn ich jetzt in Icon programmiere, mein Kunde aber nicht (was sehr wahrscheinlich ist), dann muss ich meinen Code zumindest als API (.obj Modul) bereitstellen koennen. Hat Icon eine Schnittstelle zu C/C++?

    Gibt es ein Framework für Icon. wie z.B. wxWidgets oder Qt?

    Erstmal halte ich es nicht für selbstverständlich, bei Auftragsentwicklungen den Quellcode bereitszustellen. Das ist einem Versions-Wildwuchs Tür und Tor geöffnet. Wenn nicht beidseitig "Programming Guidelines" vereinbart wurden, wird Dein Kunde Deinen Kunde nur verschlimmbessern, bevor er anfängt, beabsichtigte Verbesserungen einzubauen. Vielleicht kommt er aber auch gar nicht erst so weit. Der Kunde hat einen vielleicht nicht mehr lauffähigen Code und eine Vision der neuen Version - Du hast den Original-Code ohne Vision.


    In meinen bisherigen Projekten habe ich immer Icon durchsetzen können (sofern ich Icon für angemessen gehalten habe). Der Kunde braucht nur das Programm iconx und die aus dem Quellcode übersetzt Datei, damit das Programm auf einer Umgebung ohne Icon-Installation läuft.


    Es gibt Schnittstellen von Icon von und nach shared objects / DLLs, die in folgenden Programmiersprachen geschrieben wurden:

    • C (siehe Icon-Tutorial Teil 30)
    • C++ (siehe Icon-Tutorial Teil 31)
    • Cobol (siehe Icon-Tutorial Teil 32)
    • D (siehe Icon-Tutorial Teil 32)
    • Prolog (siehe Icon-Tutorial Teil 32)
    • Lazarus / FreePascal (siehe vielleicht Icon-Tutorial Teil 32)
    • Assembler (siehe Icon-Tutorial Teil 32)
    • vermutlich auch ADA / gnat


    und (ungetestet) für

    • S-lang
    • Cobol
    • Duktape
    • mruby
    • ficl (Forth Inspired Command Language)
    • Luq
    • Fortran
    • Assembler(hatten wir schon)
    • vedis
    • libcox
    • PH7
    • UnQLite
    • REXX
    • SNOBOL4 (Vorgänger von Icon)
    • fizzbuzz
    • unilist
    • tcc (Tiny C Compiler)

    Für Icon gibt es kein Framework - das braucht's auch nicht. Mit dem Programm vib (Icon) bzw. ivib (Unicon) kann man GUIs für Programme und Dialoge entwerfen. Die beiden Programme erzeugen Quellcode in der jeweiligen Programmiersprache, der dann mit wenig Code zur funktionalen Anwendung aufgewertet werden kann. Wie das funktioniert, steht auch in mehreren der Icon-Tutorials.


    Die GUI in Icon sieht aber zugegebenermaßen trist aus. Wenn man will, kann man die GUI mit ein paar Tricks attraktiver gestalten (ein paar Beispiele hatte ich auch mal gepostet) - bis hin zur automatischen Größenänderung der Bedienelemente, wenn man die Fenstergröße ändert. Auf die Schnelle fallen mir da die beiden Bildschirmuhren ein...


    Die aus ivib gestaltete GUI sieht etwas besser aus und besitzt weitaus mehr Konfigurations- und Gestaltungsmöglichkeiten.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    • Official Post

    Quellcode ist - sofern strukturiert geschrieben - sehr leicht lesbar.

    sagt wer? der der sich mit icon auskennt? Ich als Pythonfreund, find die Syntax schrecklich und kontraintuitiv.

    Code
    every k := i to j do
       write(someFunction(k))

    bzw:

    Code
    every write(someFunction(i to j))

    liest sich nicht toll.


    Ich werd trotzdem das tutorial mal weiter machen, vielleicht ergibt sich das ja noch. Ob Icon nun lebt, nur weil einer was in der Sprache gemacht hat, halte ich auch für etwas euphemistisch. Das gilt dann für alle Sprachen/Programme. Microsoft hat vor kurzem den Equation Editor gepatcht, das ding is ewig alt. Sollen wir nun "Der Equation Editor" lebt schreiben?


    Dein Enthusiasmus (und dein Fachwissen) in allen Ehren - deinen Hang in beinahe jedem Thema mit Programmierbezug ein Icon-Beispiel zu posten (bzw. auf die Sprache zu verweisen) empfinde ich als störend. (auch hier gilt, Übertreibung macht anschaulich) :2cents:

  • ...Thema mit Programmierbezug ein Icon-Beispiel zu posten (bzw. auf die Sprache zu verweisen) empfinde ich als störend...

    Das empfinde ich allerdings gänzlich anders. Wenn einem Icon nicht interessiert soll er den Beitrag überlesen. Ich persönlich finde es klasse das Andreas so dahinter steht und etwas dafür tut das vielleicht andere auf den Geschmack kommen.

  • Wenn ich ein Pythonproblemthread lese, jucken mich eventuelle Lösungen in Icon/C/whatever null ;).

    Geht so. Da kommt es meiner Meinung nach immer auf das Problem an. Hat jemand ein Sprachproblem (Syntax, Fehlverständnis, ...), dann ist sicherlich eine direkte Python-Antwort passend.
    Wenn es allerdings um strukturelle Probleme geht, wäre es mir persönlich total Schnuppe, wenn mir eine Problemlösung/Idee in einer anderen Sprache präsentiert wird, solange es meiner Lösungsfindung hilft.


    Speziell zur Icon-Syntax:


    Ich empfinde gerade die Generator als das Besondere an dieser Sprache. Klar, die"Loop-Definition" i to j als Funktionsparameter ist ungewohnt, dennoch sieht es für mich nun nicht falsch aus, sodass ich mich im Verständnis dadurch gestört fühle (gerade bei diesen Einzeilern).

    Ehrlicherweise sind das aber auch die Zuckerli die wir durch die verschiedenen Sprachen bekommen, die man dann in den wenigen passenden Momenten mal anwenden kann. Beispielsweise kann ich mir zwar auch Szenarien für einen else-Fall in einem for-Loop basteln, aber sinnvoll ist diese Überladung des else Keywords in meinen Augen dennoch nicht (Python). Dafür hat die Schlange aber arithmetische Funktionen auf Booleans definiert (indirekt), was ziemlich cool bei Variablendeklarationen sein kann :).

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.