Kontext: Ich kann bis jetzt nur Java und will ein Programm schreiben um die Metadaten meiner Musikbibliothek zu verändern. Die Bibliothek die das Möglich macht unterstützt nur Python. Anfangs war ich echt positiv von der Einfachheit überrascht, aber mittlerweile kann ich den Hass auf Python sehr stark verstehen. Spätestens bei den Ersten Typisierungsfehlern lernt man stark typisierte Sprachen wie Java zu schätzen.
Python ist stark Typisiert. Was du meist ist dynamisch - statisch.
Ich mag dynamische Typisierung. Ich möchte nicht an jeder Stelle dem Programm erklären müssen, dass ich eine Fließkommazahl speichern möchte, wenn ich eine Ganzzahl mit einer Fließkommazahl multipliziert habe. Ich möchte auch nicht bei großen 2D-Arrays Speicherplatz fressen, weil keine Spalten mit verschiedneen Typen zugelassen werden und alles in Fließkomma, oder noch schlimmer in Text umgewandelt werden muss.
Provokativer Nimm: Wenn du dynamische Typisierung in einer Matrix brauchst, ist dein Programm vermutlich nicht besonders performant.
Genau wegen sowas würde ich Python nie für mehr als einfache Skripte nehmen, aber da stehe ich vermutlich eher allein auf weiter Flur.
Sowas macht in modernem Python auch niemand. Dem type checker für solche Konstrukte einen Typ beizubringen ist quasi unmöglich. Wer außerhalb von winzigen skripten keine type hints nutzt, machts mMn falsch.
Naja, ich habe ja direkt auf jemanden reagiert, der das offensichtlich tut, also so ganz niemand stimmt wohl nicht.
“Spalten mit verschiedenen Typen” klingt für mich stark nach Tabelle, a.k.a. Excel-Tabelle oder ne Art Datenbank-Table.
In einer strikten Typisierung wäre der Typ des Feldes einer n-dimensionalen Matrix bereits bekannt, was natürlich deutliche Vorteile hinsichtlich ihrer Abarbeitung in kritischen Bereichen erlauben würde. Bei “Spalten mit verschiedenen Typen” klingt das eher nach einem generischen Datenmodell.
a) Bei statisch typisierten Sprachen geht der Trend auch stark dort hin, dass der Complier für Dich die Typen ermittelt - zur Compile-Zeit. Auch haben viele davon auch die Möglichkeit punktuell dynamisch zu arbeiten, an genau den Stellen, wo man es braucht.
b) Oh wow, du möchtest nicht “Speicherplatz fressen”. Dann nimm eine Sprache / Werkzeug / Library, die nicht pro gespeichertem Wert einzeln tracken muss, von welchem Typ sie ist. Hier zahlst Du in dynamischen Sprachen immer einen Performance-Overhead. Deswegen wird z. B. in Python viel Number crunching auch nicht in Python selbst gemacht, sondern in NumPy
ad b) nicht nur Performance-Overhead, sondern eine dynamisch typisierte Sprache macht das ja auch nicht umsonst, da wird irgendwo ein Typen-Bit oder Byte rumfliegen.
Ich glaube, dass hinter der vorangehenden (also nicht deiner) Aussage, die Unkenntnis über effiziente Speichermodelle steht. Ein auf fp32 basiertes Modell ist für hohen Durchsatz garantiert geeigneter als irgendwas gemischtes. Deswegen ist der Speicherplatz egal, das wird eh alles in den Cache gerammelt und die sind groß genug. Und bei Nudelmaschinen (SIMD) muss man eh Homogenität gewährleisten.
Fünfzehn Extrapunkte für den Begriff Nudelmaschine für SIMD
Seit Jahren lasse ich den fallen und seit Jahren scheint das niemand zu registrieren. Mir geht das Herz auf - danke!