Forum: Mikrocontroller und Digitale Elektronik Hardware Programmierung mit Python


von Peter (Gast)


Lesenswert?

Hallo!

Ich lesen immer öfter von Projekten wo Python für Hardware 
Programmierung genutzt wird.
Soweit ich weiß ist C/C++ sehr Hardware nah und im Bereich der Hardware 
Programmierung am weitesten verbreitet, aber was hält ihr von Python im 
Bereich der Hardware Programmierung? Kann es eine Alternative zu C/C++ 
sein? Ist der Code mit Python auch so effizient und schnell wie mit den 
C's?

Ich freue mich auf eure Antworten!

von Stefan F. (Gast)


Lesenswert?

Wie schnell Python Programme laufen, hängt sehr stark von der 
Laufzeitumgebung ab. PC's haben genug Power, um die Scripte zur Laufzeit 
in nativen Code zu übersetzen (JIT). Auf Mikrocontrollern wirst du 
jedoch meistens einen Script-Interpreter haben, der erheblich langsamer 
arbeitet. Ich schätze mal um Faktor 10.

Doch selbst mit JIT übersetzte Python Scripte laufen noch deutlich 
langsamer als C/C++. Hier muss man allerdings sagen, dass ein schlecht 
gemachter Algorithmus noch viel mehr Performanceverlust kosten kann.

Zeitkritische Sachen werden oft als C Bibliothek programmiert und dann 
als Modul in Python Scripte eingebunden.

Also: Ja, Python ist eine erst zu nehmende Alternative auf den "großen" 
Mikrocontrollern. Auf dem ESP8266 läuft ein Python Interpreter so gerade 
eben mit eingeschränktem Funktionsumfang. Auf einem Arduion Uno wird 
Python hingegen niemals laufen können.

Schau dir mal die Produkte von Makeblock an. Einige kann man in Arduino 
C/C++ programmieren und einige in Python. z.B. der Codey 
(http://stefanfrings.de/codey/index.html).

von Fitzebutze (Gast)


Lesenswert?

Es gibt noch einige Ansätze:
- Python-Prozessoren (eingeschränktes Python, was in Maschinencode 
übersetzt)
- micropython
- Python als HDL, da ist es allerdings meist Beschreibung einer 
synchronen Funktionalität als Programmieren und am Schluss kommt ein 
FPGA- oder Chip-Design bei raus

Man kann auch aus Python heraus sehr effizienten Code generieren (google 
Stephen Diehl, llvm), der dann auf einem uC läuft.

Ist aber alles recht spezialisierte Technologie.

von Stephan (Gast)


Lesenswert?

Wenn Du nicht der Freitagstroll bist:
Gegenfrage: Warum?
Was hat Python, dass da viele so drauf anspringen? Was bietet Python, 
was C/C++ (insb. auf uC!) nicht bietet oder besser kann?
Der Leser ahnt es schon: ich mag Python nicht (auch nicht auf Non-uC).
Unklares Speichermanagement, unklare typen, wer denkt sich Einrückungen 
als Spracheigenschaft aus …

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich habe Python auf dem Raspi benutzt, mit PIGPIO. Wirklich 
zeitkritisches geht damit nicht, soweit ich es probiert habe. Aber 
vielleicht läßt es sich auch noch optimieren.
https://github.com/joan2937/pigpio
http://abyz.me.uk/rpi/pigpio/python.html

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stephan schrieb:
> Was hat Python, dass da viele so drauf anspringen?

Das haben die Jungs mit dem RPi angerichtet. Um möglichst wenig von der 
Hardware preiszugeben, haben sie das mit Python kaschiert.

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


Lesenswert?

Peter schrieb:
> Ich lesen immer öfter von Projekten wo Python für Hardware
> Programmierung genutzt wird.

"Hardware Programmierung" ist Unsinn. Alle Programme laufen am Ende auf 
irgendeiner Hardware. Was du wohl meinst ist hardwarenahe 
Programmierung. Im Gegensatz zur Programmierung inner- und unterhalb 
eines Betriebssystems.

> was hält ihr von Python im Bereich der Hardware Programmierung?
> Kann es eine Alternative zu C/C++ sein? Ist der Code mit Python
> auch so effizient und schnell wie mit den C's?

Die meisten Python-Implementierungen sind (Bytecode)-Interpreter. Es ist 
zwar denkbar, Python direkt im Maschinencode zu compilieren, aber in der 
Praxis wird es dann eher zu C oder JVM-Bytecode compiliert. Das und die 
dann erforderliche Laufzeitumgebung blähen den Code so sehr auf, daß nur 
große µC (die man eher SOC nennt - system on chip) wie z.B. Raspberry 
Pi überhaupt dafür geeignet sind. Die sind dann dank mehreren Hundert 
MHz Taktfrequenz auch schnell genug, um den Bloat nicht mehr spüren zu 
lassen.

Da der Trend immer mehr in diese Richtung geht (Ressourcenverbrauch 
spielt anscheinend keine Rolle mehr) werden auch Sprachen wie Python 
immer mehr hoffähig. Als hardwarenah würde ich das allerdings nicht 
bezeichnen.

von Stefan F. (Gast)


Lesenswert?

Stephan schrieb:
> Was hat Python, dass da viele so drauf anspringen?

Es ist anders dokumentiert, in einer Form die dem Nachwuchs offenbar 
besser gefällt.

Außerdem hat Python eine umfangreichere Standard Bibliothek, als C. 
Damit kann man viele coole Sachen "out of the Box" machen. Zum Beispiel 
ein Dokument von einem Webserver abrufen, irgend etwas heraus parsen und 
das dann per Email verschicken.

> wer denkt sich Einrückungen als Spracheigenschaft aus …

Ich finde das auch ganz schrecklich, habe aber bemerkt dass jüngere 
Leute das wesentlich lockerer sehen. Es hat aber auch eine gute Seite: 
Ich habe noch kein völlig unleserlich eingerücktes Python Script 
gesehen, denn das würde nicht funktionieren.

von Johannes S. (Gast)


Lesenswert?

Habe selber auch nur mit Python auf PC gearbeitet, aber wenn die 
Arbeitsfunktionen in C/C++ geschrieben sind, dann ist (Micro)Python als 
GlueLogic scheinbar ganz brauchbar, siehe z.B. Projekte wie

https://forum.lvgl.io/t/100-mhz-oscilloscope-with-raspberry-pi-pico-lvgl-v8-and-micropython/5669

Die µC können heute sehr viel in Hardwaredevices erledigen, das zu 
nutzen halte ich auch für besser als hochoptimierte, und dadurch 
unleserlicher/unwartbartbarer Code.

Die 'GlueLogic' kenne ich allerdings noch von MS Ansatz mit COM/DCOM, wo 
VB die GL für C++ Komponenten war. Man musste dann auch in beiden Welten 
fit sein um das zu beherrschen.

Und warum wird immer auf das Einrücken rumgeritten? Wenn man Code 
sowieso zur besseren Lesbarkeit formattiert, dann kann man Klammern oder 
gar begin; end; auch gleich weglassen. Ist nur eine Gewöhnungssache bis 
man die Strukturen genause schnell wie im C Code erkennt.

von Falk B. (falk)


Lesenswert?

Peter schrieb:
> Ist der Code mit Python auch so effizient und schnell wie mit den
> C's?

Da Python meistens (immer?) auf einem Interpreter läuft, ist es um 
Größenordnungen langsamer und braucht deutlich mehr Speicher und 
CPU-Leistung. Es ist eine Scriptsprache die sicher ihre Berechtigung und 
Anwendung hat, aber sicher nicht für hardwarenahe Programmierung von 
kleinen bis mittleren Mikrocontrollern.

von Tim  . (cpldcpu)


Lesenswert?

Circuitpython kennt ihr?

https://circuitpython.org/

bzw. das Original: https://micropython.org/

Aus performancetechnischer Sicht macht das nicht so viel Sinn. Aber ich 
behaupte mal, dass damit die Einstiegshürden für die MCUs sogar 
gegenüber Arduino noch einmal deutlich gesunken sind.

von Wühlhase (Gast)


Lesenswert?

Stephan schrieb:
> Gegenfrage: Warum?
> Was hat Python, dass da viele so drauf anspringen? Was bietet Python,
> was C/C++ (insb. auf uC!) nicht bietet oder besser kann?

Eigentlich ganz einfach: Python hatte am Anfang ein paar sehr einfache 
Möglichkeiten dabei, um sich Graphen, Diagramm, Verläufe u.ä. graphisch 
anzeigen zu lassen.
Dadurch wurde es in der Wissenschaft – wo kaum jemand ernsthaft 
programmieren kann, es aber dennoch häufig getan wird – rasch populär. 
Dadurch gab es für jeden Kleinkram schnell irgendeine vorgefertigte 
Bibliothek, und schon wurde die Sprache immer größer, bekannter, usw.

Und dann folgt halt irgendwann der nächste logische Schritt, den wir 
bisher z.B. auch schon von Arduino kennen:
Es wird ein einfaches System entwickelt für fachfremde Leute, die sich 
mit der Technik nicht näher auseinandersetzen müssen. Und am Ende bildet 
dieses System die Basis für Produkte, entwickelt von Leuten, die sich 
mit der Funktionsweise ihres Werkzeugs nicht mehr auseinandersetzen.

von Olaf (Gast)


Lesenswert?

> Ist der Code mit Python auch so effizient und schnell wie mit den
> C's?

Etwa Faktor 10 langsamer als C. Es ist damit ein Zeichen unserer Zeit, 
um
faul zu sein will man Energie verschwenden bis der Arzt kommt. Damit 
fuer ernsthafte Anwendung die letztlich bei Kunden landen sollen 
unbrauchbar da es sonst immer jemanden gibt der dasselbe billiger oder 
mit laengerer Akkulebensdauer hinbekommt.

Das eine Sprache die mit Einrueckungen arbeitet ein Schuss ins Hirn ist, 
ist natuerlich auch klar.

Ihre Berechtigung hat die vermutlich auf dem Level wo man frueher awk 
oder sed verwendet hat.

Olaf

von Stefan F. (Gast)


Lesenswert?

Odoo (https://www.odoo.com/de_DE) ist komplett in Python programmiert. 
Interessant finde ich, dass man damit überhaupt so große Projekte 
umsetzen kann. Es läuft aber auch rasch unerträglich lahm, sobald man 
eine ernsthafte Menge von Datensätzen angelegt hat. Wir (in der Firma) 
haben den Test deswegen abgebrochen und beschlossen, es nicht zu 
verkaufen (bzw. dafür zu entwickeln).

von Falk B. (falk)


Lesenswert?

Tim  . schrieb:
> Aus performancetechnischer Sicht macht das nicht so viel Sinn. Aber ich
> behaupte mal, dass damit die Einstiegshürden für die MCUs sogar
> gegenüber Arduino noch einmal deutlich gesunken sind.

Also negativ? D.h. man wird förmlich in die MCUs reingesaugt, je weniger 
man sich damit beschäftigt? ;-)

Mein Gott, selbst Arduino ist schon EXTREM einfach mit minimaler 
Einstiegshürde. Wie einfach soll's denn sonst noch werden? Soll man als 
Bergsteiger erstmal lieber Marathonläufer werden, damit die Berge nicht 
zu steil sind?

von Merker (Gast)


Lesenswert?

C an sich ist ein Schuss ins Hirn.
Wer tut sich solch einen Mist noch an? Es geht doch am Ende um 
Ergebnisse, welche mit Python oft deutlich schneller und besser erreicht 
werden als mit dem C -Murks.
Hardwareprogrammierung ist eine andere Kategorie, aber Python nur wegen 
der Einrückung schlecht zu reden finde ich unpassend.

von Falk B. (falk)


Lesenswert?

Axel S. schrieb:
> Als hardwarenah würde ich das allerdings nicht
> bezeichnen.

Naja, auch wird auf der Erde sind Alpha Centauri relativ nah, 
astronomisch gesehen ;-)

von Olaf (Gast)


Lesenswert?

> Mein Gott, selbst Arduino ist schon EXTREM einfach mit minimaler
> Einstiegshürde. Wie einfach soll's denn sonst noch werden?

Das leuchtet mir auch nicht ein. Warum muss etwas unbedingt maximal 
einfach sein? Es macht dann ja auch keinen Spass mehr wenn etwas zu 
einfach ist.

> Soll man als Bergsteiger erstmal lieber Marathonläufer werden,
> damit die Berge nicht zu steil sind?

Wir haben aber eher das uebertragene Problem das die Leute eine Seilbahn 
auf die Spitze wollen um sich dann weiter Bergsteiger zu nennen.

Wenn man aber weder seine Muskeln noch sein Gehirn benutzt weil alles so 
schoen einfach ist dann bildet sich das zurueck.

Olaf

von Nur_ein_Typ (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Odoo (https://www.odoo.com/de_DE) ist komplett in Python programmiert.
> Interessant finde ich, dass man damit überhaupt so große Projekte
> umsetzen kann. Es läuft aber auch rasch unerträglich lahm, sobald man
> eine ernsthafte Menge von Datensätzen angelegt hat. Wir (in der Firma)
> haben den Test deswegen abgebrochen und beschlossen, es nicht zu
> verkaufen (bzw. dafür zu entwickeln).

Entschuldige, aber ich kenne einige odoo-Installationen, und bei allen 
Fällen mit Performanceproblemen lag das Problem nicht etwa an Python, 
sondern vielmehr an der ungetunten Datenbank. Die Defaultkonfiguration 
von PostgreSQL ist sehr konservativ und auf Maschinen mit nur etwa 512 
MB Arbeitsspeicher ausgelegt...

von Nur_ein_Typ (Gast)


Lesenswert?

Olaf schrieb:
>> Mein Gott, selbst Arduino ist schon EXTREM einfach mit minimaler
>> Einstiegshürde. Wie einfach soll's denn sonst noch werden?
>
> Das leuchtet mir auch nicht ein. Warum muss etwas unbedingt maximal
> einfach sein? Es macht dann ja auch keinen Spass mehr wenn etwas zu
> einfach ist.

Manchmal geht es weniger um Spaß, sondern vielmehr um andere Dinge. 
Einfachheit bedeutet dann weniger Entwicklungskosten und eine kürzere 
Time-To-Market.

> Wenn man aber weder seine Muskeln noch sein Gehirn benutzt weil alles so
> schoen einfach ist dann bildet sich das zurueck.

Ich nehme an, Du sprichst aus Erfahrung?

Beitrag #6905710 wurde von einem Moderator gelöscht.
von Axel S. (a-za-z0-9)


Lesenswert?

Olaf schrieb:
>> Mein Gott, selbst Arduino ist schon EXTREM einfach mit minimaler
>> Einstiegshürde. Wie einfach soll's denn sonst noch werden?
>
> Das leuchtet mir auch nicht ein. Warum muss etwas unbedingt maximal
> einfach sein? Es macht dann ja auch keinen Spass mehr wenn etwas zu
> einfach ist.

Dazu ein Zitat von Einstein: "Ich bin sehr dafür, die Dinge zu 
vereinfachen. Aber nicht einfacher als nötig." (existiert in mehreren 
Varianten, weil er es auf Englisch gesagt hat)

Oder, mit mehr Bezug auf Programmiersprachen: "Einfache Dinge sollten 
einfach sein. Schwierige Dinge sollten machbar sein."

Arduino & Co. kümmern sich aber immer nur um das erste. Vor allem sind 
sie bereit für mehr Einfachheit bei ersterem Einbußen bei letzerem 
hinzunehmen. So kann man bei Arduino [1] zwar einfachst einen IO-Pin auf 
1 setzen, aber scheitert schon, wenn es zwei gleichzeitig sein sollen. 
Nun mag Arduino ein schlechtes Beispiel sein, weil es ja eigentlich nur 
eine Library ist, auf die man genausogut verzichten und es von Hand 
"richtig" machen kann. Nur stellt sich dann die Frage, wozu man Arduino 
(bzw. [1]) überhaupt braucht.


[1] eigentlich libwiring

von Florian S. (vatterger)


Lesenswert?

Auf die Performance wurde ja schon eingegangen.

Eine andere Sache ist die Sprache selbst: Python ist nicht dafür gemacht 
Speicher direkt anzusprechen, dafür fehlen AFAIK die entsprechenden 
Sprachkonstrukte. Das Problem daran ist, dass besonders Mikrocontroller 
darauf ausgerichtet sind, über Speicherzugriffe direkt angesteuert zu 
werden und auf Registerebene auch entsprechend einfach aufgebaut sind um 
das zu ermöglichen.

MicroPython bietet als Ersatz verschiedene Abstraktionen dafür an, z.B. 
SPI als Objekt mit write/read-Funktionen (Arduino-ähnlich) oder 
Inline-Sprachblöcke um C/Assembler-ähnliche Operationen ausführen zu 
können.

Ab einer gewissen Programmkomplexität oder bei strengen Anforderungen an 
das Timing macht es einfach keinen Sinn mehr MicroPython zu benutzen, 
denn der Großteil des Programms ist dann eh nicht mehr in idiomatischem 
Python geschrieben. Die anfängliche Obfuskation der Hardware und des 
Speichers durch die Abstraktionen macht das Ganze in so einer Situation 
eher komplexer.

von Stefan F. (Gast)


Lesenswert?

Axel S. schrieb:
> Arduino & Co. kümmern sich aber immer nur um das erste.

Weil die komplexeren Fälle bereits durch die zugrunde liegende 
Programmiersprache abgedeckt sind. Arduino wollte eben nicht das ganze 
Rad neu erfinden, sondern nur eine schicke Radkappe oben drauf setzen. 
Das haben sie gut gemacht, finde ich. Man darf nur nicht zu hohe 
Erwartungen in das System setzen.

Was Arduino fehlt ist ein anständiger Editor und Fehlermeldungen welche 
die Zielgruppe verstehen kann. Anstelle der Konsole-Ausgangen des gcc 
braucht die IDE einen lustig animierten Hund, der die fehlerhafte Stelle 
ankläfft. Dazu eine farbige Markierung, und eine Sprechblase mit 
internationalisiertem Text wie "Das hier sieht aus wie der Name einer 
Variable, aber die gibt es nicht. Prüfe, ob du ihren Namen richtig 
geschrieben hast". Oder: "Hier hast du wahrscheinlich ein Semikolon 
vergessen".

von Gilbert (Gast)


Lesenswert?

Peter schrieb:

> Ich freue mich auf eure Antworten!

W. Garbage Collection und wegen GIL ist das Timing komplett 
undeterministisch.

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


Lesenswert?

Stefan ⛄ F. schrieb:
> Anstelle der Konsole-Ausgangen des gcc
> braucht die IDE einen lustig animierten Hund,
> der die fehlerhafte Stelle ankläfft.

Als Satire nicht schlecht. Aber bitte besser als solche markieren!

von Olaf (Gast)


Lesenswert?

> Als Satire nicht schlecht. Aber bitte besser als solche markieren!

Warum? Es gab doch schonmal das Konzept mit mehr oder weniger vielen 
Bomben.

https://de.wikipedia.org/wiki/Bombe_(Fehlermeldung)

Olaf

von Roland F. (rhf)


Lesenswert?

Hallo,
Axel S. schrieb:
> Als Satire nicht schlecht. Aber bitte besser als solche markieren!

Wenn tatsächlich in der Zukunft, wie von einigen Politikern gefordert, 
alle Schüler Programmieren lernen sollen, wird man auf so was wohl nicht 
mehr verzichten können.

Und mal ganz ehrlich, wer hat nicht schon gerätselt was ihm bestimmte 
Fehlermeldungen sagen wollen.

rhf

von chris (Gast)


Lesenswert?

Stephan
>Was hat Python, dass da viele so drauf anspringen? Was bietet Python,
>was C/C++ (insb. auf uC!) nicht bietet oder besser kann?
>Der Leser ahnt es schon: ich mag Python nicht (auch nicht auf Non-uC).

Ich glaube, vor 30 Jahren gab es ein ganz ähnliche Diskussion, nur die 
Begriffe waren anders. In etwas so:

"Was hat C, dass da viele so drauf anspringen? Was bietet C,
was Assembler (insb. auf uC!) nicht bietet oder besser kann?"

Die Antwort auf die Frage erübrigt sich fast: Assembler ist immer noch 
schneller als C, wenn man wirklich die Feinheiten des 
Prozessorinstruktionssatzes nutzen will. Trotzdem programmiert kaum noch 
einer in Assembler.

Die KI-Welt jedenfalls spricht Python. Und das ist die Zukunft.

von Tim  . (cpldcpu)


Lesenswert?

chris schrieb:
> Die KI-Welt jedenfalls spricht Python. Und das ist die Zukunft.

**räusper**

https://www.rust-lang.org/

: Bearbeitet durch User
von Norbert (Gast)


Lesenswert?

Also ich habe vor einigen Tagen einen RP2040 mit Python programmiert.
500ksps, drei Kanäle Round-Robin, DMA, Oversampling, drei verschiedene 
Filtermechanismen.
Und auf dem zweiten Kern zwei Frequenzsteuerungen in Abhängigkeit der 
analogen Kanäle. Mit Kurvenanpassungen.
Hätte man natürlich auch in C++ programmieren können.
Hätte man natürlich auch in C programmieren können.
Hätte man natürlich auch in Assembler programmieren können.
Da hätte der RP2040 viel mehr idle-time gehabt…
… und mindestens ein, möglicherweise mehrere mA gespart.

von Roland F. (rhf)


Lesenswert?

Hallo,
Norbert schrieb:
> Hätte man natürlich auch in C++ programmieren können.
> Hätte man natürlich auch in C programmieren können.
> Hätte man natürlich auch in Assembler programmieren können.

Und warum hast du nicht?

rhf

von Nur_ein_Typ (Gast)


Lesenswert?

Roland F. schrieb:
> Hallo,
> Norbert schrieb:
>> Hätte man natürlich auch in C++ programmieren können.
>> Hätte man natürlich auch in C programmieren können.
>> Hätte man natürlich auch in Assembler programmieren können.
>
> Und warum hast du nicht?

Vielleicht weil er noch fertig werden wollte, bevor der allfällige 
Schnitter kommt.

von Rainer V. (a_zip)


Lesenswert?

Nachdem sowohl das geliebte XP geschwächelt hat und bei mehreren 
heftigen Chrashs auch mein VB6 komplett aus der Bahn geworfen hat, habe 
ich auf Ubuntu umgesattelt und als VB-Ersatz Phyton genommen. Einrücken 
ist ok!! Und OOP ist gut!! Jede Menge Funktionen. Relativ simple Grafik. 
Und hardwarenah ist relativ...Progrämmchen mit Soundsystem hat mir das 
ganze System so grundlegend zerschossen, dass ich echt bis in die 
niedere Festplattenformatierung runter mußte. War aber sicher auch mir 
als Anfänger geschuldet :-) C und Konsorten kommen mir nicht auf die 
Rechner und auf einen Controller schon gar nicht :-)
Gruß Rainer

