Object Oriented Forth

OP #7958915
Lesenswert?

Wahrscheinlich ist FORTH ein ziemlich exotisches Thema hier, aber ich probiere es trotzdem mal:
Für graphische Anwendungen wäre ein objektorientiertes Forth nicht schlecht.
Einen Grundlagenartikel zu einer Form der Objektorientierung gibt es hier:
https://vfxforth.com/flag/jfar/vol3/no3/article3.pdf

Die TU-Wien beschreibt die OO auch in einem kurzen Abschnitt für gforth:
https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Basic-Objects-Usage.html#Basic-Objects-Usage Wenn man gforth auf Ubuntu installiert, kann man es mit

1
include objects.fs

laden.

Die Idee des ganzen ist, das LCD des angehängten PiPico Boards in Forth zu programmieren.

Angehängte Dateien:
OP #7958931
Lesenswert?

Und deine Frage ist jetzt?
Es scheint so zu sein, dass es keinen Standard für ein objekorientiertes Forth gibt. Der Syntax im geposteten Artikel-Link oben und im Link zur Uni-Wien ist unterschiedlich.

Ich will ein einfache Möglichkeit, Objekte schnell zu definieren und darzustellen, wie z.B.

1
     50 circle heap-new constant my-circle
2
     100 100 my-circle draw

aus
https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Basic-Objects-Usage.html#Basic-Objects-Usage

Wobei mir die Zeile

1
     50 circle heap-new constant my-circle

nicht ganz klar ist und umständlich erscheint (was soll die 50 auf "heap-new constant" würde ich auch gerne verzichten.

#7958933
Lesenswert?

Diese Stack-Orientierung mit UPN muß man aber wirklich mögen und wollen...

Ich hielt Forth immer für ein Relikt aus den Anfängen der Computerei, aus der Not der Ressourcenknappheit auf den damaligen Systemen heraus geboren. Hätte nicht gedacht, daß sich heute noch Jemand damit beschäftigt.

: Bearbeitet durch User
Gast #7958936
Lesenswert?

Das war damals (1983) schon sehr progressiv, denk auch an Smalltalk (die beruehmte Implementierung Smalltalk-80) oder auch Lisp (Emacs, auch ca. 1980). Die RPN (reverse polish notation) fand ich schon damals antiquiert, aber viele Ingenieure schworen darauf (der Uebergang vom Rechenschieber zum Taschenrechner war wohl traumatisch fuer sie).

Heute ist es natuerlich schoen, dass Du fuer sehr wenig Geld (und elektrische Leistung) Rechenleistung und Speicherplatz bekommst von denen man damals noch nicht einmal Traeumen konnte.

Weisst Du ob es ein Entwicklungssystem fuer Forth gibt?

#7958944
Lesenswert?

Thomas W. schrieb:

Das war damals (1983) schon sehr progressiv,

Müsste schon irgendwann in den Siebzigern gewesen sein. Ich habe hier noch ein deutsches Forth Handbuch von 1982 liegen (E.Floegel). Auch damals lagen wir schon ein Jahrzehnt mit solchen Dingen zurück.

Im Übrigen würde ich sagen, Forth ist das Entwicklungssystem. Und so kann man's bekommen:

1
apt install gforth
Gast #7958951
Lesenswert?

Christoph M. schrieb:

Und deine Frage ist jetzt? Es scheint so zu sein, dass es keinen Standard für ein objekorientiertes Forth gibt. Der Syntax im geposteten Artikel-Link oben und im Link zur Uni-Wien ist unterschiedlich.

Es gibt kein Forth Standard. Es gibt ein paar Standard-Token, aber schon die Ausgabe ist implementierungsabhaengig. Und dann kannst Du eigene Dictionaries definieren. It's the beauty of it.

#7958964
Lesenswert?

Christoph M. schrieb:

Wahrscheinlich ist FORTH ein ziemlich exotisches Thema hier, aber ich probiere es trotzdem mal:

Mein erster Computer* wurde in Forth programmiert. Ein graphikorientiertes Forth hab' ich dann auch noch auf einem anderen Computer ausprobiert ... und das hat mir als Begegnung mit dieser Write-Only-Sprache völlig gereicht.

Wenn man mit einem HP-Taschenrechner sozialisiert wird, also die Gehirnwindungen früh genug entsprechend verbogen werden, kommt man mit stackorientierten Programmiersprachen sicherlich bestens zurecht und kann beispielsweise auch in PostScript tolle Dinge anstellen.

Wenn aber nicht ...

<Pedanterie> Syntax ist weiblich. </Pedanterie>

*) Jupiter ACE. Z80, 3 kB RAM, davon grob 900 Byte für Programme und Daten nutzbar. Forth-Interpreter in 8 kB ROM, der Quelltext gleich in Tokens übersetzte (und damit mit 900 Byte doch etwas mehr möglich machte als ein simples "hello world").

Gast #7958983
Lesenswert?

Norbert schrieb:

Im Übrigen würde ich sagen, Forth ist das Entwicklungssystem. Und so kann man's bekommen:

1
apt install gforth

Ja, und LSE ist Standard auf OpenVMS/VAX, die seit 2000 nicht mehr weiter entwickelt wird.

Ich meinte etwas Neues, z.B. VSCode- oder Eclipse-basiert?

#7958984
Lesenswert?

Christoph M. schrieb:

Wobei mir die Zeile1 50 circle heap-new constant my-circle

