Archiv der Kategorie: Programmierung

Mal “wieder” was übers Programmieren

Wahrscheinich überrascht es keinen, wenn ich schreibe, damit verbringe ich einen Teill meines Lebens. Mich haben Programmiersprachen schon immer interessiert und ich habe wirklich einiges auf mich genommen um in bestimmten davon arbeiten zu können. Zu meiner Zeit an der Uni war es die Möglichkeit eiffel zu benutzen.
https://de.wikipedia.org/wiki/Eiffel_(Programmiersprache)

Die Idee dahinter scheint mir heute noch eine der wirkich besseren zu sein. Es gibt dort ein Prinzip, nennt sich CQS (command query separation) und es meint. Das nur Methoden den Zustand eines Objektes ändern sollte, es in Abfragen aber nicht vorkommt.

Beispiel set_x(some_Value)  enthält nur x := someValue
Aber get_x():someValue enthält nur result := x

Bei dem einen ändert man den Zustand einer  Variiablen bei der anderen darf/sollte man es nicht.

C Programmierer kennen das Problem mit Rückgabewerten. Wo packt man den/die hin? In C gibt es kein “Tupel” Konzept und man kann nur einen Wert zurückgeben, dieser eine Wert kann aber auch ein void* sein und das kann wirklich alles sein. Auf der anderen Seite, wie informiert man den Benutzer, daß etwas schief gegangen ist. Das wird in sehr vielen Bibliotheken eben über den Rückgabewert erledigt. Darum findet man in C so etwas

#define ERROR_SUCCESS 0
#define ERROR_WHATEVER 1
Vielleicht in angenehmeren  Code in einem enum. Der Rückgabewert gibt also an ob alles “glatt” ging oder nicht, damit ist dannn aber der Rückgabewert “weg” und man muß sich mit globalen Variablen oder veränderbaren Parmetern behelfen.

Hier zwei Lösungen aus anderen Programmiersprachen:
https://doc.rust-lang.org/book/ch09-00-error-handling.html
https://go.dev/doc/tutorial/handle-errors

In Smalltalks gibt es nur Messages die etwas zurückgeben…

Aber nun kommen wir zu Programmiersprachen, die Seiteneffekte gar nicht leiden können und nur auf “pure” Funktionen setzen. Das bedeutet, wenn man diese aufruft ergeben die mit denselben Eingabedaten immer, diegleichen Ergebnisse. Die “dreckige” Arbeit von Seiteneffekten muß speziell gekennzeichnet werden. Prominentestes Beispiel dürfte Haskell sein (dazu eines der besten Bücher, was man auch online finden kann  http://book.realworldhaskell.org/read/)

In jedem Buch wird die “Reinheit” der Sprache gelobt, handelt es sich um eine “unreine” Methode also mit Seiteneffekten wird es immer irgendei IO type werden, das nennen die Monad.

Nun, die Autoren behaupten es sei der größte Vorteil. Ich stimme soweit durchaus mit ihnen überein, aber ich behaupte auch es ist der größte Nachteil, damit stimme ich als nicht mit Ihnen überein.

Ich bin immer mehr zur Überzeugung gekommen, daß der ausbleibende Erfolg von funktionalen Sprachen damit zusammenghängt. Es sieht so aus als ob Zustand – Zustandsänderung -> neuer Zustand für wirklich die allermeisten Programmierer einfacher verständlich ist und dem normalen Denkmodell entspricht. Was man uns nicht verdenken kann. Sitzen Sie in einem Auto und wollen los fahren, müssen Sie etwas tun. Einen Gang einlegen, Kupplung kommen lassen und entsprechend Gas geben, dann fährt ein Auto eben los, der Zustand ändert sich von stehendem Auto -> fahrendem Auto.

Ich denke auch, daß eben Zustandveränderungen genau das sind was man in allen anderen Bereichen macht. Dieses hinter einem Monad zu verstecken, scheint für mich einer der Hauptgründe zu sein, warum  man Funktionale Programmiersprachen nicht in größeren Bereichen kennt. Betrachtet man unsere gesamte Infrastruktur, dann wird man eher früher als später auf C treffen. Trotz aller Probleme damit, trotz der problematischen nebenläufigen Programmierung. So gut wie alle Betriebsysteme benutzen C als Basis und es gilt selbstredend speziell auch für jedes Unix, heiße es LInux, BSD, Solaris, HP-UX, AIX. So gut wie jeder relationale Datenbank ist in C geschrieben und manche davon werden tatsächlich milliardenfach benutzt (z.B. sqlite)

Ich persönlich kenne wirklich kein Programm, welches ich täglich benutze, daß in einer funktionalen Sprachhe implementiert wurde. Man kann behaupten, das derzeitige vorherrschende Programmiermodel basiert auf Klassen, Objekten und Messages.

Ja, es ziehen funktionale Elemente in OO-Sprachen ein, aber Blöcke sind in Smalltalk ein uraltes Konzept! Kurz die neuen PS müssen sich an einer der ältesten noch benutzen PS anlehnen. Das finde ich höchst interessant und erklärt vielleicht zu einem Teil warum ich Smalltalk für eine der besten Programmiersprachen halte.

Nur was Programmierer oder Leute mit einem Hang zur Programmmierung

Mal ‘ne wie geht es Ihnen Frage. Nur was für Programmierer oder programmmieraffine.

Geht es Ihnen auch so, daß Sie bestimmte Programmiersprachen mögen und andere einfach nicht?

Ich merke es immer und immer wieder. Sprachen die ich mag:
Smalltalk, C, Ruby, Eiffel, Scheme, Common Lisp, IO, Self, D, Dylan, SQL (auch procedural SQL)

eher indifferent:
C#, Java, Python, Tcl/Tk

mal so / mal anders
Haskell, Ocaml, F#, WLanguage, VBA

mag ich nicht / gruselig
C++, Perl, Brainfuck ;-),