von Olaf (Gast)


Lesenswert?

> … und mindestens ein, möglicherweise mehrere mA gespart.

Ja richtig. Das koennte dann bedeuten das man einen Controller eine 
Nummer kleiner nehmen kann, vielleicht reicht auch ploetzlich ein 
kleinererer Spannungregler, die Platine kann etwas keiner werden. Was 
auch immer, in Summe ist ein Produkt das effiziente programmiert werden 
kann billiger. Klar beim basteln zuhause fuer drei LEDs ist das egal, 
verkauf aber mal 1Million pro Jahr und das sieht auf einmal ganz anders 
aus. Ich kenne Anwendungen da hat man monatelang entwickelt um noch ein 
Milliampere einzusparen!

Olaf

von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

kleiner als ein Nano, dafür etwas mehr Power und Speicher, was will man 
weniger?

von Norbert (Gast)


Lesenswert?

Olaf schrieb:
>> … und mindestens ein, möglicherweise mehrere mA gespart.
>
> Ja richtig. Das koennte dann bedeuten das man einen Controller eine
> Nummer kleiner nehmen kann, vielleicht reicht auch ploetzlich ein
> kleinererer Spannungregler, die Platine kann etwas keiner werden. Was
> auch immer, in Summe ist ein Produkt das effiziente programmiert werden
> kann billiger. Klar beim basteln zuhause fuer drei LEDs ist das egal,
> verkauf aber mal 1Million pro Jahr und das sieht auf einmal ganz anders
> aus. Ich kenne Anwendungen da hat man monatelang entwickelt um noch ein
> Milliampere einzusparen!
>
> Olaf

Nun, zwischen Zuhause LED-Blinker basteln und eine Million Platinen gibt 
es noch feine Abstufungen. ;-)
Z.B. fünfzig, von denen - sagen wir mal - zehn im Testbetrieb laufen.

von udok (Gast)


Lesenswert?

Falk B. schrieb:
> Peter schrieb:
>> Ist der Code mit Python auch so effizient und schnell wie mit den
>> C's?
>
> Da Python meistens (immer?) auf einem Interpreter läuft, ist es um
> Größenordnungen langsamer und braucht deutlich mehr Speicher und
> CPU-Leistung. Es ist eine Scriptsprache die sicher ihre Berechtigung und
> Anwendung hat, aber sicher nicht für hardwarenahe Programmierung von
> kleinen bis mittleren Mikrocontrollern.

Wie wir vor kurzem hier gesehen haben:

Beitrag "Re: c++ Code langsam"

ist Python nicht immer langsamer als C oder C++.
Und das waren reine Skripte, keine compilierten Sachen.

Kein Wunder, Python baut ja auf optimierte C Bibliotheken auf.

Ein Neuling, der wenig Ahnung von Low-Level und Asm Programmierung hat, 
macht mit Python und auf den uC optimierten Bibliotheken bessere 
Programme als mit C++.
Zumindest wenn das Programm in den Speicher passt.

Und wenn dann das Testen einfach auf dem PC in einer simulierten
Umgebung geht, dann steigen auch die Profis um.

Die Zukunft gehört den Mikrocontrollern, die 1. lieferbar sind, und 2. 
ordentliche High-Level Bibliotheken haben.
Zumindest in Europa, wo nur noch hochpreisiges gemacht werden wird.

von Peter (Gast)


Lesenswert?

Genau dafür liebe ich dieses Forum!
Das ist eine der besten Fachdiskussionen die ich hier verfolgt habe!

Mein Fazit :
Für µC bzw hardwarenahe Programmierung sind C/C++ weiterhin unschlagbar, 
jedoch auch nur wenn man diese Sprachen gut beherrscht und weis was man 
macht.

Python bzw Circuit Python können auch auf bestimmte µC laufen, jedoch 
ist das eher was für fachfremde Anwender oder wenn man sich den Einstieg 
sehr sanft machen möchte.
Ansonsten bietet Python sehr viele Bibliotheken und Möglichkeiten, dinge 
einfach umzusetzen.

Vielen Dank an alle die sich beteiligt haben!

von Stefan F. (Gast)


Lesenswert?

Peter schrieb:
> jedoch auch nur wenn man diese Sprachen gut beherrscht und weis was man
> macht.

Das gilt für jede Programmiersprache. Ich kenne genug Sprachen, die 
endlich Deppensicher sein wollten, und es doch nicht sind.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Auch ich zähle zu der Fraktion, die C oder C++ für die Programmierung
von Mikrocontrollern bevorzugt. Allerdings verdamme ich Python auf µC
deswegen nicht, sondern verfolge lieber etwas dessen Entwicklung. Zwar
ist Python i.Allg. sehr viel langsamer als C, ich gehe aber davon aus,
dass in 90% der Mikrocontrolleranwendungen nur ein kleiner Bruchteil der
zur Verfügung stehenden Rechenleistung genutzt wird. Da die
Mikrocontroller immer schneller werden, wird dieser Bruchteil sogar
tendenziell immer kleiner. Für ungenutzte Taktzyklen bekommt man auch
keinGeld zurück.

Was also tun?

Auch bei Neuentwicklungen bewusst auf Klassiker wie den 8051 setzen, nur
um dessen Kapazitäten auch voll auszuschöpfen zu können? Auch dann, wenn
ein aktueller ARM nicht teurer oder sogar billiger ist? Das würde ich
nicht tun.

Eine IMHO sinnvolle Nutzung der freien Kapazitäten ist die Verarbeitung
von Messgrößen u.ä. (bspw in Regelalgorithmen) in FP. Damit entfällt das
bei Integerberechnungen oft erforderliche, aber fehlerträchtige Hin- und
Herskalieren zwischen den einzelnen Rechenschritten, und man kann in
realen physikalischen Einheiten rechnen, was viel übersichtlicher ist.

Wenn dann immer noch Rechenkapazität übrig bleibt, kann man sich weitere
Möglichkeiten überlegen, mit denen man auf Kosten von Taktzyklen die
Softwareentwicklung vereinfachen und den Code zuverlässiger machen kann.
Ob Python so eine Möglichkeit darstellt, sei mal dahingestellt, aber
kategorisch ausschließen würde ich es nicht.

Ressourcenverbrauch

Die Entwicklung von Python reicht in die Zeit zurück, als 286er- und
386er-PCs mit 1 MiB RAM Standard und die 486er gerade so im Kommen
waren. Heute hat selbst ein billiger Cortex-M0 deutlich mehr
Rechenleistung als die damaligen High-End-PCs (mit 486er), und auch die
RAM-Kapazität der Mikrocontroller geht teilweise schon in die MiB.
Python wurde so konzipiert, dass es auf diesen Rechnern problemlos
lauffähig war.

Angesichts der Tatsache, dass

- der µC normalerweise kein Betriebssystem hat,

- typischerweise nur eine einzige Anwendung läuft und

- mittlerweile relativ schlanke Python-Implementationen verfügbar sind,

kann davon ausgegangen werden, dass auf einem aktuellen, mittelgroßern
µC Python mindestens so gut läuft wie auf den PCs von damals. Natürlich
müssen für den konkreten Anwendungsfall immer die Vor- und Nachteile
abgewogen werden, deswegen würde ich Python weder generell empfehlen
noch generell davon abraten. Speziell auf batteriebetriebenen Geräten
würde ich kein Python einsetzen, bei einer Waschmaschinensteuerung
fallen mir spontan aber kaum Gegenargumente ein.

Was den Einsatz in kommerziellen Produkten betrifft: Der Endbenutzer
freut sich, wenn das Produkt funktioniert und wird kaum feststellen
können, ob die Firmware mit C, Arduino, Basic oder Python entwickelt
worden ist.

Noch etwas zum Thema Interpreter: Es hat sich in den letzten 10 bis 15
Jahren einiges bei der Generierung von Native-Code getan (s. bspw.
Cython und PyPy). Nicht alle Diskussionsteilnehmer hier scheinen
diesbezüglich auf dem aktuellen Stand zu sein ;-)

Auch MicroPython und dessen Fork CircuitPython bieten
dafür Unterstützung, sogar auf mehreren Ebenen:

- Default: klassisches Python mit Bytecode-Generierung

- Native: klassisches Python mit Native-Codegenerierung

- Viper: Python mit Type-Hints und Native-Codegenerierung

- Inline-Assembler: "Codegenerierung" durch den Programmierer

- Inline-PIO-Assembler: für die Programmable IOs des RP2040

Für jede Python-Funktion kann die jeweils am besten geeignete der
genannten 5 Codegenerierungsoptionen ausgewählt werden.

Ich habe mal ein wenig mit MicroPython und der Thonny-IDE auf einem RPi
Pico herumgespielt. Das Interessante dabei ist, dass man fast keinen
Unterschied spürt, ob die Programme auf dem PC oder auf dem µC laufen.
Man klickt auf den Run-Button in der IDE, und das Programm wird
praktisch sofort gestartet, ohne dass es vorher kompiliert oder geflasht
werden muss.

Man kann auf dem µC genauso wie auf dem PC in einer interaktiven Shell
Python-Anweisungen ausführen lassen. Das ist für den Einstieg in einen
neuen µC-Typ ganz praktisch, weil man damit erst einmal aller Features
einzeln und interaktiv ausprobieren kann, bevor man beginnt, daraus ein
ganzes Programm zu erstellen.

Auch zum Debuggen ist das ganz praktisch, weil man damit einzelne
Funktionen isoliert testen kann, ohne dass man dafür hundert kleine
Testprogramme schreiben, kompilieren und flashen muss. Darin
unterscheidet sich MicroPython auch klar von Arduino und den
einschlägigen BASICs, die diesen interaktiven Modus nicht haben.

Allerdings hat MicroPython auch (noch) einige Schwächen. Bspw. ist der
native-generierte Code für Funktionsaufrufe sehr langsam, und der
Inline-Assembler scheint bestimmte Kombinationen aus Registern und
Adressierungsarten nicht anzunehmen.

Ich gehe aber davon aus, dass diese Dinge irgendwann behoben werden. Bis
dahin bleibe ich dann einfach bei Arduino ;-)

von Norbert (Gast)


Lesenswert?

Yalu X. schrieb:
> Allerdings hat MicroPython auch (noch) einige Schwächen. Bspw. ist der
> native-generierte Code für Funktionsaufrufe sehr langsam, und der
> Inline-Assembler scheint bestimmte Kombinationen aus Registern und
> Adressierungsarten nicht anzunehmen.
Alles was er nicht kann, kann man sich mit dem data statement bauen:
1
data(2,0b_1011_1010_00_010_000)  # REV 
2
data(2,0b_1011_1010_01_010_000)  # REV16 
3
data(2,0b_1011_1010_11_010_000)  # REVSH
ARM v6-M Architecture Reference Manual hilft dabei.
Wollt's nur erwähnen… ;-)

Bzgl. call-Geschwindigkeit, interessant, da muss ich mal reinschauen.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Angehängte Dateien:

Lesenswert?

Eine kostenlose gescheite Entwicklungsumgebung (Comunnity Edition) für 
MicroPython ist z.B. pyCharm.

Benutze ich für den ESP8266.

https://www.jetbrains.com/de-de/pycharm/

Beitrag #6907065 wurde von einem Moderator gelöscht.
von Olaf (Gast)


Lesenswert?

> dass in 90% der Mikrocontrolleranwendungen nur ein kleiner Bruchteil der
> zur Verfügung stehenden Rechenleistung genutzt wird. Da die
> Mikrocontroller immer schneller werden, wird dieser Bruchteil sogar
> tendenziell immer kleiner. Für ungenutzte Taktzyklen bekommt man auch
> keinGeld zurück.

Das ist leider komplett falsch. Wenn mein Microcontroller 90% der Zeit
nichts zutun hat dann ist er 90% der Zeit im Sleepmode.

Dann reicht ploetzlich eine kleinere Batterie oder der Kunde bekommt 
eine 10x solange Laufzeit. Oder ich kann als Spannungregler einen LP2985 
anstatt eines Schaltregler verwenden. Also viele kleine Dinge die 
entweder den Wert fuer den Kunden erhoehen oder die Entwicklung 
preiswerter machen.

Klar es gibt sicher Ausnahmen wo es eher egal ist, aber das sind dann 
auch Ausnahmen. Im Mittel wird man Wert auf Effizienz legen oder immer 
zweiter am Markt sein.

Olaf

Beitrag #6907256 wurde von einem Moderator gelöscht.
von Olaf (Gast)


Lesenswert?

> Aber nur im Batteriebetrieb. Wenn nur Netzbetrieb vorgesehen ist, ergibt
> ein Sleepmode meiner Meinung nach bei den winzigen Leistungen absolut
> keinen Sinn.

Keineswegs. Denke z.B mal an 4-20mA Geraete. Oder an Sensoren die 
potentialfrei sind wo man jede Energie erstmal ueber eine Barriere 
schaffen muss. Oder an ATEX Geraete wo deine Energie begrenzt ist. Oder 
selbst sowas banales wie einen Fahrkartenautomat oder etwas aehnliches 
das mit einer Solarzelle funktionieren muss.

Olaf

Beitrag #6907287 wurde von einem Moderator gelöscht.
von Olaf (Gast)


Lesenswert?

> Solarzelle? Ich sprach von Netzbetrieb.

Und? Auch da kann es billiger sein wenn deine Schaltung mit 1mA laeuft
und du ein Kondensatornetzeil hast, oder einen Trafo verwenden musst
weil die Schaltung 10mA braucht.

Klar, es gibt Anwendungen wo das alles geht und der Stromverbrauch des
Controllers banane ist. Aber es gibt auch viele wo das nicht so ist
und fuer die musst du eine richtige Sprache koennen. Wenn du das aber
kannst, wieso sich dann noch mit sowas exotischen wie einer 
Interpretersprache abgeben?

Olaf

von otte (Gast)


Lesenswert?

Olaf schrieb:
> wieso sich dann noch mit sowas exotischen wie einer
> Interpretersprache abgeben?

Was bitteschön ist an einem Interpreter "exotisch" ?

Beitrag #6907485 wurde von einem Moderator gelöscht.
von Yalu X. (yalu) (Moderator)


Lesenswert?

