Archiv der Kategorie: Programmierung

Bin mir darüber im Klaren

Man sollte nicht darüber lachen oder sich beschweren. X11 datiert zurück nach 1984 und es ist ein Protokoll auch für die Darstellung GUI über Leitungen von 300 Bit/s . Die Bedingungen, unter denen das laufen musste, kann man heute nicht mehr verstehen oder nur Leute, die kleinste Computer programmieren. Es macht einen Unterschied, ob man da 10 Byte oder 3 Bit übertragen muß.

Die Beschränkungen waren brutalst und jedes bisschen Leistung muß man herausquetschen. Aber natürlich von heute ausgehen, sind des APIS zum Davonlaufen, aber das teilt X11 durchaus mit der Win-API. Es waren andere Zeiten und es tut und durchaus gut, uns auch mit so was zu beschäftigen …

Was ich nicht verstehe

wie Microsoft ein so populäres Programm wie Visual Basic kaputt machte. Wenn man auch bedenkt, der Erfolg von MS war auch in einem Basic begründet. Es ist nun mehr als 20 Jahre, her und trotzdem gibt es immer noch Leute, die es benutzen.

Wieso man das nicht adaptiert und auf .NET brachte, ich habe wirklich keine Ahnung … Warum killt man eine Cash Cow? Ich meine, von unseren Politikern kann man nichts Besseres erwarten, aber von einer Firma, die sich derartige Mühe gibt, auch noch alle Software zum Laufen zu bringen.

Siehe: https://devblogs.microsoft.com/oldnewthing/

Und sie machen es wieder:
https://www.heise.de/developer/meldung/Gute-und-schlechte-Nachrichten-fuer-Visual-Basic-NET-Entwickler-4682163.html

Ich möchte gerne ein paar Stäbe brechen

Für in meinen Augen wunderbare Programmiersprachen, die leider kaum bekannt und benutzt werden. Libraries machen den Nutzen von allen Sprachen aus. Egal, wie schön eine Sprache ist, ohne Libraries ist sie leider nutzlos. Hier also ein paar Vorschläge
1) Common Lisp. Eine der derzeit am stärksten unterschätzten Sprache in den 80-er Jahren des letzten Jahrtausends gab es ganze Betriebssysteme, die in eine Lisp Dialekt geschrieben wurde. Das Emacs Lisp begleitet uns nun seit mehr als 30 Jahren, ein Ende ist nicht absehbar. Schemes gibt es sehr viele und auch noch ein paar andere weniger bekannte Lisps. Wenn Sie Glück und Können haben, bekommen die dieses BS auf Linux zum Laufen

https://archives.loomcom.com/genera/genera-install.html

Downloads / Homepages: https://www.sbcl.org/ http://www.lispworks.com, http://www.franz.com, https://franz.com/
2) Smalltalk. Eine der ersten Durch- und Durch Sprachen auf der Basis von Objekten. Heute immer noch unerreicht. Leider fast vollkommen vergessen im Lichte von Nachfolgern wie Python, C#, Java, JavaScript, C++. Smalltalk teilt mit Common Lisp die Eigenschaft, eine programmierbare Programmiersprache zu sein. Es gibt wenige andere Sprachen, mit denen man die Sprache selber so erweitern kann. So kann man z.B. neue Schleifenarten ohne Probleme zu diesen Sprachen hinzufügen.

Downloads: https://pharo.org/, https://squeak.org/, https://www.instantiations.com/,
https://www.gnu.org/software/smalltalk/

Die „Schwäche“ der beiden Sprachen aus Sicht von vielen sind fehlende statische Typen. Interessanterweise teilen sie das mit Python, was derzeit aber eine der am meistgebrauchten Programmiersprachen ist

3) Io . Ich bezweifele, daß es mehr als 1000 aktive Benutzer gibt. Die Einfachheit dieser Sprache ist besser als bei Smalltalk. Hier können Sie es sich anschauen: https://iolanguage.org/
Mehr gibt es nicht. Hier eine Idee wie es aussehen kann:

 cc := method(System getEnvironmentVariable("CC") ifNilEval(return "cc"))
    cxx := method(System getEnvironmentVariable("CXX") ifNilEval(return "g++"))
    ccOutFlag := "-o "
    linkdll := cc
    linkDirPathFlag := "-L"
    linkLibFlag := "-l"
    linkLibSuffix := ""
    linkOutFlag := "-o "
    linkLibSuffix := ""
    ar := method(System getEnvironmentVariable("AR") ifNilEval(return "ar"))
    arFlags := "rcu "
    ranlib := method(System getEnvironmentVariable("RANLIB") ifNilEval(return "ranlib"))


includes = includes appendSeq(headerSearchPaths) map(v, "-I" .. v)

 iocFiles := sourceFiles select(f, f name beginsWithSeq("Io") and(f name endsWithSeq(".c")) and(f name containsSeq("Init") not) and(f name containsSeq("_") not))

Es ist sehr im Smalltalk Sinn gehalten. Object message ist der Weg. Es gibt keine speziellen Klassen. Alles kann eine Klasse sein, aber alles ist ein Objekt. M.E. ist die Implementierung eine der besten (im Sinne von lesbarsten) , die ich bisher fand.