nicht ganz klar ist und umständlich erscheint (was soll die 50 auf "heap-new constant" würde ich auch gerne verzichten.

Ich habe ja nun wirklich keine Ahnung von Forth, aber das, was die da schreiben, klingt ziemlich sinnvoll:

1
 Now we can create a circle on the heap (i.e., allocated memory) with:
2

3
      50 circle heap-new constant my-circle
4
heap-new invokes construct, thus initializing the field circle-radius with 50. We can draw this new circle at (100,100) with:
5

6
     100 100 my-circle draw

Oliver

OP #7958991
Lesenswert?

Oliver S. (oliverso) 30.10.2025 09:45

Ich habe ja nun wirklich keine Ahnung von Forth, aber das, was die da schreiben, klingt ziemlich sinnvoll: Now we can create a circle on the heap (i.e., allocated memory) with:

Ah, jetzt ist es klarer. Ich hätte gerne so einen Syntax:

1
20 10 "mytext" textoutput 
2
"hallo" mytext
3
10 delay
4
"nix" mytext

Das soll ein Text-Output Object an der Position 20,10 kreieren und dann erst "hallo" und danach "nix" dahin schreiben. Was haltet ihr von diesem Syntax?

(Firma: Gast) #7959015
Lesenswert?

Hannes J. schrieb:

Das war in Forth schon immer so. Zuerst baut man sich eine DSL, mit der DSL löst man sein Problem.

Das ist für viele, die in Forth reinschnuppern anfangs recht verstörend, ebenso wie die UPN.

Einer meiner Ausbilder sagte mal recht salopp: In anderen Sprachen (er meinte in Hauptsache C und Pascal) muss man das "Problem" solange modifizieren und beschneiden, bis man es in der Sprache abfassen kann. In Forth verändert man die Sprache solange, bis sie die Problemstellung vollständig widerspiegelt.

: Bearbeitet durch User
OP #7959048
Lesenswert?

Hannes J. (pnuebergang) 30.10.2025 10:12

Deine Entscheidung. Wenn die Forth Syntax und Semantik deines Forth es her geben bau es dir genau so. Du bist dein eigener König in deinem eigenen Forth-Königreich.

Ich denke, du liegst falsch. Schau dir den Syntax meines Beispiels noch mal genau an.

#7959050
Lesenswert?

Christoph M. schrieb:

Hannes J. (pnuebergang) 30.10.2025 10:12

Deine Entscheidung. Wenn die Forth Syntax und Semantik deines Forth es her geben bau es dir genau so. Du bist dein eigener König in deinem eigenen Forth-Königreich.

Ich denke, du liegst falsch. Schau dir den Syntax meines Beispiels noch mal genau an.

Wie? Ich liege falsch dass das deine Entscheidung ist? Na dann, wessen Entscheidung soll es denn sein? Ach egal, wenn du nicht machen willst was du selber willst dann lass es halt.

(Firma: Gast) #7959062
Lesenswert?

Johann L. schrieb:

In anderen Sprachen fügt man einfach eine neue Funktion hinzu, zum Beispiel zum Zeichen eines Kreises.

In den anderen Sprachen ist exakt definiert, wie eine Funktion aufgebaut wird, wie Anweisungen auszusehen haben. C hat irgendwas um Hundert Schlüsselworte. Rigide Syntaxregeln.

Forth hat nichts davon. Forth kennt nur Worte. Diese Worte werden (meist) durch Whitespaces voneinander getrennt. Das war es schon an Syntaxregeln.

Jedes Wort ist jederzeit redefinierbar, also auch mitten im laufendem Betrieb.

Also, ja, es wird die Sprache selber verändert. Das ist das normale Vorgehen wenn man mit einem Forth System arbeitet. z.B. das hinzufügen von spezialisierten Compilern und Interpretern.

Der Streit ob Forth nun eine Hochsprache ist, wird seit Jahrzehnten geführt. Ich sage: Der Punkt ist falsch, die Frage ist falsch, der Gedanke ist falsch, die Annahme ist falsch. Forth ist eher eine Philosophie, als eine Sprache. Forth ist eher ein System, als eine Sprache.

: Bearbeitet durch User
#7959171
Lesenswert?

Christoph M. schrieb:

Ich? Auf µC: C++ Vom AVR 8Bit Tiny bis 64Bit K210

Du solltest die Frage schon lesen, da stand "das obige Pico2_LCD_096 Board".

Die da? Christoph M. schrieb im Beitrag #7959154:

Welche Programmiersprache nutzt ihr?

Manchen fällt es wohl wirklich scwher, Zusammenhänge in einem Satz zu nennen. Oder zwei Sätze sinnvoll zu verbinden.

Christoph M. schrieb:

Hat jemand von euch das obige Pico2_LCD_096 Board schon mal ausprobiert? Wenn ja, welche Programmiersprache nutzt ihr?

Dürfte verständlicher sein, oder?

#7959178
Lesenswert?

Um noch einmal zum Thread-Thema zurück zu kommen, ich halte eine Objekt-orientierte Erweiterung dieser Sprache im besten Falle für einen akademischen /Brainfart/.

Forth ist niemals für so etwas konzipiert worden. Manchmal sollte man die Dinge einfach so belassen (und benutzen) wie sie erdacht worden sind und sie nicht in maximal unpassende Gewänder zwängen.

Mir jedenfalls graust es bei dem Gedanken, ein ++ an den Namen gehängt zu sehen. Welch hässlichen Dinge so etwas nach sich zieht, kann man ja seit vielen Jahren sehen.

OP #7959186
Lesenswert?

Norbert (der_norbert) 30.10.2025 17:14

Um noch einmal zum Thread-Thema zurück zu kommen, ich halte eine Objekt-orientierte Erweiterung dieser Sprache im besten Falle für einen akademischen Brainfart.

Gut, aber immerhin beschäftigt sich ja die Uni Wien damit, wenn du das mit "Brainfart" meinst:
https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Basic-Objects-Usage.html#Basic-Objects-Usage

Mir geht es nur indirekt um FORTH. Ich hätte nur gerne die Bequemlichkeit von FORTH schnell eigene Definitionen zu erzeugen, wie oben schon beschrieben:

1
20 10 "mytext" textoutput 
2
"hallo" mytext
3
10 delay
4
"nix" mytext

Ich überlege gerade, einen kleinen Interpreter in Micropython (bzw. Circuitpython, das gibt es für das Board
https://circuitpython.org/board/waveshare_rp2350_lcd_0_96/
der das Script oben versteht ) Vielleicht sollte man einen Micropython/Circuitpython Thread für das Board aufmachen.

#7959188
Lesenswert?

Christoph M. schrieb:

Norbert (der_norbert) 30.10.2025 17:14

Um noch einmal zum Thread-Thema zurück zu kommen, ich halte eine Objekt-orientierte Erweiterung dieser Sprache im besten Falle für einen akademischen Brainfart.

Gut, aber immerhin beschäftigt sich ja die Uni Wien damit, wenn du das mit "Brainfart" meinst: https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Basic-Objects-Usage.html#Basic-Objects-Usage

Der Zweck, womit sich manche Forschenden beschäftigen, ist auch manchmal etwas zweifelhaft. Ein Prof von mir (über 20 Jahre her) hat auch noch in einer Sprache programmiert, die damals schon nicht mehr geschult wurde.

Ich überlege gerade, einen kleinen Interpreter in Micropython (bzw. Circuitpython, das gibt es für das Board https://circuitpython.org/board/waveshare_rp2350_lcd_0_96/ der das Script oben versteht )

Du willst FORTH mit python auswerten?

Der "Hersteller" hat sogar ein Tutorium dazu: https://www.waveshare.com/wiki/Pico-LCD-0.96#Python

Vielleicht sollte man einen Micropython/Circuitpython Thread für das Board aufmachen.

Welcher "man"? Du vielleicht?

#7959195
Lesenswert?

Christoph M. schrieb:

Gut, aber immerhin beschäftigt sich ja die Uni Wien damit, wenn du das mit "Brainfart" meinst:

Dann passt ja akademisch. ;-) Nur weil ein paar Leute gerade nichts anderes zu tun haben, …

Christoph M. schrieb:

Ich überlege gerade, einen kleinen Interpreter in Micropython (bzw. Circuitpython, das gibt es für das Board

Das iss 'n normaler 2350, das gibt's schon fertig. Ein kleines module für das screen device dazufrieren und den Karton zumachen. Fertig!

#7959210
Lesenswert?

Christoph M. schrieb:

Norbert (der_norbert) 30.10.2025 18:08

Das iss 'n normaler 2350, das gibt's schon fertig. Ein kleines module für das screen device dazufrieren und den Karton zumachen. Fertig!

Tja, irgendwo hängt es immer: Beitrag "Circuitpython und Waveshare PiPico2 LCD0 nch96"

Ich habe präzise einmal Zirkuspython ausprobiert und es für noch nicht einmal halbwegs sinnvoll einsetzbar befunden. Selbst das Attribut Kinderspielzeug wäre noch ein Euphemismus. Manchmal ist es in der Tat besser, wenn man nicht versuchte tausend Dinge besonders schlecht zu machen, sondern lieber nur hundert Dinge, dafür gut.

Normales MicroPython und ein Hand-gedengeltes module wäre meine Wahl. Hab' vor Jahren mal eines für ein ST7735 1,8" TFT geschrieben. Hat einen Tag gedauert. Inklusive Optimierung.

OP #7959214
Lesenswert?

Norbert schrieb:

Normales MicroPython und ein Hand-gedengeltes module wäre meine Wahl. Hab' vor Jahren mal eines für ein ST7735 1,8" TFT geschrieben. Hat einen Tag gedauert. Inklusive Optimierung.

Ich wollte jetzt eigentlich kein Forschungsprojekt zu diesem Display-Board starten. Das ist eine kleine Nebenspielerei und der Plan war, einen Text in unterschiedlichen Größen an unterschiedliche Positionen anhand eines Beispiels zu schreiben.

#7959216
Lesenswert?

Christoph M. schrieb:

Norbert schrieb:

Normales MicroPython und ein Hand-gedengeltes module wäre meine Wahl. Hab' vor Jahren mal eines für ein ST7735 1,8" TFT geschrieben. Hat einen Tag gedauert. Inklusive Optimierung.

Ich wollte jetzt eigentlich kein Forschungsprojekt zu diesem Display-Board starten. Das ist eine kleine Nebenspielerei und der Plan war, einen Text in unterschiedlichen Größen an unterschiedliche Positionen anhand eines Beispiels zu schreiben.

Abhängig vom verwendeten Controller hat ja vielleicht schon jemand einen zumindest rudimentären Treiber gedengelt. Schau mal bei:https://awesome-micropython.com/

#7959246
Lesenswert?

Christoph M. schrieb:

Welche Programmiersprache nutzt ihr?

Die Liste würde sehr lang werden! Hauptsächlich programmiere ich in Assembler verschiedene Architekturen. Vom Z80, Z8 über 8086 und 8051 sowie PIC, AVR. Hochsprachen - je nach Anwendung vom BASIC in verschiedenen Ausführungen über TurboPascal, DBase, Foxbase-Foxpro-Visual Foxpro, C, und natürlich Forth mit Z8, Z80, 8051, PC. Ich habe bestimmt noch Etliches vergessen? P.S. Focal

Angehängte Dateien:
#7959256
Lesenswert?

Ich frage mich was immer neue Sprachen bringen sollen. Lernen muss man doch jede neu und egal wie einfach sie zu sein scheint. Assembler ist sicher nicht das, was ich heute empfehlen würde, aber C ganz sicher. Und mit C++ ist man auch gut dabei. Ich mache das Wenige mit Arduino, weil ich auch bei diesen Controllern bleibe. Und wenn, dann mache ich auch nichts Bewegendes mehr. Soll ja jeder gerne alles lernen, aber ich persönlich würde dann z.B. lieber so gut wie nur irgendwie möglich C lernen. Das ist die Hochsprache, die auf so ziemlich jeden Mikrocontroller funktionieren wird.

#7959347
Lesenswert?

Frank O. schrieb:

Ich frage mich was immer neue Sprachen bringen sollen.

Forth ist ja nun nicht besonders neu. Bei C muss man sich um viele Dinge selber kümmern, und es hat teilweise gewöhnungsbedürftige Syntax (Pointer- und Stringoperationen). python erzeiht wenigstens dazu, Quellcode strukturiert zu formatieren. Welchen Vorteil Ajax gegenüber JS bietet, weiß ich auch noch nicht.

Assembler ist sicher nicht das, was ich heute empfehlen würde, aber C ganz sicher. Und mit C++ ist man auch gut dabei.

Assembler funktioniert nicht plattformübergreifend. Hochsprachen schon eher.

Ich mache das Wenige mit Arduino, weil ich auch bei diesen Controllern bleibe. Und wenn, dann mache ich auch nichts Bewegendes mehr.

Arduino ist nur eine Entwicklungsumgebung mit der Zielsetzung eine Programmiersprache für viele Controller zu haben. Man kann mit dem Code für einen 8-Bit AVR genauso programmieren, wie einen ESP32. (unter Beachtung gewisser Abweichungen). Z.B. wird mit "Serial.begin()" bei beiden die Standard-UART-Schnittstelle initialisiert).

Soll ja jeder gerne alles lernen, aber ich persönlich würde dann z.B. lieber so gut wie nur irgendwie möglich C lernen. Das ist die Hochsprache, die auf so ziemlich jeden Mikrocontroller funktionieren wird.

Solange es dafür einen Compiler und Linker gibt.

#7959588
Lesenswert?

Christoph M. schrieb:

Was haltet ihr von diesem Syntax?

Wäre es nicht sinnvoller zuerst ein TextOutput Object zu erzeugen (wenn man es objectorientiert machen will). Dann das Objekt zu positionieren,ggf. sichtbar zumachen, und erst zum Schluß Text anzuzeigen?

Wenn Du nämlich viele TextOutput Objekte anlegen musst, dann haben die ja u.U. noch gar keine festgelegte Position.

/regards

OP #7959605
Lesenswert?

Andreas H. (ahz)

Wäre es nicht sinnvoller zuerst ein TextOutput Object zu erzeugen (wenn man es objectorientiert machen will).

Vielleicht ist der Code doch etwas missverständlich, den ich hingeschrieben habe.
Ich versuche es mal genauer am "use case" zu erklären: Oft hat man auf dem Bildschirm analoge Werte, die man anzeigen will. Am besten schreibt man einen Namen davor, dass man weiß, was der Wert bedeutet und im besten Fall noch eine Einheit dahinter. Man muss eigentlich am Anfang nur das Objekt mit Namen, Position und eventuell Einheit auf dem Bildschirm erzeugen. Später braucht man an das Objekt eigentlich nur noch periodisch den neuen analogen Wert zu schicken.
So ähnlich wie in dem Bild:
https://www.mikrocontroller.net/attachment/681824/PiPicoLcd96_Voltmeter.png

: Bearbeitet durch User
(Firma: 1984now) #7959621
Lesenswert?

Christoph M. schrieb:

Wahrscheinlich ist FORTH ein ziemlich exotisches Thema hier

Nicht nur hier, sondern vor allem: heute.

Für graphische Anwendungen wäre ein objektorientiertes Forth nicht schlecht.

Forth und "objektorientiert" ist schon vom Grundkonzept her ziemlich unverträglich.

Einen Grundlagenartikel zu einer Form der Objektorientierung gibt es hier: https://vfxforth.com/flag/jfar/vol3/no3/article3.pdf

Nunja, man kann sicher auch eine Klobürste zum Zähneputzen verwenden. Aber die Handhabung ist doch etwas haklig und der Erfolg bezüglich der Aufgabe doch eher suboptimal.

#7959782
Lesenswert?

Lotta  . schrieb:

Gibt es da ein Interpreter oder Compiler im Mikrocontroller-Bereich?

Du könntest versuchen, Ghostscript zu portieren. Das stammt aus Zeiten, zu denen PCs so viel Rechenleistung hatten wie ein mittlerer ARM-Cortex; außerdem steckt ein Postscript-Interpreter seit Jahrzehnten in jedem etwas besseren Drucker drin - und auch da ist da, was da als Prozessor werkelt, nicht irrwitzig leistungsfähig.

Ein 8-Bit-AVR oder ähnliches dürfte allerdings unter der Latte durchgesprungen sein, ein paar hundert kByte RAM dürften schon nötig sein.

Ghostscript gab es auch für DOS, d.h. ein 16-Bit-System mit -genau- ein paar hundert kByte RAM.

Du könntest Dir aber auch ein CYD besorgen und darauf z.B. "Display PostScript" portieren.

Das ist sicherlich mühsam, aber ... wer Forth(ähnlich) programmieren will, der scheut keine Mühen, oder?

https://en.wikipedia.org/wiki/Ghostscript https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display https://en.wikipedia.org/wiki/Display_PostScript

#7959823
Lesenswert?

Harald K. schrieb:

Lotta  . schrieb:

Gibt es da ein Interpreter oder Compiler im Mikrocontroller-Bereich?

Du könntest versuchen, Ghostscript zu portieren. Das stammt aus Zeiten, zu denen PCs so viel Rechenleistung hatten wie ein mittlerer ARM-Cortex; außerdem steckt ein Postscript-Interpreter seit Jahrzehnten in jedem etwas besseren Drucker drin - und auch da ist da, was da als Prozessor werkelt, nicht irrwitzig leistungsfähig.

Jep. Man sehe sich z.B. das anhängende Postscript "Programm" an. Das erzeugt ein IFS-Fraktal[1], den Barnsley Farn. So genannt weil es von Michael F. Barnsley als Beispiel für ein natürliches Objekt mit näherungsweise fraktaler Struktur benannt wurde.

Auf einem PC mit Ghostscript rendert das in Sekunden, während ein Drucker mit eingebautem Postscript-Interpreter für ein paar Minuten in Tiefschlaf versinkt.

[1] https://de.wikipedia.org/wiki/Iteriertes_Funktionensystem

Angehängte Dateien:
#7959828
Lesenswert?

Axel S. schrieb:

Auf einem PC mit Ghostscript rendert das in Sekunden, während ein Drucker mit eingebautem Postscript-Interpreter für ein paar Minuten in Tiefschlaf versinkt.

Naja, kommt a) auf den Drucker und b) dessen Auflösung an - ein typischer 600-DPI-Drucker hat eine ganz erheblich größere zu bearbeitende "Bildschirmfläche" als die, mit der GS für den PC-Monitor rendert.