Olaf schrieb:
>> dass in 90% der Mikrocontrolleranwendungen nur ein kleiner Bruchteil der
>> zur Verfügung stehenden Rechenleistung genutzt wird. Da die
>> Mikrocontroller immer schneller werden, wird dieser Bruchteil sogar
>> tendenziell immer kleiner. Für ungenutzte Taktzyklen bekommt man auch
>> keinGeld zurück.
>
> Das ist leider komplett falsch. Wenn mein Microcontroller 90% der Zeit
> nichts zutun hat dann ist er 90% der Zeit im Sleepmode.

Auch im Sleepmode verpufft die prinzipiell zur Verfügung stehende
Rechenleistung ungenutzt.

> Dann reicht ploetzlich eine kleinere Batterie oder der Kunde bekommt
> eine 10x solange Laufzeit.

Ja, deswegen habe ich ja oben geschrieben:

Yalu X. schrieb:
> Speziell auf batteriebetriebenen Geräten würde ich kein Python
> einsetzen, bei einer Waschmaschinensteuerung fallen mir spontan aber
> kaum Gegenargumente ein.

Olaf schrieb:
> Klar es gibt sicher Ausnahmen wo es eher egal ist, aber das sind dann
> auch Ausnahmen. Im Mittel wird man Wert auf Effizienz legen oder immer
> zweiter am Markt sein.

Man könnte jetzt darüber diskutieren, welche Gerätekategorie die
Ausnahme darstellt,

die batteriebetriebenen:

- Wetterstationen
- elektronische Küchen- und Personenwaagen
- Fahrradtachos
- elektronische Fieberthermometer, Blutdruckmessgeräte u.ä.
- ...

oder die netzbetriebenen:
- Waschmaschinen
- Spülmaschinen
- Mikrowellenherde
- Fernseher und andere Unterhaltungselektronik
  ...

Also bei mir im Haushalt überwiegen die netzbetriebenen Geräte ganz
klar, im industriellen Umfeld ist deren Anteil sogar noch deutlich
größer. Ein Großteil der Softwarekomponenten auf diesen Geräten ist
nicht sehr zeitkritisch. Wären sie in Python programmiert, würde
deswegen kein Mensch etwas davon merken.

> Im Mittel wird man Wert auf Effizienz legen oder immer zweiter am
> Markt sein.

Eine Waschmaschine wird wegen der von Python verursachten paar Milliwatt
Mehrverbrauch nicht in eine schlechtere Energieeffizienzklasse
abrutschen.

Auch bei batteriebetriebenen Geräten lohnt sich die verbrauchsoptimierte
Programmierung nur dann, wenn der Mikrocontroller einen wesentlichen
Anteil am Gesamtverbrauch hat.

Olaf schrieb:
> Wenn du das aber kannst, wieso sich dann noch mit sowas exotischen wie
> einer Interpretersprache abgeben?

Wie ich oben schon geschrieben habe, ist Python vorliegenden Kontext
i.Allg. keine Interpretersprache.

Aber wie ich oben schon geschrieben habe, programmiere ich selber
meine Mikrocontroller vorwiegend in C und nicht in Python. Ich wollte
nur aufzeigen, dass Python auf Mikrocontrollern dennoch nicht völlig
unsinnig ist, wie es hier von einigen dargestellt wird.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Klingt interessant. Sollte ich bald mal ausprobieren. Ich steh auch noch 
bei 8051 und PSoC5-LP.

Es ist eben alles eine Frage der Stückzahlen und der Arbeitsstunden, die 
man aufwenden muß, um eine gewünschte Funktionalität zu erreichen. Die 
Stunden sind bei Hobbyprojekten besonders teuer, denn sehr begrenzt 
verfügbar.

Ich hätte sogar eine konkrete Anwendung: Abfrage eines 
Netzbetreiberzählers und über einen Algorithmus einen bidirektionalen 
Boost/Buck-Konverter einen Akku betreiben, der an PV und Wechselrichter 
hängt.

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Mich hat mal interessiert, wie schnell man in MicroPython auf einem
RP2040 I/O machen kann. Dazu habe ich ein Programm geschrieben, das auf
verschiedene Weise 1.000.000-mal ein GPIO-Pin toggelt:

1. klassischer Python-Stil ohne Native-Kompilierung

2. wie (1), aber mit Native-Codegenerierung

3. wie (2), aber mit Type-Hint (Viper-Modus)

4. handoptimiert: direkter Registerzugriff über Pointer, keine
   Funktionsaufrufe, while- statt for-Schleife

5. mit Inline-Assembler

Ausgabe:

1
CPU-Frequenz: 133.00 MHz
2
3
Zeit für 1000000 Schleifendurchläufe:
4
5
Python        11106.14 ms
6
Native         6646.69 ms
7
Viper          5075.24 ms
8
Handoptimiert    67.71 ms
9
Assembler        30.16 ms

Wegen der 1E6 Schleifendurchläufe entsprechen die genannten Zahlenwerte
der Ausführungszeit von 1 Schleifendurchlauf in Nanosekunden gemessen.

Der handoptimierte Code ist natürlich nicht mehr sehr pythonic, aber in
diesem Stil wird man nur extrem zeitkritische Codeabschnitte schreiben.

: Bearbeitet durch Moderator
von Abdul K. (ehydra) Benutzerseite


Lesenswert?

4 ist dann in C, oder wie ist der Unterschied zwischen 4 und 5 zu 
erklären?

von Stefan F. (Gast)


Lesenswert?

Yalu X. schrieb:
> Der handoptimierte Code ist natürlich nicht mehr sehr pythonic, aber in
> diesem Stil wird man nur extrem zeitkritische Codeabschnitte schreiben.

Da siehst du mal, wie stark der Einfluss von Algorithmen ist. Oft macht 
das mehr aus, als die Programmiersprache.

von Walter K. (walter_k488)


Lesenswert?

Die Kurve der Python Euphorie wird den gleichen Verlauf nehmen, wie die 
seinerzeit von PERL.

Wer unsauberes Programmieren lernen will, beginnt mit Perl oder Python

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

otte schrieb:
> Olaf schrieb:
>> wieso sich dann noch mit sowas exotischen wie einer
>> Interpretersprache abgeben?
>
> Was bitteschön ist an einem Interpreter "exotisch" ?

Ich denke, das ist speziell auf µCs bezogen. Dort sind 
Interpretersprachen schon eher die Exoten.

von Olaf (Gast)


Lesenswert?

> Aber wie ich oben schon geschrieben habe, programmiere ich selber
> meine Mikrocontroller vorwiegend in C und nicht in Python. Ich wollte
> nur aufzeigen, dass Python auf Mikrocontrollern dennoch nicht völlig
> unsinnig ist, wie es hier von einigen dargestellt wird.

Ich bin da durchaus bei dir das es Anwendungen gibt wo man eine langsame 
Sprache wie Python sinnvoll einsetzen kann. Was ich aber, hoffentlich 
gelungen, darstellen kann das es eine Menge Anwendungen gibt wo das 
nicht der Fall ist. Fuer diese Anwendung ist es zwingend notwendig das 
du im Embedded Bereich C programmieren kannst. Wenn du das aber sowieso 
kannst, warum sich dann noch mit einer zweiten Sprache und ihren 
Problemen belasten?

> Also bei mir im Haushalt überwiegen die netzbetriebenen Geräte ganz
> klar, im industriellen Umfeld ist deren Anteil sogar noch deutlich
> größer.

Gerade im Industriebereich entspricht das nicht meiner Erfahrung. Da 
versucht man wo immer es geht mit 2-Leiter Geraeten auszukommen weil der 
Installationsaufwand fuer eine extra Versorgung meist teurer ist als das 
Geraet selber.

> man aufwenden muß, um eine gewünschte Funktionalität zu erreichen. Die
> Stunden sind bei Hobbyprojekten besonders teuer, denn sehr begrenzt
> verfügbar.

Bei Hobbyprojekten sind Stunden eigentlich negativ teuer weil du da ja 
aus Spass bastelst und du dankbar fuer jeder weitere Stunde bist. :-D


> Mich hat mal interessiert, wie schnell man in MicroPython auf einem
> RP2040 I/O machen kann. Dazu habe ich ein Programm geschrieben, das auf
> verschiedene Weise 1.000.000-mal ein GPIO-Pin toggelt:

Das halte ich fuer einen besonders schlechten Test. Bei allen 
Controllern mit mehr wie 20Mhz Taktfrequenz die ich kenne laeuft die IO 
in einer eigenen schnarchlahmen Taktdomain. Da kannst du den Pin auch 
mit zwei Assemblercommandos toggeln und es ist lahm im Vergleich zur 
Ausfuehrungszeit einer Funktion. Daher hat das keine besondere Aussage.

Wenn ich hier laester dann beziehe ich das erstmal darauf: .-)
https://hackaday.com/2021/11/18/c-is-the-greenest-programming-language/


Olaf

von Norbert (Gast)


Lesenswert?

Yalu X. schrieb:
> CPU-Frequenz: 133.00 MHz

Standard nach boot ist auf 125MHz gesetzt.
Übertakten - mehrere Stunden - auf deutlich über 270MHz kein Problem bei 
mehreren Exemplaren.
Mit PIO-Assembler kann man dann einen Port Pin mit 135MHz togglen.
Innerhalb der Spezifikation immerhin noch mit 66½ MHz.
Sieht auf meinem uralten 50MHz Analog Oszilloskop ›interessant‹ aus.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Norbert schrieb:
> Standard nach boot ist auf 125MHz gesetzt.

Ich habe die 133 MHz deswegen genommen, weil das laut Datenblatt die
Standardtaktfrequenz des RP2040 ist. Auch in den Specs des Pico sind die
133 Mhz angegeben. Für den Vergleich der verschiedenen Toggle-Methoden
spielt die Taktfrequenz ohnehin keine Rolle.

> Übertakten - mehrere Stunden - auf deutlich über 270MHz kein Problem bei
> mehreren Exemplaren.

Meiner ist bei 285 MHz ausgestiegen :) Bei 280 Mhz läuft er noch gut und
wird auch nur schwach lauwarm.

> Mit PIO-Assembler kann man dann einen Port Pin mit 135MHz togglen.

Mit einem Timer geht das wahrscheinlich ebenso, wobei die PIOs natürlich
merh Möglichkeiten bieten. Diese Frequenz erreicht man – zumindest als
kurzzeitigen Burst – auch in Python bei direktem Registerzugriff, indem
man mehrere Registerzugriffe ohne Schleife direkt hintereinander
schreibt.

Aber die PIOs sind eine schon feine Sache. Schnelles Bit-Gewackel würde
ich, wenn immer möglich, dorthin auslagern. Da das Füttern der PIOs mit
Daten auch per DMA erfolgen kann, hat die CPU fast nichts mehr zu tun
und damit alle Zeit der Welt, langsame Python-Programme auszuführen ;-)

Und auch die PIO-Programmierung wird ja von MicroPython dank des
PIO-Inline-Assembler gut unterstützt.

von Olaf (Gast)


Lesenswert?

> Aber die PIOs sind eine schon feine Sache. Schnelles Bit-Gewackel würde
> ich, wenn immer möglich, dorthin auslagern. Da das Füttern der PIOs mit

Das kommt zwar vom Thema ab, aber da wuerde ich auch zustimmen. Sowas 
kenne ich noch von vor 20Jahren von der TPU im 68332. Ich hab mich immer 
gewundert das sich das nicht mehr verbreitet hat. Vielleicht mussten 
auch erst Patente von Motorola ablaufen? :)

Olaf

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Wurde die TPU jemals wirklich intensiv genutzt, oder war das eher nur so 
ein nutzloses Gimmick eines verirrten Chipentwicklers? Ich erinnere mich 
an das Motorola MicroTack Aufklapphandy. Aufgeschraubt und was fand ich 
drin: ein 68332 und ein DSP. Hatte sogar 2 RAM-Chips, damit sie 16bit 
schaufeln konnte. Stromverbrauch war astronomisch.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Wie steigt man jetzt als DAU in den RP2040 mit Python am besten ein?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Abdul K. schrieb:
> Wie steigt man jetzt als DAU in den RP2040 mit Python am besten ein?

Wer das nicht von alleine herausfindet, der wir auch an allen folgenden 
Schritten scheitern.

von RP2040 Anfänger (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wer das nicht von alleine herausfindet, der wir auch an allen folgenden
> Schritten scheitern.

Ganz schön frech!
Nur, weil Du kein Buch geschrieben hast, auf das Du fleißig verlinken 
kannst, finde ich die Frage durchaus berechtigt, um nicht sinnlose 
Installationen wieder zu löschen.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

So seh ich das auch.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Klick doch einfach mal auf RP2040 oder gebe das bei Google ein. Nein das 
ist zu trivial, tue es nicht.

von Rainer V. (a_zip)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wer das nicht von alleine herausfindet, der wir auch an allen folgenden
> Schritten scheitern.

Ich bin auch der Ansicht, dass das Herausfinden die wichtige Sache ist! 
War mal ein großer Fan von "an der Uni lernst du wie man lernt", aber 
das scheint schon lange nicht mehr so zu sein...
Gruß Rainer

von c-hater (Gast)


Lesenswert?

Olaf schrieb:

> Das halte ich fuer einen besonders schlechten Test. Bei allen
> Controllern mit mehr wie 20Mhz Taktfrequenz die ich kenne laeuft die IO
> in einer eigenen schnarchlahmen Taktdomain.

In einer eigenen Taktdomain ist üblich, ja. Aber "schnarchlangsam"? Das 
dann doch eher nicht. Was du wohl meinst, sind die hochzüchteten 
Rechenknechte in PCs oder Smartphones. Ja, im Vergleich zu deren Takt 
ist das IO-Gefummel natürlich schnarchlangsam.

Aber es sind halt nun gerade keine typischen µC-Anwendungen, bei denen 
man solche Geschosse benutzt...

von Wühlhase (Gast)


Lesenswert?

Yalu X. schrieb:
> Ausgabe:
>
> CPU-Frequenz: 133.00 MHz
> Zeit für 1000000 Schleifendurchläufe:
> Python        11106.14 ms
> Native         6646.69 ms
> Viper          5075.24 ms
> Handoptimiert    67.71 ms
> Assembler        30.16 ms

Das ist ja mal klasse...danke für den Test.

Zum Thema Ressourcen...schaue man einfach mal auf den Unterschied 
zwischen HAL und LLL. Selbst wenn man in C bleibt, liegen da Welten 
dazwischen.

Ich persönlich mag C nicht sonderlich. Die Sprache hat uns zwar weit 
gebracht, aber sie ist halt mittlerweile auch sehr veraltet. Heute ist 
man um viele Erfahrungen klüger, die man einfach noch nicht hatte als C 
entwickelt wurde, und ein adäquater Ersatz wäre wirklich angebracht.

Ich denke aber nicht daß Python dieser Ersatz werden wird, so eine 
Sprache müßte schon eigens für hardwarenahe Zwecke entwickelt werden, 
und das ist Python einfach nicht.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Ich skripte unter Linux schon länger mit Python herum. Es ist aus jeden 
Fall schneller weggetippt als ein Programm in C geschrieben und 
übersetzt. Ich bin kein professioneller Programmierer, sondern 
Systemadministrator. Da muss es oft schnell gehen, wofür eine 
Skriptsprache enorme Vorteile hat. Unter Windows verwende ich 
hauptsächlich Powershell. Bevor ich da einen Compiler ausgepackt habe, 
ist das Projekt in PS bereits fertig.

Auch wenn Python anders als C, PHP oder Python ist, ist es nicht 
schlecht. Nur weil etwas anders ist, als das was man bisher kennt, muss 
man es nicht verteufeln. Es fördert die Kreativität und fordert den 
Denkapparat.
Und Programmierung durch Einrückung gab es schon bei Fortran, ist also 
nichts neues (für mich jedenfalls - ja, ich hatte noch mit Fortran 
programmiert).

Ich schmeiße jedenfalls lieber schnell den Editor an schreibe ein 
Programm als Skript, als den C-Compiler zu bemühen. Vor allem auch, da 
dieser nicht zu meinem üblichen Werkzeugkaste gehört. Warum das nicht 
auch auf einem µC nutzen, wenn nichts anderes (Geschwindigkeit, 
Stromverbrauch, Speicherplatz) dagegen spricht.
Da die Kosten bei Einzelstücken oder auch im Privatumfeld nebensächlich 
sind, kann man auch mal einen größeren Prozessor für einige Euro nutzen 
und diesen in Python programmieren.

Einen großen Vorteil gibt es noch bei Python (oder anderen 
Interpretersprachen). Um das Programm mal schnell zu ändern, braucht man 
keine Toolchain auf dem Rechner.

von Nur_ein_Typ (Gast)


Lesenswert?

Walter K. schrieb:
> Die Kurve der Python Euphorie wird den gleichen Verlauf nehmen, wie die
> seinerzeit von PERL.

Das ist naiver Unfug. Perl ist immer noch eine weit verbreitete 
Skriptsprache, in der Unmengen an produktivem Code implementiert ist, 
und für Python gilt dasselbe. Diese beiden Sprachen werden so bald ganz 
sicher nicht untergehen -- schon gar nicht, als bislang noch nichts 
Besseres in Sicht ist. Und selbst dann werden sie ebensowenig 
verschwinden wie Fortran, Cobol und Smalltalk -- Sprachen, in denen die 
Erfahrenen heute exorbitante Gehälter erzielen, weil das für die 
Unternehmen immer noch weniger kostet als Neuimplementierungen. Du mußt 
Python, Perl, Ruby und Co. nicht mögen, aber Du wirst Dich damit 
abfinden müssen, daß sie existieren, sonst ist das schlecht für Deinen 
Blutdruck -- und auf den sollten alte Männer wie wir bekanntlich 
achtgeben.

> Wer unsauberes Programmieren lernen will, beginnt mit Perl oder Python

Auch das ist naiver Unfug. Man kann in jeder Sprache unsauber 
Programmieren lernen und unsauber Programmieren, wie dieses Forum jeden 
Tag unter Beweis stellt. ;-)

von Martin (Gast)


Lesenswert?

@ Yalu

Danke für Deine Beispiele
1
# MicroPython, ESP8266 @ 80 MHz
2
# 1000 x einen Wert (1 - 1000) quadrieren
3
4
19243 µs    # Classic
5
 7296 µs    # Native
6
  333 µs    # Viper
7
  270 µs    # Viper gedengelt

von Rolf M. (rmagnus)


Lesenswert?

Nur_ein_Typ schrieb:
> Walter K. schrieb:
>> Die Kurve der Python Euphorie wird den gleichen Verlauf nehmen, wie die
>> seinerzeit von PERL.
>
> Das ist naiver Unfug. Perl ist immer noch eine weit verbreitete
> Skriptsprache, in der Unmengen an produktivem Code implementiert ist,
> und für Python gilt dasselbe.

