Icon-Tutorial Teil 8: Datentypen procedure und co-expression

  • Hallo Linux-Freaks, Himbeerfreunde und Forumsbewohner,


    hier kommt der achte Teil meines Icon-Tutorials.


    Dieses Mal stelle ich die Datentypen procedure sowie co-expression vor.


    Der Datentyp procedure ist eher formaler Natur - man kann auch programmieren, ohne sich dessen bewusst zu sein. Ein paar Beispiele verdeutlichen die Anwendung von Prozeduren - schließlich ist Icon ja eine prozedurale Programmiersprache.



    Der Datentyp co-expression, tja, der hat's in sich. Ich bin mir noch nicht einmal sicher, ob dieses Thema verständlich genug herübergebracht werden kann. Als ich mich das erste Mal vor 11 Jahren mit Icon beschäftigt hatte, blieb für mich das Kapitel mit den co-expressions eines von denen, bei denen ich keinen blassen Dunst hatte, um was es geht und wozu es zu nutzen sein könnte.


    Den Nutzen kann ich heute beurteilen. Algorithmen mit Co-Expressions sind extrem elegant und bestehen aus wenigen Code-Zeilen wofür man sonst etliche Zeilen und verschachtelte Schleifen benötigt.


    Zu jedem Typ des Datentyps co-expressions gibt es ein Beispiel in der angehängten PDF-Datei.


    Ich wünsche Euch, hier durchzusteigen! Es lohnt sich!


    Wer's nicht sofort kapiert: Einfach liegen lassen, Gras drüber wachsen lassen, das Gras mähen, neu entdecken und immer wieder versuchen - bis es Klick! macht...



    Viel Spaß und beste Grüße


    Andreas




    P.S. Wer es noch nicht gemerkt hat, Teil 7 habe ich aktualisiert...

    Files

    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 ().

  • Hallo zusammen,


    letztens hatte ich mal mit Icon-Programmen auf einem RPi 4B, RPi Zero und einem Asus Tinkerboard experimentiert. Mich hatte interessiert, ob und falls ja, wie ich feststellen kann, ob z.B. der Governor bei der Bearbeitung eines Programms überhaupt aktiv wird - und ob ein simples Icon-Programm auf mehreren CPU-Kernen ausführbar gemacht werden kann.


    Tja, es geht.


    Die Beobachtung auf dem RPi Zero überrascht nicht: Die eine CPU wurde zu 100 % ausgelastet. Irgendwann war das Programm fertig und das Teil lief dann im Idle-Mode.


    Auf den anderen beiden Ein-Platinen-Rechnern war das Ergebnis (für mich) überraschender:

    Der Programm-Code, in dem linear Code abgearbeitet wird, eigentlich das gleiche Bild: Irgendeine CPU wird zu 100 % ausgelastet, die anderen dümpeln bei um die 2 % herum.

    Betritt das Programm aber den Bereich, in dem die Co-Expressions sich den Ball der Programmausführung alle naselang wechselseitig erneut zuspielen, werden plötzlich alle anderen (bislang nicht aktiven) CPU-Kerne aktiv.

    Werden mehrere dieser Programme gleichzeitig gestartet, lassen sich ebenfalls alle CPU-Kerne auf bis zu 100 % auslasten (OK, ist sinnfrei).



    Code folgt ...


    Code-Deutung:

    Zeile 3: Festlegung einer Schrittweite


    Zeile 7 - 16: Haupteintrittspunkt

    Zeile 8 - 10: Festlegung von drei Co-Expressions g, o und i mittels create. In Zeile 8 wird Co-Expression g als Generator (bla to blub) definiert. Hiermit wird einfach 0 bis 360 mit einer Schrittweite stepper (siehe Zeile 3) durchlaufen. Für die anderen beiden Co-Expressions werden eigene Funktionen verwendet.

    Zeile 12: lange Schleife, die nur dazu dient, dass z.B. über htop angezeigt wird, dass diese Schleife von einem einzigen Prozessorkern abgearbeitet wird. Der betroffene Kern ist dadurch gekennzeichnet, dass die CPU-Auslastung auf 100 % steigt.


    Zeile 15: Schleife, die der Reihe nach alle drei Co-Expressions abfragt und - falls denn Ergebnisse erzeugt werden können - ausgibt.


    Zeile 18 - 26: Definition der Co-Expression für co(). Nach Aufbereitung des Winkels wird letztlich der Cosinus berechnet.

    Zeile 28 - 35: dito si() zur Berechnung des Sinus.



    Wenn man dieses Programm laufen lässt, wird während der Abarbeitung der Zeile 12 nur ein Prozessor-Kern verwendet. Danach verteilt sich die CPU-Auslastung dynamisch auf bis zu 3 weiteren Kernen.



    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 3 times, last by Andreas ().

  • Das liegt wohl hieran:


    https://github.com/uniconproje…ef7e162f8474/configure.ac


    Wenn die Plattform nicht den assembler Code für einen Kontext Switch hat, dann wird das durch pthreads emuliert. Und dadurch kommt es natürlich zu einem scheduling auf einem beliebigen Core.


    Trotzdem werden dabei nicht mehrere coros parallel abgearbeitet - das verhindert eine semaphore https://github.com/uniconproje…193741d8/src/h/rstructs.h

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • Hallo __deets__,


    huch, jetzt hätte ich nicht damit gerechnet, dass überhaupt jemand reagiert. Schließlich hatte ich keine Frage in den Raum gestellt sondern nur eine Beobachtung vorgestellt.


    Respekt(!) für Deine Links (auch wenn diese zunächst "nur" für die Programmiersprache Unicon gelten. Es gibt aber (nahezu) identische Dateien, die im gleichen Pfad auch bei Icon eingesetzt werden und somit Deine Aussagen bestätigen. :danke_ATDE:.



    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 Andreas,


    Ich kenne mich ja im Icon-Universum nicht so gut aus, aber mir war so, als ob unicon eine Weiterentwicklung war? Darum habe ich da gesucht.


    Übrigens ist im src auch der Assembler-Code für den ARM Kontext Switch enthalten. Was ja nicht verwundert, du selbst schreibst ja, dass es auf dem PI geht.


    Es ist also gut möglich, dass dieser Falkback nur ein quirk des Build-Systems ist. Und du das entsprechend erzwingen/ändern kannst.

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • Hallo __deets__,


    wenn ich mich richtig erinnere, haben ein paar Entwickler aus dem Icon-Umfeld Unicon als moderne Variante von Icon aus dem Quellcode von Icon abgeleitet und nette Erweiterungen aufgesetzt (z.B. 3D-Graphik mit netten Effekten). Das Projekt hatte verschiedene Namen gehabt - wurde letztlich aber als Unicon 10 freigegeben. Mittlerweile tüftelt man an Unicon 13.1.


    Damit ist dann auch die maximale Versionsnummer von Icon vorgegeben - es wird also niemals Icon 10 geben.



    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 zusammen,


    bei der Suche nach was ganz Anderem bin ich der IPL auf die Datei pdco.icn gestoßen. Hierbei handelt es sich um eine Sammlung von 65 Funktionen, die als Co-Expressions diverse Aufgaben erledigen. Diese Aufgaben bestehen in der Umsetzung von binären Operatoren als Co-Expressions bis hin zu Datenauswertungen bzw. Aufbereitung in Form von Graphiken.


    Wer sich für diese Art der Programmierung interessiert, findet dort einige brauchbare Ideen.



    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 once, last by Andreas ().