Eine A4-Seite (abgerundet auf 8x11") mit 600 Dpi hat eine Auflösung von 4800 x 6600 Pixeln ... da ist natürlich ein Drucker 'ne Weile lang mit beschäftigt.

Wenn man aber die Ausgabeauflösung z.B. auf die des CYD beschränkt (320x200 oder so), dann dürfte die Wartezeit nicht mehr ganz so elendiglich lange sein.

#7959842
Lesenswert?

Thomas W. schrieb:

Die RPN (reverse polish notation) fand ich schon damals antiquiert, aber viele Ingenieure schworen darauf (der Uebergang vom Rechenschieber zum Taschenrechner war wohl traumatisch fuer sie).

Interessant. Ich meine aber eher, da gab es noch andere Gründe: https://de.wikipedia.org/wiki/HP-35 https://midp-calc.sourceforge.net

YT: "Concatenative programming and stack-based languages" by Douglas Creager https://www.youtube.com/watch?v=umSuLpjFUf8

Thomas W. schrieb:

Weisst Du ob es ein Entwicklungssystem fuer Forth gibt?

Tipp von Reddit: https://home.hccnet.nl/a.w.m.van.der.horst/ciforth.html (https://www.reddit.com/r/Forth/comments/17xzaf3/most_recommended_forth_system_for_a_windows_11/?tl=de)

OP #7960105
Lesenswert?

Wow, ich bin erstaunt, dass es jetzt doch eine ganze Reihe nützlicher, kompetenter Beiträge gab. Ich wollte den Thread ja schon aufgeben.
Danke :-)