Also, dann stimmt die Aussage oben ja :)

>> Wer unsauberes Programmieren lernen will, beginnt mit Perl oder Python
>
> Auch das ist naiver Unfug. Man kann in jeder Sprache unsauber
> Programmieren lernen und unsauber Programmieren, wie dieses Forum jeden
> Tag unter Beweis stellt. ;-)

Wobei man sagen muss, dass Perl und Python viele Schweinereien zulassen, 
so dass mehr Disziplin erforderlich ist, um darin sauber zu 
programmieren.

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


Lesenswert?

Christian H. schrieb:
> Ich skripte unter Linux schon länger mit Python herum. Es ist aus jeden
> Fall schneller weggetippt als ein Programm in C geschrieben und
> übersetzt. Ich bin kein professioneller Programmierer, sondern
> Systemadministrator.

Nur ist das halt das exakte Gegenteil von "hardwarenah Programmieren". 
BTW, als ich als Sysadmin gearbeitet habe, habe ich es genauso gemacht. 
OK es war war Perl statt Python.

Es war zwar tatsächlich mal so gedacht, aber in der Praxis verwendet 
niemand(?) C für Einmal- oder Wegwerf-Programme.

> Auch wenn Python anders als C, PHP oder Python ist, ist es nicht
> schlecht.

Das hat ja auch keiner behauptet. Aber jeder hat nun mal seine 
Vorlieben. Und warum auch nicht. Perl, Python, Ruby, ... sind in der 
Praxis gleichwertig. Da muß der Grund, warum man eins dem anderen 
vorzieht, ein anderer sein. Ich kann Perl schon, während ich Python erst 
lernen [1] müßte. Schon ist die Entscheidung gefallen.

[1] nicht wirklich lernen. Ich müßte mich umgewöhnen.

> Einen großen Vorteil gibt es noch bei Python (oder anderen
> Interpretersprachen). Um das Programm mal schnell zu ändern, braucht
> man keine Toolchain auf dem Rechner.

Was immer du damit sagen willst. Den Interpreter und die (bei Python 
nicht gerade kleine) Library brauchst du trotzdem.

von Stefan F. (Gast)


Lesenswert?

Programmiersprachen sind wie Schraubendreher mit unterschiedlichen 
Köpfen. Am Ende geht es darum die Schraube zu drehen und sie muss 
halten. Wenn das Bauwerk nicht hält wird niemand sagen, dass der 
Schraubendreher Schuld war.

von Johannes (Gast)


Lesenswert?

Wer Python und Perl in einen Topf wirft... es gibt wenige Sprachen die 
so sauber definiert sind wie Python. Auch C hat keine so klare 
Definition. (Zur Erinnerung: Python startete als Lernsprache, die 
Python-Philosophie sagt es soll genau einen Weg geben die Dinge zu tun 
und er soll offensichtlich sein.)

Dynamische Typisierung kann man mögen oder nicht, hat Vor- und 
Nachteile. Aber diese Eigenschaft sagt nichts über die Sauberkeit einer 
Sprache aus.

Perl dagegen ist ein buntes Sammelsurium von: "Ich konnte mir mit diesem 
neuen Konstrukt an der Stelle noch 2 Zeilen Code einsparen!!einself", es 
ist das pure Chaos.

Was man bei der statischen Typisierung aber im Hinterkopf behalten 
sollte: Sie verhindert zwar einige Fehler, bringt aber ihrerseits 
Komplexität mit sich und sie verhindert auch nicht alle Fehler. (Vor 
allem das C Typsystem "kann so wenig", dass es auch wenig hilft, z.B. im 
Vergleich zu C++.)
Daher setzt man in größeren Projekten auch Hilfsmittel zur statischen 
Codeanalyse ein und arbeitet mit Erweiterungen der Typsysteme. (Z.B. 
über Annotations - gibt's btw. auch für Python, z.B. als mypy)

Python wird heutzutage an ganz vielen Stellen eingesetzt und ist eine 
der beliebtesten Programmiersprachen überhaupt, teilweise sogar noch vor 
C. (https://www.tiobe.com/tiobe-index/)
Keine normale Linux-Distribution würde heute noch ohne Python 
funktionieren, es gibt komplette Webframeworks (z.B. Django), ORMs, 
Paketmanager, Backupsysteme etc. pp.

Die Geschwindigkeit ist halt ein Preis den man leider zahlen muss - und 
manchmal ist der Preis auch zu hoch.

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


Lesenswert?

Johannes schrieb:
> es gibt wenige Sprachen die so sauber definiert sind wie Python
...
> Perl dagegen ist ein buntes Sammelsurium

Das ist genau das, was ich mit persönliche Vorlieben meinte. Das 
Python so verdammt sauber definiert ist, macht dein Programm weder 
einfacher zu schreiben, noch schneller als ein vergleichbares Perl 
Programm.

Für harwarenahes Programmieren (darum ging es mal in diesem Thread) 
taugen beide Sprachen nicht.

Und der Tiobe Index ... wenn morgen - sagen wir mal - Go als neue fancy 
Lernsprache tituliert wird und Millionen Newbies bei Stackoverflow 
aufschlagen und ihre Frage zu Go stellen, dann wird Tiobe erstaunt 
feststellen, daß Go auf einmal sehr populär geworden ist.

von Norbert (Gast)


Lesenswert?

Halten wir also fest, Mikrocontroller werden weder in Python, C++, C 
oder Assembler programmiert. Assembler, pahhh, nur für Verweichlichte.
Die Puristen - und nur um die geht es hier schließlich - nehmen ihre 
Dokumentation auf Papyrus und kodieren die Mnemonics händisch in 
Sedezimal. Die Abgehobenen unter den Puristen benutzen - so sagt man - 
sogar nur Bitfolgen.
So geht das! ;-)

von Johannes (Gast)


Lesenswert?

So ist es! Programme müssen prinzipiell auch händisch per Taster in den 
µC übertragen werden, diese ganzen modernen Hilfen sind die reinste 
Verweichlichung.

Währenddessen läuft der µPython Code, der die Wlan Config Page umsetzt, 
auf 5 verschiedenen Chips fehlerfrei. Die Geschwindigkeit stört 
niemanden, die Umsetzung ist so einfach das es kaum Fehler gibt und 
portabel ist es auch noch.
Zudem kann man den Code 1:1 auf einem Desktop System entwickeln und 
testen.

von Nur_ein_Typ (Gast)


Lesenswert?

Axel S. schrieb:
> Christian H. schrieb:
>> Auch wenn Python anders als C, PHP oder Python ist, ist es nicht
>> schlecht.
>
> Das hat ja auch keiner behauptet.

Najaaa...

> Aber jeder hat nun mal seine
> Vorlieben. Und warum auch nicht. Perl, Python, Ruby, ... sind in der
> Praxis gleichwertig. Da muß der Grund, warum man eins dem anderen
> vorzieht, ein anderer sein. Ich kann Perl schon, während ich Python erst
> lernen [1] müßte. Schon ist die Entscheidung gefallen.
>
> [1] nicht wirklich lernen. Ich müßte mich umgewöhnen.

Als jemand, der genau diesen Schritt gegangen und nach 14 Jahren mit 
Perl vor guten zehn Jahren zu Python gewechselt ist (und das niemals 
bereut hat), kann ich Dir aus meiner eigenen Erfahrung sagen: ja, das 
stimmt, Du müßtest Dich umgewöhnen, aber es würde sich möglicherweise 
trotzdem lohnen. Denn auch wenn Perls Infrastruktur an Tools und 
Bibliotheken dank des CPAN schon sehr, sehr gut ist, übertrifft die von 
Python jene von Perl noch einmal um Längen und ist in vielen Bereichen 
auch deutlich besser auf einander abgestimmt, da beißt die Maus keinen 
Faden ab. Und je nachdem, welche konkreten Anwendungsfälle Du lösen 
willst oder mußt, kann das schon einen erheblichen Unterschied 
ausmachen.

Zudem gibt es eine Eigenschaft an Perl, die für viele Aufgaben, vor 
allem für jene, für die Larry Wall die Sprache ursprünglich entwickelt 
hat, eine prima Idee ist, aber bei längeren Programme häufig dazu führt, 
daß diese schlechter les- und damit auch schlechter wartbar werden: die 
eingebauten Regular Expressions. Andererseits ist es genau diese 
Eigenschaft, die mich auch heute noch immer mal wieder zu Perl greifen 
läßt, allerdings nur als UNIX-Filter auf der Kommandozeile mit "perl 
-pe".

Obendrein ist Python meistens deutlich schneller, und der Code ist 
meistens sogar noch kompakter als der von  Perl. Klar, das spielt häufig 
nur eine untergeordnete Rolle, aber auch das verringert unterm Strich 
und insgesamt die Entwicklungszeit.

von Nur_ein_Typ (Gast)


Lesenswert?

Johannes schrieb:
> Wer Python und Perl in einen Topf wirft... es gibt wenige Sprachen die
> so sauber definiert sind wie Python. Auch C hat keine so klare
> Definition. (Zur Erinnerung: Python startete als Lernsprache, die
> Python-Philosophie sagt es soll genau einen Weg geben die Dinge zu tun
> und er soll offensichtlich sein.)

Ich wüßte jetzt nicht, daß Python als "Lernsprache" gestartet sei... 
hast Du dazu möglicherweise eine seriöse Quelle?

> Dynamische Typisierung kann man mögen oder nicht, hat Vor- und
> Nachteile. Aber diese Eigenschaft sagt nichts über die Sauberkeit einer
> Sprache aus.
>
> Perl dagegen ist ein buntes Sammelsurium von: "Ich konnte mir mit diesem
> neuen Konstrukt an der Stelle noch 2 Zeilen Code einsparen!!einself", es
> ist das pure Chaos.

Deinem negativen Urteil über Perl möchte ich mich ausdrücklich nicht 
anschließen, aber in einem Punkt hat Python zweifellos einen gewaltigen 
Vorzug, nämlich bei der Typisierung. Python ist nämlich entgegen 
anderslautender Gerüchte typsicher, auch wenn es den Typ an den Wert und 
nicht an den Variablennamen bindet, während Perl tatsächlich keine 
Typisierung kennt und deswegen Ausdrücke wie "print(3 + '4');" ohne 
Warn- oder Fehlermeldung zuläßt und "7" ausgibt. Python wirft an dieser 
Stelle natürlich einen TypeError mit dem Hinweis, daß die Addition von 
Ganzzahlen und Strings nicht unterstützt wird.

> Daher setzt man in größeren Projekten auch Hilfsmittel zur statischen
> Codeanalyse ein und arbeitet mit Erweiterungen der Typsysteme. (Z.B.
> über Annotations - gibt's btw. auch für Python, z.B. als mypy)

An dieser Stelle sei auch auf Attrs [1] verwiesen...

[1] https://www.attrs.org/en/stable/

> Keine normale Linux-Distribution würde heute noch ohne Python
> funktionieren, es gibt komplette Webframeworks (z.B. Django), ORMs,
> Paketmanager, Backupsysteme etc. pp.

Tatsächlich steht Python sogar ausdrücklich als Option im Linux 
Filesystem Hierarchy Standard (FHS) und ist somit Bestandteil der Linux 
Standard Base (LSB).

> Die Geschwindigkeit ist halt ein Preis den man leider zahlen muss - und
> manchmal ist der Preis auch zu hoch.

Wobei es ja etliche Möglichkeiten gibt, Python bei Bedarf deutlich zu 
beschleunigen, angefangen bei alternativen Interpretern wie Pypy bis hin 
zu der Möglichkeit, Python ganz oder nur einzelne Teile des Codes in 
andere Programmiersprachen zu übersetzen und dann in nativen Code zu 
übersetzen. Und dann gibt es natürlich immer noch die Möglichkeit, 
performancekritische Teile in C oder C++ zu machen und diese dann über 
Python selbst, Cython oder Boost::Python in das Python-Programm 
einzubinden.

von Johannes (Gast)


Lesenswert?

> Ich wüßte jetzt nicht, daß Python als "Lernsprache" gestartet sei...
hast Du dazu möglicherweise eine seriöse Quelle?

Auf die Schnelle: 
http://python-history.blogspot.com/2009/02/early-language-design-and-development.html 
- demnach basiert Python auf ABC, das eine Lernsprache gewesen ist.

Ich hab es schon mehrfach gelesen und bisher nicht genauer recherchiert. 
Würde mich jetzt nicht wundern wenn tatsächlich nur ABC als Lernsprache 
konzipiert war und Python große Anleihen von ABC genommen hat, was 
Python irgendwo zwischen "war eine Lernsprache/war keine Lernsprache" 
platziert.


Bzgl. dem Typsystem: Perl ist schwach typisiert, Python ist stark 
typisiert. Schwach typisierte Sprachen sind neben Perl z.B. noch 
JavaScript, PHP und Tcl.

Erfahrungsgemäß "nervt" schwache Typisierung bei großen Projekten viel 
stärker als dynamische Typisierung. Es bringt lauter lustige 
Verhaltensweisen hervor die man vorher nicht erwartet hätte, z.B. 
"11"+1==111, "11"-1==10.
(Es gibt viele Beispiele im Netz, ein paar z.B. hier: 
https://javascript.plainenglish.io/javascript-is-drunk-ec4ca3a84608?gi=7753695685e0 
(war der erste Suchtreffer dazu))

von Rolf M. (rmagnus)


Lesenswert?

Johannes schrieb:
> Erfahrungsgemäß "nervt" schwache Typisierung bei großen Projekten viel
> stärker als dynamische Typisierung. Es bringt lauter lustige
> Verhaltensweisen hervor die man vorher nicht erwartet hätte, z.B.
> "11"+1==111, "11"-1==10.

Das liegt aber an sich weniger am Typsystem, sondern daran, dass (wie 
bei den meisten Sprachen) der Additions-Operator bei den Strings für die 
Konkatenation missbraucht wird. Wäre das nicht so, dann würde sich die 
Addition und Subtraktion hier gleich verhalten.
Übrigens ist das etwas, das ausgerechnet Perl anders macht. Dort wird 
der Punkt für die Konkatenation verwendet.

von Rainer V. (a_zip)


Lesenswert?

Nur_ein_Typ schrieb:
> auch wenn es den Typ an den Wert und
> nicht an den Variablennamen bindet

Hat mich eine Menge Hirnschmalz gekostet zu verstehen, dass 
Numpy-Operationen schon mal wieder Listen erzeugen! Aber als Anfänger 
hat man ja erst mal jede Menge Baustellen und die Fehlermeldungen in Py 
finde ich schlicht hervorragend!! Und das Verstehen dieser 
Fehlermeldungen trägt ganz entschieden zum Lernerfolg bei.
Gruß Rainer

von nix_python (Gast)


Lesenswert?

trotz meines Nicks hat Python einen entscheidenden Vorteil:

Man weiss auch noch nach Jahren was man programmiert hat, bei C & Co ist 
das schon nach 2-3 Wochen vergessen. Das ist auch der Grund, warum im 
Laborbereich Python so erfolgreich ist, blitzschnell angepasst, läuft 
und es gibt unzählige Bibliotheken für jeden Zweck.

Bevor ich in C programmiere, nehme ich lieber Assembler.

von Sheeva P. (sheevaplug)


Lesenswert?

Rolf M. schrieb:
> Johannes schrieb:
>> Erfahrungsgemäß "nervt" schwache Typisierung bei großen Projekten viel
>> stärker als dynamische Typisierung. Es bringt lauter lustige
>> Verhaltensweisen hervor die man vorher nicht erwartet hätte, z.B.
>> "11"+1==111, "11"-1==10.
>
> Das liegt aber an sich weniger am Typsystem, sondern daran, dass (wie
> bei den meisten Sprachen) der Additions-Operator bei den Strings für die
> Konkatenation missbraucht wird.

Bitte schau' genauer hin, Rolf: bei "11" und 1 handelt es sich eben 
nicht um Strings, sondern um einen String und eine Ganzzahl, und 
zwischen diesen ist ein Additionsoperator nun einmal eher sinnlos. 
Streng, aber dynamisch typisierte Skriptsprachen wie Python und Ruby 
werden in diesem Fall also mit einem Fehler aussteigen, während nicht 
typisierte Skriptsprachen wie PHP oder Perl anstelle eines Fehlers den 
String einfach in eine Zahl wandeln und damit rechnen. Daher ergibt "11" 
+ 1 in Perl tatsächlich 12 und "11" - 1 ergibt 10. Dieses Verhalten kann 
unter (zugegeben seltenen) Umständen zu schwer auffindbaren Fehlern 
führen. Und genau das hat natürlich mit dem fehlenden Typsystem von Perl 
und PHP zu tun, denn typsichere Skriptsprachen wie Python und Ruby 
lassen sowas eben nicht zu.

von Egon D. (Gast)


Lesenswert?

Johannes schrieb:

> Bzgl. dem Typsystem: Perl ist schwach typisiert, Python
> ist stark typisiert. Schwach typisierte Sprachen sind
> neben Perl z.B. noch JavaScript, PHP und Tcl.

Hmm.
Mir will scheinen, dass die Einstufung von Tcl als "schwach
typisiert" nicht so besonders viel aussagt, denn...

> Erfahrungsgemäß "nervt" schwache Typisierung bei großen
> Projekten viel stärker als dynamische Typisierung. Es
> bringt lauter lustige Verhaltensweisen hervor die man
> vorher nicht erwartet hätte, z.B. "11"+1==111, "11"-1==10.

...nichts davon funktioniert in Tcl: Strings werden durch
Hintereinanderschreiben verkettet (ja, das klappt auch mit
Variablen), und die Operatoren "+" und "-" sind außerhalb
des "expr"-Kommandos (das mathematische Ausdrücke auswertet)
nicht definiert.

von Sheeva P. (sheevaplug)


Lesenswert?

Rainer V. schrieb:
> Nur_ein_Typ schrieb:
>> auch wenn es den Typ an den Wert und
>> nicht an den Variablennamen bindet
>
> Hat mich eine Menge Hirnschmalz gekostet zu verstehen, dass
> Numpy-Operationen schon mal wieder Listen erzeugen! Aber als Anfänger
> hat man ja erst mal jede Menge Baustellen und die Fehlermeldungen in Py
> finde ich schlicht hervorragend!! Und das Verstehen dieser
> Fehlermeldungen trägt ganz entschieden zum Lernerfolg bei.

Naja, ganz grundsätzlich sehe ich ziemlich häufig, daß Einsteiger 
besonders in Python dazu neigen, gleich von vorneherein mit den "dicken 
Brocken" anzufangen. Meiner ganz persönlichen Ansicht zufolge wäre es 
allerdings sinnvoller erstmal die Grundlagen der Sprache und ihre 
Bibliotheken zu lernen und sich erst danach mit Erweiterungen wie numpy, 
scipy, Pandas, oder Ähnlichen zu beschäftigen...

Klar, ich verstehe: die wenigsten lernen Python als reinen Selbstzweck 
sondern sie wollen ein neues Werkzeug um ihr aktuelles Problem zu lösen. 
Numbercrunching, Machine Learning, Datenvisualisierung, Statistik, ein 
GUI-Programm oder eins mit einem schicken Webfrontend in Flask, Bottle 
oder Django, oder... Aber leider ist Python eine ausgesprochen flexible 
Sprache und diese Flexibilität nutzen manche Bibliotheksentwickler für 
völlig irre, aber auch sehr coole Dinge. Und wenn man ohnehin noch 
Einsteiger ist verwirrt so etwas eher als zu helfen... ;-)

Deswegen rate ich in solchen Fällen erstmal die Sprache zu lernen. 
Datentypen und Kontrollstrukturen, List- und Dict-Comprehensions, 
Objektorientierung, was gibt es in der Standardbibliothek, wie 
funktionieren Dekoratoren, virtualenv / venv, Deskriptoren... und erst 
dann wenn man diese Dinge sicher beherrscht sollte man darüber 
nachdenken sich den "großen" Bibliotheken zu nähern. Ist aber nur meine 
ganz persönliche Meinung. Das kann jeder gerne anders sehen und machen.

Viel Spaß und Erfolg jedenfalls!

von chris_ (Gast)


Lesenswert?

Apropos Einstieg PyPico und Micropython ...

Beitrag "PiPico Micropython"

Das ein- oder andere nützliche Code Beispiel lässt sich dort finden ( 
inclusive der üblichen MC-Net Nörglerei )

von chris_ (Gast)


Lesenswert?

> Beitrag "PiPico Micropython"
Apropos Thonny-IDE: die funktioniert mittlerweile super .. kann ich sehr 
empfehlen.

von endlich (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Programmiersprachen sind wie Schraubendreher mit unterschiedlichen
> Köpfen. Am Ende geht es darum die Schraube zu drehen und sie muss
> halten. Wenn das Bauwerk nicht hält wird niemand sagen, dass der
> Schraubendreher Schuld war.

Endlich mal was vernünftiges. Danke.

von Rolf M. (rmagnus)


Lesenswert?

Sheeva P. schrieb:
> Bitte schau' genauer hin, Rolf: bei "11" und 1 handelt es sich eben
> nicht um Strings, sondern um einen String und eine Ganzzahl,

Das ist mir bewusst.

> und zwischen diesen ist ein Additionsoperator nun einmal eher sinnlos.

Man könnte das gleiche auch für zwei Strings sagen.
Offenbar wird hier für die Subtraktion der String implizit in einen 
Integer konvertiert, und dann kann die Operation durchgeführt werden. Da 
kann man nun darüber streiten, ob das eine gute Idee ist oder nicht. 
Aber dass der Additionsoperator sich nicht konsistent dazu verhält, 
liegt eben daran, dass er für Strings was anderes als eine Addition 
macht. Die Subtraktion ist dagegen für Strings nicht definiert.

> Streng, aber dynamisch typisierte Skriptsprachen wie Python und Ruby
> werden in diesem Fall also mit einem Fehler aussteigen, während nicht
> typisierte Skriptsprachen wie PHP oder Perl anstelle eines Fehlers den
> String einfach in eine Zahl wandeln und damit rechnen. Daher ergibt "11"
> + 1 in Perl tatsächlich 12 und "11" - 1 ergibt 10.

Ja, weil - wie gesagt - Perl den Additionsoperator nicht für die 
Konkatenation missbraucht. Somit ist die einzige Möglichkeit, die 
Operation durchzuführen, eine Konvertierung der "11" in einen Integer, 
genau wie bei der Subtraktion.

> Dieses Verhalten kann unter (zugegeben seltenen) Umständen zu schwer
> auffindbaren Fehlern führen. Und genau das hat natürlich mit dem
> fehlenden Typsystem von Perl und PHP zu tun, denn typsichere
> Skriptsprachen wie Python und Ruby lassen sowas eben nicht zu.

Wobei die vollständig dynamische Typisierung auch ihre Tücken hat, die 
es wiederum bei statisch typisierten Sprachen nicht gibt.

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Wühlhase schrieb:
> Heute ist
> man um viele Erfahrungen klüger, die man einfach noch nicht hatte als C
> entwickelt wurde, und ein adäquater Ersatz wäre wirklich angebracht.
>
> Ich denke aber nicht daß Python dieser Ersatz werden wird, so eine
> Sprache müßte schon eigens für hardwarenahe Zwecke entwickelt werden,
> und das ist Python einfach nicht.

Rust ist der geeignete Nachfolger von C!

von Nachdenklicher (Gast)


Lesenswert?

Axel S. schrieb:
> Nur stellt sich dann die Frage, wozu man Arduino
> (bzw. [1]) überhaupt braucht.

Die Arduino-Hardware nutze ich ganz gerne mal für kurze Testaufbauten, 
wenn ich weiß, ich brauche es nicht dauerhaft oder ich einfach keine 
Lust habe, selbst was zu layouten und Platinen zu bestellen. Mit den 
ganzen I/Os auf Buchsenleisten ist das ja recht praktisch.
Allerdings nutze ich nicht die grottenschlechte IDE von Arduino und 
dieses merkwürdige vermurkste C, was dort verwendet wird, sondern 
schreibe die Programme wie sonst für AVR auch mit anderen Editoren und 
lasse den GCC drüber laufen. AVRdude ist es ja egal, ob ich meinen ISP 
dran habe, oder einen Arduino mit Bootloader, man muß es ihm nur sagen. 
;-)

Was Python angeht, ich käme nicht auf die Idee, es auf Mikrocontrollern 
zu verwenden, da bin ich eingefleischt im Lager C/Assembler. Allerdings 
hat Python für mich durchaus eine Daseinsberechtigung - als Beispiel 
habe ich vor einer Weile mal von einem Freund die Frage bekommen, ob ich 
die Journaldatei seiner Registrierkasse auswerten und bestimmte Daten 
extrahieren und als CSV besser auswertbar speichern könnte. Für so 
etwas, wo es nicht auf die letzte Millisekunde Laufzeit ankommt, man von 
den guten Funktionen zur Stringbearbeitung profitiert, und es unterm 
Strich noch den Vorteil bietet, daß ich so etwas unter Linux schreiben 
und der Freund ohne Probleme unter Windows laufen lassen kann, ist 
Python genial.  In C hätte ich neben dem Betriebssystemproblem 
wesentlich mehr Aufwand treiben müssen.

von Stefan F. (Gast)


Lesenswert?

nix_python schrieb:
> Man weiss auch noch nach Jahren was man programmiert hat,
> bei C & Co ist das schon nach 2-3 Wochen vergessen.

Dass man seinen eigenen Code vergisst ist mir nicht unbekannt. Aber den 
Zusammenhang zur Programmiersprache musst du mal erklären. Den sehe ich 
nämlich überhaupt gar nicht.

von Wühlhase (Gast)


Lesenswert?

nix_python schrieb:
> trotz meines Nicks hat Python einen entscheidenden Vorteil:
>
> Man weiss auch noch nach Jahren was man programmiert hat, bei C & Co ist
> das schon nach 2-3 Wochen vergessen.

Das hat doch aber nichts mit der Sprache zu tun, sondern mit Erfahrung 
und daraus resultierendem Programmiertil.

Ich habe früher auch mal so programmiert, daß ich nach wenigen Monaten 
wieder vergessen hätte was ich da gemacht habe und ich behaupte, daß es 
mit Python nicht besser gemacht hätte.

Heute programmiere ich in C und Java so, daß es mir relativ wenig Mühe 
macht nach einem halben Jahr wieder in mein Projekt zurückzufinden.

von Johannes (Gast)


Lesenswert?

> Heute programmiere ich in C und Java so, daß es mir relativ wenig Mühe
> macht nach einem halben Jahr wieder in mein Projekt zurückzufinden.

Das ist eine wichtige Fähigkeit die viele gern vergessen. Murks kann man 
natürlich in jeder Programmiersprache machen, auch z.B. in Rust. Was man 
mit dem Werkzeug anstellt liegt immer noch in der Hand des Entwicklers.

Aber manche Werkzeuge sind einfach blöd, z.B. Schlitzschraubendreher 
(PHP). Man rutscht ständig ab und schneidet sich irgendwo.


Zur schwachen/starken Typisierung:

Die gibts natürlich in unterschiedlichen Qualitätsstufen, und Javascript 
und PHP stellen definitiv das untere Ende dieser Skala dar. (Ich muss 
jedes mal nachschauen wie man in Javascript auf null prüft weil's so 
hässlich ist.)

Trotzdem gehen auch in Perl Dinge die nicht gehen sollten, z.B.:
1
$foo= "123" + "456";           # $foo = 579
2
$bar = sub_str($foo, 2, 1);      # $bar = 9
3
$bar .= " lives";               # $bar = "9 lives"
4
$foo -= $bar;                   # $foo = 579 - 9 = 570
(Sorry ich musste das sub str entstellen, scheinbar gibts hier eine 
wildgewordene Spam-Protection)

Mit einer strikten Typisierung, d.h. jedes Objekt hat einen fest 
zugeordneten Typ, wäre das nicht möglich.

Dazu hat Perl einfach extrem viele Eigenheiten, einige sind z.B. hier 
aufgelistet: 
https://metacpan.org/dist/perlsecret/view/lib/perlsecret.pod
Ich brauch kein Werkzeug das ich erst nach ausführlichem Studium aller 
Interna so halbwegs verstehe.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Stefan.

Stefan ⛄ F. schrieb:

>> wer denkt sich Einrückungen als Spracheigenschaft aus …
>
> Ich finde das auch ganz schrecklich, habe aber bemerkt dass jüngere
> Leute das wesentlich lockerer sehen.

Nicht nur jüngere, auch so Oppas wie ich. ;O)

