[als Beitrag zur Reihe: Was spricht für oder gegen XYZ als Programmiersprache?]
Bislang erschienen:
Hallo zusammen,
was mir an der Programmiersprache Icon gefällt:
- Es gibt hier im Forum ein sehr gut sorgfältig erstelltes recht aufwändiges Tutorial
- Code in Icon kommt in der Regel mit 1/3 weniger Code als gleichwertiger C-Code aus
- keine Semikolons am Zeilenende
- Programmzeilen können entweder mit einem _ fortgesetzt werden oder die Programmlogik erwartet eine Fortsetzungszeile
- für schnelle Entwicklungen benötigt man keine Datendeklarationen - Icon unterscheidet nur zwischen lokalen und globalen Variablen
- der Datentyp wird am Inhalt von Variablen ermittelt - weitgehend werden bei Bedarf implizite Typ-Umwandlungen durchgeführt, die man aber auch explizit herbeiführen kann
- Laufzeitfehler können in Ausdrucksfehler gewandelt werden - Laufzeitfehler sind zwar möglich aber meist unnötig
- Es gibt prinzipiell keine Speicherlecks (ich habe aber keine Ahnung, wie das technisch umgesetzt sein könnte)
- es gibt keine POINTER!
- beliebige Erweiterbarkeit der Programmiersprache durch Modularität
- man kann objektorientiert programmieren, man muss aber nicht
- VIB ermöglicht schnelle Entwicklung von GUIs - das Pendant in Union nennt sich IVIB
- man kann Libraries / shared Objects aus anderen Programmiersprachen aufrufen
- Operatoren-Vielfalt ermöglicht sehr kurzen Code, wo in anderen Programmiersprachen mehrere Zeilen erforderlich sind
- durch das goal-directed Konzept und mutual evaluation Konzept kann man Dinge in einer Zeile regeln, die in anderen Programmiersprachen mit Fallunterscheidungen (case, if then elif else) über mehrere Zeilen breitgetreten wird
- try except wird durch die Operatoren / und \ in einer Zeile ohne Fallunterscheidung programmiert
- Ermöglicht die Programmierung von Co-Routinen (Parallelprogrammierung), wodurch wiederum kompakter Code ermöglicht wird
- ich persönlich habe ein Gefühl der Zufriedenheit, wenn ein Icon-Programm läuft, wie ich es bei keiner anderen Programmiersprache erlebt habe (bei > 15 Programmiersprachen, in denen ich bisher programmiert habe) - Icon war die bisher einzige Programmiersprache, in der ich eine mehrwöchige Auftragsarbeit hatte, ohne dass der damalige Compiler auch nur eine einzige Fehlermeldung auswarf. Der Anwendung lief dann sofort... Wer kann ähnliches zu einer anderen Programmiersprache sagen?
- Bei Fragen zu Icon kann man sich direkt an die - ich nenne sie - Betreuer wenden, die gern unterstützen, sich aber auch gern Tips geben lassen, wenn es mal hängt
- eine der ersten Programmiersprachen (die ich kenne), deren Quellcode ohne nennenswerte Anpassung auf zahlreichen Plattformen läuft
- die Programmiersprache Icon - un mittlereile auch Unicon - konnte auf zahlreiche Plattformen portiert werden (für die Portierung auf den Raspberry Pi habe ich wohl den Standard gesetzt, da ich im Januar 2013 der erste war, der es versucht hatte und dem es gelungen ist)
- tolle US-amerikanische Icon-Community
- Icon erlaubt RAD (rapid application development) - ich habe schon Anwendungen entwickelt und abgeschlossen, da wurde in anderen Programmiersprachen noch das Konzept entwickelt.
- Icon erlaubt nahezu universelle Anwendungsbereiche (meine beliebtesten Einsatzbereiche liegen seit ein paar Jahren in der Prozesssimulation, Prozessvisualisierung und Prozesssteuerung industrieller Anlagen)
- Icon-Code lässt sich super nach GAMP5 validieren (mehrfach durchexerziert)
Was mir an Icon nicht gefällt:
- Viele Leute laden sich die Icon-Tutorials herunter (teilweise >> 100 mal) - es gibt aber kaum Rückmeldungen, was sie damit anstellen
- Es gibt nur eine amerikanische Global Icon Mailing List, über die ein Austausch zu Icon möglich ist
- Der Icon-Compiler ist in den letzten Linux-Versionen nicht mehr an Bord (ich teste aber demnächst aus, ob das entsprechende Programm aus der Unicon-Welt nicht doch anwendbar ist)
Was ich zu Icon nicht beurteilen kann:
- 2013 habe ich mir zwar sehr viel Zeit genommen, um ein Konzept auszuarbeiten, das seitens der Leser mit wenig Vorwissen auskommt und keinerlei anderweitige Programmiererfahrung voraussetzt - und habe dieses Konzept dann in Gruppen von je vier ca. 4 thematisch zusammenhängenden Tutorials zeitgleich ausgearbeitet. Ich habe zwar immer versucht,mich in Programmierneulinge hineinzuversetzen und habe versucht, möglichst einfache Formulierungen zu verwenden. Ebenso habe ich mir sehr viel Mühe gegeben, jedes Schlüsselwort und jede Funktion in allen Einzelheiten zu beleuchten, um eine spätere Anwendung zu erleichtern. Ob mir das alles allerdings geglückt ist, kann ich nicht sagen. Daher an Euch die Frage: Eignet sich Icon als Erst-Programmiersprache / Einstiegsprogrammiersprache?
Fazit:
Für mich gehört Icon in die Werkzeugkiste eines jeden Programmierers, da man damit Aufgaben sehr zeitnah lösen kann. Icon füllt die Lücke die entsteht, wenn die Entwicklung von Anwendungen in C (und anderen vergleichbaren Sprachen) nicht beauftragt werden, weil Kosten / Nutzen in einem schlechten Verhältnis zueinander stehen. Icon füllt aber auch die Lücke, wenn es darum geht, einen Prozess wenige Male händisch durchzuführen oder doch besser zu automatisieren, auch wenn das Programm nur wenige Male laufen wird. Oft fällt in der betrieblichen Praxis das Urteil gegen eine Automatisierung - mit einem flott erstellten Icon-Tool ist die automatisierte Lösung in aller Regel deutlich vor der stupiden händischen Erledigung abgeschlossen.
Schätzt mal, wieviel Zeilen Code (überwiegend Icon, aber auch C, C++, BASH, [Cobol, D, Unicon, Prolog, FreePascal und Assembler im Icon Tutorial Teil 32]) in den bisherigen 31 veröffentlichten Icon-Tutorials gebracht wurden? Das Ergebnis hat mich auch überrascht...
Beste Grüße
Andreas
P.S.: Bitte nur antworten, wer über das Icon-Tutorial 9 hinausgekommen ist - sonst bringt ein Austausch nichts.
EDIT: Timm Thaler : Magst Du auch noch sowas zu FreePascal/Lazarus auf die Beine stellen? Dann hätten wir recht gute Übersichten zu den Programmiersprachen C, FreePascal/Lazarus, Icon und Python zusammen. Dann kann sich ein Einsteiger oder Umsteiger einigermaßen objektiv informieren und eine fundierte Entscheidung treffen.