Lotta schrieb

Man könnte auch Postscript nehmen,

Axel S. (a-za-z0-9)

farn.ps (1,22 KB)

Das Postscript Forth-artig ist, wusste ich nicht, ist aber sehr interessant. Es scheint also so zu sein, dass der ursprünglicher Gedanke, FORTH für graphische Elemente zu verwenden, schon sehr lange gemacht wurde.

1
Design:
2
The original PostScript was written for printing, with the model being that only one document could be printed at one time, and that the document was broken into logical sections approximating a page. For this reason, the underlying model of PS was based on a stack machine similar to the Forth programming language, which reduced the complexity of the code on the printer and the amount of memory needed to store individual graphics.

( https://en.wikipedia.org/wiki/Display_PostScript )

Ich meine gehört zu haben, dass die Nextion-Display auch mit einem speziellen Forth-Prozessor ( J1 ) laufen.

Es ist interessant, was Perplexity zur Objektorientierung von Postscript meint

1
PostScript is not natively an object-oriented programming language, but it is a stack-based, interpreted language with many high-level features. It supports procedures and modular programming but does not inherently provide built-in object-oriented constructs like classes and inheritance. However, PostScript’s flexible dictionary structures and procedures allow programmers to simulate object-oriented principles, such as encapsulation and dynamic dispatch, through custom coding techniques. Notably, extensions and environments like Sun's NeWS demonstrated how PostScript dictionaries could be used to create a dynamically-bound object-oriented runtime environment inspired by Smalltalk concepts.

Das hört sich für mich so ähnlich an, wie Strukturen in C die man dort manchmal auch für Objekte verwendet.

: Bearbeitet durch User
Moderator #7960252
Lesenswert?

Geht es dir bei der Kombination von Forth mit Objektorientierung nur um den Erkenntnisgewinn, oder versprichst du dir konkrete Vorteile davon?

Falls letzteres:

Für den RP2{04,35}0 ist ja eine ganze Reihe von Programmiersprachen verfügbar:

1
The microcontroller can be programmed in assembly, C, C++, Forth, Swift,
2
Free Pascal, Rust, Go, MicroPython, CircuitPython, Ada, TypeScript and
3
Zig.

(https://en.wikipedia.org/wiki/RP2040)

Wieso ausgerechnet Forth? Wo siehst du die Vorteile bspw. gegenüber C oder C++?

  • Kürzere Entwicklungszeiten?

  • Übersichtlicheren Quellcode?

  • Bessere Wartbarkeit?

  • Schnellere Ausführung des Codes?

  • Geringerer Speicherplatzbedarf (Flash und/oder RAM)?

  • Bessere Standardisierung?

  • Bessere Dokumentation (Sprachreferenz, Tutorials usw.)?

  • Bessere Unterstützung durch die Community?

  • Mehr persönliche Programmiererfahrung vorhanden?

  • ...?

Und warum muss es unbedingt objektorientiert sein?

Die meisten gängigen Grafikbibliotheken (nicht zu verwechseln mit GUI-Framwworks) sind es höchstens ansatzweise. Oft sind zwar das Drawable und der Graphics-Context Objekte im Sinne der OOP, nicht aber die Grafikprimitive (Linie, Polygon, Kreis usw.).

Zum Thema PostScript:

Während das klassische PostScript für Drucker nach wie vor eine gewisse Bedeutung als herstellerübergreifende Grafiksprache für Drucker hat, ist Display PostScript längst gestorben. Die meisten der Gründe, warum es damals eingeführt wurde, sind heute nicht mehr relevant, dafür treten seine Nachteile (vor allem die geringe Ausführungsgeschwindigkeit wegen des Interpreters) mehr und mehr in den Vordergrund.

OP #7961174
Lesenswert?

Yalu X. (yalu) (Moderator)

Geht es dir bei der Kombination von Forth mit Objektorientierung nur um den Erkenntnisgewinn, oder versprichst du dir konkrete Vorteile davon?

Sagen wir mal, es ist reines spielerisches Interesse.

Für den RP2{04,35}0 ist ja eine ganze Reihe von Programmiersprachen verfügbar:

Für den PiPico2 (also RP2350), der auf diesem Display-Board verbaut ist, habe ich kein uf2-File gefunden.
Der nächste Aufwand wäre dann, einen Display-Treiber für das Board zu schreiben. Da bin ich mir nicht sicher, ob sicher der Aufwand lohnt.

RBX schrieb:

YT: "Concatenative programming and stack-based languages" by Douglas Creager https://www.youtube.com/watch?v=umSuLpjFUf8

Harte Kost, aber sehr interessant. Das Konzept der Befehle auf dem Stack hat mich an Python erinnert. Und tatsächlich: Python wird auf einer Byte-Code Stackmaschine ausgeführt. Die scheint ihre Ursprünge in Forth zu haben, allerdings mit der starken Erweiterung das die Daten Objekte sind.

(Firma: Privat) #7961197
Lesenswert?

Was die OOP betrifft, ist das m.E. ja nur eine andere Schreibweise für den Quellcode. Ist halt dafür gedacht, zusammengehörige Dinge zu kapseln, um die Lesbarkeit und Wartbarkeit zu erhöhen. Anders, wie bei Strukturen können da dann auch Prozeduren/Funktionen (Methoden) zu den Variablen (Eigenschaften) dazu geschrieben werden. Also :

Klassen - Objekte - Eigenschaften - Methoden

Das Salz in der Suppe sind dann :

Kapselung - Vererbung - Polymorphie Überschreiben - Überladen - Konstruktoren - Destruktoren

Damit macht es dann erst richtig Sinn. Was da zum Schluß als eine vom Compiler erzeugte Binary rauskommt, egal ob bei prozeduraler oder OOP - Programmierung, dürfte es da kaum Unterschiede geben. Der Compiler muß das ja auch wieder in Adressen und Sprünge zurück verwurschteln. Ein Prozessor, egal ob Mikro oder normaler PC, kennt kein OOP. Da wird es wohl eher kein Geschwindigkeits- gewinn geben, eher das Gegenteil. Kommt dann darauf an, wie gut der Compiler das zurück übersetzt. Also, bei großen Projekten, wo Teams zusammenarbeiten und auf gemeinsame Klassen zugreifen müssen, ist es halt interessant. Bei kleineren Sachen sehe ich da kein großer Vorteil. So mal meine Ansicht darüber.

: Bearbeitet durch User
#7961205
Lesenswert?

Yalu X. schrieb:

Geht es dir bei der Kombination von Forth mit Objektorientierung nur um den Erkenntnisgewinn, oder versprichst du dir konkrete Vorteile davon?

Er will gar nichts machen außer hier rum jammern. In der Woche in der er hier rum jammert hätte er mehrere existierende OO-Erweiterungen ausprobieren und sogar anfangen können seine angeblich gesuchte sehr spezielle OO-Erweiterung selber zu implementieren. Wie man das in Forth halt so macht.

Aber er ist schon patzig geworden als ihm gesagt wurde das es seine Entscheidung ist was er wie macht. Das hat er so gar nicht verarbeiten können. Er? Was machen? Um Himmelswillen.

#7961252
Lesenswert?

Christoph M. schrieb:

RBX schrieb:

"Concatenative programming and stack-based languages" by Douglas Creager https://www.youtube.com/watch?v=umSuLpjFUf8

Harte Kost, aber sehr interessant. Das Konzept der Befehle auf dem Stack hat mich an Python erinnert. Und tatsächlich: Python wird auf einer Byte-Code Stackmaschine ausgeführt. Die scheint ihre Ursprünge in Forth zu haben, allerdings mit der starken Erweiterung das die Daten Objekte sind.

Falsche Baustelle. Die OO macht der Compiler und nicht die Bytecode Ausführungsebene. Ein Prozessor ist ja am Ende auch nichts anderes. Nur daß man den "Bytecode" dann eben "Maschinensprache" nennt. Trotzdem kann er Programme ausführen, die in einer OO-Sprache geschrieben sind. Der Prozessor muß dazu nichts von Kapselung und Methoden wissen. Eine Methode ist am Ende des Tages auch nur eine Subroutine.

OP #7961272
Lesenswert?

Das Konzept der Befehle auf dem Stack hat mich an Python erinnert Axel S. (a-za-z0-9) Falsche Baustelle.
Nein, das ist schon die richtige Baustelle. Es ging mir darum aufzuzeigen, dass auf der unteren Ebene der modernen Programmiersprache Python ein VM arbeitet, welche die Konzepte von Forth übernommen und stark erweitert hat.

Wer mal wissen will, wie so etwas in der Implementierung aussieht, kann sich die VM von Micropython anschauen:
https://github.com/micropython/micropython/blob/master/py/vm.c

#7961282
Lesenswert?

Christoph M. schrieb:

Nein, das ist schon die richtige Baustelle. Es ging mir darum aufzuzeigen, dass auf der unteren Ebene der modernen Programmiersprache Python ein VM arbeitet, welche die Konzepte von Forth übernommen und stark erweitert hat.

Es gibt auch hier im Hause ein Custom-Design, was Python-Bytecode direkt in Maschinensprache eine harten Stack-Maschine umsetzt - mit Einschraenkungen bei den Datentypen. Ist alles nicht sooo neu, das einzig 'heisse' daran ist, dass es auf dem FPGA wahlweise auf einer CPU oder als eigenstaendiger Hardware-Sequenzer ablaeuft und die Grenzen zwischen HW und SW komplett verschwimmen. Da liegt wohl die Zukunft.

Wenn es um akademischen Spass geht, wuerde ich vernuenftige OO nicht auf dem Level von Forth miteinander kombinieren wollen. Aber eine super-kompakte Implementierung von Display-Postscript in Forth-Bytecode haette durchaus Nerd-Faktor.

#7961917
Lesenswert?

Norbert schrieb:

Dazu haben die gar keine Zeit. Die werden dort festgebunden und mit hochgeklebten Augenliedern dazu gezwungen, in einer Endlosschleife deine Posts zu lesen.

Ich komme mit Komplimenten ja sowieso schon schlecht klar aber DAS ist wirklich das netteste was mir seit langem gesagt wurde. Mir wird ganz anders...

: Bearbeitet durch User
(Firma: Gast) #7961945
Lesenswert?

Cyblord -. schrieb:

Ich wette in der Hölle programmiert man grafische Anwendungen mit objektorientiertem Forth.

Ich erkläre es dir mal, wie man es einem kleinen Kind erklären müsste:

  1. Menschen haben Gehirn.
  2. Manche Hirne können die Forth Denke.
  3. Manche können die OO Denke. Soweit alles gut und schön!

Jetzt zur "Hölle": Es gibt Leute, welche zwar, dank hinreichend Hirn, programmieren können, aber nicht mit 2 und 3 klar kommen (wollen?). Für diese, muss OO-Forth die Hölle sein.

Andere, die 2 und 3 haben, können damit durchaus glücklich werden. Auch wenn dir das nicht schmeckt.

: Bearbeitet durch User
OP #7963284
Lesenswert?

von Axel S. (a-za-z0-9) 04.11.2025 09:55

Falsche Baustelle. Die OO macht der Compiler und nicht die Bytecode Ausführungsebene.

Bei genauerer Betrachtung ist das für die Python-Bytecodemaschine falsch: Dort sind alle Daten Objekte und die Operatoren sind polymorph, wie man mit Hilfe des Python-Byte-Code-Disassemblers sehen kann.

1
#!/usr/bin/env python3
2
import dis
3
def addstr(x):
4
   return x+" Joseph"
5
 
6
print(addstr("Franz"))
7

8
Franz Joseph
9

10
dis.dis(addstr)
11
  1           0 RESUME                   0
12

13
  2           2 LOAD_FAST                0 (x)
14
              4 LOAD_CONST               1 (' Joseph')
15
              6 BINARY_OP                0 (+)
16
             10 RETURN_VALUE
17
>>>
#7963369
Lesenswert?

Arduino F. schrieb:

Du weist schon, dass die genannte Hölle nur eine Projektion ist, oder?

Was wäre bei "oder" der Fall? Ich sage auch, dass es am Karma eines Fußballfans liegt, wenn er im Stadion war und seine Mannschaft mal wieder verloren hat - wenn er mal nicht da war, hat sie gewonnen. Das ist aber einfach nur ein blöder Spruch (eine meiner besonders ausgeprägten Fähigkeiten).

Moderator #7963378
Lesenswert?

Christoph M. schrieb:

Bei genauerer Betrachtung ist das für die Python-Bytecodemaschine falsch: Dort sind alle Daten Objekte und die Operatoren sind polymorph, wie man mit Hilfe des Python-Byte-Code-Disassemblers sehen kann.

Super, dann hast du jetzt ja dein Ziel erreicht:

  • Python-Bytecode erlaubt OOP.

  • Python-Bytecode erzeugt Forth-Feeling.

  • Das Ganze läuft auf dem von dir anvisierten Waveshare-RP2350-Board.

Alle deine Wünsche sind damit erfüllt, aber damit nicht genug:

  • Das GUI-Framework LVGL inkl. dem Treiber für das 0,96"-Display ist ready-to-use verfügbar.

  • Du hast Zugriff auf eine Vielzahl weiterer Python-Module.

Du musst nur noch beachten, das der MicroPython-Bytecode etwas anders aussieht als der gewöhnliche Python-Bytecode.

Bis heute Abend zeigst du uns sicher ein in MicroPython-Bytecode programmiertes "Hello World" auf dem Display.

Nächste Woche kommt dann die Killer-Applikation, die selbst den letzten Zweifler davon überzeugt, dass stackorientierte Programmierung in Verbindung mit OOP alles in den Schatten stellt, was es bisher an Programmiertechniken gab.

Ich bin gespannt:)

OP #7963470
Lesenswert?

Yalu X. (yalu) (Moderator) 08.11.2025 12:49

Bis heute Abend zeigst du uns sicher ein in MicroPython-Bytecode programmiertes "Hello World" auf dem Display.

Das strapaziert aber meine Lernkurve und ich bin mir nicht sicher, ob dich das glücklicher macht.

Bytecode

1
0000000 064d 1f00 0220 6818 6c65 6f6c 6159 756c
2
0000010 702e 0079 160f 434c 5f44 6930 636e 3968
3
0000020 0036 630c 6c6f 726f 0073 7408 6d69 0065
4
0000030 6608 6c69 006c 420a 414c 4b43 0e00 6964
5
0000040 7073 616c 0079 730a 656c 7065 1000 7266
6
0000050 6d61 6265 6675 0e00 5743 6972 6574 0072
7
0000060 770c 6972 6574 0072 6614 6572 7365 6e61
8
0000070 3273 0030 620c 6675 6566 0072 4626 6172
9
0000080 656d 7542 6666 7265 6957 6874 6953 657a
10
0000090 1600 7246 6d61 4265 6675 6566 0072 520c
11
00000a0 4247 3635 0035 7016 6972 746e 7473 6972
12
00000b0 676e 2300 770a 6469 6874 0c00 6568 6769
13
00000c0 7468 0600 636c 0064 6206 6675 0400 6266
14
00000d0 0600 7277 0069 2d2f 0b35 1382 2981 3582
15
00000e0 0308 2e30 0535 4812 6c65 6f6c 5920 6c61
16
00000f0 2075 2e58 3a20 292d 000a 4c8c 2e20 2601
17
0000100 4626 6b28 4720 2649 462c 472b 4525 6d46
18
0000110 5060 484a 8049 1b51 1602 8002 1b51 1603
19
0000120 8003 1b51 1604 1104 1402 3602 1600 1115
20
0000130 1415 1105 1303 3606 5901 1511 0714 0036
21
0000140 1159 1404 2308 3600 5901 5180 091b 0916
22
0000150 1080 2a0a 1b01 1c0b 160a 590a 5180 0c1b
23
0000160 0c16 1511 0514 0311 0613 0136 1159 1415
24
0000170 3607 5900 8122 1620 2213 5080 1416 1511
25
0000180 0d13 1616 3254 1000 110e 1309 340f 1603
26
0000190 110e 110e 1116 1113 1114 1309 3410 1604
27
00001a0 1117 110a 1117 340c 1602 1118 1417 8005
28
00001b0 0136 1159 1418 2311 3601 5901 1511 0714
29
00001c0 0036 5159 0163 3481 0708 880e 001a 1911
30
00001d0 1a16 0e10 1b16 20b0 0100 1216 63b0 8201
31
00001e0 da30 1604 1c12 0d1d 1413 801e 2e1b 1224
32
00001f0 251f b100 1215 b3b2 b5b4 0436 b359 18b1
33
0000200 b413 18b1 5114 0063
Angehängte Dateien:
#7963507
Lesenswert?

Cyblord -. schrieb:

Ich wette in der Hölle programmiert man grafische Anwendungen mit objektorientiertem Forth.

Kommt ein Programmierer in die Hölle, dort gibt es Sektempfang und jede Menge Partys. Fragt er erstaunt ist das wirklich die Hölle ? Aber klar doch und alles kostenlos. Nach ein paar Tagen bemerkt er das einige manchmal durch ein Loch am Ende der Hölle starren. Durch das Loch sieht er schreiende brennende Menschen die dort auf glühenden Kohlen herumspringen. Fragt er wieder jemand was dort los ist. Antwort: Das sind die Forth Programmierer, die brauchen das ;-)