> Es hat aber auch eine gute Seite:
> Ich habe noch kein völlig unleserlich eingerücktes Python Script
> gesehen, denn das würde nicht funktionieren.

Ich bin ein Chaot und brauche darum eine extrem gut und deutlich 
strukturierte Umgebung, um mich zurechtzufinden. Einrückungen bieten 
genau dass. Mit den Unbequemlichkeiten drumherum komme ich problemlos 
klar.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

von Norbert (Gast)


Lesenswert?

Johannes schrieb:
> Aber manche Werkzeuge sind einfach blöd, z.B. Schlitzschraubendreher
> (PHP). Man rutscht ständig ab und schneidet sich irgendwo.

Das ist aber mutig, PHP mit einem guten alten Schlitzschraubendreher zu 
vergleichen. Verwitterter alter Faustkeil, OK.

PHP, von Maurerburschen im Delirium ersponnen,
einer meinte noch: Mal ehrlich, das traust du dich nicht!

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Johannes.

Johannes schrieb:

> Aber manche Werkzeuge sind einfach blöd, z.B. Schlitzschraubendreher
> (PHP). Man rutscht ständig ab und schneidet sich irgendwo.

Nein, auch Schlitzschraubendreher haben ihre Qualitäten. ;O)

Wenn ich weiss, dass ich irgendein Gehäuse einmal total verdreckt oder 
überstrichen zurück bekomme, habe ich eine starke Tendenz dazu, 
Schlitzschrauben zu verwenden, weil die Schlitze bekomme ich leichter 
freigekratzt als Kreuz- oder Torxköpfe.

Einen Schlitz bewkomme ich auch unterwegs mit einem Taschenmesser auf, 
wenn er nicht zu fest sitzt.


Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

von Johannes (Gast)


Lesenswert?

ROFL

von Olaf (Gast)


Lesenswert?

> Einen Schlitz bewkomme ich auch unterwegs mit einem Taschenmesser auf,
> wenn er nicht zu fest sitzt.

Genau das ist der ultimative Beweiss wieso wir alle bis in alle
Ewigkeit C benutzen werden. :-) Zumal ja jeder bereits ein Taschenmesser 
hat.

> Rust ist der geeignete Nachfolger von C!

Nein, das wird noch diskutiert! Auch hier im Forum....

Olaf

von Rolf M. (rmagnus)


Lesenswert?

Nachdenklicher schrieb:
> Allerdings nutze ich nicht die grottenschlechte IDE von Arduino und
> dieses merkwürdige vermurkste C, was dort verwendet wird, sondern
> schreibe die Programme wie sonst für AVR auch mit anderen Editoren und
> lasse den GCC drüber laufen.

Das "merkwürdig vermurkste C" nennt sich C++ und wird ganz einfach mit 
einem g++ übersetzt. Das scheinen die Arduino-Macher nur eher zu 
verstecken, indem sie es die "Arduino Programming Language" nennen. Es 
ist eher die Library und die undurchsichtige build-Magie, die merkwürdig 
vermurkst sind.

> Für so etwas, wo es nicht auf die letzte Millisekunde Laufzeit ankommt,
> man von den guten Funktionen zur Stringbearbeitung profitiert, und es
> unterm Strich noch den Vorteil bietet, daß ich so etwas unter Linux
> schreiben und der Freund ohne Probleme unter Windows laufen lassen kann,
> ist Python genial.  In C hätte ich neben dem Betriebssystemproblem
> wesentlich mehr Aufwand treiben müssen.

Gerade Stringverarbeitung ist etwas, wo der Unterschied zwischen C und 
Python größer nicht sein könnte. Python ist geradezu dafür gemacht, 
während es in C schon extrem umständlich und fehlerträchtig ist. Der 
Geschwindigkeitsunterschied fällt sowieso nicht ins Gewicht, da oft mehr 
Zeit für den File-Zugriff drauf geht als für die Verarbeitung.

von Nachdenklicher (Gast)


Lesenswert?

Rolf M. schrieb:
> Das "merkwürdig vermurkste C" nennt sich C++ und wird ganz einfach mit
> einem g++ übersetzt. Das scheinen die Arduino-Macher nur eher zu
> verstecken, indem sie es die "Arduino Programming Language" nennen. Es
> ist eher die Library und die undurchsichtige build-Magie, die merkwürdig
> vermurkst sind.

C++ ist für mich vermurkstes C. ;-) Ich habe ja nix gegen OOP, aber 
C++ finde ich grauenhaft. Das dann kombiniert mit dem wirklich 
schlechten Editor der Arduino-IDE  und der vermurksten Library ist doch 
zum Abgewöhnen.

Rolf M. schrieb:
> Gerade Stringverarbeitung ist etwas, wo der Unterschied zwischen C und
> Python größer nicht sein könnte. Python ist geradezu dafür gemacht,
> während es in C schon extrem umständlich und fehlerträchtig ist. Der
> Geschwindigkeitsunterschied fällt sowieso nicht ins Gewicht, da oft mehr
> Zeit für den File-Zugriff drauf geht als für die Verarbeitung.

Eben. Und genau das ist ja der Gedanke dahinter, die Sprache nach dem 
Verwendungszweck auszusuchen.  :-) Und bei der Geschwindigkeit ist es ja 
nicht nur der File-Zugriff. Bei einem Programm, das man 1x im Monat 
laufen läßt, ist es relativ gleich, ob es 10 oder 20 Sekunden braucht, 
insbesondere wenn man dagegen die beim Programmieren gesparte Zeit 
rechnet, weil man sich an der komfortablen Stringverbiegerei von Python 
bedient.

von Stefan F. (Gast)


Lesenswert?

Nachdenklicher schrieb:
> Bei einem Programm, das man 1x im Monat
> laufen läßt, ist es relativ gleich, ob es 10 oder 20 Sekunden braucht,

Bei C versus interpretiertem Python sind es aber eher 10 versus 400 
Sekunden.

von Johannes (Gast)


Lesenswert?

Python ist bei praktisch allen Datenstrukturen extrem effizient in der 
Ausdrucksweise, auch z.B. Linq oder Java Streams sind ein Witz dagegen.

Beispiel: Indiziere eine Liste von Objekten über ihren Namen um 
O(log(n)) Zugriffszeiten bei der Namenssuche zu erreichen:
1
class A:
2
  def name(self)->str:
3
    ...
4
5
list_of_a=[...]
6
a_by_name={i.name():i for i in list_of_a}
7
8
for i in a_bunch_of_names:
9
  if(i in a_by_name): ...
10
  else: ...

Sache erledigt. Man kann sich wirklich gut auf den Algorithmus 
konzentrieren. In C (ohne ++) ein Dictionary zu bauen macht so gar 
keinen Spaß, am Ende nehmen die Leute der Einfachheit halber einen list 
lookup (der auch kein 1zeiler ist) und schwupps ist der C Code bei 1000 
Instanzen langsamer als Python.

> C++ ist für mich vermurkstes C. ;-)

Du musst zugeben, es ist seit C++11 besser geworden. Man kann die 
wichtigeren Teile von std inzwischen sogar halbwegs leserlich 
nachimplementieren, ein std::function war zu prä-C++11 Zeiten an 
Hässlichkeit nicht zu überbieten.

Wobei die std-Schreiber manchmal schon auf einem anderen Stern leben.