Vielleicht stelle ich auch noch ein paar andere Sprachen vor, die mich auf die eine oder andere Weise beeindruckten….

Genugtuung

Für einige Programmierer. Es gibt eine völlig unterschätzte Sprache, Lisp in diversen Varianten. Ein Beispiel was ein Lisp kann, aber nicht viele andere Sprachen:

(defmacro define-advice (symbol args &rest body)
  "Define an advice and add it to function named SYMBOL.
See `advice-add' and `add-function' for explanation on the
arguments.  Note if NAME is nil the advice is anonymous;
otherwise it is named `SYMBOL@NAME'.

\(fn SYMBOL (WHERE LAMBDA-LIST &optional NAME DEPTH) &rest BODY)"
  (declare (indent 2) (doc-string 3) (debug (sexp sexp body)))
  (or (listp args) (signal 'wrong-type-argument (list 'listp args)))
  (or (<= 2 (length args) 4)
      (signal 'wrong-number-of-arguments (list 2 4 (length args))))
  (let* ((where         (nth 0 args))
         (lambda-list   (nth 1 args))
         (name          (nth 2 args))
         (depth         (nth 3 args))
         (props         (and depth `((depth . ,depth))))
         (advice (cond ((null name) `(lambda ,lambda-list ,@body))
                       ((or (stringp name) (symbolp name))
                        (intern (format "%s@%s" symbol name)))
                       (t (error "Unrecognized name spec `%S'" name)))))
    `(prog1 ,@(and (symbolp advice) `((defun ,advice ,lambda-list ,@body)))
       (advice-add ',symbol ,where #',advice ,@(and props `(',props))))))

Man muß dazu schon, was mir AOP anfangen können, um da mitzuziehen. Und das ist Standard in so gut wie jedem Lisp. Im Beispiel ist es Emacs-Lisp eine Programmiersprache so alt wie der Emacs selber, also seit 1984 (und das sind nun 2023 – 1984 = 39 Jahre). Und Lisp ist noch älter, es war immer schon eine programmierbare Programmiersprache. Neue spezielle Schleifen – check. Einseitige Fallunterscheidungen wie when und unless – check.

Viele lachen über Lisp, aber nur noch wenige wissen, was Lisp Machines waren und was die boten.

Lispprogrammierer kann man mit Liberalen in der Politik vergleichen 😉

An die Programmierer

zu denen auch ich gehöre. Ich finde, für uns sind die Zeiten besser als je. So viele Sprachen, aus denen man auswählen kann, teilweise mit einer traumhaften Infrastruktur. Als ich anfing, gab es
kein Java, kein C#, kein F#, kein JavaScript, kein PHP, kein Python, kein Ruby, kein Rust, kein Go und was weiß ich, was alles noch dazu gekommen ist.

Bei uns gab es C, Modula-2, Pascal, Basic, Fortran, Cobol und Ähnliches. Die IDEs damals waren definitiv nicht so ausgefuchst wie heute. Wir hatten die Wahl, aber die war weitaus beschränkter als derzeit. Es ist auch so viel an neuer Software dazu gekommen, es ist geradezu atemberauben.

Wäre die politische Entwicklung nur halb so schön gewesen, bräuchte ich mir keinerlei Gedanken über das Auswandern machen …

Ich schlage vor, wir genießen die Auswahl und programmieren, worin auch immer wir Spaß haben…

I agree

It’s stupid not to use some software, because in what it is written. Of course I have my favourites, and special dislikes. But that is not what I see as a user. If the software does what it should – it’s fine.

What try to avoid is of course using a programming language for programming if I do not like it.
And I have a special distaste of C++ and Perl. Partly Tcl ( I simply do not like the set x val) Of course it is stupid. Strange enough I find C a wonderful language.
Now I’m currently learning Java and I’m quite sure I will use it for further programm development. I want to learn and use other languages but many are terrible for application development. You want a decent debugger and decent toolbos. This is not a given for quite a few languages I like.

E.g I’d like to use Pharo Smalltalk more intensivly, but they break code way too often. As a application developer I hate that, and for that I have to like VBA, because it simply works since at least two decades. Code you once wrote, still works. Every language which breaks code too often is very much a no-go for me. What I need is help with building GUI and Reports. If that’s not there I an’t use it….

Ich habe eine Schwäche für

Smalltalk der Programmiersprache. Was mich aber unglaublich ärgert, ist die Problematik von neuen Versionen zum Beispiel bei Pharo Smalltalk. Die Entwicklungsversion ist 11, daran läuft aber alles Mögliche nicht mehr sei Moose, Seaside oder. Was genau denken sich die Entwickler, wenn Sie mit neuen Versionen alte Software nicht mehr laufen lassen können.

Das ist IMHO eine ganz schlechte Idee und es ist ein Grund, warum ich immer noch C mag. So etwas passiert Ihnen in C nicht! Es passiert Ihnen auch in VBA so schnell nicht und es passiert Ihnen auch eher nicht in kommerziellen Smalltalks.

Ich verstehe, wenn man Fehler beheben will, ich verstehe, wenn man etwas anders implementiert, aber ich verstehe nicht, wie man Anwendungsentwickler so hängen lässt.

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,