Moderator #7963638
Lesenswert?

Christoph M. schrieb:

Bytecode

0000000 064d 1f00 0220 6818 6c65 6f6c 6159 756c ...

Wow, das ging ja schnell.

Du hast dich also innerhalb weniger Stunden in den MicroPython-Bytecode eingearbeitet und darin ein Programm geschrieben, das einen Text auf dem LCD ausgibt?

Nein, natürlich nicht.

Du hast basierend auf den Modulen LCD_0inch96, framebuf, writer, freesans20 usw. ein Python-Programm namens helloYalu.py geschrieben, dieses dieses durch den Compiler geschickt und von dessen Output einen Hexdump erstellt.

Die von dir propagierte Forth- bzw. Forth-ähnliche Programmierung, die ja prinzipiell mit MicroPython-Bytecode möglich ist, scheint wohl doch nicht so der große Bringer zu sein. Stattdessen lässt du dir den stackorientierten Code lieber automatisch generieren, nämlich vom Python-Compiler.

Das haben viele Leute vor dir auch schon erkannt, deswegen verwenden sie gleich Python und freuen sich, nicht mit der UPN-Programmierung auf Bytecode-Ebene in Berührung zu kommen :)

#7963654
Lesenswert?

Christoph M. schrieb:

Ich meine gehört zu haben, dass die Nextion-Display auch mit einem speziellen Forth-Prozessor ( J1 ) laufen.