von Nachdenklicher (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Bei C versus interpretiertem Python sind es aber eher 10 versus 400
> Sekunden.

Da die 20 Sekunden die Pythonlaufzeit waren, wäre die C-Laufzeit noch 
kürzer gewesen. Wir reden also von einem Zeitrahmen, wo das - gerade bei 
nur monatlicher Nutzung - wirklich völlig nebensächlich ist.

Johannes schrieb:
> Du musst zugeben, es ist seit C++11 besser geworden.

¯\_(ツ)_/¯ Hab mir das seit damals (keine Ahnung, welcher Standard das 
war) nie wieder angeschaut.

von Netzwanze (Gast)


Lesenswert?

Axel S. schrieb:
> Was immer du damit sagen willst. Den Interpreter und die (bei Python
> nicht gerade kleine) Library brauchst du trotzdem.

Der wird einmalig geschrieben und nicht mehr verändert. Änderungen 
erfolgen nur noch am Python-Code.

Axel S. schrieb:
> Nur ist das halt das exakte Gegenteil von "hardwarenah Programmieren".

Wenn ich im Skript direkt auf die Hardware zugreifen kann, ist das 
hardwarenah. Es besagt nicht, dass es Echtzeit sein muss.

Ich habe hier ein einfaches Beispiel:
* Abfragen eines DS1820 Sensors
* Abfragen eines Tasters.
* Anzeigen der Temperatur auf einem Display
* Senden der Temperatur über RS232 an ein anderes Gerät
* Empfangen von Daten über RS232 von diesem Gerät
* Ansteuerung von RGB-LED und Summer.

Bis auf die Tastenabfrage läuft das Programm sehr gemächlich. Es muss 
sich ja nur einmal in der Minuten um seine Aufgaben kümmern.
Das funktioniert bei mir auf einem RPi Nano unter Python.
Ich würde sagen, dass ich hier die Hardware programmiert habe.

von Stefan F. (Gast)


Lesenswert?

Was ist eigentlich aus LUA geworden? Man liest nichts mehr darüber.

von Norbert (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Was ist eigentlich aus LUA geworden? Man liest nichts mehr darüber.
Und zu was? Zu Recht!

Benutze es manchmal selbst in C/C++ Programmen, aber wirklich nur weil 
ich bis jetzt nichts anderes zum einbetten gefunden habe. Wenn ich Lua 
mit einem Satz beschreiben sollte würde ich sagen: So etwas kann sich 
nur ein Mönch ausdenken!

PS.
Bekiffter, ich habe bekiffter vergessen. Bitte im letzten Satz einfügen.

von demo (Gast)


Lesenswert?

nix_python schrieb:
> Man weiss auch noch nach Jahren was man programmiert hat, bei C & Co ist
> das schon nach 2-3 Wochen vergessen. Das ist auch der Grund, warum im
> Laborbereich Python so erfolgreich ist, blitzschnell angepasst, läuft
> und es gibt unzählige Bibliotheken für jeden Zweck.
>
> Bevor ich in C programmiere, nehme ich lieber Assembler.

Ich weiß zwar nicht ob es inzwischen einen "selektiven" Alzheimer gibt, 
aber wenn, dann hast du ihn. Was hat das mit der Programmiersprache zu 
tun ob man nach 2-3 Wochen noch durch das durchsteigt was man gemacht 
hat oder nicht? Und dann noch Assembler ins Spiel bringen...

von Rolf M. (rmagnus)


Lesenswert?

Netzwanze schrieb:
> Axel S. schrieb:
>> Was immer du damit sagen willst. Den Interpreter und die (bei Python
>> nicht gerade kleine) Library brauchst du trotzdem.
>
> Der wird einmalig geschrieben und nicht mehr verändert. Änderungen
> erfolgen nur noch am Python-Code.

Und bei einem Compiler ist das anders?
Die obige Aussage bezieht sich ja darauf, dass es hieß, dass es ein 
großer Vorteil von Python sei, dass man keinen Compiler braucht, um das 
Programm zu ändern. Naja, dafür braucht man halt einen Interpreter, und 
den nicht nur zum ändern, sondern auch, wenn man das Programm nur 
ausführen will.

von Rainer V. (a_zip)


Lesenswert?

Bernd W. schrieb:
> Einrückungen bieten
> genau dass

Und jeder besserer Editor oder der in einer Python-IDE überprüft das, so 
dass man da überhaupt keinen Mist bauen kann...
Gruß Rainer

von c-hater (Gast)


Lesenswert?

Rainer V. schrieb:

> Und jeder besserer Editor oder der in einer Python-IDE überprüft das, so
> dass man da überhaupt keinen Mist bauen kann...

Das ist doch Quatsch, schon aus rein logischen Erwägungen MUSS das 
Quatsch sein. Da die Einrückung die einzige Information ist, kann keine 
IDE überprüfen, ob korrekt eingerückt wurde, um das zu tun, was 
tatsächlich intendiert war.
Alles, was die IDE tun kann ist: zu überprüfen, ob's am Ende aufgeht.

Bei Sprachen, bei denen die Struktur sinnvoll (nämlich durch Token für 
Anfang und Ende) bestimmt wird, ist die Einrückung eigentlich komplett 
überflüssig für den Inhalt. Aber: Hier kann die IDE vollautomatisch die 
zum geschriebenen Inhalt passende Einrückung erzeugen, was es dann dem 
Lesenden einfacher macht, Fehler in der Struktur zu finden.

Form follows function, so ist es sinnvoll. Der Python-Ansatz hingegen 
ist Bullshit, weil er potentiell weniger Redundanz bietet und damit 
naturgemäß fehlerträchtiger ist.

von Rolf M. (rmagnus)


Lesenswert?

c-hater schrieb:
> Bei Sprachen, bei denen die Struktur sinnvoll (nämlich durch Token für
> Anfang und Ende) bestimmt wird, ist die Einrückung eigentlich komplett
> überflüssig für den Inhalt. Aber: Hier kann die IDE vollautomatisch die
> zum geschriebenen Inhalt passende Einrückung erzeugen, was es dann dem
> Lesenden einfacher macht, Fehler in der Struktur zu finden.

In Python muss die IDE das gar nicht machen, weil die Einrückung bereits 
die Struktur wiedergibt und nicht erst damit synchronisiert werden muss.

> Form follows function, so ist es sinnvoll. Der Python-Ansatz hingegen
> ist Bullshit, weil er potentiell weniger Redundanz bietet und damit
> naturgemäß fehlerträchtiger ist.

Redundanz in Code ist schlecht, weil man dann immer zwei Dinge hat, die 
man synchron halten muss. Und das ist es, was fehlerträchtig ist.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Also doch nicht Python? Und auch nicht Perl, C, C++, Lua und sowieso 
nicht Assembler? Und PHP sowie auch JS auch nicht? Hm

von Rolf M. (rmagnus)


Lesenswert?

Abdul K. schrieb:
> Also doch nicht Python? Und auch nicht Perl, C, C++, Lua und sowieso
> nicht Assembler? Und PHP sowie auch JS auch nicht? Hm

In jeder Diskussion über Programmiersprachen wirst du für jede Sprache 
jemanden finden, der was dran auszusetzen hat.
Und wie man hier gut sieht, gibt es auch immer jemanden, der eine 
Sprache gut findet, weil sie ein bestimmtes Sprachfeature hat, jemanden, 
der es neutral sieht und jemanden, der deshalb die Sprache meidet, wie 
der Teufel das Weihwasser.
Das ist wie bei der Frage, ob auf ein Nutellabrot Butter gehört oder auf 
eine Pizza Ananas.

von Rainer V. (a_zip)


Lesenswert?

c-hater schrieb:
> Alles, was die IDE tun kann ist: zu überprüfen, ob's am Ende aufgeht.

Ja und das reicht auch. Den Mist, den ich logisch verzapft habe, kann 
und soll keiner erkennen oder gar korrigieren. Das mach ich dann schon 
selbst...
Gruß Rainer

von Norbert (Gast)


Lesenswert?

Abdul K. schrieb:
> Also doch nicht Python? Und auch nicht Perl, C, C++, Lua und sowieso
> nicht Assembler? Und PHP sowie auch JS auch nicht? Hm

Nicht ganz.
Es gibt sicherlich an jeder Programmiersprache etwas auszusetzen. Das 
ist zum einen dem persönlichen Geschmack geschuldet, zum anderen der 
Entstehungsgeschichte bzw. dem manchmal etwas seltsamen Verlauf der 
selben.

Es gibt aber auch - ich nenn sie mal euphemistisch - Sprachen, welche 
von Anfang an jegliche logische Grundsubstanz vermissen lassen.
PHP (Patch Hack Patch) ist solch ein Leuchtturm-Objekt. Und wer mal 
etwas mehr mit Lua gearbeitet hat …

Zu guter Letzt haben wir dann noch die vorgeschobenen Scheinargumente 
(straw man fallacy) die manche vorbringen. Zu dieser Kategorie gehört 
zB. die kategorische Ablehnung der Einrückung bei Python. Als wenn das 
die wichtigste sprachbestimmende Eigenschaft wäre. Und das obwohl man 
sich ja selbst disqualifiziert, wenn man zugibt mit einer einfachen 
Einrückung nicht klar zu kommen.

von Nur_ein_Typ (Gast)


Lesenswert?

Abdul K. schrieb:
> Also doch nicht Python? Und auch nicht Perl, C, C++, Lua und sowieso
> nicht Assembler? Und PHP sowie auch JS auch nicht? Hm

Warum denn das? Weil jemand, der sich schon in seinem Nickname als 
"Hater" entblößt, trolligen Unsinn absondert? Wer laut eigener Aussage 
solche starken Gefühle gegenüber einem Werkzeug hat, hat sich doch schon 
komplett disqualifiziert und desavouiert.

von Walter K. (walter_k488)


Lesenswert?

Abdul K. schrieb:
> Also doch nicht Python? Und auch nicht Perl, C, C++, Lua und sowieso
> nicht Assembler? Und PHP sowie auch JS auch nicht? Hm

Ich werfe mal Forth in den Ring!
Wer sich mal mit UPN auf HP Taschenrechnern anfreunden konnte - hat da 
schon mal einen guten Einstieg
;-)

von Rainer V. (a_zip)


Lesenswert?

Walter K. schrieb:
> Ich werfe mal Forth in den Ring!

Ja, aber das wird hier im Forum weitgehenst ignoriert, weshalb ich mich 
der Einfachheit halber meist als Assembler-Freund "oute". War schon auf 
Atari eine helle Freude und mit Forth Controller-Software (interaktiv) 
zu erzeugen, muß man einfach mal gemacht haben ...
Gruß Rainer

von Knallt ihn ab, den Troll (Gast)


Lesenswert?

Norbert schrieb:
> Zu dieser Kategorie gehört
> zB. die kategorische Ablehnung der Einrückung bei Python. Als wenn das
> die wichtigste sprachbestimmende Eigenschaft wäre. Und das obwohl man
> sich ja selbst disqualifiziert, wenn man zugibt mit einer einfachen
> Einrückung nicht klar zu kommen.

Ich denke, die meisten, die die Einrückungen in Python ablehnen, 
benutzen Einrückungen sehr fleißig und ausgiebig in anderen Sprachen.

Ich z.B. lehne dieses Konzept ebenfalls strikt ab, denn meiner Meinung 
nach sollten Weißzeichen keinen Code erzeugen und ich denke, daß sehen 
recht viele so.
Ich persönlich habe es z.B. außerdem gerne, daß, wenn ich einen 
Codeblock z.B. nach einem If-Statement aufmache, dessen Ende auch gleich 
mit festlegen kann. Ohne schließende Akkolade fehlt mir da einfach was.

von Nachdenklicher (Gast)


Lesenswert?

Rainer V. schrieb:
> Den Mist, den ich logisch verzapft habe, kann
> und soll keiner erkennen oder gar korrigieren.

Zumal derartige logische Fehler auch in C nicht ausgeschlossen sind.
1
if (something)
2
    do_this();
3
    do_that();
4
do_something_else();

Wie soll hier irgendein Automatismus erkennen, welche der beiden 
möglichen Fehler der "richtige" ist? Fehlen die geschweiften Klammern, 
und do_that() soll nur aufgerufen werden, wenn something wahr ist, oder 
ist do_that() fälschlicherweise eingerückt und soll immer ausgeführt 
werden? Syntaktisch korrekt ist der Code auf jeden Fall, er wird ohne 
Fehlermeldungen kompilieren. (Und bevor jemand seine witzigen 5 Minuten 
hat - er wird natürlich nur kompilieren, wenn er in einer Umgebung 
steht, in der die Variable und Funktionen, auf die hier Bezug genommen 
wird, auch vorhanden sind.)

Ein Automatismus könnte hier höchstens "Einrückung und Struktur passen 
nicht zusammen" erkennen, aber nicht automatisch lösen. Niemand außer 
einem Menschen, der weiß, was der Code bezwecken soll, weiß, welche der 
beiden Optionen richtig ist. Ein Editor könnte die Einrückung 
automatisch der Struktur anpassen, logisch richtig wird es damit aber 
nicht zwangsweise.

"Man kann Mist bauen" ist also definitiv keine Eigenschaft, die exklusiv 
für die eine oder die andere Sprache wäre.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo c-hater.

c-hater schrieb:

>> Und jeder besserer Editor oder der in einer Python-IDE überprüft das, so
>> dass man da überhaupt keinen Mist bauen kann...
>
> Das ist doch Quatsch, schon aus rein logischen Erwägungen MUSS das
> Quatsch sein. Da die Einrückung die einzige Information ist, kann keine
> IDE überprüfen, ob korrekt eingerückt wurde, um das zu tun, was
> tatsächlich intendiert war.
> Alles, was die IDE tun kann ist: zu überprüfen, ob's am Ende aufgeht.

Um in jedem Fall zu überprüfen, ob das was Du da gemacht hast, sinnvoll 
ist, bräuchtest Du eine KI die mindestens so kompetent ist wie Du 
selber. ;O)

Letztlich kann eine IDE nur Formalismen überprüfen.

>
> Bei Sprachen, bei denen die Struktur sinnvoll (nämlich durch Token für
> Anfang und Ende) bestimmt wird, ist die Einrückung eigentlich komplett
> überflüssig für den Inhalt. Aber: Hier kann die IDE vollautomatisch die
> zum geschriebenen Inhalt passende Einrückung erzeugen, was es dann dem
> Lesenden einfacher macht, Fehler in der Struktur zu finden.

Und jetzt interpretiere die Ein- und Ausrückung einmal als Token.....

> Form follows function, so ist es sinnvoll.

Form (Einrückungen) follows function (Les- und Wartbarkeit)

> Der Python-Ansatz hingegen
> ist Bullshit, weil er potentiell weniger Redundanz bietet und damit
> naturgemäß fehlerträchtiger ist.

"Echte" Redundanz hat einen zweiten Thread, besser sogar ein anderes 
paralleles Programm, das in einer anderen Sprache geschrieben wurde, 
mindestens aber mit einem anderen Compiler übersetzt wurde. ;O)

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Walter und Abdul.

Walter K. schrieb:
> Abdul K. schrieb:
>> Also doch nicht Python? Und auch nicht Perl, C, C++, Lua und sowieso
>> nicht Assembler? Und PHP sowie auch JS auch nicht? Hm
>
> Ich werfe mal Forth in den Ring!
> Wer sich mal mit UPN auf HP Taschenrechnern anfreunden konnte - hat da
> schon mal einen guten Einstieg
> ;-)

Wenn ihr schon so beim Brainstorming für Microcontroller bzw. Embeddet 
freundliche Programiersprachen seit, dann vergesst JOVIAL nicht, einen 
ALGOL Abkömmling. ;O)

Siehe: https://de.wikipedia.org/wiki/JOVIAL

Der  MIL-STD-1589C, der Jovial standardisiert, findet sich hier:
http://everyspec.com/MIL-STD/MIL-STD-1500-1599/MIL-STD-1589C_14577/


Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

: Bearbeitet durch User
von Martin (Gast)


Lesenswert?

Bernd W. schrieb:

> Wenn ihr schon so beim Brainstorming für Microcontroller bzw. Embeddet
> freundliche Programiersprachen seit, dann vergesst JOVIAL nicht, einen
> ALGOL Abkömmling. ;O)

Das Thema lautet: Hardware Programmierung mit Python. Wieso verstehst Du 
das nicht?

Lass mich raten: Du bist Rentner und selbstverliebt in inhaltslose 
Beiträge.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Martin.

Martin schrieb:

> Das Thema lautet: Hardware Programmierung mit Python. Wieso verstehst Du
> das nicht?

Das hat nichts mit verstehen zu tun, dass passte halt gut zum Punkt der 
Diskussion.

Genauso könntest Du Argumentieren, dass Einrückungen oder auch nicht 
kein Gegenstand der Diskussion ist. ;O)

> Lass mich raten: Du bist Rentner

Ich hoffe, das Rentner werden kann ich noch ein Jahrzehnt 
hinausschieben.

> und selbstverliebt in inhaltslose
> Beiträge.

A) Wir sind auf der Welt um unseren Narzissmus auszuleben. ;O)

B) Was inhaltslos ist, entscheidest Du nicht alleine. ;O)



Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Das mit den Weißzeichen finde ich schon ein nachvollziehbaren 
gewichtiges Argument. Eine eingebaute Logik zur Prüfung auf 
Sinnhaftigkeit finde ich sehr vorteilhaft.

Bei MIL hm, da gab's doch noch so eine Sprache, die weltfremd war...

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


Lesenswert?

Nachdenklicher schrieb:
> Ein Automatismus könnte hier höchstens "Einrückung und Struktur passen
> nicht zusammen" erkennen, aber nicht automatisch lösen.

Das verlangt ja auch niemand. OK. Ich nicht.

> Ein Editor könnte die Einrückung automatisch der Struktur anpassen,
> logisch richtig wird es damit aber nicht zwangsweise.

Klar. Aber ich kann nach dem automatischen Einrücken schon sehen, daß 
da gar nicht das passiert, was ich meine. Aber eigentlich ist das auch 
akademisch, denn jeder Code-Editor kann schon seit Jahren Code beim 
tippen automatisch einrücken. Wenn der Cursor nach dem ersten Statement 
unvermittelt auf die Höhe des if springt, sollten eigentlich die 
Warnlampen angehen.

Und sogar das greift noch zu kurz. Die meisten Projekte haben einen 
Coding Style Guide. Und oft steht da die (sehr sinnvolle) Forderung 
drin, daß Blöcke nach einer Kondition immer explizit geklammert sein 
müssen. Auch wenn da nur ein Statement steht.

Außer bei Python. Da geht das halt nicht.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Axel S. schrieb:
> Außer bei Python. Da geht das halt nicht.

Da wird halt immer eingerückt.

von Nachdenklicher (Gast)


Lesenswert?

Axel S. schrieb:
> Und sogar das greift noch zu kurz. Die meisten Projekte haben einen
> Coding Style Guide. Und oft steht da die (sehr sinnvolle) Forderung
> drin, daß Blöcke nach einer Kondition immer explizit geklammert sein
> müssen. Auch wenn da nur ein Statement steht.

In Sprachen, die Blöcke klammern, mache ich das grundsätzlich genau so.

Allerdings hast du bei Python immer "das Programm macht, nach was es auf 
den ersten Blick aussieht". Wenn es eingerückt ist, gehört es für den 
Interpreter in den Block, wenn nicht, dann nicht. Wenn man in C die 
fehlenden Klammern übersieht, was bei schlecht formatiertem Code, 
schnell mal passiert, und etwas falsch eingerückt ist, könnten User und 
Compiler unterschiedliche Meinungen haben. ;-)

von Johannes (Gast)


Lesenswert?

Tja, es gibt 2 Arten von Leuten. Die, die mit Python gute und große 
Softwareprojekte stemmen, und die, die sich heute noch über die 
Whitespaces aufregen.