Es ist natürlich irgend irrational. Nur wenn ich die Wahl habe, nehme ich lieber die ich mag.

Was ich aber ganz klar mag. Interaktive Entwickliungsumgebungen, wo man einfach mal was ausprobieren kann, ich schätze auch gute Debugger und dann die Möglichkeit Teile es Code genauer zu untersuchen (wahrscheinlich ein Grund warum ich Smalltalk so gut finde)

Und ja es ist klar eine Präferenz für OO vorhanden. Offenbar kommt es meiner Gedankenwelt am Nächsten. Wie geht es Ihnen?

Microsoft und der Umgang mit Progammierern

Erstaunt mich:
https://www.heise.de/developer/meldung/Gute-und-schlechte-Nachrichten-fuer-Visual-Basic-NET-Entwickler-4682163.html

Wenn man bedenkt was Visual Basic alleine schon für die Popularität der Entwickliung auf Windows brachte. Dann tritt man diesen Leuten mit Visual Basic Net auf die Zehen und keine 20 Jahre später, tritt man den Basic Fans noch mal mit Schmackes in’s Gemächt.

Bin mal gespannt was aus dem dann hier wird:
https://www.twinbasic.com/

Wenn man bedenkt, ehemals war das Mantra: Entwickler, Entwickler und nocht mehr Entwickler. Die man sicher mit VB bekam und dann so etwas …

Marktführerschaft kann nett sein, aber für die sich darauf eingeschossen haben …

An die Programmierer unter meinen Lesern,

so es Sie denn geben sollte.

An die Programmierer oder an Programmierung interessierten unter meinen Lesern. Kleiner Hintergrund: Ich kenne inzwischen eine ganze Menge Programmiersprachen, manche davon benutze ich intensiv, manche habe ich intensiv benutzt und bei anderen habe ich es immer mal wieder versucht, manche kann ich ganz gut lesen und schreiben, manche verstehe ich so gerade, manche mag ich und ein paar Kandidaten eher nicht.

Nun bin ich nach längerer Zeit auch mal wieder auf den Gebrauch von Common LIsp, gekommen, ich hab auch meine Emacs ordentlich gepimpt und was soll ich sagen – es rockt

Meine Firma hat mal eine Zeitlang LIspWorks vertrieben: http://www.lispworks.com/ Gestern habe ich mir auch mal AllegroCL auf meinem Rechner installiert.

Da ich einige Jahre CL gar nicht benutzt habe, muß ich festhalten: Es hat sich einiges zum besseren gewendet (was mich freut)

Wie auch immer, gestern stolper ich über eine Anwendung, die ich vor ungefähr 15 Jahren geschrieben habe und ich dachte mir, schau mal was da noch geht und zu meinem größten Erstaunen, brauchte ich nur das Tools installieren (in diesem Falle Lispworks Personal Edition) und bekam ein CAPI – Programm (das ist das GUI von Lispworks ) auf Linux und Windows zum Lauren. Das war erfreulich und interessant.

Nun habe ich auch bei diversen “Challenges” mitgemacht und treibe mich auch in wirklich “obskuren” Ecken herum (wem sagt CLIM etwas?)

Was ich aber immer mal wollte war ein Buch mit vielen Implementierungen in diversen Programmiersprachen. Es gibt ein Buch wo das mal ansatzweise versucht wurde “Beautiful code” aber dort gibt es eben nicht ein Beispiel und nun möchte ich Sie und mich herausfordern, ich gedenke eine Seite in’s Netz zu stellen wo genau eine Anwendung implementiert wird mit “Challanges” dann daran Änderungen zu übernehmen.

Im Augenblick denke ich an 3 Schnittstellen
1) CLI
2) GUI
3) Web

An diverse Arten von Speicherung der Daten
1) plain files
1.1) in welchem Format auch immer
1.2 ) in sagen wir mal CSV, JSON etc
2) Databases
3) was auch immer (Smalltalks images….)

Die Daten sollen verschlüsselt werden und es sollte möglich sein daraus die Daten an den WebBrowser zu übermittteln.

Was dann aber auch kommt. Interfacing mit anderen Sprachen egal wohin, aber es soll z.B. möglich sein, die sagen wir mal CL Strukturen aus einer andereen Sprache zu benutzen, Wie einfach schwierig ist es.

Bewertet wird die Software von den Besuchern der Seite wo ich das alles Sammeln möchte.Unter anderem
– Fehleranfälligkeit
– Lesbarkeit
– Adaptionsfähigkeit
– Tests
– Installation
– Implementierungszeit
– Wartbarkeit
– Sicherheit

Das ganze soll länger laufen, es kommt eben auf die Herauforderungen und deren Umsetzung an. Vielleicht kennt jemand die Language Shootout Seiten, dort ging es aber nur im Speed, Das will ich gar nicht “klein” reden, nur darum geht es mir nicht. Ich möchte einfach eine Anwendung auf möglichst viele Weisen implementiert sehen, um einfach mal zu zeigen, wie interessant das sein kann

Den Zeitaufwand kann ich nicht “beziffern”, damals habe ich vielleicht einen Tag oder so gebraucht – keine Ahnung. Kannte das ja einfach nicht

Mich faszinieren Programmiersprachen und ich bin speziell dafür sich auch die Nicht-Mainstream Sprachen anzuschauen. Ich kann mir nicht vorstellen, daß ich damit alleine bin. Wäre da jemand evtl interessiert?

Anwendung: Speicherung von Zugangsdaten mit “natürlich” Verschlüsselung, export/import dieser Daten in diversen Formaten,