Diesen "speziellen" Prozessor kannst Du auch selber probieren: https://github.com/jamesbowman/swapforth/tree/master/j1a

Dabei ist J1a schon ein kleines System mit UART & Timer um die eigentliche CPU. Als Forth wird SwapForth eingesetzt. Es gibt auch eine Variante die für Mecrisp Forth von Matthias Koch angepasst ist. Nennt sich Mecrisp-Ice (https://mecrisp.sourceforge.net/#fpga) und liegt auf https://sourceforge.net/projects/mecrisp/files/

Viel Spass

/regards

OP #7964074
Lesenswert?

Yalu X.

Du hast basierend auf den Modulen LCD_0inch96, framebuf, writer, freesans20 usw. ein Python-Programm namens helloYalu.py geschrieben, dieses dieses durch den Compiler geschickt und von dessen Output einen Hexdump erstellt.

Gratulation ;-)

Bleibt die spannende Frage, wie habe ich es erzeugt und kann man es de-compilieren und den Quellcode wieder herstellen.

OP #7964076
Lesenswert?

Andreas H. (ahz) 09.11.2025 02:23

Diesen "speziellen" Prozessor kannst Du auch selber probieren: https://github.com/jamesbowman/swapforth/tree/master/j1a

Danke für den Link.
In den Anfängen der J1 gab es ein Paper und ein Forth-System dazu. Weil das Konzept aus einem minimalen Befehlssatz mit minimalen Hardwareresourcen ein ganzes System aufzubauen so elegant ist, hatte ich mir dieses als Vorlage für eine eigen VM genommen und den passenden Forth Compiler dazu gebaut, um ein wenig mit optimierten Befehlssätzen zu spielen.
Es gab damals den Hinweis, dass die J1 im Nextion-Display eingebaut ist, aber so richtig glauben konnte ich das nicht, da ja Forth doch eine bestimmte spezialisierte Expertise erfordert.
Mit dem Hinweis von Lotta zu Postscript wird der Zusammenhang aber klarer: Traditionell war Forth über Postscript wohl immer schon mit graphischen Anwendungen verknüpft. Da lag der Gedanke bei Nextion wohl nahe, eine Forth-CPU für ihre Displays zu verwenden.
Die Entwicklung eines eigenen Silizium im Consumer-Markt lohnt sich eigentlich nur, wenn man Absatzzahlen im Millionenstückbereich erwartet. Die J1 bietet hier minimale Chipfläche und maximale Codedichte und keine Lizenzkosten. Heutzutage würde man vielleicht Richtung RISC-V tendieren, allerdings dürfte es schwierig werden, mit einem vom C-Compiler erzeugten RISC-V Code die selbe Dichte zu erreichen.

: Bearbeitet durch User
#7964106
Lesenswert?

Christoph M. schrieb:

Die Entwicklung eines eigenen Silizium im Consumer-Markt lohnt sich eigentlich nur, wenn man Absatzzahlen im Millionenstückbereich erwartet. Die J1 bietet hier minimale Chipfläche und maximale Codedichte und keine Lizenzkosten. Heutzutage würde man vielleicht Richtung RISC-V tendieren, allerdings dürfte es schwierig werden, mit einem vom C-Compiler erzeugten RISC-V Code die selbe Dichte zu erreichen.

Man muss das Silizium ja nicht direkt entwickeln. Auch in Handies fanden sich schon FPGAs... (Stichwort Consumer). Die Code-Dichte von RISC-V 32c ist eigentlich nicht so uebel, aber grundsaetzlich krankt die Architektur daran, dass man nicht so richtig von der MIPS-Schule weggekommen ist. Bei der Siliziumdichte sieht's dann verglichen mit Stackmaschinen mies aus.

Der Punkt ist halt schlussendlich in der klassischen embedded Entwicklung der: GCC oder nicht GCC (oder dito LLVM). GCC ist aber klar auf Registermaschinen ausgelegt und 'kennt' die Forth-Denke nicht. Also bleibt praktisch gesehen Forth nur noch allenfalls fuer paralleles Multiprozessing in einer gewissen Nische uebrig, wo man mit C sowieso nicht weiterkommt, resp. sich der Standard (Safety) nach minimierter Logik richtet.

Da man aus Python aber so ziemlich alles zwischen Hardware bis Stack-Maschinencode generieren kann, und die OO da eigentlich ziemlich vorbildlich funktioniert, stellt sich schon die Frage fuers Engineering: Warum Forth, wenn es einen gut lesbaren de-fakto Standard gibt.

OP #7964306
Lesenswert?

Kennt sich jemand mit Postscript aus?

Bei Linux kann man einfach das *.ps File anklicken und es wird automatisch dargestellt. Wenn man es editiert, wird das geöffnete Bild auch jeweils sofort aktualisiert.

Da das Display aber nur 160x80 Zeichen hat und die Seite aber eher so was wie ein DIN-A4 Format hat, wird das Bild nur im unteren linken Eck dargestellt ( siehe Anhang ). Besser wäre es, wenn die Postscriptseite das gleiche Format wie das Display hätte. Kann man das einstellen?

1
%!PS
2

3
0 0 0 setrgbcolor     % Set color to black
4
0 0 160 80 rectfill   % Draw a filled rectangle covering the page
5

6
1 1 1 setrgbcolor
7
newpath               % Start a new path
8
0 0 moveto            % Move to the start point (x=100, y=100)
9
100 80 lineto         % Draw a line to the end point (x=200, y=200)
10
stroke                % Actually draw the line
11

12
1 0 0 setrgbcolor
13
newpath 10 60 moveto 100 60 lineto stroke
14

15
0 1 0 setrgbcolor
16
newpath 10 50 moveto 100 50 lineto stroke
17

18
0 0 1 setrgbcolor
19
newpath 10 40 moveto 100 40 lineto stroke
20

21
showpage          % Finish the page
Angehängte Dateien:
: Bearbeitet durch User
#7964319
Lesenswert?

Christoph M. schrieb:

Die Entwicklung eines eigenen Silizium im Consumer-Markt lohnt sich eigentlich nur, wenn man Absatzzahlen im Millionenstückbereich erwartet.

Wie immer im ASIC Markt. Unter 1 Mio Stück/Jahr redet da kein ernstzunehmender Fabber mit Dir.