Ist ja völlig legitim das es für einen persönlich eine Umgewöhnung ist. 
Umgewöhnung ist Arbeit, braucht Zeit etc. pp.

Aber funktionieren tut es. Und so lange die Bugtracker nicht vor Fehlern 
überquellen die auf falsche Einrückung in Python zurückzuführen sind, 
würde ich nicht davon ausgehen, dass es besonders fehlerträchtig ist.

Im Alltag (schreibe oft genug parallel an Code mit {} und Python) 
gewöhnt man sich dran. Es kommt auch nicht zu Verwechslungen beim 
Sprachwechsel, dafür ist die Syntax und das Denkmodell bei Python zu 
unterschiedlich zu Sprachen mit {}.

Beitrag #6912045 wurde von einem Moderator gelöscht.
von Karl (Gast)


Lesenswert?

c-hater schrieb:
> Bei Sprachen, bei denen die Struktur sinnvoll (nämlich durch Token für
> Anfang und Ende) bestimmt wird, ist die Einrückung eigentlich komplett
> überflüssig für den Inhalt. Aber: Hier kann die IDE vollautomatisch die
> zum geschriebenen Inhalt passende Einrückung erzeugen, was es dann dem
> Lesenden einfacher macht, Fehler in der Struktur zu finden.

Völliger Quatsch, wenn der Token an der falschen Stelle steht, sieht mam 
das durch die Einreichung genauso gut oder schlecht wie in Python. Ein 
Token bringt keinen Vorteil.

von Rolf M. (rmagnus)


Lesenswert?

Johannes schrieb:
> Aber funktionieren tut es. Und so lange die Bugtracker nicht vor Fehlern
> überquellen die auf falsche Einrückung in Python zurückzuführen sind,
> würde ich nicht davon ausgehen, dass es besonders fehlerträchtig ist.

Es gab durchaus auch mal jemanden, der eine Variante mit Klammern 
gemacht hat ("Python with Braces"), aber das hat keinen interessiert, 
und die Webseite dazu funktioniert nicht mehr. So wichtig scheint das 
also nicht zu sein, denn Python erfreut sich trotzdem sehr großer 
Beliebtheit.

Btw:
1
$ python3 -c "from __future__ import braces"
2
  File "<string>", line 1
3
SyntaxError: not a chance

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Das Militärdingens war(/ist?) übrigens ADA.

- Obergefreiter

von Nur_ein_Typ (Gast)


Lesenswert?

Axel S. schrieb:
> Außer bei Python. Da geht das halt nicht.

Ja, und? Das Lustige an diesem "Argument" mit dem Whitespace ist, daß es 
immer nur von Leuten kommt, die noch nie wirklich praktisch mit Python 
gearbeitet haben. Oft merkt man den damit "Argumentierenden" an, daß 
dieser Punkt sie so sehr stört, daß sie es gar nicht erst ausprobieren 
wollen.

Eric S. Raymond, der Autor von fetchmail und "The Cathedral and The 
Bazaar" und ein passionierter "Sammler von Programmiersprachen", hat vor 
einigen Jahren seine eigenen Erfahrungen mit Python zusammengefaßt, die 
den meinen im Übrigen sehr ähneln. Auch er hatte anfangs starke 
Vorbehalte dagegen, Whitespace als Syntaxelemente zu benutzen. Trotzdem 
hat er es ausprobiert, und wie man seinen Ausführungen entnehmen kann, 
hat er das nicht bereut und sich schnell mit der Sprache angefreundet: 
[1].

Auch ich fühlte mich durch die Whitespace-Geschichte (mit einem gewissen 
Grauen) an ältere Fortran-Versionen erinnert, deswegen habe ich mich 
lange geziert, mir Python einmal genauer anzuschauen. Aber dann habe ich 
bemerkt, daß eine ganze Reihe von großen und sehr großen Projekten wie 
KDE, OpenOffice oder auch PostgreSQL Python als Skriptsprache 
inkorporiert hatten, und da habe ich mich gefragt: warum tun die das 
bloß, was ist der Punkt an dieser komischen Sprache?

Also habe ich beschlossen, mir Python einmal genauer anzuschauen, zumal 
ich KDE, OpenOffice und auch PostgreSQL im Einsatz hatte. Und was soll 
ich sagen? Das mit dem Whitespace hat überhaupt gar nicht wehgetan, 
sicherlich auch, weil mein GNU Emacs damit ganz wunderbar umgehen 
konnte. Und dann fielen mir schon an den ersten ein, zwei Tagen die 
ersten großen Stärken von Python auf: die exorbitante Infrastruktur an 
mitgelieferten und extern verfügbaren Bibliotheken, seine hohe 
Performanz, die Klarheit, Les- und Wartbarkeit des Code, dazu 
Typsicherheit, Introspektion und Reflexion, und und und.

Binnen einer Woche habe ich entschieden, meine damalige 
Standardskriptsprache Perl nach 13 oder 14 Jahren durch Python ersetzen. 
Und diese Entscheidung habe ich seit diesem Zeitpunkt noch nicht eine 
Sekunde lang bereut -- Perl nutze ich nur noch da, wo es bis dato nahezu 
unschlagbar ist, nämlich als Filter auf der Kommandozeile mit "perl -pe" 
oder "perl -e". (Leider ist genau das Feature, das Perl in diesem 
Bereich so gut macht, gleichzeitig auch das Feature, das Perl- und auch 
Ruby-Code so oft schlecht lesbar und wartbar macht, nämlich die in den 
Sprachkern eigebauten Regular Expressions...) Tatsächlich ist es 
allerdings so, daß man mit Perl durchaus les- und wartbaren Code 
schreiben kann, aber dazu muß man diszipliniert arbeiten und sich Mühe 
geben. In Python hingegen muß ich diszipliniert sein und mir Mühe geben, 
um schlecht les- und wartbaren Code zu schreiben...

Wie dem auch sei: wenn man seine Abneigung gegen die 
Whitespace-Geschichte einmal überwunden hat und sich mal mit Python 
beschäftigt, stellt man schnell fest, wie mächtig und leisungsfähig die 
Sprache tatsächlich ist und daß diese Sache mit dem Whitespace in der 
Praxis überhaupt gar kein Problem darstellt. Aber dazu muß man natürlich 
einmal über den eigenen Schatten springen, und nach meinen Erfahrungen 
sind die, die das können, meistens die besseren Entwickler und 
Techniker.

[1] https://www.linuxjournal.com/article/3882

von c-hater (Gast)


Lesenswert?

Knallt ihn ab, den Troll schrieb:

> Ich denke, die meisten, die die Einrückungen in Python ablehnen,
> benutzen Einrückungen sehr fleißig und ausgiebig in anderen Sprachen.

Natürlich, aber da läßt man Einrücken, anstatt es selber zu tun. Und 
wenn sich die Struktur ändert, wird auch automatisch entsprechend der 
neuen Struktur "umgerückt". Das ist, was die Sache so komfortabel macht. 
Die Einrückung ist dann nur noch Feedback für den Programmierer (die 
Sprachen selber benötigen sie ja nicht). Der sieht sofort, ob die 
neueste Umstrukturierung so verlaufen ist, wie er sich das vorgestellt 
hat.

> Ich persönlich habe es z.B. außerdem gerne, daß, wenn ich einen
> Codeblock z.B. nach einem If-Statement aufmache, dessen Ende auch gleich
> mit festlegen kann. Ohne schließende Akkolade fehlt mir da einfach was.

Naja, es muss ja nicht unbedingt eine "}" sein. In richtigen Sprachen 
steht dann da automagisch z.B. gleich ein "end if". Da weiß man dann 
auch gleich noch, welche Art Kontrollstruktur hier ihr Ende findet...

Aber klar, das "}" ist immer noch weitaus besser als garnix an dieser 
Stelle.

von Karl (Gast)


Lesenswert?

c-hater schrieb:
> Der sieht sofort, ob die neueste Umstrukturierung so verlaufen ist, wie
> er sich das vorgestellt hat.

Bei Python sieht man es nicht nach der Umstrukturierung sonder während.

c-hater schrieb:
> Aber klar, das "}" ist immer noch weitaus besser als garnix an dieser
> Stelle.

Es ist offensichtlich wenn ein Blick abgeschlossen ist, weil du folgende 
Bock weniger eingerückt ist. Was willst du mehr? Es ist übersichtlicher, 
ein eingerückt Bock oder irgendwelche Klammern, die im Quelltext 
untergehen?
Garnix geht in Python nicht, da wird mindestens ein pass erwartet.

c-hater schrieb:
> In richtigen Sprachen steht dann da automagisch z.B. gleich ein "end if"

a) Liegt das nicht an der Sprache und b) wer so lange Blöcke bekommt, 
dass er die "Überschrift" nicht mehr sieht und deshalb nicht mehr weiß 
was er tut, hat andere Probleme.

von Johannes (Gast)


Lesenswert?

Karl schrieb:
> c-hater schrieb:
>> In richtigen Sprachen steht dann da automagisch z.B. gleich ein "end if"
>
> a) Liegt das nicht an der Sprache und b) wer so lange Blöcke bekommt,
> dass er die "Überschrift" nicht mehr sieht und deshalb nicht mehr weiß
> was er tut, hat andere Probleme.

Mal abgesehen davon, dass moderne IDEs den zugehörigen Anfangsblock 
hinter der schließenden Klammer einblenden können wenn es der Benutzer 
will. Das sieht dann z.B. so aus:

https://raw.githubusercontent.com/j0meinaster/bracket-peek/master/assets/inline.png

Aber wer die Tools halt nicht kennt... für mich hab ich das Feature 
(weis gar nicht mehr welche Sprache das war, jedenfalls nicht 
JavaScript, das Bild ist nur Beispiel) gleich wieder abgeschaltet. 
Bringt mir persönlich nichts, und ich brauch für mich nicht so viel 
Bling Bling im Code.

von Wühlhase (Gast)


Lesenswert?

Könnte das mal bitte jemand in Python umformulieren?
1
void showMeThisInPython(){
2
  for(int i = 0; i < 15; i++){
3
    if(i > 2 && < 8){
4
      if(isEven(i){doSomeEvil();}
5
      if(i > 5){
6
        doWithBiggerFive(i);
7
        doSomeOther();
8
      }
9
    }
10
    else{
11
      switch(i){
12
        case 10:
13
          foo(i);
14
          break;
15
        case 11:
16
          boo(i);
17
          break;
18
        default:
19
          whooo(i);
20
      }
21
    }
22
  }
23
}

von Rainer V. (a_zip)


Lesenswert?

Arzt schon gerufen??

von Sheeva P. (sheevaplug)


Lesenswert?

Wühlhase schrieb:
> Könnte das mal bitte jemand in Python umformulieren?

Dein "Code" ist kaputt.

von North B. (Gast)


Lesenswert?

@ Wühlhase

Hoffentlich ist bald Ostern, dann hast Du wieder was zu hoppeln.

von neuer PIC Freund (Gast)


Lesenswert?

In Python schier unmöglich: ;-)
1
void showMeThisInPython(
2
){for(
3
int i = 0; i < 15; i++){if(
4
i > 2 && i < 8){if(
5
isEven(
6
i)){doSomeEvil(
7
);}if(
8
i > 5){doWithBiggerFive(
9
i);doSomeOther(
10
);}}else{switch(
11
i){case 10:foo(
12
i);break;case 11:boo(
13
i);break;default:whooo(
14
i);}}}}

von Nachdenklicher (Gast)


Lesenswert?

Johannes schrieb:
> weis gar nicht mehr welche Sprache das war, jedenfalls nicht
> JavaScript, das Bild ist nur Beispiel

Extension "Bracket Peek" für VS Code. Funktioniert wohl mit vielen 
"geklammerten Sprachen", mit Python natürlich mangels Klammern nicht. 
;-)

Gern geschehen.

von Rolf M. (rmagnus)


Lesenswert?

Wühlhase schrieb:
> Könnte das mal bitte jemand in Python umformulieren?

Man könnte damit anfangen, es in funktionierenden und verständlichen 
C-Code umzuformulieren.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Rolf.

Rolf M. schrieb:

>> Könnte das mal bitte jemand in Python umformulieren?
>
> Man könnte damit anfangen, es in funktionierenden und verständlichen
> C-Code umzuformulieren.

Richtig. Weil das ist Syntax Akrobatik und keine solide 
Programmierarbeit.



Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

von Wühlhase (Gast)


Lesenswert?

Leute, an diesem Codeschnipsel soll nix funktionieren. Der ist nicht zum 
Ausführen gedacht, und das return fehlt auch nicht - es ist einfach nur 
nicht da. Wer nur C kennt, denke es sich bitte einfach, andere 
syntaxänliche Sprachen können darauf verzichten und ich wollte mich auf 
das Nötige beschränken.

Ich wollte lediglich mal sehen, um wieviel übersichtlicher das 
hochgelobte Fehlen der Akkoladen in Python aussieht. Und so 
realitätsfern ist der Code ja nun wirklich nicht.

Die bisherigen Antworten darauf sind zwar ernüchternd, aber entsprechen 
so dem altbekannten Forendurchschnitt. Oder ist die Pythonsyntax doch 
nicht so geil?

von Johannes (Gast)


Lesenswert?

Nachdenklicher schrieb:
> Extension "Bracket Peek" für VS Code. Funktioniert wohl mit vielen
> "geklammerten Sprachen", mit Python natürlich mangels Klammern nicht.
> ;-)
>
> Gern geschehen.

Meinte das es nicht dieses Plugin war, sondern irgendeine andere IDE ;-)


Zu dem Beispiel: Mal abgesehen von der grauenhaften Struktur des Codes 
und dem offensichtlichen Syntaxfehler - wo liegt das Problem? Auf die 
Schnelle (werd dafür ja nicht bezahlt):
1
def show_me_this_in_python():
2
3
  for i in range(15):
4
  
5
    if(i>2 and i<8): 
6
      if(isEven(i)): 
7
        doSomeEvil()
8
      if(i>5): 
9
        doWithBiggerFive(i)
10
    else:
11
      if(i==10): foo(i)
12
      elif(i==11): boo(i)
13
      else: whooo(i)
(Ich musste mich zusammenreißen das untere if-elif-else nicht als 
elif-elif-else als Ersatz für else zu schreiben, aber das hätte die 
Codestruktur verändert.)

Sollte das C++ sein und i per Referenz übergeben/verändert werden dann

1) Schande über den Schreiber für so einen Hirnfurz, und
2) Statt for ein while und i als Rückgabewert der jeweiligen Methode.

von Johannes (Gast)


Lesenswert?

Anmerkung: Man denke sich noch das fehlende doSomeOther() unter das 
doWithBiggerFive(i).

von Johannes S. (Gast)


Lesenswert?

andersrum wird es interessanter: wie sehen 'multiple return values', 
'Positional and Keyword Arguments' und andere Features in C aus?
Vermutlich ist nicht alles für gute Performance auf kleinen Embedded 
Systemen brauchbar, aber trotzdem sind das für mich sehr schöne 
Features. Warum immer nur auf das Einrücken rumgeritten wird, was 
einfach nur Übung erfordert das schnell zu erfassen, kann ich nicht 
verstehen.

von Fred (Gast)


Lesenswert?

neuer PIC Freund (Gast)
>In Python schier unmöglich: ;-)
>void showMeThisInPython( ...

Das ist kein Problem, weil in Firmen die etwas auf sich halten diese 
zyklomatische Komplexität verboten ist und der Entwickler im Code-Review 
glatt abgewatscht würde.

von Martin (Gast)


Lesenswert?

@ Johannes

Warum springst Du über das Stöckchen von Wühlhase? Du bist doch nicht 
sein Hündchen, oder?

von Johannes (Gast)


Lesenswert?

Bei Sprachparsern erhält man häufig solche Konstrukte. (Natürlich mit 
sinnvollen Bedingungen in den ifs und dann mit while statt for.)

von Johannes (Gast)


Lesenswert?

@Martin

Weil von ihm bisher mehr sinnvolle Beiträge kamen als von dir ;-)

Aber ja, ich weiß worauf du hinaus willst und hab daher extra vorher 
nachgesehen.

von Rolf M. (rmagnus)


Lesenswert?

Wühlhase schrieb:
> Leute, an diesem Codeschnipsel soll nix funktionieren.

Warum soll man es dann in eine andere Sprache umformulieren?

> Der ist nicht zum Ausführen gedacht, und das return fehlt auch nicht - es
> ist einfach nur nicht da.

Was für ein return?

> Wer nur C kennt, denke es sich bitte einfach, andere
> syntaxänliche Sprachen können darauf verzichten und ich wollte mich auf
> das Nötige beschränken.

Das hier funktioniert in keiner mir bekannten Sprache:
1
 if(i > 2 && < 8){

> Die bisherigen Antworten darauf sind zwar ernüchternd, aber entsprechen
> so dem altbekannten Forendurchschnitt.

Nein, es entspricht der Qualität des von dir gezeigten Codes.

Johannes S. schrieb:
> andersrum wird es interessanter: wie sehen 'multiple return values',
> 'Positional and Keyword Arguments' und andere Features in C aus?

Mehrere Return-Werte lassen sich zwar nicht in C, aber zumindest in C++ 
inzwischen gut handhaben.
1
#include <iostream>
2
#include <tuple>
3
#include <string>
4
5
std::tuple<int, std::string> myfunc()
6
{
7
    return { 42, "Hello world" };
8
}
9
10
int main()
11
{
12
    auto [ number, text ] = myfunc();
13
    std::cout << number << ' ' << text  << '\n';
14
}
Die Iteration über ein Dictionary aus Python:
1
for key, value in something.items():
kann man damit entsprechend in C++ mit einer std::map so schreiben:
1
for (auto& [ key, value ]: something)

> Warum immer nur auf das Einrücken rumgeritten wird, was einfach nur Übung
> erfordert das schnell zu erfassen, kann ich nicht verstehen.

Warum recht viele so eine extreme Abneigung dagegen haben, verstehe ich 
auch nicht.

: Bearbeitet durch User
von Karl (Gast)


Lesenswert?

Rolf M. schrieb:
> int main()
> {
>     auto [ number, text ] = myfunc();
>     std::cout << number << ' ' << text  << '\n';
> }

Ist aber schon ein bisschen kryptisch.

von Karl (Gast)


Lesenswert?

Johannes schrieb:
> Karl schrieb:
>> a) Liegt das nicht an der Sprache und b) wer so lange Blöcke bekommt,
>> dass er die "Überschrift" nicht mehr sieht und deshalb nicht mehr weiß
>> was er tut, hat andere Probleme.
>
> Mal abgesehen davon, dass moderne IDEs den zugehörigen Anfangsblock
> hinter der schließenden Klammer einblenden können wenn es der Benutzer
> will. Das sieht dann z.B. so aus:

> Aber wer die Tools halt nicht kennt... für mich hab ich das Feature
> (weis gar nicht mehr welche Sprache das war, jedenfalls nicht
> JavaScript, das Bild ist nur Beispiel) gleich wieder abgeschaltet.
> Bringt mir persönlich nichts, und ich brauch für mich nicht so viel
> Bling Bling im Code.

Was bitteschön hat dein Bling Bling Tool mit meinen Aussagen zu tun?

von Rolf M. (rmagnus)


Lesenswert?

Karl schrieb:
> Rolf M. schrieb:
>> int main()
>> {
>>     auto [ number, text ] = myfunc();
>>     std::cout << number << ' ' << text  << '\n';
>> }
>
> Ist aber schon ein bisschen kryptisch.

Was ist daran kryptischer als an der Python-Variante?
1
number, text = myfunc()

von Johannes (Gast)


Lesenswert?

@Karl

Das bezog sich auf den Kommentar von c-hater (den ich mit zitiert habe!) 
und war eine Ergänzung zu deinem Kommentar dazu.

von Stefan F. (Gast)


Lesenswert?

Rolf M. schrieb:
>>>     std::cout << number << ' ' << text  << '\n';
> Was ist daran kryptischer als an der Python-Variante?

Das der Shift Operator zur Ausgabe missbrauch wird, man das Ziel aber 
links hin schreiben muss, finde ich schon ziemlich von hinten durch die 
Brust. Aber lassen wir das. Jede Sprache hat ihre "Macken".

von demo (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Rolf M. schrieb:
>>>>     std::cout << number << ' ' << text  << '\n';
>> Was ist daran kryptischer als an der Python-Variante?
>
> Das der Shift Operator zur Ausgabe missbrauch wird, man das Ziel aber
> links hin schreiben muss, finde ich schon ziemlich von hinten durch die
> Brust. Aber lassen wir das. Jede Sprache hat ihre "Macken".

Das hat im Grunde wenig mit C++ zu tun sondern ist den C++ 
Standard-Bibliotheken anzulasten und war auch in meinen Augen ein Griff 
ins Klo, den man nur nicht mehr los wird. C++ definiert nur die 
Möglichkeit Operatoren überladen zu können und das nutzen die Libs. 
Natürlich kann man damit auch großem Mist bauen. Mist kann man aber auch 
mit jeder anderen Sprache bauen. Ich vermute mal ganz am Anfang von C++ 
hat man krampfhaft versucht eine sinnvolle Anwendung der Überladung von 
Operatoren zu finden. Das Ergebnis landete dann fast von Anfang an in 
allen Büchern und Libs.
Also was solls, keiner ist gezwungen die Syntax von oben zu benutzen. 
Wem printf reicht der nimmt halt das, oder baut sich seinen eigenen 
Kram. Aber die These "C++ ist Scheiße wegen der Ausgabe mit dem 
Shift-Operator" kann man so nicht stehen lassen.

von Karl (Gast)


Lesenswert?

Wühlhase schrieb:
> Könnte das mal bitte jemand in Python umformulieren?

Ist es so schwer von einer Syntax in die andere zu wechseln?
1
def showMeThisInPython():
2
  for i in range(15):
3
    if i > 2 and i < 8:
4
      if isEven(i): doSomeEvil()
5
      if(i > 5):
6
        doWithBiggerFive(i)
7
        doSomeOther()
8
    else:
9
      match i:
10
        case 10:
11
          foo(i)
12
        case 11:
13
          boo(i)
14
        case _:
15
          whooo(i)
Wie man sieht, spart man sich 6 Zeilen mit }- Klammern und in den Zeilen 
die {-Klammern und Semikolons.
Besseren Code bekommt man nicht durch die Syntax, sondern in dem man den 
Code anders strukturiert:
1
def showMeThisBetterInPython():
2
  for i in range(15):
3
    if i > 2 and i < 8 and isEven(i):
4
      doSomeEvil()
5
    elif i > 5 and i < 8:
6
      doWithBiggerFive(i)
7
      doSomeOther()
8
    elif i == 10:
9
      foo(i)
10
    elif i == 11:
11
      boo(i)
12
    else:
13
      whooo(i)

Interessant wird es erst, wenn man das Ganze in ein Objekt packt, daber 
dafür ist dein Beispiel zu trivial. Man kann auch noch mit Listen, Tupel 
oder Dictionaries arbeiten, ja nach dem, was man vor hat. Der Voerteil 
von Python ist halt, dass man nicht alles auf einen int runterbrechen 
muss.

von Karl (Gast)


Lesenswert?

Rolf M. schrieb:
> Was ist daran kryptischer als an der Python-Variante?
> number, text = myfunc()

Die kryptischen Zeichen :: << << ' ' << << '\n' ?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Karl schrieb:
> if i > 2 and i < 8:

Das könnte man noch etwas verschönern:
1
  if 2 < i < 8:

von Rolf M. (rmagnus)


Lesenswert?

Karl schrieb:
> Rolf M. schrieb:
>> Was ist daran kryptischer als an der Python-Variante?
>> number, text = myfunc()
>
> Die kryptischen Zeichen :: << << ' ' << << '\n' ?

Die sind aber eine andere Baustelle und haben rein gar nichts mit den 
mehreren Returnwerten zu tun. Ich hab das nur hingeschrieben, damit das 
Programm sein Ergebnis auch ausgibt.
Aber ja, die Ausgabe über den Shift-Operator ist nicht gerade schön zu 
lesen. In C++20 kann man schreiben:
1
cout << format("{} {}\n", number, text);
was dann schon gar nicht mehr so weit von Python weg ist. Wobei für 
jemanden, der das nicht kennt, "{} {}\n" auch eher kryptisch aussieht.

Leider ist die Unterstützung dafür in den Compilern noch recht dünn 
gesät.

: Bearbeitet durch User
von Wühlhase (Gast)


Lesenswert?

Johannes schrieb:
> def show_me_this_in_python():
>   for i in range(15):
>
>     if(i>2 and i<8):
>       if(isEven(i)):
>         doSomeEvil()
>       if(i>5):
>         doWithBiggerFive(i)
>     else:
>       if(i==10): foo(i)
>       elif(i==11): boo(i)
>       else: whooo(i)

Ah, danke...schön daß jemand verstanden hat, worauf ich hinaus wollte.

Mir gefallen Weißzeichen als Syntaxelement zwar nach wie vor nicht so 
recht, gleichwohl muß ich jedoch sagen daß mir in Sachen 
Übersichtlichkeit nichts fehlt. Codeblöcke über Einrückung zu trennen 
scheint tatsächlich mindestens so gut zu funktionieren wie mit {}.
Danke für den Eindruck.


Karl schrieb:
> Ist es so schwer von einer Syntax in die andere zu wechseln?

Natürlich nicht, wenn einem die Zielsyntax vertraut ist. Und das ist der 
Punkt: Ich kenne die Syntax nicht. Ich habe zweimal ernsthaft darüber 
nachgedacht, Python zu lernen und mich etwas mit der Sprache 
beschäftigt, und kenne daher auch z.B. das Dictionary, aber ich bin 
natürlich weit davon entfernt die Syntax von Python zu kennen.

Und zur Diskussion über Einrückungen als Syntaxelement ist doch ein 
direkter Vergleich das beste Argument, daher meine Bitte an jemanden, 
der die Sprache kennt.

von Rainer V. (a_zip)


Lesenswert?

Wühlhase schrieb:
> Und zur Diskussion über Einrückungen als Syntaxelement ist doch ein
> direkter Vergleich das beste Argument, daher meine Bitte an jemanden,
> der die Sprache kennt.

Das hätteste doch alles mit dir allein ausmachen können. Und

Wühlhase schrieb:
> Ich habe zweimal ernsthaft darüber
> nachgedacht, Python zu lernen und

was denn noch? In jedem Tutorial hast du spätestens in "Kapitel 3" 
Einrückung... da brauchts doch kein blödsinniges "Codebeispiel" um zu 
erkennen, dass das was hat! Lustigerweise lehnen hier erstaunlich viele 
Spezialisten Python gerade wegen der Einrückung(!) ab und erzählen im 
gleichen Atemzug, dass sie Python gar nicht kennen...ist schon irgenwie 
merkwürdig :-)
Rainer

von Nur_ein_Typ (Gast)


Lesenswert?

Karl schrieb:
> Rolf M. schrieb:
>> int main()
>> {
>>     auto [ number, text ] = myfunc();
>>     std::cout << number << ' ' << text  << '\n';
>> }
>
> Ist aber schon ein bisschen kryptisch.

Weil Rolf '\n' anstelle von std::endl benutzt hat? ;-)

von Wühlhases Alter Ego (Gast)


Lesenswert?

Rainer V. schrieb:
> Das hätteste doch alles mit dir allein ausmachen können.

Ja, hätte ich. Habe ich aber nicht...und nun? Wenn das für dich 
überflüssig war, was ist dann dein Post?

von Nur_ein_Typ (Gast)


Lesenswert?

Wühlhase schrieb:
> Ah, danke...schön daß jemand verstanden hat, worauf ich hinaus wollte.

Das hättest Du der Einfachheit halber natürlich auch gleich erwähnen 
können. Ohne diese Erwähnung habe wohl nicht nur ich einen falschen 
Eindruck bekommen...

> Mir gefallen Weißzeichen als Syntaxelement zwar nach wie vor nicht so
> recht, gleichwohl muß ich jedoch sagen daß mir in Sachen
> Übersichtlichkeit nichts fehlt. Codeblöcke über Einrückung zu trennen
> scheint tatsächlich mindestens so gut zu funktionieren wie mit {}.

Das tut es. Wobei mir an Johannes' Code noch zwei Dinge aufgefallen 
sind, nämlich erstens daß er um die Bedingungen bei seinen ifs und elifs 
Klammern benutzt, die in Python zwar erlaubt, aber (meistens) 
überflüssig sind, zweitens daß er an einigen Stellen von der Möglichkeit 
Gebrauch macht, einzelne Statements direkt hinter die Bedingungen zu 
schreiben und an anderen Stellen darauf verzichtet. Konsistenter, IMHO 
auch übersichtlicher und besser an PEP8 [1] orientiert wäre also dies:
1
def show_me_this_in_python():
2
  '''we love docstrings'''
3
  for i in range(15):
4
    if i > 2 and i < 8: 
5
      if isEven(i): 
6
        doSomeEvil()
7
      if i>5: 
8
        doWithBiggerFive(i)
9
    else:
10
      if i == 10: 
11
        foo(i)
12
      elif i == 11: 
13
        boo(i)
14
      else: 
15
        whooo(i)

[1] https://www.python.org/dev/peps/pep-0008/

von Roland F. (rhf)


Lesenswert?

Hallo,
Rainer V. schrieb:
> Lustigerweise lehnen hier erstaunlich viele Spezialisten Python
> gerade wegen der Einrückung(!) ab und erzählen im gleichen
> Atemzug, dass sie Python gar nicht kennen...

Ich glaube das das nicht speziell gegen Phyton gerichtet ist, sondern 
alle Fälle betrifft wo die Struktur/Formatierung des Quelltextes Teil 
der Sprachsyntax ist.

> ...ist schon irgenwie merkwürdig :-)

Finde ich gar nicht.

rhf

von Nur_ein_Typ (Gast)


Lesenswert?

Roland F. schrieb:
> Rainer V. schrieb:
>> Lustigerweise lehnen hier erstaunlich viele Spezialisten Python
>> gerade wegen der Einrückung(!) ab und erzählen im gleichen
>> Atemzug, dass sie Python gar nicht kennen...
>
> Ich glaube das das nicht speziell gegen Phyton gerichtet ist, sondern
> alle Fälle betrifft wo die Struktur/Formatierung des Quelltextes Teil
> der Sprachsyntax ist.

Also ich finde das auch lustig, wie vehement hier gestandene und oft 
sogar erfahrene Ingenieure und Techniker ein Werkzeug ablehnen, das sie 
gar nicht kennen, dies nur wegen einer Eigenschaft, deren Alternative 
sie sogar selbst als redundant erkennen, während dasselbe Werkzeug laut 
aller einschlägiger Indizes und der Umfragen etwa von StackOverflow zu 
den beliebtesten Werkzeugen der Welt gehört... das sagt sicher mehr über 
die Ablehnenden als über das Werkzeug. ;-)

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Roland F.

Roland F. schrieb:

> Ich glaube das das nicht speziell gegen Phyton gerichtet ist, sondern
> alle Fälle betrifft wo die Struktur/Formatierung des Quelltextes Teil
> der Sprachsyntax ist.

Die alten Alpharüden und Silberrücken fühlen sich halt gegängelt. ;O)

Das mit den Einrückungen ist aber auch nur eine Regel, wie alle anderen 
beim Programmieren auch, an die man sich halten muss. Nur die anderen 
Regeln kennen Sie seit ewig und sind daran gewöhnt.

Ich will ja auch nicht behaupten, dass es bei mir anders ist, ab 30-40 
lässt das mit der Flexibilität ja erheblich nach, aber ich war auch nie 
so der grosse Programmierer, von daher war die Gewöhnung nicht so fest.

Zum Thema "Python und Microcontroller". Micropython hat nach der 
Wikipedia keinen Interpreter sondern einen Compiler. Nur die Syntax und 
Struktur der Sprache orientiert sich an Python(3). Daher würde ich eine 
ähnliche Performance wie bei C und Microcontrollern erwarten.

Siehe: https://de.wikipedia.org/wiki/MicroPython

Vieleicht meldet sich ja jemand, der beides kennt und vergleichen 
kann.....in Vergleich auch zu Assembler.


Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Bernd W. schrieb:
> Micropython hat nach der
> Wikipedia keinen Interpreter sondern einen Compiler.

Der Codey Rocky basiert auf dem ESP32 mit Micropython. So langsam wie 
die Skripte dort laufen muss das dann aber ein sehr schlechter Compiler 
sein.

von Olaf (Gast)


Lesenswert?

> Aber die These "C++ ist Scheiße wegen der Ausgabe mit dem
> Shift-Operator" kann man so nicht stehen lassen.

Ich finde ja eigentlich das C++ eine schoene Sprache ist. Zumindest die 
Teilmenge die ich davon benutze. :)
Da Problem vieler komplexer Sprachen in den letzen 10-15Jahren ist aber 
das die IMHO vom Elfenbeinturm  vereinnahmt wurden. Es duerfte 
mittlerweile schwer geworden sein Buecher zu diesem Thema zu finden die 
man noch versteht ohne die Sprache schon vorher verstanden zu haben. Da 
war frueher mal besser. Und da liegt IMHO auch letztlich der Naehrboden 
wieso oefters mal neue Sprachen modern werden. Da ist das alles noch 
hemdsaermliger und man kommt einfacher rein.

Olaf

von Markus (Gast)


Lesenswert?

Bernd W. (berndwiebus) Benutzerseite
19.12.2021 13:42

>Zum Thema "Python und Microcontroller". Micropython hat nach der
>Wikipedia keinen Interpreter sondern einen Compiler. Nur die Syntax und
>Struktur der Sprache orientiert sich an Python(3). Daher würde ich eine
>ähnliche Performance wie bei C und Microcontrollern erwarten.

>Siehe: https://de.wikipedia.org/wiki/MicroPython

>Vieleicht meldet sich ja jemand, der beides kennt und vergleichen
>kann.....in Vergleich auch zu Assembler.

Was die Performance angeht hat Yalu bereits hier im Thread Analysen dazu 
angestellt:
Beitrag "Re: Hardware Programmierung mit Python"

Maximimising Python Speed:
https://docs.micropython.org/en/v1.9.3/pyboard/reference/speed_python.html

von Rolf M. (rmagnus)


Lesenswert?

Bernd W. schrieb:
> Zum Thema "Python und Microcontroller". Micropython hat nach der
> Wikipedia keinen Interpreter sondern einen Compiler.

Du kannst Micropython genau wie das normale Python interaktiv nutzen. 
Das klingt mir eher nicht nach einem Compiler.
Unter https://www.micropython.org/unicorn/ gibt es auch einen 
online-Emulator, auf dem Micropython läuft.

von Markus (Gast)


Lesenswert?

Für den RP2040 gibt es einen sehr schönen Simulator für Micropython:
Beitrag "Re: PiPico Micropython"

von Norbert (Gast)


Lesenswert?

Markus schrieb:
> Für den RP2040 gibt es einen sehr schönen Simulator für
> Micropython:
> Beitrag "Re: PiPico Micropython"
Für vier Euro gibt es einen sehr schönen Raspberry Pi Pico.
Für null Euro Aufpreis gibt es ein sehr schönes Micropython UF2 Image.
Knopf drücken, anstecken, Drag'n'Drop, fettich.

von Markus (Gast)


Lesenswert?

>Für vier Euro gibt es einen sehr schönen Raspberry Pi Pico.
Ja, aber im Simulator kannst Du noch LEDs, Displays, Servos, MPUs usw. 
ansteuern. Im Repository gibt es auch schon neue Peripherie wie 
Schrittmotoren, die noch nicht in der aktuellen GUI sind.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Rolf M. schrieb:
> Du kannst Micropython genau wie das normale Python interaktiv nutzen.
> Das klingt mir eher nicht nach einem Compiler.

Im REPL-Modus wird der Code interpretiert, sonst kompiliert.

Kompiliert wird normalerweise nach Bytecode, der wiederum interpretiert
wird. Mit Funktionsdekoratoren kann der Compiler angewiesen werden, für
die entsprechenden Funktionen Native- statt Bytecode zu erzeugen.

Der Compiler optimiert aber längst nicht so gut, wie man es von
aktuellen C-Compilern gewohnt ist. Das hängt u.a. damit zusammen, dass
Python im Gegensatz zu C eine sehr dynamische Sprache ist und damit zu
Compilezeit nur wenig Informationen verfügbar sind, die den Compiler bei
der Optimierung unterstützen könnten. Außerdem ist der Compiler
Bestandteil des Laufzeitsystems und ist deswegen sehr schlank gehalten.

Mit Type-Hints kann der Programmierer den Compiler bei der Optimierung
etwas unterstützen.

Für PCs gibt es Cython, das Python-Code (optional mit Typdeklarationen)
nach C-Code kompiliert, der seinerseits von einem optimierenden
C-Compiler in die Mangel genommen wird, was zu deutlich effizienterem
Code führt. Evtl. kann man Cython per Crosscompiler auch für
Mikrocontroller nutzen, ich habe das aber noch nicht ausprobiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.