Die J1 bietet hier minimale Chipfläche und maximale Codedichte und keine Lizenzkosten.

Und zusammen mit der Möglichkeit zur interaktiven Entwicklung macht es das insbesondere für FPGAs interessant.

Martin S. schrieb:

Die Code-Dichte von RISC-V 32c ist eigentlich nicht so uebel, aber grundsaetzlich krankt die Architektur daran, dass man nicht so richtig von der MIPS-Schule weggekommen ist.

Was wirklich überraschend ist. Man könnte ja fast vermuten, dass sich David Patterson (RISC-V) und John Hennessy (MIPS) da mal unterhalten haben. Vielleicht als sie das "Quasistandardwerk" über Computer-Architecure (https://www.amazon.de/-/en/Computer-Architecture-Quantitative-Approach-Kaufmann-dp-0443154066/dp/0443154066) geschrieben hatten?

Da man aus Python aber so ziemlich alles zwischen Hardware bis Stack-Maschinencode generieren kann, und die OO da eigentlich ziemlich vorbildlich funktioniert, stellt sich schon die Frage fuers Engineering: Warum Forth, wenn es einen gut lesbaren de-fakto Standard gibt.

"Da man aus Scala(*) aber so ziemlich alles zwischen Hardware bis Stack-Maschinencode generieren kann, und die OO da eigentlich ziemlich vorbildlich funktioniert, stellt sich schon die Frage fuers Engineering: Warum Python, wenn es einen gut lesbaren de-fakto Standard gibt."

Oder mit anderen Worten: Man kann sowas mit praktisch jeder aktuellen Sprache bauen. Aber immer mit den jeweiligen Vor- und Nachteilen. Es ist also eine überflüssige Trivialdiskussion, oder?

/regards

(*) Siehe z.B. Chisel & Spinal-HDL als Scala DSLs für HW Entwicklung.

#7964323
Lesenswert?

Christoph M. schrieb:

Kennt sich jemand mit Postscript aus?

Als ich damit mal rumgespielt hatte war ich noch "jung und knusprig". Heute leider nur noch "und" :/

Iirc müsstest Du die Transformationsmatrix für das Outputmedium entsprechend anpassen. Aber ehrlich: Das war noch in einem früheren Leben ;)

Vielleicht hilft Dir das weiter: https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf

Apropos: Ist das ein Longan Nano Board? neidisch guck

/regards

#7964328
Lesenswert?

Christoph M. schrieb:

Besser wäre es, wenn die Postscriptseite das gleiche Format wie das Display hätte. Kann man das einstellen?

so ähnlich...

1
 %!PS
2
 0 0 0 setrgbcolor     % Set color to black
3
 72 25.4 div dup scale % ab hier gelten mm, 160mm breit ist schon fast A4
4
                       % man könnte x und y unterschiedlich skalieren,
5
                       % falls die LCD-Pixel nicht quadratisch sind
6
 20 200 transform      % ganz grob zentrieren
7
% 90 rotate  % dreht das Bild irgendwie, ich muss immer 3 mal probieren
8
 0 0 160 80 rectfill   % Draw a filled rectangle covering the page
: Bearbeitet durch User
#7964393
Lesenswert?

Christoph M. schrieb:

Kennt sich jemand mit Postscript aus?

Ist schon ein paar Jährchen her, aber ...

Unter Linux nutzt man ja üblicherweise ghostscript, und da kann man für den X11-Treiber problemlos Auflösung (PS rechnet per default mit 72dpi) und Größe des Ausgabegeräts (das X11 window) einstellen:

gs -q -g160x80 -r72 whatever.ps

: Bearbeitet durch User
OP #7964415
Lesenswert?

Danke für eure Antworten. Da muss ich mich erst mal ein wenig damit beschäftigen.

Andreas H. (ahz) 10.11.2025 15:42

Apropos: Ist das ein Longan Nano Board? neidisch guck

Es ist nur ein PiPico2 Board. Aber ziemlich flott: im wesentlichen ein Dual Core ARM-Cortex33.
Aber ich finde es trotzdem recht nett. Mein ursprüngliche Idee war ein kleines Platinenoszi und Voltmeter damit zu machen, welches ich an die Experimentierplatinen klemmen kann. Das Board kriegst du unter anderem bei berry-base: https://www.berrybase.de/waveshare-rp2350-lcd-0.96-mikrocontroller-0.96-lcd-arm-risc-v-26-gpio-4mb-flash-mit-header

: Bearbeitet durch User
OP #7964430
Lesenswert?

Bauform B. (bauformb)

so ähnlich...

1
 %!PS
2
 0 0 0 setrgbcolor     % Set color to black
3
 72 25.4 div dup scale % ab hier gelten mm, 160mm breit ist schon fast A4
4
                       % man könnte x und y unterschiedlich skalieren,
5
                       % falls die LCD-Pixel nicht quadratisch sind
6
 20 200 transform      % ganz grob zentrieren
7
% 90 rotate  % dreht das Bild irgendwie, ich muss immer 3 mal probieren
8
 0 0 160 80 rectfill   % Draw a filled rectangle covering the page

Das skalieren geht, transform und rotate aber nicht. Könnte aber am

1
Dokumentenbetrachter
2
46.3.1
3
Evince ist ein einfacher Dokumentenbetrachter für GNOME

liegen.

Angehängte Dateien:
: Bearbeitet durch User
Moderator #7964509
Lesenswert?

Christoph M. schrieb:

Ich habe es oben im Script eingetragen, aber es bleibt gleich groß. Liegt es eventuell am im Ubuntu eingebauten Postscript?

Evince scheint

1
<</PageSize [160 80] >> setpagedevice

zu ignorieren. Wenn man die Datei vorher mit ps2pdf in PDF konvertiert, wird die PageSize aber richtig übernommen.

1
$ ps2pdf line.ps
2
$ evince line.pdf

Man kann auch versuchen, die Größe mit einem DSC-Kommentar festzulegen:

1
%%BoundingBox: 0 0 160 80

Das funktioniert mit Evince, wird aber von ps2pdf ignoriert.

Natürlich kannst du auch beide Möglichkeiten kombinieren:

1
%%BoundingBox: 0 0 160 80
2
<</PageSize [160 80] >> setpagedevice

Das funktioniert dann mit Evince /und/ ps2pdf :)

#7964530
Lesenswert?

Andreas H. schrieb:

Oder mit anderen Worten: Man kann sowas mit praktisch jeder aktuellen Sprache bauen. Aber immer mit den jeweiligen Vor- und Nachteilen. Es ist also eine überflüssige Trivialdiskussion, oder?

Nicht ganz, wenn man sich mit der Semantik und Transpilationsdetails naeher beschaeftigt. Da gibt es ein paar Aspekte, die bisher nur mit Python sauber/effizient funktionieren, insbesondere wenn es in die Co-Verifikation (gegen bestehende Algorithmen) geht. Aber das ist eine andere Geschichte.

Christoph M. schrieb:

Apropos: Gibt es eine für Python optimierte FPGA-CPU?

Ja. Aber liegt hier eher als Proof of Concept. Im Endeffekt wird die zugrundeliegende Stackmaschine dann doch in C programmiert, oder gleich ein Hardware-Sequencer in HDL generiert.

OP #7965059
Lesenswert?

Andreas H. (ahz) 10.11.2025 20:30

https://www.berrybase.de/waveshare-rp2350-lcd-0.96-mikrocontroller-0.96->>lcd-arm-risc-v-26-gpio-4mb-flash-mit-header
Danke für den Link. Ist schon bestellt :)

Es ist auf jeden Fall ein nettes Display und da ja bald Weihnachten ist, hast du wahrscheinlich Glück und es kommt noch vor dem Post-Geschenke-Stau durch.
In welcher Programmiersprache willst du es programmieren? Micropython scheint mir mittlerweile ziemlich geeignet.
Wenn sich mehr Leute dafür interessieren, könnte man einen Micropython Thread speziell für dieses Display aufmachen.

#7967655
Lesenswert?

Christoph M. schrieb:

https://www.waveshare.com/wiki/Pico-LCD-0.96

Wenn Du Dir da an den LVGL Demos gefallen findest (nice Toolkit btw.) dann wundere Dich nicht wenn Du da Probleme beim experimentieren kriegst.

Aktuell hat das LVGL Image bereits die Version 9.4 eingebaut. Der Link zur Doku ist aber immer noch für Version 8. Und von 8 --> 9 hat sich einiges geämdert. Insbesondere sind einige Set-fct jetzt nicht mehr für die einzelnen Widgets direkt verfügbar, sondern werden über Styles gesetzt.

Aktuelle Doku findest Du auf https://docs.lvgl.io/9.2/integration/bindings/micropython.html in LVGL_Library.pdf.

/Regards

P.S: Ach ja: Du merkst: Mein Board ist angekommen ;)

OP #7967818
Lesenswert?

Andreas H. schrieb:

Aktuelle Doku findest Du auf https://docs.lvgl.io/9.2/integration/bindings/micropython.html in LVGL_Library.pdf.

Das ist ein sehr interessanter Link. Ich wusste nicht, dass es Micropython mit LVGL Integration gibt.
Bis jetzt habe ich nur die Nano-Gui gefunden, die einige ziemlich einfach aussehende Anzeigeelemente bietet:
https://github.com/peterhinch/micropython-nano-gui
Die scheinen aber hauptsächlich für monchrome E-Paper-Displays gut geeignet, wo LVGL eher schwierig sein dürfte.

Es gibt ja sogar einen Onlinesimulator für LVGL:
https://sim.lvgl.io/v9.0/micropython/ports/webassembly/index.html

Wenn es jetzt ein uf2-File mit LVGL für unser Displayboard gibt, wäre das perfekt. Dann könnte man es ohne großen Intallationsaufwand einfach flashen.
Für das Cheap Yellow Display gibt es so was:
https://github.com/de-dh/ESP32-Cheap-Yellow-Display-Micropython-LVGL

Wie hast Du LVGL installiert? Was waren die Schwierigkeiten?

: Bearbeitet durch User
#7969021
Lesenswert?

Christoph M. schrieb:

Wie hast Du LVGL installiert? Was waren die Schwierigkeiten?

War mehr als trivial. Für das Display auf dem 0.96 LCD Pico 2 bietet Waveshare ja direkt eine LVGL Demo an (findest Du auf der Website). In diesem ZIP sind bereits vorkonfigurierte .uf2's für c/C++ & MicroPython enthalten.

So wie es aktuell aussieht sind die Driver für die anderen WaveShare Displays (und da gibt es ja einige) auch enthalten. Da die Anzahl der "üblichen" Displaycontroller ja überschaubar ist ist es wahrscheinlich, dass Dein Display da schon verfügbar ist.

Ansonsten findest Du auch sehr leicht wie man neue Controller ansteuert. Die "normale" Methode (wie meist): Du pinselst in einen Framebuffer (je nach Controller intern oder im Pico) und "blittest" es dann in das sichtbare Displayarea.

Ich kann da evtl demnächst mehr berichten, wenn es Dich interessiert. Dann habe ich da ein paar Displays ausprobiert. Auch mit Touch, was LVGL dann gleich miterledigt.

/regards

P.S: Das Micropython habe ich auch probiert. Es ist weniger ätzend wie ich vermutet hatte ;)

OP #7969091
Lesenswert?

Andreas H. schrieb:

War mehr als trivial. Für das Display auf dem 0.96 LCD Pico 2 bietet Waveshare ja direkt eine LVGL Demo an (findest Du auf der Website). In diesem ZIP sind bereits vorkonfigurierte .uf2's für c/C++ & MicroPython enthalten.

Danke für den Hinweis. Irgendwie muss es da wohl verschiedene geben. In meiner Version war meines Wissens nach kein LVGL im Micropython. Vielleicht könntest du den Download-Link posten und wenn es ein kurzes Microypthon LVGL "hello world" gibt wäre es für mich auch sehr hilfreich.

Andreas H. schrieb:

Ich kann da evtl demnächst mehr berichten, wenn es Dich interessiert.

Ich bin äußerst gespannt auf deine Ergebnisse und freue mich, wenn du sie teilst.

Andreas H. schrieb:

P.S: Das Micropython habe ich auch probiert. Es ist weniger ätzend wie ich vermutet hatte ;)

Ja, es wird nach über 10 Jahre vermutlich langsam erwachsen und es wird immer mehr auch professionell verwendet. Ich meine gelesen zu haben, dass es mittlerweile sogar schon in einem Satellit läuft.
Man kann es auch relativ leicht selbst compilieren (die make files laufen recht gut auf Ubuntu) und gleich eigene Python Scripts (mit mpy-cross) mit ins uf2 File packen.

#7969400
Lesenswert?

Christoph M. schrieb:

Vielleicht könntest du den Download-Link posten und wenn es ein kurzes Microypthon LVGL "hello world" gibt wäre es für mich auch sehr hilfreich.

Der Link ist auf der Wikiseite von denen "gut versteckt": https://files.waveshare.com/wiki/RP2350-LCD-0.96/RP2350-LCD-0.96-LVGL.zip

Da ist auch eine Python demo dabei, die auf dem 0.96" LCD aber nur ein Icon anzeigt.

Versuch das mal :)

/regards

OP #7969423
Lesenswert?

Andreas H. schrieb:

Der Link ist auf der Wikiseite von denen "gut versteckt": https://files.waveshare.com/wiki/RP2350-LCD-0.96/RP2350-LCD-0.96-LVGL.zip

Danke, das hilft weiter. Ich hatte ein anderes Repo, in dem das LVGL uf2 nicht drinn war. Wie man sieht, läuft es, aber es gibt im Foto Punkteffekte, die man mit den Augen nicht sieht. Das Programm läuft einmal durch und zeigt den Button an, aber beim zweiten Mal stürzt es ab. Ich vermute, man muss das Display vorher schließen.

1
#!/usr/bin/env python3
2
import machine
3
from machine import Pin, PWM
4
from LCD_0in96 import LCD_0in96
5
from QMI8658 import QMI8658
6
from LVGL import LVGL
7

8
machine.freq(230_000_000)
9
    
10
if __name__=='__main__':
11
    
12
    print("LCD_0in96_LVGL_test Demo")
13
    # Init LCD
14
    LCD = LCD_0in96()
15
    LCD.set_bl_pwm(65535 * 60 // 100)
16
    print("Init LCD done")
17
    
18
    # Init LVGL
19
    LVGL(LCD=LCD)
20
    print("Init LVGL done")
21
    
22
    #import display_driver
23
    import lvgl as lv
24

25
    # Create a button with a label
26
    scr = lv.obj()
27
    btn = lv.button(scr)
28
    btn.align(lv.ALIGN.CENTER, 0, 0)
29
    label = lv.label(btn)
30
    label.set_text('Hello MC-Net :-)')
31
    lv.screen_load(scr)
Angehängte Dateien:
OP #7969691
Lesenswert?

Harald K. schrieb:

Das ist Python. Geht es in diesem Thread nicht eigentlich um Forth?

So war es geplant. Aber da es hier ja eher weniger Forth-Liebhaber dafür aber umso mehr Nörgler gibt (siehe der Anfang dieses Threads) bin ich mal auf Micropython umgestiegen.

Für das Beispiel hier
Beitrag "Re: Object Oriented Forth"
habe ich mir einen Postscript Interpreter (der auf dem Display läuft gebastelt), was ja Variante von Forth ist.

Vielleicht hat ja jemand Lust, einen echten Forth-Interpreter auf dem Display laufen zu lassen.

: Bearbeitet durch User
#7970100
Lesenswert?

Harald K. schrieb:

Das ist Python. Geht es in diesem Thread nicht eigentlich um Forth?

Mea culpa. Da hast Du völlig recht. Vielleicht mag Christoph M. ja einen eigenen Faden für Pico 2 & Micropython aufmachen. Das Problem mit dem LVGL restart konnte ich inzwischen nachvollziehen.

Norbert schrieb:

: genantwort s" Recht!" s" absolut" s" du" s" hast" s" Da" ;

Coole Idee :)

Wieso eigentlich s" und nicht s" ? In den Worten ist doch keine einzige Escapesequenz. Übersehe ich da was?

/regards

#7970185
Lesenswert?

Alexander S. schrieb:

"antwort zeige" wäre doch eher FORTH-typisch.

Ein durchaus valider Einwand gegen den ich kaum argumentieren kann. Bestenfalls dass ich diesbezüglich schon ein wenig eingerostet bin und deshalb die schlichte Eleganz nicht mehr wertzuschätzen weiß.

1
#! /usr/bin/gforth
2
( vim: fileencoding=utf-8: ts=4: sw=4: expandtab: )
3
: fibonacci
4
    0 1 rot 0 do dup rot + dup . loop cr 2drop ;
5
25 fibonacci bye
: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren