Jörg W. schrieb:> Pascal und Basic rannten auf dieser Ebene nicht mit.
Vielleicht wirds ja mit Object-Pascal noch was. Der FreePascal-Compiler
unterstuetzt mittlerweile
AVR, ARM, RISCV und Tensilica (ESP32).
W.Gates schrieb:> Das Beharrungsverhalten> steigt bei vielen Leuten um so mehr an je mehr man auf den Gashebel> steigt.
Es sei mal dahingestellt ob das stimmt, aber beim Thema
Programmiersprachen ist das überhaupt nicht der Punkt. Das ist als wenn
man streiten würde welcher Kugelschreiber der Beste ist. Vielleicht
schreibt einer ein bisschen besser als der andere, aber wer schreiben
kann, kann mit jedem Kugelschreiber schreiben.
DerChris schrieb:> Das ist als wenn> man streiten würde welcher Kugelschreiber der Beste ist. Vielleicht> schreibt einer ein bisschen besser als der andere, aber wer schreiben> kann, kann mit jedem Kugelschreiber schreiben.
Du hast vermutlich noch keine längeren Texte mit einem richtig guten
Kugelschreiber geschrieben. Der Unterschied ist riesig.
Zur Hilfe bei der Entscheidungsfindung für den TE habe ich auch noch
eine oder zwei Anmerkungen.
Eine Programmiersprache ist doch kein Freund(oder Freundin). "Jetzt hab
ich einen Anderen gefunden und mache mit dem Alten schluss..."
Es hält dich nichts davon ab deine alte Liebe c99 oder c11 weiterhin zu
benutzen. Es ist nur ein Werkzeug, wie eine neue Zange, die besser
geeignet ist um rechtwinklig zu biegen. Deswegen werfen wir doch nicht
die alte Rundbiegezange weg! Ihr seht, ich kann genau so schreckliche
vergleichende Beispiele wie meine Vorschreiber machen, hoffe aber die
Intention, der Toolcharakter einer Sprache verdeutlicht zu haben:P
Erfahrungsbericht: Ich(ganz jung:P) besitze eine VU+ Settop Box. Das
Build-Ökosystem dazu benötigt ein spezifisches Linux System
(Entwicklungsbedingt alt, Stabilität!) das mit OpenEmbedded dann für das
Zielsystem (eine mipsel32, auch rustikal) ein Linux System mit der
nötigen Paketverwaltung(wie zu erwarten, nicht das modernste, Linux:
vuduo2 3.13.5) generiert. Ein kompletter Erstellungsvorgang kann schon
einen halben Tag dauern und mehr als 20GB an Speicherplatz in Anspruch
nehmen. Will ich mir auf die schnelle also einen IoT oder
Mosquitto-Server zusammen schustern oder ein C/C++ basiertes selbst
geschriebenes Tool erstellen braucht das also einen Rattenschwanz von
Abhängigkeiten und jede Menge Ressourcen. Das ist völlig okay. Rust oder
Go sind aber genau für solche Aufgaben prädestiniert. Also dachte ich,
probier es mal aus.
MIPSel ist natürlich etwas exotisch und wie zu Erwarten kam es zu
Problemen. Nach 2 Tagen und ca. einer Woche Rust Erfahrung habe ich dann
aktiv an der Verbesserung des OpenSSL Paketes teilgenommen. Dank der
wunderbaren Community ging das recht flott und ohne Probleme. Gelernt
habe ich dabei auch jede Menge. Mit relativ wenig Overhead(natürlich den
Rust Compiler plus das zitierte LLVM-Backend für die Cross-Compilation)
kann ich nun auf die Schnelle ein kleines Tool oder Server als
Minimalbeispiel aufsetzen und darauf aufbauend entwickeln.
Verschiedenes:
Etwas Neues und ein frischer Wind sind eigentlich immer gut. In der
(Computer-)Technik sollte man Innovation begrüßen, da sie Verbesserungen
mit sich bringt und die Ängste, die man z.B. der Politik oder der
Veränderung als solcher gegenüber bringt hinten anstellen. Rust ist
gewöhnungsbedürftig. So wie auch das Konzept, das Speicheroperationen
sicherer machen will. Das Rust Buch,
https://doc.rust-lang.org/book/index.html bietet einen exzellenten
Einstieg in die Materie und führt in moderne(für manche natürlich ein
alter Hut) Konzepte wie Pattern Matching auf Control-Flow Basis oder
Closures ein. Die Community ist flexibel und freundlich und hat
mannigfaltige Interessen von System zu GUI-Programmierung über Embedded
bis hin zur OS Entwicklung. Ich widerspreche hier entschieden meinem
Vorgänger W.Gates, der meint bestimmen zu wollen, wie die Eltern ihr
Kind benennen sollen. Das ist völlig nebensächlich und Trivia, ob etwas
Crate heißt(wenn der Paketmanager sich Cargo schimpft. Haha, Wortspiel,
ich lache...) und wenn dir der Scheiß mal auf die Füße fällt vergisst Du
es nie wieder!!! (Dank mir und dieser Ausführung womöglich auch nicht
mehr ...:P).
> Der Mensch verhält sich eben wie Masse bei zunehmender Lichtgeschwindigkeit -
Das Beharrungsverhalten steigt bei vielen Leuten um so mehr an je mehr man auf den
Gashebel steigt.
Das mag für jemanden gelten, der sich als Konservativ herausstellen
will, nicht verstanden hat, dass die Lichtgeschwindigkeit konstant ist
und sein eigenes Unvermögen zur Veränderung beschreibt(manchmal auch
Faulheit oder fehlender Spieltrieb genannt:P). Alles Spitzfindigkeiten.
Ich empfehle das ganze einfach selbst mal auszuprobieren. Die
Installation ist denkbar einfach und das tooling gut.
https://www.rust-lang.org/tools/install
Embedded:
Wer will kann sofort loslegen bei *Are we embedded yet?*:
https://afonso360.github.io/rust-embedded/ Die Unterstützung ist einfach
nur massiv und innovativ.
Nochmal Crate: Eine Paketverwaltung kann auch schlecht sein. Bei kleinen
Projekten, z.B. induziert sie mögliche Fehlerquellen und Unbekannte in
den Erstellungsprozess, die besser durch Fachkenntnis und manuelle
Verwaltung der (überschaubaren) Abhängigkeiten gelöst werden sollten.
Das Endprodukt wird dabei stabiler, erfordert aber einen höheren Aufwand
bei der Pflege. Als abschreckendes Beispiel nenne ich mal node.js und
der Rattenschwanz an Unsinnigkeiten plus Sicherheitsrisiken.
C/C++
Wir sollten dankbar sein. Ich sage jedenfalls nicht nein zu Tools wie
clang-tidy und clang-format. Diese kommen nicht aus dem Luftleeren Raum.
Die neuen Sprachen wie Rust bringen unter anderem ein ganzes Ökosystem
wie rust-fmt, Dokumentation-Erstellung out of the box, benchmarking,
fuzzing, testing, etc. mit sich. Das färbt auf die gute alte Mutter ab
und ich finde das nicht schlecht.
Als Hausaufgabe: Mal bei
https://en.cppreference.com/w/cpp/compiler_support vorbei schauen und in
sich gehen. Neuerungen und Verbesserungen sind ein Ding der Realität und
des Fortschritts.
OCaml
Wer will kann C direkt mit OCaml verknüpfen, in Rust.
https://caml.inria.fr/pub/docs/manual-ocaml/intfc.html +
https://docs.rs/ocaml/0.14.2/ocaml/.
Kein Grund also hier irgend eine gegen die andere ausspielen zu wollen:)
Wenn gewollt ist Koexistenz durchaus möglich.
Mozilla
Ich bin gespannt ob und wie die Entlassungen Auswirkungen auf die
Entwicklung von Rust haben.
https://www.drwindows.de/news/mozilla-kuendigt-zahlreiche-entlassungen-und-grosse-reorganisation-an
+ https://blog.fefe.de/?ts=a1cd056a
Fazit:
Frischer Wind. Das Ausprobieren kostet nichts (außer Zeit und Nerven).
Wer damit in Produktion gehen will kann das. Wer damit auf
Entdeckungsreise gehen will kann das auch mit "rustup toolchain install
nightly".
Viel Spaß beim Entdecken:)
Ich hab mal spasseshalber "rust" in die Suche bei Microchip eingegeben.
0 Treffer. Das kennen die nicht.
https://github.com/rust-embedded/wg/issues/308
Sieht auch nicht wirklich vielversprechend aus.
Und die Suchmaschine meiner Wahl liefert nicht sehr viel mit "rust
pic32".
OK, ich hab halbherzig gesucht. Aber wenn rust so toll ist und alle
drauf abfahren (ausser mir), sollte man doch ordentlich und schnell was
finden.
Genau so wenig wie Microchip GCC (ausser ihr closed source gemurkse)
kennt. Das ist wieder ein Teilstück vom Großen und Ganzen wo es mir
jetzt wirklich schwer fällt die Schuld bei den Entwicklern von Rust zu
sehen.
Du kannst ja sofort damit anfangen einen hmmm, sagen wir
Transpiler(damit es nicht so unmöglich erscheint) von Rust nach
Embedded-C für PIC8/24/32 zu schreiben. Es hindert dich niemand daran.
Genau so wenig wie dich jemand zwingt es zu benutzen. Es ist eine neue
Sprache und vieles steckt in den Kinderschuhen. Euphorie und im
Gegensatz Berührungsangst sind meiner Meinung nach fehl am Platz.
Einfach mal ausprobieren. Das beisst nicht:)
Fun fact: "Spaghetti" als Suchbegriff kennt man bei Microchip nur im
"Chameleon 16-Bit User Guide", lol.
Also einfach gesagt: Nick, ist das nicht ein bisschen unverschämt eine
PIC Unterstützung zu verlangen? Ich mein jetzt egal von wem. Noch nicht
mal dem Weihnachtsmann würde ich das zumuten. Microchip hällt ihren
Stall geschlossen, also liegt das auch alleine bei ihnen etwas zu
liefern. An wen auch immer. Und wirklich ? Bei 52 Repositories auf
https://github.com/rust-embedded/ fällt dir das dazu ein? Das ist ein
Scherz, oder?
Jedzia D. schrieb:> Genau so wenig wie Microchip GCC (ausser ihr closed source gemurkse)> kennt.
Wie? Der Compiler ist GCC. Und es gibt den source. Und man kann sich die
Pro-Version selbst compilieren. Ist aber auch völlig egal und hat
absolut nichts mit rust zu tun.
Jedzia D. schrieb:> Also einfach gesagt: Nick, ist das nicht ein bisschen unverschämt eine> PIC Unterstützung zu verlangen?
Ach so. Entschuldigung! Ich dachte rust ist so toll, dass es alle
verwenden sollten. OK, warum macht das dann nicht Microchip? Das wurde
ihnen doch sicherlich schon 100te Male vorgetragen. Sollen sie paar
Leute abstellen, die das portieren/anpassen. Genug Geld verdienen die
schon um sich die paar Hanseln leisten zu können.
Ganz abgesehen davon, dass dein Vorwurf ich sei unverschämt völlig
verblödet ist. Aber möglicherweise muss man zur Elite gehören, um rust
überhaupt mal erwähnen zu dürfen.
Ich meinte die Unverschämtheit etwas zu Erwarten, was über das Ziel
hinaus schießt. Das ist völlig okay.
Ich meinte nicht die Unverschämtheit deine Mitmenschen als blöde zu
bezeichnen, das ist nicht okay. Es war mir weder persönlich noch
besonders tot ernst wichtig. Ich selber sehe viele Mängel und Probleme
bei Rust, benutze lieber Clang und GCC und bin weit davon weg ein
fangirl zu sein.
Elite? Ist das eine Beleidigung? ... Tut das was zur Sache?
Noch mal zum Mitschreiben: Ich fand deine Argumente schlecht und
ungerecht. Nicht dich als Person. Peace!
Jetzt lasst euch doch nicht so einfach provozieren...
Vielleicht sollte man den thread hier sowieso mal Archivieren, ist ja
schon über ein Jahr alt, und was grossartig geändert hat sich bei der
Thematik in der zwischenzeit ja auch nicht wirklich was...
Jedzia D. schrieb:> Ich meinte nicht die Unverschämtheit deine Mitmenschen als blöde zu> bezeichnen, das ist nicht okay.
Wo hab ich denn das gemacht?
Jedzia D. schrieb:> Elite? Ist das eine Beleidigung? ... Tut das was zur Sache?
Bei deiner Leerargumentation hab ich so den Eindruck, dass man Mitglied
einer auserwählten Filterblase sein muss um rust verwenden zu dürfen.
Gut ich hab schon mehrfach beobachtet, dass Leute darauf stolz sind
etwas völlig unsinniges zu können. Z.B. elektrische Tretroller fahren zu
können. Oder auf dem Handy zu tippen und über die Straße gehen zu
können. Oder kein Wort C zu können, eine embedded Lösung entwickeln die
billiger sein soll und dann vor den 3-fachen Kosten zu stehen und in
einer Sackgasse zu stehen ohne Wendemöglichkeit.
Also warum sollte ich ein Projekt das kein privates Gebastle ist, mich
auf etwas einlassen, das von "meinem" µC nicht unterstützt wird?
Jedzia D. schrieb:> Das mag für jemanden gelten, der sich als Konservativ> herausstellen will, nicht verstanden hat, dass die> Lichtgeschwindigkeit konstant ist und sein eigenes> Unvermögen zur Veränderung beschreibt(manchmal auch> Faulheit oder fehlender Spieltrieb genannt:P).
Die Kosten, ein Tool zu erlernen, ist hoch. Die Kosten, ein weiteres
Tool von Grund auf zu erlernen, ist ebenfalls hoch. Wer neu anfängt, für
den ist das kein Problem, denn alles ist "neu" und "interessant" und
"cool".
Wer das alles schon ein-zwei-drei mal durch hat, der hat (a) diese
Kosten schon bezahlt; (b) hat erstmal sehr negatives
Return-On-Investment; (c) reduziert seine vorhandenen Fähigkeit (wer
eine Fremdsprache lange nicht spricht, wird erstmal objektiv
schlechter). Ob das nun die "sunk-cost-fallacy" ist oder schlicht
(privat)wirtschaftliches Denken, lasse ich mal offen.
Spieltrieb kann sich auf verschiedene Dinge beziehen. Das können neue,
coole Programmiersprachen sein oder neue, coole Algorithmen oder neue,
coole Probleme. Du dampfst das auf Programmiersprachen ein.
Mit 15 oder 25 sieht man die Welt anders als mit 35 oder 45.
Da hast Du recht @svenska.
Mein kontra war das eine Ende des Spektrums. Wahrscheinlich ist es aber
am besten die Goldene Mitte zu favorisieren, also eine gute Mischung
zwischen gewohnter Stabilität und klug gewählter Neuerungen. Damit das
System auch in Zukunft überlebensfähig und attraktiv bleibt.
Jedzia D. schrieb:> Du kannst ja sofort damit anfangen einen hmmm, sagen wir> Transpiler(damit es nicht so unmöglich erscheint) von Rust nach> Embedded-C für PIC8/24/32 zu schreiben.
Klar ... wo kann ich nochmal nachlesen, wie die Sprache definiert ist?
Moin,
Jedzia D. schrieb:> Es ist nur ein Werkzeug, wie eine neue Zange, die besser> geeignet ist um rechtwinklig zu biegen.
Von mir aus. Aber an der real existierenden Rust-Zange haengen halt
unmittelbar und untrennbar immer auch noch eine Kuh(llvm) und ein
Fahrrad(cargo). Und es muss genau die richtige Kuh und das richtige
Fahrrad sein, sonst funktioniert die Rust-Zange nicht.
Die Versionen von binutils, gmp, mpfr, mpc, kernel, glibc, gegen die
eine gcc-Zange gebaut werden kann, sind viel unkritischer. Da muessen
immer nur irgendwelche mindest/maximal-Versionsnummern passen; einen
bare-metal-gcc kann man sogar voellig ohne kernel und glibc
zusammenbauen. Aeltere gcc brauchen nicht mal gmp,mpfr,mpc.
Deutlich flexibler, wenn man nicht zu den sudo-apt-get-install-Aeffchen
gehoert.
Jedzia D. schrieb:> Ich(ganz jung:P) besitze eine VU+ Settop Box. Das> Build-Ökosystem dazu benötigt ein spezifisches Linux System> (Entwicklungsbedingt alt, Stabilität!) das mit OpenEmbedded dann für das> Zielsystem (eine mipsel32, auch rustikal) ein Linux System mit der> nötigen Paketverwaltung(wie zu erwarten, nicht das modernste, Linux:> vuduo2 3.13.5) generiert. Ein kompletter Erstellungsvorgang kann schon> einen halben Tag dauern und mehr als 20GB an Speicherplatz in Anspruch> nehmen. Will ich mir auf die schnelle also einen IoT oder> Mosquitto-Server zusammen schustern oder ein C/C++ basiertes selbst> geschriebenes Tool erstellen braucht das also einen Rattenschwanz von> Abhängigkeiten und jede Menge Ressourcen. Das ist völlig okay.
Nein das ist nicht okay, das ist voellige Kacke!
Auch bei einem embedded linux sollte sich auf die Schnelle eine kleine
Aenderung am Image machen lassen, ohne dass jedesmal wieder voellig bei
0 angefangen wird. Da erwarte ich, dass ich irgendwo eine Filestruktur
rumfliegen habe, aus der das Flash-Image erstellt wird und da will ich
auch gerne mal z.b. nur ein a.out, was ich per $CROSS-gcc aus einem
hello.c kompiliert habe, einfach reinkopieren koennen und mir danach
draus z.b. per mksquashfs oder sonstwie ein neues Image bauen koennen,
ohne dass jedesmal der ganze Hoellenapparat aus wilden scripten, etc.
anspringt, um allen moeglichen und unmoeglichen Scheiss neu zu bauen.
Mir ist ein Ansatz wie z.b. das BLFS Book bedeutend lieber, als diese
ganzen
"Drueck-hier-auf-den-Knopf,dann-faellt-da-das-komplette-Image-aus"-embed
dedLinux-Baukaesten. Egal ob yocto, buildroot und was es sonst noch
gibt: Wenn da nur ein Furz anders ist, als von den Erbauern des
script-wusts vorgesehen, geht viel zu schnell garnix mehr.
Jedzia D. schrieb:> Etwas Neues und ein frischer Wind sind eigentlich immer gut. In der> (Computer-)Technik sollte man Innovation begrüßen, da sie Verbesserungen> mit sich bringt und die Ängste, die man z.B. der Politik oder der> Veränderung als solcher gegenüber bringt hinten anstellen.
Nein, Neues und frischer Wind ist immer erstmal nur neu. Obs auch gut
ist, muss man erstmal schauen. Es ist nicht automatisch gut, nur weil's
neu ist.
Aengste vor Veraenderungen sind manchmal durchaus auch berechtigt.
Nur kleine Kinder denken: Uii, eine neue Herdplatte, da muss ich gleich
mal mit dem Patschehaendchen drauffassen. Aeltere sind da etwas
zoegerlich, obwohl neue Herdplatten per se nichts schlechtes sein
muessen.
Ok, ich weiss nicht, was mit C passiert waere, wenn die Bell Labs damals
auch "ein paar Leute" rausgeschmissen haetten, so wie das jetzt
anscheinend bei Rust und Mozilla der Fall ist. Na, wir werden es
sehen...
Gruss
WK
Ich habe Heute im Internet ein Problem mit Rust gefunden, dass ich
bisher noch nicht kannte: Das Bauen von Programmen kann sehr
Resourcenintensiv sein:
https://source.puri.sm/Librem5/squeekboard/-/issues/243#note_124514> for reference: I had the kernel OOM kill the squeekboard build on a 4GB> laptop recently. The build takes longer than a kernel build with hot> ccache and needs as much disk space as the kernels git history of 2.9G.
Ich frag mich, ob das wohl ein grundlegendes Architekturproblem von Rust
ist, oder ob das irgendwann noch besser wird...
Mit nur 4 GB Hauptspeicher stößt auch template-lastiges C++ schnell an
die Grenzen. Ein Hardcore-Programmierer, der von C++ auf Rust umsteigt,
wird von dem Problem nichts merken, weil er sowieso schon 32 GB hat ;-)
Moin,
Yalu X. schrieb:> Mit nur 4 GB Hauptspeicher stößt auch template-lastiges C++ schnell an> die Grenzen.
Das ist aber leider nur ein schwacher Trost. So aehnlich, wie wenn der
Schmerz, wenn man sich mit dem Hammer auf den Finger haut, nicht so
schlimm ist, denn wenn einem dabei noch eine Dampfwalze ueber den Fuss
faehrt, waere es noch schlimmer.
Daniel A. schrieb:> oder ob das irgendwann noch besser wird...
Sowas wuerde mich wirklich aus den Socken hauen, aber da mach' ich mir
mal keine Hoffnung.
Eher geht der 16Exabyte Adressraum, der sich mit 64bit Pointern
adressieren laesst, zur Neige, wenn in ein paar Jahren mal mit einem
Rust(nachfolger)compiler ein HelloWorld kompiliert werden muss.
Gruss
WK
> Da muessen> immer nur irgendwelche mindest/maximal-Versionsnummern passen; einen> bare-metal-gcc kann man sogar voellig ohne kernel und glibc> zusammenbauen.
Ist das eigentlich nur so ein Gerede oder hast du das wirklich schonmal
gemacht?
Ich hab das schon ein paarmal gemacht und ja man bekommt es irgendwann
hin sich seinen eigene gcc crosscompiler zu uebersetzen. Aber das ist
nicht mal eben so und es gibt da teilweise auch erstaunliche
Versionsabhaengigkeiten.
Olaf
Olaf schrieb:> Ist das eigentlich nur so ein Gerede oder hast du das wirklich schonmal> gemacht?
Für AVR-GCC: ja, häufig. :)
(Ist ja auch erstmal irgendwie ein Crosscompiler, und die Host-C-Library
nützt einem nicht viel.)
„Ohne Kernel“ ist natürlich Quatsch: irgendeine Form von OS braucht man
schon, um den Host-CC laufen zu lassen. Anders als vor 25 Jahren genügt
es auch nicht mehr, einen Host-CC zu haben, der noch nichtmal C89
beherrscht (wie er bspw. dazumals bei HP-UX mit ausgeliefert worden war,
um ein paar Kernelmodule nachcompilieren zu können).
Es sind schon S.ooo.ooo.ooo viele Programmiersprachen aufgetaucht und
wieder in der Versenkung verschwunden ohne das irgendjemand davon
negativ beeinflusst wurde, keine Ahnung warum so viele Leute sich von
der immer häufiger vorkommenden Werbung (Funk, Fernsehen und durch Fan
Boys & Girls) für Rust so stören - das war mit Java oder .Net doch
tausend mal schlimmer und davor waren es die VB-ler und Perl-Leute die
uns mit der Allmacht ihrer Sprache genervt haben...
Rust gibt es schon ein paar Jahren und bisher hat niemand irgendjemanden
gezwungen drauf umzusteigen oder gar (Gott erbarme dich unser) eine
weitere Programmiersprache dazu zu lernen, die welche keinen Bock drauf
haben brauchen es nie zu nutzen und welche die auch noch 3 andere
Programmiersprachen können und Bock darauf haben noch ein paar andere
Sachen/Konzept-Ideen zu sehen (egal welche Relevanz das in Zukunft haben
wird) machen es einfach - egal ob jemand das gut oder schlecht findet
keine Argumente sind:
-Was wir haben ist doch gut - das wurde von so vielen Firmen/Entwicklern
die unsere Leben stark beeinflussen bestätigt (was außer krude
Verschwörungstheorien soll die bitte dazu bewegen "Werbung" für etwas zu
machen was denen gar nicht hilft)
Nicht alle 15000 Entwickler von Google, Facebook, Microsoft etc. sind
total blöde und machen nur Müll - die haben doch schon alle ihrer
eigenen Super Sprachen/Plattformen - warum interessieren die sich
überhaupt für eine weiter? Speziell wenn die vermeintlich nicht gut ist
-Neue Programmiersprache lernen ist zu "kostenintensiv": Totaler Quatsch
- man ist nicht interessiert, faul oder hat einfach keine Zeit - ist
aber trotzdem kein Kontra-Argument, btw: das lernen schwierig und
vielleicht unnötig ist höre ich immer nur von lernscheuem Gesindel :) -
die meisten Entwickler die ich kennen die so "aktiv" argumentieren sind
Eingefahren und wollen nicht mehr weiter lernen - oder sind einfach zu
unerfahren um Situationen richtig zu bewerten
-Läuft auf meiner Plattform nicht: den meisten geht es ehr nur um die
Software-Konzepte die Rust forciert (die sind ja nicht neu) - ob der
Kompiler jetzt schon alle Plattformen kann oder wird und ob guter Code
generiert wird und ob das jetzt schon auf iOS oder dem Gameboy Color
läuft ist völlig unrelevant, es hat bisher noch nie eine Sprache direkt
auf allen Plattformen funktioniert und im Embedded Bereich dominiert C
seit Jahrhunderten. Wer mit klarem Verstand denkt denn Ersthaft das man
solch einen Plattform-Sprung in 5-10 Jahren erreicht - und nutzt das
dann als Argument für die Qualität einer Sprache??? in Java/.Net/C/C++
wurde so viele Milliarden investiert - da kann man nicht einfach so
hinterher ziehen - aber auch die kleinen brauchen mal eine Chance - oder
sollen uns doch nur die großen Konzerne leiten?
Einfach mal den Ball flach halten und die Fan Boys & Girls durch die
Gassen marschieren lassen - vielleicht kommt ja doch was dabei raus
> Nicht alle 15000 Entwickler von Google, Facebook, Microsoft etc. sind> total blöde und machen nur Müll - die haben doch schon alle ihrer> eigenen Super Sprachen/Plattformen - warum interessieren die sich> überhaupt für eine weiter? Speziell wenn die vermeintlich nicht gut ist
Noe, das sind sie sicher nicht. Die Frage ist nur was sie antreibt.
Manche Sprachen werden von Einzelpersonen als Spassprojekt erfunden.
Vielleicht weil sie der Scheiss den sie jeden Tag 8h in der Firma machen
total abnervt. Das ist dann je nach Person, aber auch Erwartungshaltung,
total genial oder ziemlicher Murks.
Anderes wird aber von einer Firma entwickelt/gefordert/bezahlt. Und da
kommen die Entwicklungsziele eher nicht vom Programmierer sondern von
der Etage da drueber. Und was ist wohl deren Anforderung?
Man darf vermuten das eines der groessten Probleme heute ist das die
mittlere Faehigkeit eines Programmierers deutlich geringer ist als noch
vor 20Jahren. Es gibt heute sicher noch genauso viele gute Leute wie
frueher, aber da heute jeder Programmieren koennen soll der nicht bei
drei auf den Baeumen ist, ist die mittlere Programmierintelligenz IMHO
stark abgesunken. (siehe auch copy&paste, Webseitenprogrammierer, nicht
vorhandener moralischer Kompass)
Und da will man Sprachen wie C oder gar CPP nicht haben. Die lassen den
Leute zuviel Freiraeume. Das ist wie eine Stadt wo man Autos ohne
Geschwindigkeitsbegrenzung fahren kann. Fuer einige wenige waere es gut,
fuer die meisten eher nicht.
Ich persoenlich sehe durchaus auch Schwaechen in C und wuerde gerade
fuer den Embedded Bereich gerne auch etwas anderes probieren. Gerne auch
um mal einfach etwas anderes zu machen. Allerdings muss ich kotzen wenn
ich sehe das man den Leuten dann gleich neue Buildsysteme und dauerhafte
Onlinekacke aufzwingen will. Das ist die dumme Googledenke welche die
Menschheit nicht braucht.
Olaf
cppbert schrieb:> -Neue Programmiersprache lernen ist zu "kostenintensiv": Totaler Quatsch> - man ist nicht interessiert, faul oder hat einfach keine Zeit - ist> aber trotzdem kein Kontra-Argument
Ein kluger Mann hat mal gesagt: "A language that doesn't change the way
you think about programming is not worth learning".
Ich kann wirklich nicht nachvollziehen warum man C++, Java, Python,
Rust, etc. braucht.
Man braucht ein paar Programmiersprachen - das ist alles. (Also
Sprachen, mit verschiedenen Programmierparadigmen. Und keine Sprachen,
die genauso funktioniert wie zwei dutzend anderer Programmiersprachen,
bloss diesmal natürlich viel sicherer, einfacher und moderner)
Kann man abends (wenn man Zeit hat) anschauen:
https://www.youtube.com/watch?v=P2yr-3F6PQo
Keine ensthafte Wissenschaft publiziert jedes Jahr x alternative
Schreibweisen. Was Mathematiker vor 100 Jahren geschrieben haben, kann
man auch heute noch "ausführen".
> Ich kann wirklich nicht nachvollziehen warum man C++, Java, Python,> Rust, etc. braucht.
Es ist schon sinnvoll das etwas mal modernisiert wird. Sonst wuerde wir
heute immer noch in Algol68 programmieren. Allerdings sollte man das
nicht leuchtfertig tun. Schon garnicht im Embeddedbereich wo die grosse
Dominanz von C halt auch den Vorteil hat das du alles lesen und
verwenden kannst was bereits seit 20Jahren in der Firma da ist.
Olaf
totaler Quatsch schrieb:> Ich kann wirklich nicht nachvollziehen warum man C++, Java, Python,> Rust, etc. braucht.
Grundsätzlich versteh ich deinen Punkt.
Dein Beispiel ist allerdings sehr schlecht gewählt.
Zum einen ist zwar allen genannten Sprachen das Prozedurale Paradigma
gemein, einige implementieren aber auch andere Paradigmen, zumindest
teilweise.
Viel wichtiger aber: die Technik (und somit der Einsatzbereich) der
genannten Sprachen unterscheidet sich massivst.
Wir haben da eine Skriptsprache, Sprachen die in nativen Maschinencode
übersetzen und eine Sprache die plattformübergreifenden Bytecode für
eine virtuelle Maschine liefert.
In deiner Aufzählung könnte man maximal und mit viel guten Willen C++
und Rust gleichsetzen und eine davon in Frage stellen.
Ansonsten vergleichst du Äpfel mit Birnen.
Programmierbare LED's
Viele von euch fragen sich ob Rust das kann:
LED -> Hardware -> SETZEN, ON (nicht sechs ! :) )
Kann es ohne Probleme.
Das Problem ist Mannigfaltig und von 6502 bis ,.,, weiss ich nicht.
Rust ist ein Werkzeug. Ich hab nen laeppischen mips-bootloader laufen
und ein Programm, dass mir iot-scheissdreck ueber meine VU+ Enigma box
auf einen Gentoo Rechner mitteilt. Das passte grade gut, das in Rust zu
programmieren.
Netzwerk, ASIO, ggiot.
Also was habt ihr fuer ein Problem, das nicht existiert? :)
Are we embedded yet?
https://afonso360.github.io/rust-embedded/
Sagt mal, nur so nebenbei ... wie viele von Euch werden dazu gezwungen
in einem dunklen Kämmerlein zu sitzen und Rust zu programmieren?
Manche Beiträge machen dann nämlich Sinn.
Ansonsten: Einfach das Tool benutzen, was euch liegt, bzw. am besten zur
Aufgabe und deren Lösung passt.
Bitte befreit Euch von den Ketten, die euch an EINE Programmiersprache
sowie eure Vorurteile fesseln.
... sonnst bekommt ihr noch Visionen. So wie Olaf;)
Btw danke Olaf, der war gut:)
Jedzia D. schrieb:> Bitte befreit Euch von den Ketten, die euch an EINE Programmiersprache> sowie eure Vorurteile fesseln.
Genau das machen Rust-Programmierer doch.
Für kaum einen von denen wird Rust wohl die erste Sprache gewesen sein.
MaWin schrieb:> Jedzia D. schrieb:>> Bitte befreit Euch von den Ketten, die euch an EINE Programmiersprache>> sowie eure Vorurteile fesseln.>> Genau das machen Rust-Programmierer doch.> Für kaum einen von denen wird Rust wohl die erste Sprache gewesen sein.
Stimmt. Und du solltest Rust mit X ersetzen. Dann können wir die Aussage
wiederverwenden:P
Mein "Pamphlet" richtete sich auch nicht an die Herren und Damen
Rust-Programmierer, MaWin. Sondern an die Rust-Basher. Ich rede gern
gegen Wände, weisst Du?
Das Rust-Programmierer keine Vorurteile haben ist vielleicht ein wenig
hoch gegriffen:) <- Ist ne böse Unterstellung, dass Du dich auch auf das
bezogen hast.
Moin,
Schoenes Beispiel fuer real existierendes Rust:
Ich will mir mal einen heif-decoder (das neue,lustige Video/Bildformat
von Apple unter Linux bauen. Scheint mir in der libheif zu stecken. Die
meint aber beim cmake, dass sie gerne noch den RAV1E codec haette.
Oha, dett dingens (RAV1E) ist in rust geschrieben.
Ich bin also nicht unbedingt scharf drauf, was in rust zu compilieren,
aber wenn ich den RAV1E (oder aktuellen firefox, libsrvg, ...) unter
BLFS haben will, bleibt mir wohl nix anderes uebrig.
Also froehlich das git gecloned und geguckt, wie mans baut: Scheint
erstmal simpel loszugehen; einfach "cargo build --release" schreiben und
gucken. Oha, das zieht sich. Ich geh dann mal schlafen. zzzzZZZZZZ
So, was ist denn derweilen passiert?
* Wieso muss da immer Unmengen von Shice downgeloaded werden? Wenn ich
das nochmal in vielleicht X Jahren bauen will, gibts die ganzen server
doch nicht mehr, oder sie liegen wo ganz anders und koennen kein https
mehr sondern vielleicht nur noch https-v5 oder mehr. z.b. den
Bildbetrachter xv von vor 30 Jahren kann man einfach so bauen, ohne
Internetverbindung. Man braucht halt die sourcen.
* Ach - 's hat eh' nicht geklappt, weil mein rust schon wieder zu alt
ist?
Ja zum Teufel, warum kann das denn nicht frueher auffallen? Und was fuer
geile Featueres sind in rustc-1.44.1 drinnen, die rustc-1.42.0 nicht
hat? Und brauchts die wirklich so dringend? Komisch, die boesen,alten
Autotools und auch das nicht ganz so alte cmake koenen das schon vorher
sagen, wenn ihnen was nicht passt. Nicht erst nach zig Stunden bauen.
So sehen meine neuesten Erfahrungen zur real existierenden rust-Welt
aus.
Klar, das ist vielleicht alles nicht die Sprache selbst, sondern die
Umgebung, die bekloppten Programmierer, etc.
Aber irgendwie ist das wie Kommunismus: Eigentlich ne Idee, die
funktionieren koennte; fuehrt nur in der Praxis mit echten Menschen
immer in die Katastrophe - braucht also kein Mensch.
So wie rust, glaub' ich.
Gruss
WK
> * Wieso muss da immer Unmengen von Shice downgeloaded werden? Wenn ich> das nochmal in vielleicht X Jahren bauen will, gibts die ganzen server> doch nicht mehr, oder sie liegen wo ganz anders und koennen kein https
Als mir dies aufgefallen ist hab ich den Krempel von meiner Platte
geloescht. Das mag ich selbst beim rumspielen zuhause nicht, im
professionellem Umfeld ist es geradzu absurd.
Wobei ich noch das Bonusproblem hatte das er erst mit meiner
cmake-Version unzufrieden war. Die Scriptkiddies die mittlerweile aus
den Unis kommen koennen nur noch mit der Version von gestern und unter
100 libaries von Hinz und Kunz kriegen sie auch nix mehr gebacken. Die
muessen erst noch lernen
das sie mit ihren Betas zuhause rumspielen sollten und erst dann etwas
veroeffentlichen wenn es geht. Aber das ist jetzt kein spezielles
Problem
von Rust sondern gilt fuer aktuelle Softwareentwicklung allgemein.
Olaf
Dergute W. schrieb:> So, was ist denn derweilen passiert?> * Wieso muss da immer Unmengen von Shice downgeloaded werden? Wenn ich> das nochmal in vielleicht X Jahren bauen will, gibts die ganzen server> doch nicht mehr, oder sie liegen wo ganz anders und koennen kein https> mehr sondern vielleicht nur noch https-v5 oder mehr. z.b. den> Bildbetrachter xv von vor 30 Jahren kann man einfach so bauen, ohne> Internetverbindung. Man braucht halt die sourcen.
Ja. Man braucht halt die Sourcen. Inklusive der Sourcen der
Dependencies.
Merkste was?
In deinem Cargo cache liegen die ganzen Sourcen. Und dort liegen sie,
bis du sie löschst.
Du musst also in 30 Jahren gar nicht alles wieder herunterladen, wenn du
es nicht gelöscht hast.
Ganz ohne Internetverbindung.
Moin,
MaWin schrieb:> Ja. Man braucht halt die Sourcen. Inklusive der Sourcen der> Dependencies.> Merkste was?> In deinem Cargo cache liegen die ganzen Sourcen. Und dort liegen sie,> bis du sie löschst.
Ja, ich merk' was; ich bau schon seit >10 Jahren B/LFSse und merk' von
daher schon, wo die Reise hingeht. Und ob mir das gefaellt.
Wenn ich mir einen ffmpeg oder vlcplayer oder sonstwas mit vielen
Abhaengigkeiten bau', dann sagen mir autotools und cmake VORHER, was sie
beoetigen. In welcher Version. Und obs dringend ist oder eher nicht so.
Und wenn ich z.b. im ffmpeg keinen shclonzen3-codec drinnenhaben will,
dann kann ich ffmpeg auch ohne libshclonzen3 prima bauen. Und ich weiss,
dass, wenn ich dann shclonzen3 support haben will, ich ffmpeg nochmal
bauen kann, nachdem ich die libshclonzen3 sourcen runtergeladen und
diese lib in der von mir gewuenschten Geschmacksrichtung
(static/shared, debug/release, mit/ohne weitere Abhaengigkeiten, wie
libbla, libblubber, ...) gebaut habe. Und wenn das buildsystem richtig
gut ist, dann muss ich nichtmal alles beim ffmpeg neu bauen, sondern nur
die durch die libshclonzen3 betroffenen Files. Und wenns super gut
laeuft, dann kann ich das sogar crosscompilieren. Und nach einem Jahr,
wenn ich das alles vergessen hab', guck ich in die config.log und sehe
sofort exakt die Kommandozeile, mit der ich das konfiguriert habe. Das
alles weiss ich (zu schaetzen).
Trotzdem und deswegen stoert es mich, dass jetzt jede grad' hippe
software/sprache meint, ihren eigenen Paketmanager oder gar
build-umgebung, etc. bla. mitbringen zu muessen.
Was der sudo-apt-get-install oder setup.exe Klicker nicht nachvollziehen
kann. Was mir aber wurscht ist. Es stoert mich trotzdem.
Gruss
WK
was für ein Geheulte :)
1. Die Sprache und die ganze Infrastruktur ist noch jung - auch mit 5
Jahren noch, die Ideen mit Cargo kennt man aber so von .Net, Java,
Python und mitlerweile sogar mit C/C++ - es ist eben noch nicht ganz so
super perfekt rund - und das ist jedem Absolut klar
2. Cargo muss nicht unbedingt ins Internet - der kann auch lokal auf
deinen eigenen feinst erwählten Crates orgeln
3. Es gibt eine Cache
4. Anstatt das jedes noch so kleine Projekt Self-Contained ist baut Rust
einfach darauf das sich die Code-Duplikation über viele, gut gepflegte
Libraries reduziert die in den heutigen Projekten in Mio Zeilen Code
rumgurken
Jede Library hat die 5000.Implementation von irgendeinem Micro-Scheiss
im Bauch die so viel Pflege-Energie frisst - das versucht Rust mit einer
Zerlege- es-in-Libs-und-verteile-die-leicht zu reduzieren
Dergute W. schrieb:> dann sagen mir autotools und cmake VORHER, was sie> beoetigen.
cargo check
> In welcher Version. Und obs dringend ist oder eher nicht so.> Und wenn ich z.b. im ffmpeg keinen shclonzen3-codec drinnenhaben will,> dann kann ich ffmpeg auch ohne libshclonzen3 prima bauen. Und ich weiss,> dass, wenn ich dann shclonzen3 support haben will, ich ffmpeg nochmal> bauen kann, nachdem ich die libshclonzen3 sourcen runtergeladen und> diese lib in der von mir gewuenschten Geschmacksrichtung
Das nennt sich "features" in cargo.
> Trotzdem und deswegen stoert es mich, dass jetzt jede grad' hippe> software/sprache meint, ihren eigenen Paketmanager oder gar> build-umgebung, etc. bla. mitbringen zu muessen.
Weil es so gut funktioniert, oder warum?
Zu sagen autotools wären besser als cargo zeugt von einer enormen
Unkenntnis.
cppbert schrieb:> Jede Library hat die 5000.Implementation von irgendeinem Micro-Scheiss> im Bauch die so viel Pflege-Energie frisst - das versucht Rust mit einer> Zerlege- es-in-Libs-und-verteile-die-leicht zu reduzieren
Damit ist man den Pflegeaufwand aber nicht los geworden, sondern verlegt
ihn nur woanders hin. Du musst regelmäßig die Abhängigkeiten prüfen, ob
da noch alles so funktioniert wie es soll, keine neuen unerwarteten
Abhängigkeiten dazu gekommen sind, die Qualität noch deinen
Anforderungen entspricht, kein Urheberrecht verletzt wird ...
mh schrieb:> Du musst regelmäßig die Abhängigkeiten prüfen, ob> da noch alles so funktioniert wie es soll,
Quatsch.
Dank semantic versioning ist das natürlich nicht notwendig.
Du bekommst automatisch alle rückwärtskompatiblen Weiterentwicklungen
und Fixes.
MaWin schrieb:> mh schrieb:>> Du musst regelmäßig die Abhängigkeiten prüfen, ob>> da noch alles so funktioniert wie es soll,>> Quatsch.> Dank semantic versioning ist das natürlich nicht notwendig.> Du bekommst automatisch alle rückwärtskompatiblen Weiterentwicklungen> und Fixes.
Dieses magic "semantic versioning" beseitigt also alle Probleme, ohne
dass man etwas dafür tun muss?
mh schrieb:> Dieses magic "semantic versioning" beseitigt also alle Probleme, ohne> dass man etwas dafür tun muss?
Schaue es dir halt mal an, bevor du hier Dünnschiss verzapfst.
MaWin schrieb:> mh schrieb:>> Dieses magic "semantic versioning" beseitigt also alle Probleme, ohne>> dass man etwas dafür tun muss?>> Schaue es dir halt mal an, bevor du hier Dünnschiss verzapfst.
Wie soll ich mir das anschauen, ohne eine größeres Projekt damit selbst
zu verwalten?
mh schrieb:> cppbert schrieb:>> Jede Library hat die 5000.Implementation von irgendeinem Micro-Scheiss>> im Bauch die so viel Pflege-Energie frisst - das versucht Rust mit einer>> Zerlege- es-in-Libs-und-verteile-die-leicht zu reduzieren>> Damit ist man den Pflegeaufwand aber nicht los geworden, sondern verlegt> ihn nur woanders hin.
nicht nur - man schafft auch eine Kultur(die dann irgendwann tief
verwurzelt ist) das nicht jeder alles selber macht um die Self-Contained
Ehre hoch zu halten... das reduziert auf den weltweiten Code Mio Zeilen
die keiner braucht und welche die Interaktion zwischen Projekten
erschweren
> Du musst regelmäßig die Abhängigkeiten prüfen, ob> da noch alles so funktioniert wie es soll, keine neuen unerwarteten> Abhängigkeiten dazu gekommen sind, die Qualität noch deinen> Anforderungen entspricht, kein Urheberrecht verletzt wird ...
so lange sich die Version nicht ändert gibts keine Änderung - thats it!
Wer diese Kultur bricht kommt in die Hölle
und man könnte die Lizenz oder git Hash, svn Revision ja noch als
Optionales Plugin mit ins spiel bringen (Key und Quelle der Daten) - ob
du dann dich direkt mit den Internet verlinkst oder nur lokal mit deinen
selbst gewählten Crates arbeitest ist dein Bier
mh schrieb:> MaWin schrieb:>> mh schrieb:>>> Du musst regelmäßig die Abhängigkeiten prüfen, ob>>> da noch alles so funktioniert wie es soll,>>>> Quatsch.>> Dank semantic versioning ist das natürlich nicht notwendig.>> Du bekommst automatisch alle rückwärtskompatiblen Weiterentwicklungen>> und Fixes.>> Dieses magic "semantic versioning" beseitigt also alle Probleme, ohne> dass man etwas dafür tun muss?
natürlich nicht - aber es steht auch nirgends das es jetzt so für die
nächsten 20 Jahre bleibt
es fehlt noch mehr Variants in den Quellen oder der Zuordnung -
vielleicht will ich ja keine Version sondern einen bestimmt git-hash
usw., die Quellen-Lokation ist noch ein wenig zu strikt
cppbert schrieb:> nicht nur - man schafft auch eine Kultur(die dann irgendwann tief> verwurzelt ist) das nicht jeder alles selber macht um die Self-Contained> Ehre hoch zu halten... das reduziert auf den weltweiten Code Mio Zeilen> die keiner braucht und welche die Interaktion zwischen Projekten> erschweren
Das sorgt aber auch für eine Kultur, in der sich jeder darauf verlässt,
dass das was man im cargo findet korrekt und sicher ist.
cppbert schrieb:> so lange sich die Version nicht ändert gibts keine Änderung - thats it!> Wer diese Kultur bricht kommt in die Hölle
Wenn ich keine Version ändere habe ich aber auch keinen wirklichen
Vorteil. Und wenn ich eine Version ändere, muss ich trotzdem alles
selbst prüfen.
MaWin schrieb:> mh schrieb:>> Und wenn ich eine Version ändere, muss ich trotzdem alles>> selbst prüfen.>> Nochmal: Völliger Unsinn.>> Google: semantic versioning
Ja MaWin, ich kann lesen und ich weiß was Semantic Versioning ist.
Kannst du mir jetzt endlich erklären, wie das eins der Problem löst,
wenn ich die Version von etwas ändern möchte oder muss? Wie übernimmt
Semantic Versioning die Arbeit, die ich dann machen muss?
mh schrieb:> Wenn ich keine Version ändere habe ich aber auch keinen wirklichen> Vorteil. Und wenn ich eine Version ändere, muss ich trotzdem alles> selbst prüfen.
Das erinnert mich an die Einstellung, wie man vor 20 Jahren Software
entwickelte. Da blieb man jahrelang auf der gleichen Compilerversion, da
die ja schliesslich funktionierte und erprobt sei. Alle später
veröffentlichten Versionen konnte man nicht trauen, schliesslich könnten
ja neue Fehler mit reingekommen sein, etc. :)
mh schrieb:> Das sorgt aber auch für eine Kultur, in der sich jeder darauf verlässt,> dass das was man im cargo findet korrekt und sicher ist.
für Normale Entwickler vielleicht schon, die ziehen aber auch alles was
kreucht und fleucht, aber nicht unbedingt im prof. Umfeld
mh schrieb:> Kannst du mir jetzt endlich erklären, wie das eins der Problem löst,> wenn ich die Version von etwas ändern möchte oder muss? Wie übernimmt> Semantic Versioning die Arbeit, die ich dann machen muss?
wenn du einen Versions-Wechsel machst ändert doch Rust nichts an den
Folgenotwendigekeiten? du musst immer noch prüfen ob die Interfaces
passen, deine Tests laufen und ob die Lizenz noch zu dir passt?
oder was meinst du?
Operator S. schrieb:> Alle später> veröffentlichten Versionen konnte man nicht trauen, schliesslich könnten> ja neue Fehler mit reingekommen sein, etc. :)
Hast du das noch nie erlebt? Scheinbar nicht.
mh schrieb:> Wenn ich keine Version ändere habe ich aber auch keinen wirklichen> Vorteil. Und wenn ich eine Version ändere, muss ich trotzdem alles> selbst prüfen.
ist ja auch nur ein Distribution-Konzept keine alles-geht-automatisch
Lösung
mehr ist es bisher nicht
cppbert schrieb:> mh schrieb:>> Wenn ich keine Version ändere habe ich aber auch keinen wirklichen>> Vorteil. Und wenn ich eine Version ändere, muss ich trotzdem alles>> selbst prüfen.>> ist ja auch nur ein Distribution-Konzept keine alles-geht-automatisch> Lösung> mehr ist es bisher nicht
Zugangsproblem für Normalos ist immer - ich bekomme die Lib nicht zum
Linken/Kompilieren etc.
Solche Probleme haben .Net, Java, ... nicht und das macht für viele den
Zugang schwer
Operator S. schrieb:> mh schrieb:>> Wenn ich keine Version ändere habe ich aber auch keinen wirklichen>> Vorteil. Und wenn ich eine Version ändere, muss ich trotzdem alles>> selbst prüfen.>> Das erinnert mich an die Einstellung, wie man vor 20 Jahren Software> entwickelte. Da blieb man jahrelang auf der gleichen Compilerversion, da> die ja schliesslich funktionierte und erprobt sei. Alle später> veröffentlichten Versionen konnte man nicht trauen, schliesslich könnten> ja neue Fehler mit reingekommen sein, etc. :)
Nur, dass ich explizit die Version ändern möchte und den Arbeitsaufwand
dafür kenne und weiß, dass mir cargo dabei nicht hilft.
cppbert schrieb:> mh schrieb:>> Kannst du mir jetzt endlich erklären, wie das eins der Problem löst,>> wenn ich die Version von etwas ändern möchte oder muss? Wie übernimmt>> Semantic Versioning die Arbeit, die ich dann machen muss?>> wenn du einen Versions-Wechsel machst ändert doch Rust nichts an den> Folgenotwendigekeiten? du musst immer noch prüfen ob die Interfaces> passen, deine Tests laufen und ob die Lizenz noch zu dir passt?>> oder was meinst du?
Du scheinst es so langsam verstanden zu haben. Wenn ich eine Version
ändern möchte, hilft mir cargo nicht wirklich. Der große Teil der Arbeit
liegt im Überprüfen der Änderungen, nicht im ändern der Versionsnummer
für den wie auch immer organisierten Download.
Ich schreib weiterhin "Kleinkram" selbst, mit allen Rechten und
Pflichten, statt mich 2 Mal im Jahr durch die Doku in cargo und co
quälen zu müssen, nur um am Ende mit weniger Rechten da zu stehen.
Also das Problem sehe ich auch. Man kann ohne Aufwand einfach
Abhängigkeiten hinzufügen, diese rekursive runterladen & updaten lassen.
Dadurch hat man schnell viele Abhängigkeiten. Mit mehr & öfters
ändernden Abhängigkeiten ist die Qualitätskontrolle sehr schwierig. Und
die müsste ja eigentlich im Idealfall von jedem Entwickler bei jeder
Änderung erflogen. Scheint aber wohl heutzutage nicht mehr in zu sein...
Nick M. schrieb:> Hast du das noch nie erlebt? Scheinbar nicht.
Doch, ich glaube mich wiederholen zu müssen, aber so vor 20 Jahren war
das gang und gäbe.
Seitdem haben die Tools und Software-Arbeitsprozesse aber einen
erheblichen Fortschritt gemacht und man kann sich darauf verlassen, was
drauf steht.
Natürlich gibt es einige Firmen und noch mehr Einzelpersonen, die diese
Entwicklung nicht mitgemacht haben. Die lernt man aber schnell zu
meiden.
cppbert schrieb:> wenn du einen Versions-Wechsel machst ändert doch Rust nichts an den> Folgenotwendigekeiten?
Ich weiß nicht wo dein Problem ist und wo das etwas mit Rust oder Cargo
zu tun hätte.
Kompatible Updates (Bugfixes) gehen mit Cargo dank Semantic Versioning
halbautomatisch. Das einzige, was man tun muss, ist "cargo update".
Wenn du auf eine inkompatible Version wechseln willst, dann hat der
Aufwand überhaupt nichts mit Cargo zu tun und ist bei jeder
Programmiersprache in etwa gleich groß.
Operator S. schrieb:> Nick M. schrieb:>> Hast du das noch nie erlebt? Scheinbar nicht.>> Doch, ich glaube mich wiederholen zu müssen, aber so vor 20 Jahren war> das gang und gäbe.>> Seitdem haben die Tools und Software-Arbeitsprozesse aber einen> erheblichen Fortschritt gemacht und man kann sich darauf verlassen, was> drauf steht.> Natürlich gibt es einige Firmen und noch mehr Einzelpersonen, die diese> Entwicklung nicht mitgemacht haben. Die lernt man aber schnell zu> meiden.
Welches Tool stellt denn sicher, dass alle meine Abhängigkeiten nach dem
Update weiterhin eine kompatible Lizenz haben? Welches Tool stellt
sicher, dass keins der Projekte von denen ich abhängig bin gehackt
wurde? Welches Tool stellt sicher, dass es keine bekannte gravierende
ungefixete Sicherheitslücke in meinen Abhängigkeiten gibt? ...
MaWin schrieb:> Kompatible Updates (Bugfixes) gehen mit Cargo dank Semantic Versioning> halbautomatisch.
Er spricht nicht von der technischen Hürde eine Version zu ändern,
sondern vom Vertrauen in die Packages.
Kein Wunder kommen Embedded Projekte nicht vom Fleck, wenn jeder sein
eigenes Gärtchen beackert.
Operator S. schrieb:> Er spricht nicht von der technischen Hürde eine Version zu ändern,> sondern vom Vertrauen in die Packages.
Warum sollte ein Paket mit einer neuen Version plötzlich
unvertrauenswürdig werden?
Auf crates.io kann zwar initial jeder alles hochladen, aber nicht als
Folgeversion.
MaWin schrieb:> Kompatible Updates (Bugfixes) gehen mit Cargo dank Semantic Versioning> halbautomatisch. Das einzige, was man tun muss, ist "cargo update".
Qualitätssicherung sollte schon etwas mehr beinhalten, als nur
"kompiliert noch"...
MaWin schrieb:> cppbert schrieb:>> wenn du einen Versions-Wechsel machst ändert doch Rust nichts an den>> Folgenotwendigekeiten?>> Ich weiß nicht wo dein Problem ist und wo das etwas mit Rust oder Cargo> zu tun hätte.> Kompatible Updates (Bugfixes) gehen mit Cargo dank Semantic Versioning> halbautomatisch. Das einzige, was man tun muss, ist "cargo update".> Wenn du auf eine inkompatible Version wechseln willst, dann hat der> Aufwand überhaupt nichts mit Cargo zu tun und ist bei jeder> Programmiersprache in etwa gleich groß.
Du hast vermutlich das Problem nicht verstanden. Ich muss trotzdem
nachgucken, was geändert wurde, wer es geändert hat und vor allem, ob
"deren" Meinung von "kompatibles Update" mit meiner Meinung
übereinstimmt.
mh schrieb:> Welches Tool stellt denn sicher, dass alle meine Abhängigkeiten nach dem> Update weiterhin eine kompatible Lizenz haben?
Semantic Versioning.
> Welches Tool stellt> sicher, dass keins der Projekte von denen ich abhängig bin gehackt> wurde? Welches Tool stellt sicher, dass es keine bekannte gravierende> ungefixete Sicherheitslücke in meinen Abhängigkeiten gibt? ...
Das hat doch alles überhaupt nichts mit Rust zu tun.
Gleiches gilt für alle Software. Auch z.B. ganz klassische
Linux-Distributionen.
Warum zündest du diese Nebelkerzen?
🐧 DPA 🐧 schrieb:> Qualitätssicherung sollte schon etwas mehr beinhalten, als nur> "kompiliert noch"...
Ja und?
Dann mache doch deine Qualitätsprüfungen?
Wo ist denn jetzt das Problem?
Und wo unterscheidet sich das von jeder anderen Software, die nicht
Rust/Cargo nutzt?
mh schrieb:> Du hast vermutlich das Problem nicht verstanden. Ich muss trotzdem> nachgucken, was geändert wurde, wer es geändert hat und vor allem, ob> "deren" Meinung von "kompatibles Update" mit meiner Meinung> übereinstimmt.
Du musst überhaupt nichts.
Wenn du das prüfen willst, dann steht es dir frei das alles zu prüfen.
Dann beschwere dich aber bitte nicht, dass das viel Arbeit ist.
Operator S. schrieb:> Doch, ich glaube mich wiederholen zu müssen, aber so vor 20 Jahren war> das gang und gäbe.
So weit muss ich da nicht zurückdenken. Mir genügen 3 Jahre.
MaWin schrieb:> mh schrieb:>> Welches Tool stellt denn sicher, dass alle meine Abhängigkeiten nach dem>> Update weiterhin eine kompatible Lizenz haben?>> Semantic Versioning.
Schön, dass du einer Versionsnummer blind vertraust.
MaWin schrieb:>> Welches Tool stellt>> sicher, dass keins der Projekte von denen ich abhängig bin gehackt>> wurde? Welches Tool stellt sicher, dass es keine bekannte gravierende>> ungefixete Sicherheitslücke in meinen Abhängigkeiten gibt? ...>> Das hat doch alles überhaupt nichts mit Rust zu tun.> Gleiches gilt für alle Software. Auch z.B. ganz klassische> Linux-Distributionen.
Ich verkaufe keine Linux Distribution ...
MaWin schrieb:> Und wo unterscheidet sich das von jeder anderen Software, die nicht> Rust/Cargo nutzt?
Ja endlich! Du hast erkannt, dass es sich nicht unterscheidet. Damit
sind wir bei meinem ursprünglichen Beitrag ...
mh schrieb:> cppbert schrieb:>> Jede Library hat die 5000.Implementation von irgendeinem Micro-Scheiss>> im Bauch die so viel Pflege-Energie frisst - das versucht Rust mit einer>> Zerlege- es-in-Libs-und-verteile-die-leicht zu reduzieren>> Damit ist man den Pflegeaufwand aber nicht los geworden, sondern verlegt> ihn nur woanders hin.MaWin schrieb:> Wenn du das prüfen willst, dann steht es dir frei das alles zu prüfen.
Meine Kunden erwarten, dass ich das für die Software, die ich entwickle,
prüfe. Dafür Zahlen sie mir Geld ...
MaWin schrieb:> 🐧 DPA 🐧 schrieb:>> Qualitätssicherung sollte schon etwas mehr beinhalten, als nur>> "kompiliert noch"...>> Ja und?> Dann mache doch deine Qualitätsprüfungen?> Wo ist denn jetzt das Problem?🐧 DPA 🐧 schrieb:> Man kann ohne Aufwand einfach> Abhängigkeiten hinzufügen, diese rekursive runterladen & updaten lassen.> Dadurch hat man schnell viele Abhängigkeiten. Mit mehr & öfters> ändernden Abhängigkeiten ist die Qualitätskontrolle sehr schwierig. Und> die müsste ja eigentlich im Idealfall von jedem Entwickler bei jeder> Änderung erflogen. Scheint aber wohl heutzutage nicht mehr in zu sein...MaWin schrieb:> Und wo unterscheidet sich das von jeder anderen Software, die nicht> Rust/Cargo nutzt?
Darin, dass es einen Anreiz gibt, unnötige Abhängigkeiten zu vermeiden,
und diese weniger leichtfertig verwendet werden. Man setzt sich eher
damit auseinander.
MaWin schrieb:> Gleiches gilt für alle Software. Auch z.B. ganz klassische> Linux-Distributionen.
In besondere bei Debian gibt es strikte Kriterien, denen ein Packet
gerecht werden muss, um in Debian rein zu kommen, und drin zu bleiben.
Fehler müssen z.B. behoben werden, basierend ob proprietäre Software
benötigt wird wird es anders einsortiert, usw. Das ist eine zusätzliche
Qualitätssicherung.
Es ist klar das durch so ein Package-System sehr viele Dependencies
entstehen können - aber es ist auch klar das kleinere, vielgenutzte Libs
eine höhrere Qualität/Testgrad aufweisen als wenige monolithen
Nicht anders machen wir es doch auch innerhalb unserer eigenen Software,
viele kleine, gut getestete Komponenten - die sogar mit anderen
Abteilungen geshared werden (sollten)
Es ist klar das eine Handvoll externen Abhängigkeiten die als monolith
entwickelt werden leichter kontrollierbar sind - aber auch nur weil die
sich oft ihres Umfangs wegen weniger schneller entwickeln (was nicht
unbedingt gesund oder ungesund ist)
Ich finde es z.B. ziemlich beeindrucken das Rust mit den Nightly Builds
einen grossteil der public verfügbaren Crates als Regressions-Test baut,
dauert weil Rust so fiese langsam ist eben 4 Tage, aber stell euch mal
vor wie aufwändig das wäre mit Github und C/C++ Projekten zu erreichen -
wenn wir die Menge an Buildsystemen/Varianten mit einbeziehen ist das
faktisch nicht möglich ohne permanente Handarbeit
mh schrieb:> Du hast vermutlich das Problem nicht verstanden. Ich muss trotzdem> nachgucken, was geändert wurde, wer es geändert hat und vor allem, ob> "deren" Meinung von "kompatibles Update" mit meiner Meinung> übereinstimmt.
das ist doch noch alles gar nicht fertig, warum so drauf rumreiten?
wenn das Semantic Versioning sauber durchgezogen wird erkennst du
inkompatibilität an der Version - wenn das nicht sauber durchgezogen
wird ists Müll
Aber was garantiert dir denn bitte bei irgendeiner Lib das dort die
Changelogs sauber sind - das geht doch nur wenn die Menge an
Third-parties klein ist oder du deinen Pappenheimer genau kennst - schön
für dein Programm? was ist mit den andere 40 Projekten die andere
Dependencies haben und vielleicht nicht so einen klugen Entwickler wie
dich an der Leitung - da ist es genau so glück das alles richtig
funktioniert, richtig geprüft wird
Wenn man immer nur auf sein kleinen Bereich schaut ist alles egal - aber
frage mal einen Software-Projekt-Manager der zig Projekte und Teams
unter sich hat...
cppbert schrieb:> wenn das Semantic Versioning sauber durchgezogen wird erkennst du> inkompatibilität an der Version - wenn das nicht sauber durchgezogen> wird ists Müll
Wenn du dem nicht vertraust, dann nutze es nicht und prüfe alles
manuell.
Meine Güte. Deine Entscheidung.
🐧 DPA 🐧 schrieb:> Mit mehr & öfters> ändernden Abhängigkeiten ist die Qualitätskontrolle sehr schwierig. Und> die müsste ja eigentlich im Idealfall von jedem Entwickler bei jeder> Änderung erflogen.
Diese Qualitätskontrolle besteht heutzutage i.d.R. nicht mehr aus „ein
Entwickler liest sich den ganzen Code durch“, sondern aus
automatisierten Tests, und QA-Protokollen die nicht auf Sourcecodeebene
arbeiten. Wer heutzutage alle Änderungen in Code-Abhängigkeiten manuell
prüfen möchte, der kann einfach keine komplexe Software mehr entwickeln.
Ein Vertrauen in gewisse Packages oder Repositories ist notwendig, egal
ob es um kommerzielle Angebote (z.B. kommerzielle Toolchains mit
Bibliotheken) oder Open Source geht. Du kannst z.B. unmöglich alle
Änderungen in komplexen Abhängigkeiten wie einem IP-Stack, einer
SSL-Bibliothek oder einem RTOS manuell sichten. Und ewig auf alten
Versionen festzuhalten ist eine „Lösung“ mit der man böse auf die Nase
fallen kann. Plötzlich kommt soetwas wie Ripple20, und wer dann keinen
etablierten Prozess hat um regelmäßig Änderungen in Abhängigkeiten
einzupflegen der schaut plötzlich ganz blöd aus der Wäsche, weil das
alte major release von lwIP das das Produkt verwendet seit 3 Jahren
nicht mehr supported wird, und keiner eine Ahnung hat wie man das Loch
patchen und testen kann.
Andreas schrieb:> Diese Qualitätskontrolle besteht heutzutage i.d.R. nicht mehr aus „ein> Entwickler liest sich den ganzen Code durch“, sondern aus> automatisierten Tests,
Völlig richtig.
Und deshalb hat Rust/Cargo natürlich auch ein vollständiges Unittest-
und Systemtest-Framework eingebaut.
cppbert schrieb:> aber es ist auch klar das kleinere, vielgenutzte Libs> eine höhrere Qualität/Testgrad aufweisen als wenige monolithen
Ist das so? Gibt es dazu eine Studie oder ähnliches, wo man das
nachlesen kann?
cppbert schrieb:> Nicht anders machen wir es doch auch innerhalb unserer eigenen Software,> viele kleine, gut getestete Komponenten - die sogar mit anderen> Abteilungen geshared werden (sollten)
Da muss ich oder ein Kollege aber auch den Kopf hin halten, wenn etwas
nicht in Ordnung ist.
cppbert schrieb:> Ich finde es z.B. ziemlich beeindrucken das Rust mit den Nightly Builds> einen grossteil der public verfügbaren Crates als Regressions-Test baut,> dauert weil Rust so fiese langsam ist eben 4 Tage, aber stell euch mal> vor wie aufwändig das wäre mit Github und C/C++ Projekten zu erreichen -> wenn wir die Menge an Buildsystemen/Varianten mit einbeziehen ist das> faktisch nicht möglich ohne permanente Handarbeit
Ich sehe nicht so ganz den Vorteil, unkontrollierten Quelltext für
Regressionstests zu nutzen, vor allem bei einer nicht wirklich
definierten Sprache (das Thema Sprachdefinition wurde schon durchgekaut,
und ich bin an keiner weiteren Diskussion interessiert, bis die
Definition existiert). Wer wertet das alles aus, vor allem wenn es schon
3 neue Nightly Builds gibt, wenn das Ergebnis bereit steht?
cppbert schrieb:> mh schrieb:>> Du hast vermutlich das Problem nicht verstanden. Ich muss trotzdem>> nachgucken, was geändert wurde, wer es geändert hat und vor allem, ob>> "deren" Meinung von "kompatibles Update" mit meiner Meinung>> übereinstimmt.>> das ist doch noch alles gar nicht fertig, warum so drauf rumreiten?
Weil MaWin es immer wieder aus der Ecke kramt. Und auch wenn es fertig
wäre, löst es das Problem nicht.
cppbert schrieb:> wenn das Semantic Versioning sauber durchgezogen wird erkennst du> inkompatibilität an der Version - wenn das nicht sauber durchgezogen> wird ists Müll
Und wer kontrolliert, dass es sauber durchgezogen wird?
cppbert schrieb:> Aber was garantiert dir denn bitte bei irgendeiner Lib das dort die> Changelogs sauber sind
Man kann sich die Commits angucken ... Man muss ja nicht jedes einzelne
Zeichen kontrollieren, es gibt Strategien, um die eigenen Fragen
effizient zu beantworten.
cppbert schrieb:> [...]> Wenn man immer nur auf sein kleinen Bereich schaut ist alles egal - aber> frage mal einen Software-Projekt-Manager der zig Projekte und Teams> unter sich hat...
Was genau willst du damit sagen? Qualitätssicherung ist nicht wichtig,
wenn man überarbeitet oder überfordert ist? Und warum kann der
Sofrware-Projekt-Manager diese Aufgabe nicht an einen Softwareentwickler
delegieren?
MaWin schrieb:> cppbert schrieb:>> wenn das Semantic Versioning sauber durchgezogen wird erkennst du>> inkompatibilität an der Version - wenn das nicht sauber durchgezogen>> wird ists Müll>> Wenn du dem nicht vertraust, dann nutze es nicht und prüfe alles> manuell.> Meine Güte. Deine Entscheidung.
Ich wollte nichts dagegen sagen: ich vertraue darauf das Verfehlungen
mit dem Semantic Versioning von der Community so radikal verurteilt
werden das sich auch jeder Newbie in kürzester Zeit daran hält wie an
die 10 Gebote...
mh schrieb:> Ich sehe nicht so ganz den Vorteil, unkontrollierten Quelltext für> Regressionstests zu nutzen, [...] Wer wertet das alles aus, vor allem wenn es
schon
> 3 neue Nightly Builds gibt, wenn das Ergebnis bereit steht?
Da es sich natürlich um automatisierte Tests handelt, ist die Auswertung
inbegriffen.
mh schrieb:>> aber es ist auch klar das kleinere, vielgenutzte Libs>> eine höhrere Qualität/Testgrad aufweisen als wenige monolithen> Ist das so? Gibt es dazu eine Studie oder ähnliches, wo man das> nachlesen kann?
wozu Studie? vertraust du nicht auf das Konzept: weniger, aber viel
genutzte Zeilen Code sind meist weniger fehlerbehaftet, als großer,
selten genutzter Code?
mh schrieb:>> Nicht anders machen wir es doch auch innerhalb unserer eigenen Software,>> viele kleine, gut getestete Komponenten - die sogar mit anderen>> Abteilungen geshared werden (sollten)> Da muss ich oder ein Kollege aber auch den Kopf hin halten, wenn etwas> nicht in Ordnung ist.
das ist dann natürlich ganz klar meine Verantwortung, warum sollte ich
dafür keine Verantwortung tragen???
mh schrieb:>> Ich finde es z.B. ziemlich beeindrucken das Rust mit den Nightly Builds>> einen grossteil der public verfügbaren Crates als Regressions-Test baut,>> dauert weil Rust so fiese langsam ist eben 4 Tage, aber stell euch mal>> vor wie aufwändig das wäre mit Github und C/C++ Projekten zu erreichen ->> wenn wir die Menge an Buildsystemen/Varianten mit einbeziehen ist das>> faktisch nicht möglich ohne permanente Handarbeit> Ich sehe nicht so ganz den Vorteil, unkontrollierten Quelltext für> Regressionstests zu nutzen
Da geht es nur um Parser und Kompiler-Tests - mehr nicht, und das du
sowas mit C/C++ oder anderen (im Kern) nicht Package-basierten
out-of-the-box Buildbaren Sprachen so was einfach sehr schwer ist
mh schrieb:>> wenn das Semantic Versioning sauber durchgezogen wird erkennst du>> inkompatibilität an der Version - wenn das nicht sauber durchgezogen>> wird ists Müll> Und wer kontrolliert, dass es sauber durchgezogen wird?
du, deine Kollegen, die Community, die Welt...
mh schrieb:>> Aber was garantiert dir denn bitte bei irgendeiner Lib das dort die>> Changelogs sauber sind> Man kann sich die Commits angucken ... Man muss ja nicht jedes einzelne> Zeichen kontrollieren, es gibt Strategien, um die eigenen Fragen> effizient zu beantworten.
das würde Ich auch mit Semantik Versioning machen - aber würde es
trotzdem schön finden wenn sich eine Kultur entwickelt die Verfehlungen
in dem Bereich starke Abneigung der Community erzeugt - und wenn der
kein Soziopath ist - oder wem seine Reputation egal ist wirds dann eben
nicht jucken - ist halt so
mh schrieb:>> Wenn man immer nur auf sein kleinen Bereich schaut ist alles egal - aber>> frage mal einen Software-Projekt-Manager der zig Projekte und Teams>> unter sich hat...> Was genau willst du damit sagen? Qualitätssicherung ist nicht wichtig,> wenn man überarbeitet oder überfordert ist? Und warum kann der> Sofrware-Projekt-Manager diese Aufgabe nicht an einen Softwareentwickler> delegieren?
in absolut keinster Weise - wie kannst du das aus dem Text rauslesen?
Ich sage nur das eine bessere Kulturentwicklung die von einem einfachem
System begünstigt wird sich schlussendlich auszahlen wird und der
einzelne Entwickler einfach nicht immer direkt einer von den sehr guten
sein muss damit auch gut läuft - btw: ich arbeite viel im Medizinbereich
- Auditierung usw. ich weiss ganz genau was Qualität bedeutet - speziell
in Projekten wo dir die FDA u.a. oder anderen den Vetrieb verbieten
können :)
MaWin schrieb:> Warum sollte ein Paket mit einer neuen Version plötzlich> unvertrauenswürdig werden?
Weil z.B. das Ergebnis eines stattgefundenen Code-Reviews verpufft und
nachgeholt werden muss. Zumindest, wenn man es ernst meint.
Sich abhängig zu machen von anderen ist eine leichte Entscheidung. Wird
aber doof, wenn man selbst den Kopf für das Gesamtergebnis hinhalten
muss - und Teile davon außerhalb der eigenen Zuständigkeit liegen.
Das Problem ist nicht, dass es Abhängigkeiten gibt.
Das Problem ist, dass ein Programmierstil mit möglichst vielen
Abhängigkeiten entsteht (und offensichtlich auch gewünscht wird). Die
Stabilität des Gesamtsystems ist daher nicht mehr gegeben, da sich
ununterbrochen bestimmte Teile verändern.
An deinem Auto schraubst du auch nicht ständig rum und tauschst
irgendwelche Bolzen aus, nur weil der Bolzenhersteller sagt, dass der
gestern chromefarbene Bolzen heute bronzefarben sein muss...
cppbert schrieb:> das sich auch jeder Newbie in kürzester Zeit daran hält wie an> die 10 Gebote...
Dann solltest du etwas Selbstrefelxion betreiben und prüfen, ob du dich
an alle 10 Gebote hälst. Ich halte mich nicht an alle 10 ;-).
cppbert schrieb:> mh schrieb:>>> aber es ist auch klar das kleinere, vielgenutzte Libs>>> eine höhrere Qualität/Testgrad aufweisen als wenige monolithen>> Ist das so? Gibt es dazu eine Studie oder ähnliches, wo man das>> nachlesen kann?>> wozu Studie? vertraust du nicht auf das Konzept: weniger, aber viel> genutzte Zeilen Code sind meist weniger fehlerbehaftet, als großer,> selten genutzter Code?
1. Nein ich vertraue nicht blind einem unbewiesenen Konzept
2. Warum ändert sich die Anzahl der Codezeilen?
cppbert schrieb:> [...]> du, deine Kollegen, die Community, die Welt...
Die Community ist aber nicht für die Software verantwortlich, die ich
meinem Kunden verkaufe. Wir drehen uns im Kreis.
Ich weiß nicht wie es dir geht, aber immer wenn ich von so etwas wie
heartbleed erfahre, frage ich mich "wie kann sowas nicht vorher
auffallen?".
Ich sage nicht, dass mir der Bug aufgefallen wäre, aber ich wäre für die
möglichen Folgen dieses Bugs in meiner Software verantwortlich und
niemand sonst. (Ich habe openssl nicht als Abhängigkeit)
> mh schrieb:>>> Aber was garantiert dir denn bitte bei irgendeiner Lib das dort die>>> Changelogs sauber sind>> Man kann sich die Commits angucken ... Man muss ja nicht jedes einzelne>> Zeichen kontrollieren, es gibt Strategien, um die eigenen Fragen>> effizient zu beantworten.>> das würde Ich auch mit Semantik Versioning machen - aber würde es> trotzdem schön finden wenn sich eine Kultur entwickelt die Verfehlungen> in dem Bereich starke Abneigung der Community erzeugt - und wenn der> kein Soziopath ist - oder wem seine Reputation egal ist wirds dann eben> nicht jucken - ist halt so
Die Abneigung der Community und der eigene Ruf ist ziemlich egal, wenn
es um viel Geld geht, vor allem, da das Internet ziemlich anonym ist.
Wieviel Geld ein geschickter Hacker wohl verdienen kann, wenn er es
schafft einen kleinen Exploit in openssl zu verstecken, der es für 1 Tag
in die repos einer Linux Distribution schafft.
> mh schrieb:>>> Wenn man immer nur auf sein kleinen Bereich schaut ist alles egal - aber>>> frage mal einen Software-Projekt-Manager der zig Projekte und Teams>>> unter sich hat...>> Was genau willst du damit sagen? Qualitätssicherung ist nicht wichtig,>> wenn man überarbeitet oder überfordert ist? Und warum kann der>> Sofrware-Projekt-Manager diese Aufgabe nicht an einen Softwareentwickler>> delegieren?>> in absolut keinster Weise - wie kannst du das aus dem Text rauslesen?
Das war das einzige was ich da reinlesen konnte. Was sollte ich denn da
rauslesen?
> Ich sage nur das eine bessere Kulturentwicklung die von einem einfachem> System begünstigt wird sich schlussendlich auszahlen wird und der> einzelne Entwickler einfach nicht immer direkt einer von den sehr guten> sein muss damit auch gut läuft - btw: ich arbeite viel im Medizinbereich> - Auditierung usw. ich weiss ganz genau was Qualität bedeutet - speziell> in Projekten wo dir die FDA u.a. oder anderen den Vetrieb verbieten> können :)
Und ihr überprüft nicht bei jedem Update, ob die Abhängikeiten noch in
Ordnung sind? Für wen genau arbeitest du?
S. R. schrieb:> Die> Stabilität des Gesamtsystems ist daher nicht mehr gegeben, da sich> ununterbrochen bestimmte Teile verändern.
Nein. Unsinn.
Mit Semantic Versioning verändert sich genau gar nichts in inkompatibler
Art und Weise.
Und wenn du dem nicht vertraust, dann pinne halt deine Version fest.
Es ist einzig und alleine die Entscheidung des Entwicklers, ob sich
Teile ändern oder nicht.
Ich sehe hier überhaupt gar keine Gefährdung der Stabilität des
Gesamtsystems durch Cargo/Rust.
mh schrieb:> Ich sage nicht, dass mir der Bug aufgefallen wäre, aber ich wäre für die> möglichen Folgen dieses Bugs in meiner Software verantwortlich und> niemand sonst. (Ich habe openssl nicht als Abhängigkeit)
Und wenn du die TLS-Implementierung selbst gemacht hättest, damit du nur
ja keine böse Dependency hast für die die verantwortlich bist, hättest
du das natürlich fehlerfrei implementiert.
Wenn man eine Funktionalität braucht, hat man genau zwei Möglichkeiten:
1) Man programmiert es selbst.
2) Man nutzt Libs, die auch von anderen genutzt werden.
Jetzt rate mal, wo im Schnitt mehr Bugs drin sind.
mh schrieb:> Ich weiß nicht wie es dir geht, aber immer wenn ich von so etwas wie> heartbleed erfahre, frage ich mich "wie kann sowas nicht vorher> auffallen?".> Ich sage nicht, dass mir der Bug aufgefallen wäre, aber ich wäre für die> möglichen Folgen dieses Bugs in meiner Software verantwortlich und> niemand sonst. (Ich habe openssl nicht als Abhängigkeit)
falls du die Abhängigkeit gehabt hättest wäre dir der heartbleed beim
Review der neueren Version sicherlich aufgefallen, oder?
mh schrieb:>> Ich sage nur das eine bessere Kulturentwicklung die von einem einfachem>> System begünstigt wird sich schlussendlich auszahlen wird und der>> einzelne Entwickler einfach nicht immer direkt einer von den sehr guten>> sein muss damit auch gut läuft - btw: ich arbeite viel im Medizinbereich>> - Auditierung usw. ich weiss ganz genau was Qualität bedeutet - speziell>> in Projekten wo dir die FDA u.a. oder anderen den Vetrieb verbieten>> können :)> Und ihr überprüft nicht bei jedem Update, ob die Abhängikeiten noch in> Ordnung sind? Für wen genau arbeitest du?
wie kommst du darauf? ohne automatisch erzwungenes Review durch einen
Team Kollegen bekomme ich keinen Zeile in den Vor-Main, und in den Main
kommen die erst wenn alle Tests durch sind - mit ca. 70-80% Abdeckung,
ASAN, TSAN, Coverity, die ganze Buzzword-Kette - ist manchmal sehr
anstrengend aber richtig übel wird es wenn du an gesharten Libs
arbeitest oder Architektur-Änderungen machen willst :)
cppbert schrieb:> wie kommst du darauf? ohne automatisch erzwungenes Review durch einen> Team Kollegen bekomme ich keinen Zeile in den Vor-Main, und in den Main> kommen die erst wenn alle Tests durch sind - mit ca. 70-80% Abdeckung,> ASAN, TSAN, Coverity, die ganze Buzzword-Kette - ist manchmal sehr> anstrengend aber richtig übel wird es wenn du an gesharten Libs> arbeitest oder Architektur-Änderungen machen willst :)
bei >100 Entwicklern und weit weit >1Mio LOC
und ja "Rust would’ve prevented Heartbleed" :
https://tonyarcieri.com/would-rust-have-prevented-heartbleed-another-look
Rust would’ve prevented Heartbleed, but Heartbleed is actually kind of
boring compared to remote code execution vulnerabilities like Winshock
or openssl-too-open. Remote code execution vulnerabilities are far
scarier, and largely preventable in Rust due to its memory safety.
aber es gibt trotzdem noch genug andere Sache die Rust nicht verhindern
kann
ist aber auch von 2015, keine Ahnung ob sich die Situation weiter
verbessert hat
MaWin schrieb:> mh schrieb:>> Ich sage nicht, dass mir der Bug aufgefallen wäre, aber ich wäre für die>> möglichen Folgen dieses Bugs in meiner Software verantwortlich und>> niemand sonst. (Ich habe openssl nicht als Abhängigkeit)>> Und wenn du die TLS-Implementierung selbst gemacht hättest, damit du nur> ja keine böse Dependency hast für die die verantwortlich bist, hättest> du das natürlich fehlerfrei implementiert.
Wo habe ich geschrieben, dass Dependencies böse sind? Wo habe ich auch
nur angedeutet, dass ich TLS fehlerfrei implementiert hätte? Was genau
wolltest du mit dem Satz genau sagen? Oder wolltest du mir einfach etwas
unterstellen?
MaWin schrieb:> Wenn man eine Funktionalität braucht, hat man genau zwei Möglichkeiten:> 1) Man programmiert es selbst.> 2) Man nutzt Libs, die auch von anderen genutzt werden.
Die beiden Alternativen sind meiner Meinung nach unvollständig.
1. Man entwickelt es selbst. Dazu gehört ein unabhängiges Review.
2. Man nutzt eine extern entwickelte Lösung und führt das Review selbst
durch.
Wie gründlich das Review ist, ist situationsabhängig.
MaWin schrieb:> Jetzt rate mal, wo im Schnitt mehr Bugs drin sind.
Du hast sicher ein paar passende Studien zur Hand, die diese Frage
beantworten?
cppbert schrieb:> mh schrieb:>> Ich weiß nicht wie es dir geht, aber immer wenn ich von so etwas wie>> heartbleed erfahre, frage ich mich "wie kann sowas nicht vorher>> auffallen?".>> Ich sage nicht, dass mir der Bug aufgefallen wäre, aber ich wäre für die>> möglichen Folgen dieses Bugs in meiner Software verantwortlich und>> niemand sonst. (Ich habe openssl nicht als Abhängigkeit)>> falls du die Abhängigkeit gehabt hättest wäre dir der heartbleed beim> Review der neueren Version sicherlich aufgefallen, oder?
Warum wollt ihr mir unbedingt unfehlbarkeit unterstellen?
cppbert schrieb:> wie kommst du darauf? ohne automatisch erzwungenes Review durch einen> Team Kollegen bekomme ich keinen Zeile in den Vor-Main, und in den Main> kommen die erst wenn alle Tests durch sind - mit ca. 70-80% Abdeckung,> ASAN, TSAN, Coverity, die ganze Buzzword-Kette - ist manchmal sehr> anstrengend aber richtig übel wird es wenn du an gesharten Libs> arbeitest oder Architektur-Änderungen machen willst :)
Warum muss dein Code ein Review durch einen Kollegen überstehen, und die
Abhängigkeiten nicht?
cppbert schrieb:> und ja "Rust would’ve prevented Heartbleed"
und ja "FORTRAN would've prevented Heartbleed"
mh schrieb:> Wo habe ich geschrieben, dass Dependencies böse sind? Wo habe ich auch> nur angedeutet, dass ich TLS fehlerfrei implementiert hätte? Was genau> wolltest du mit dem Satz genau sagen? Oder wolltest du mir einfach etwas> unterstellen?
Und warum hast du es dann geschrieben?
mh schrieb:> Warum muss dein Code ein Review durch einen Kollegen überstehen, und die> Abhängigkeiten nicht?
Abhängigkeiten natürlich auch, die sogar noch intensiver weil der
Prozess der Entwicklung da ja nicht so gut nachvollziehbar ist
aber wie auch bei Rust Cargo kommen die nicht einfach plötzlich sondern
man entscheidet sich für eine Versionsänderung - und beginnt dann den
Upgrade-Prozess - der ein Weilchen dauern kann - das gilt für
3rd-Parties wie auch für das Entwicklungs/Laufzeitsystem und die
verwendeten Kompiler
cppbert schrieb:> und beginnt dann den> Upgrade-Prozess - der ein Weilchen dauern kann
d.h. alle Änderungen so weit wie möglich nachvollziehen, was bei manchen
3rd-Parties aber Aufgrund der Größe auch schwer sein kann (z.B.
CAD-Kernel usw. - auch wenn mit Source Code kann ich da nicht durch alle
6000 Code-Änderungen durch, weil ich die Architektur der Lib nicht
wirklich intensiv kenne und deswegen nicht die Fehler-Relevanz von Fixes
oder Änderungen beurteilen kann) dann Branchen und alle
Tests-Durchlaufen, manuelle und System-Tests, der Rest ist Hoffnung
Was macht ihr eigentlich so für Software, wenn ihr jede Dependency Zeile
für Zeile reviewen müsst?
Ariane 5?
Steuerung der ISS?
Falcon 9?
Das ist völlig weltfremdes Gelaber.
Niemand macht das.
Und es ist allgemein auch gar nicht notwendig. Nur vielleicht im
Einzelfall, wenn es eine obskure Lib ist, die sonst niemand verwendet
oder ähnliches.
Aber allgemein ist das völliger Quatsch.
Unittests, Systemtests, und gut ist.
MaWin schrieb:> mh schrieb:>> Wo habe ich geschrieben, dass Dependencies böse sind? Wo habe ich auch>> nur angedeutet, dass ich TLS fehlerfrei implementiert hätte? Was genau>> wolltest du mit dem Satz genau sagen? Oder wolltest du mir einfach etwas>> unterstellen?>> Und warum hast du es dann geschrieben?
Was habe ich wo geschrieben?
cppbert schrieb:> mh schrieb:>> Warum muss dein Code ein Review durch einen Kollegen überstehen, und die>> Abhängigkeiten nicht?>> Abhängigkeiten natürlich auch, die sogar noch intensiver weil der> Prozess der Entwicklung da ja nicht so gut nachvollziehbar ist>> aber wie auch bei Rust Cargo kommen die nicht einfach plötzlich sondern> man entscheidet sich für eine Versionsänderung - und beginnt dann den> Upgrade-Prozess - der ein Weilchen dauern kann - das gilt für> 3rd-Parties wie auch für das Entwicklungs/Laufzeitsystem und die> verwendeten Kompiler
Wieso ist dann der Pflegeaufwand für Abhängikeiten aus dem cargo
geringer, als für eine selbst entwickelte Lösung? Wenn ihr ein Review
macht, müsst ihr ja die Kompetenz besitzen, die Software selbst zu
pflegen. Und die Zahl der Änderungen sollte bei der eigenen Lösung
geringer sein, da nur eure Anforderungen erfüllt werden müssen.
mh schrieb:> Was habe ich wo geschrieben?
Das:
>Die Community ist aber nicht für die Software verantwortlich, die ich>meinem Kunden verkaufe. Wir drehen uns im Kreis.>Ich weiß nicht wie es dir geht, aber immer wenn ich von so etwas wie>heartbleed erfahre, frage ich mich "wie kann sowas nicht vorher>auffallen?".>Ich sage nicht, dass mir der Bug aufgefallen wäre, aber ich wäre für die>möglichen Folgen dieses Bugs in meiner Software verantwortlich und>niemand sonst. (Ich habe openssl nicht als Abhängigkeit)
Warum hast du das geschrieben, wenn es doch keine Aussage hat?
Ja, du musst für deine Software haften.
Und?
Du hast die Möglichkeit sie selbst zu schreiben, oder gut getestete und
verbreitete Softwaremodule zu verwenden.
Deine Entscheidung.
Du beherrschst es sehr gut eine Diskussion entgleisen zu lassen, indem
du ständig die Richtung änderst.
mh schrieb:> Wieso ist dann der Pflegeaufwand für Abhängikeiten aus dem cargo> geringer, als für eine selbst entwickelte Lösung? Wenn ihr ein Review> macht, müsst ihr ja die Kompetenz besitzen, die Software selbst zu> pflegen.
Weil man es nicht selbst schreiben muss?
Weil man eben nicht zwangsweise ein volles Review machen muss?
Weil man es eben nicht zwangsweise vollständig testen muss?
Weil es weniger wahrscheinlich Bugs enthält, wenn es auf millionen
anderer Kisten bereits läuft?
etc, etc...
MaWin schrieb:> [...]
So lange du weiter unvollständig und/oder falsch zitierst diskutiere ich
nicht weiter mit dir.
Auch wenn ich weiter mit dir Diskutieren wollte, ist es nicht mehr
möglich, da
mh schrieb:>> aber wie auch bei Rust Cargo kommen die nicht einfach plötzlich sondern>> man entscheidet sich für eine Versionsänderung - und beginnt dann den>> Upgrade-Prozess - der ein Weilchen dauern kann - das gilt für>> 3rd-Parties wie auch für das Entwicklungs/Laufzeitsystem und die>> verwendeten Kompiler> Wieso ist dann der Pflegeaufwand für Abhängikeiten aus dem cargo> geringer, als für eine selbst entwickelte Lösung?
für die professionelle Entwicklung ist der Prüfungsaufwand exakt gleich
groß - kommt eben darauf an wie wichtig es ist, wer anders behauptet
versteht es nicht oder meint was anderes (z.B. einfacheres deployment)
aber für Mio Standard-Anwender wird das ganze deployment trivial, man
braucht keine 10 Buildsysteme mehr verstehen - wenn du als Selbständiger
viele Firmen durchwanderst wärst du schockiert wie viel Aufwand da
investiert wird der beim Wechsel in eine andere Firma gerade wieder
verpufft, bei Java und .Net ist z.B. die Effekt sehr klein - alle
sprechen fast die gleiche Sprache/Tools
> Wenn ihr ein Review> macht, müsst ihr ja die Kompetenz besitzen, die Software selbst zu> pflegen. Und die Zahl der Änderungen sollte bei der eigenen Lösung> geringer sein, da nur eure Anforderungen erfüllt werden müssen.
das Konzept funktioniert nur so lange deine 3rd-Parties trivial sind
weil du es dir in deinem Projekt leisten kannst, z.B. ist es recht
sinnfrei mit einem Embedded-Entwickler von 64Kb Platformen über die
Komplexität von Library-Abhängigkeiten zu diskutieren - er hat nämlich
fast nie welche
genau so sinnlos ist die Argumentation wenn z.B. genannte OpenSSL zum
Einsatz kommt, der schiere Umfang der Lib erschwert ein
Initiales-Review, und jeder der das anders verkaufen will redet Müll
oder braucht die eben doch nicht wirklich
In einem Projekt hatten wir einen CAD-Kernel im Einsatz - mit
Quelltext-Lizenz, der war riesig und hat einen Haufen-Spezialfeatures
gehabt von denen wir ~60% genutzt haben (für 1% der
Software-Funktionalität), alles pure Mathematik mit ohne Ende
Spezialfällen, Sau teuer, aber sehr gute Ergebnisse, nicht das ich Angst
vor Mathe habe, aber es ist eben was anderes ob das dein Primärfeld ist
oder nur Randgebiet in deiner Software
cppbert schrieb:> alles pure Mathematik mit ohne Ende> Spezialfällen, Sau teuer, aber sehr gute Ergebnisse, nicht das ich Angst> vor Mathe habe, aber es ist eben was anderes ob das dein Primärfeld ist> oder nur Randgebiet in deiner Software
und ja bei dem Kunden gab es viele Mathematiker die das gekonnt hätte -
aber die haben auch anderen Aufgaben als zig-tausend Euro Zukaufsoftware
zu reviewen - bei manchen Projekten oder auch Verantwortlichen bekommt
man so was durch oder es wird auch gefordert aber eben nicht einfach so
überall
> Das ist völlig weltfremdes Gelaber.> Niemand macht das.
Jeder der SIL2 Software macht. Und ab SIL3 machst das nicht du sondern
ein unabhaengiger Dritter.
Olaf
Moin,
Na, war ja gut was los hier in der Zwischenzeit...
MaWin schrieb:>> dann sagen mir autotools und cmake VORHER, was sie>> beoetigen.>> cargo check
Wow - ich bin ja zutiefst impraegniert. Hat jetzt nichtmal 1h gedauert
...
Ja, der Rechner ist keine Rakete, aber - hey - ich will einen einzelnen
Videocodec bauen, kein ganzes ffmpeg, kein ganzes GNU-Octave, keinen
Browser, kein komplettes X11R6 mit make world... und auch kein KiCad mit
Furz und Feuerzeug. Nein, 1 (i.W. ein) Videocodec.
Olaf schrieb:> Jeder der SIL2 Software macht. Und ab SIL3 machst das nicht du sondern> ein unabhaengiger Dritter.
Ja genau. Richtig.
Du hast den Sonderfall gefunden.
Bravo.
Es geht hier um Rust und Cargo.
Wie viel *SILxy SW davon nutzt denn crates.io?
Richtig. Keine. Denn wie du ja schon selbst sagtest, braucht man da die
100%ige Kontrolle über seine Deps. Deshalb nutzt man lokale crates.
Wo war jetzt noch gleich das Problem?
Dergute W. schrieb:> Wow - ich bin ja zutiefst impraegniert. Hat jetzt nichtmal 1h gedauert
Rust ist scheisse langsam zu bauen - das ist mehr als bekannt - liegt
aber nicht am Sprachendesign sondern dem Frontend was dem LLVM zu viel
IR Code hinschmeisst den er dann Ewig optimieren muss
Buildzeiten schlechter als C++ sind nicht selten - jedem bekannt
trotzdem ändert das nichts daran das es ein relativ gutes Sprachendesign
ist mit gute Ansätze/Anleihen für Infrastruktur-Tools
Dergute W. schrieb:>> cargo check>> Wow - ich bin ja zutiefst impraegniert. Hat jetzt nichtmal 1h gedauert
Ja genau.
Es hat auch keine 3 Tage und keine 3 Wochen gedauert.
Sondern wenige Minuten.
1
rav1e-0.4.0$ time cargo check
2
Downloaded jobserver v0.1.21
3
Downloaded noop_proc_macro v0.3.0
4
Downloaded nasm-rs v0.2.0
5
Downloaded crossbeam v0.8.0
6
Downloaded arg_enum_proc_macro v0.3.0
7
...
8
real 2m43.530s
9
user 9m35.788s
10
sys 0m15.025s
Auf einem 8 Jahre alten Laptop.
Der Rustcompiler ist nicht schnell.
Das ist bekannt.
Aber bitte höre auf zu lügen.
Dergute W. schrieb:> Mal gucken, wann/wie ich weiterstuempere...
Ich hab das eben auch mal probiert. Ich kann nichts dazu sagen, ob das
1h dauert oder nicht, da es nach 20 Sekunden mit einer kryptischen
Fehlermeldung abgebrochen ist. Das sah so aus als wäre der strerror Text
für eine fehlende Datei direkt an den Nutzer weitergegeben worden, ohne
zu erwähnen welche Datei fehlt. Sehr hilfreich ...
Moin,
MaWin schrieb:> Aber bitte höre auf zu lügen.
Bitte hoere auf, mir Luegen zu unterstellen; ich schrub' ja, der Rechner
ist keine Rakete (Auch Laptop, aber deutlich aelter als deiner).
Es waere mir ja anundpfirsich auch wurscht, wenn er ein paar Tage vor
sich hinwerkelt und Gigabyteweise irgendwelchen mumpitz runterlaed',
wenn danach was sinnvolles rausgekommen waere und nicht so eine
bekloppte Meldung.
Aber ich kann eben doch auch auf dieser alten Maschin'
Buildgeschwindigkeit, -Komfort des Buildsystems, etc. in Relation zu
diverser anderer Software setzen, die ich da gebaut habe.
Wenn ich jetzt mal hier nachschau':
https://github.com/xiph/rav1e/commit/c6a2d69a99c79763da3545e8b0f410c488cad98e
und da les' ich was wie:
"Bump minimum version to 1.44.1
This is needed to avoid a rustc bug that existed in 1.43,
which was tripped by the updated version of semver-parser."
Und ihr wollt mir hier einen von gutem Sprachdesign, und guten Ansaetzen
von Infrastruktur-Tools und toller Versionierung und Sicherheit
erzaehlen.
Da kram' ich nochmal meinen schiefen Vergleich mit dem Kommunismus raus:
Ich, der dumme Werktaetige (kein Informatiker), will einfach nur mal 'ne
Banane(Videocodec) essen(kompilieren). Sind aber halt in der Zone grad
aus.
Deshalb sagen die Jungs frisch von der Kaderschmiede, ich soll mich mal
nicht so anstellen; die Bananen, die der Klassenfeind im Westen(C,
"alte" Buildsysteme") frisst, waeren ja eh' nix genaues, und wenn der
Kommunismus den Kapitalismus erst ueberrundet hat, dann gibts hier viel
groessere, gelbere und bananigere Bananen mit viel besseren
Versionsnummern.
Jaja, schon klar... ;-)
SCNR,
WK
Dergute W. schrieb:> und da les' ich was wie:> "Bump minimum version to 1.44.1> This is needed to avoid a rustc bug that existed in 1.43,> which was tripped by the updated version of semver-parser.">> Und ihr wollt mir hier einen von gutem Sprachdesign, und guten Ansaetzen> von Infrastruktur-Tools und toller Versionierung und Sicherheit> erzaehlen.
Es sagt niemand das irgendwas davon perfekt ausgereift und fehlerfrei
ist, keine Ahnung warum du dich überhaupt nur im entfernesten daran
störst? Ignorier einfach Rust und gut ist und falls deine Liblingslib
oder App plötzlich eine Dependency dazu hat ist der Autor davon eben
jetzt auch nicht mehr ganz so frisch im Kopf
Dergute W. schrieb:> ich schrub' ja, der Rechner> ist keine Rakete (Auch Laptop, aber deutlich aelter als deiner).
Auf einer PDP-11 läuft Rust übrigens auch nicht.
Dergute W. schrieb:> Und ihr wollt mir hier einen von gutem Sprachdesign, und guten Ansaetzen> von Infrastruktur-Tools und toller Versionierung und Sicherheit> erzaehlen.
Blabla. Dummes Gelaber.
Es hat einen Fehler gegeben. Und?
In $anderer_compiler hat es schließlich noch nie Fehler gegeben.
In der Zeit, die du hier herumpalavert hast, hättest du lange "rustup
update" ausführen können und nach 10 Minuten hättest du ein modernes
Rust gehabt, das dein Projekt bauen kann.
Aber daran bist du ja gar nicht interessiert.
Du willst ja lieber hier stänkern.
MaWin schrieb:> Wenn man eine Funktionalität braucht, hat man genau zwei Möglichkeiten:> 1) Man programmiert es selbst.> 2) Man nutzt Libs, die auch von anderen genutzt werden.
Es sagt ja niemand, dass man gar keine externen Libraries brauchen darf.
Es geht darum, die Abhängigkeiten sinnvoll und gering zu halten.
Aber wenn es etwas gibt, das man braucht, aber nicht wirklich will? Man
vergesse nicht Option 3!
3) Eine Abstraktionsschicht. Die Abhängigkeit in ein anderes Programm
oder Backend auslagern / abtrennen, genutzt über ein möglichst simples
Interface. Das macht das Hilfsprogram / Backend einfach zu ersetzen und
erlaubt alternative und/oder unabhängige Implementationen!
Ich mache das recht oft. Es ist nicht immer einfach umzusetzen, und es
kann schwierig sein, zu entscheiden, wo man den Schnitt macht. Auch ich
bin da nicht perfekt. Die Abhängigkeit geht oft auch nicht ganz weg,
aber statt total von der einen Sache abhängig zu sein, kann man mehrere
Implementationen haben, und diese einfach ersetzen, oder je nachdem was
es ist auch mehrere nutzen. Notfalls muss man auch nicht das halbe
Programm neu schreiben, wenn man es ersetzen muss.
Beispiele von mir:
0) In einem Report Generator in nodejs, den ich mal schrieb, brauchte
ich was um SVGs nach PNGs zu konvertieren (für email). Die bestehenden
Implementationen gefielen mir aber alle nicht. Ich habe dann trotzdem
eine genommen, ich bin ja nicht wahnsinnig, aber nicht direkt verwendet.
Es gibt nur eine Datei mit einer einzigen exportierten Funktion,
"svg_to_png", die die library nutzt. Alles andere nutzt die Funktion,
und nicht die lib direkt. Austauschen wäre also simpel.
1) Mein Window Manager brauchte eine Appübersicht/homescreen/dashboard,
wie auch immer man es nennen mag. Sowas will ich nicht ohne Gui Toolkit
machen. Im Window Manager will ich aber von keinem Gui Toolkit abhängig
sein. Ich hab das dann in eine andere Anwendung ausgelagert, die nur die
Appübersicht anzeigt, und von der WM per xembed eingebunden wird. Wobei
ich das Anzeigen nochmal in eine andere Anwendung ausgelagert habe. Also
WM xembed <- dashboard <-> ui-grid
Die WM ist c, das dashboard ist ein simples bash script, und das ui-grid
ist python3 + pyqt:
https://github.com/Daniel-Abrecht/ui-grid/blob/master/ui-gridhttps://github.com/Daniel-Abrecht/dpaw/blob/master/tools/dpaw-dashboardhttps://github.com/Daniel-Abrecht/dpaw/blob/38a72f273951c1185598337f6c67288daaa340a8/wm/src/dpawindow/workspace/handheld.c#L299
2) Meine tty multiplexer library hat ein Backend für Ausgaben über
curses:
https://github.com/Daniel-Abrecht/libttymultiplex/blob/master/backend/curses/src/main.c#L397
Eigentlich wollte ich noch ein tty, ein fbdev, ein KMS, etc. backends
machen, bin aber nie dazu gekommen. Das interface da ist auch nicht
besonders gut, libttymultiplex ist zwar von den Backends unabhängig,
aber die backends nicht von libttymultiplex...
3) Mein console-keyboard-multiplexer (zeigt ein Keyboard unten in der
Konsole an) und mein console-keyboard-basic (das angezeigte Keyboard)
haben keine direkte Abhängigkeit.
4) Mein ACME2 challange solver trennt den generischen ACME2 part und den
solver part. Der Solver ist ein separates Program. (packaging und
verschieben des dns01 solvers in separates Repo noch ausstehend,
hauptcode ist aber bereits davon voll unabhängig):
https://github.com/Daniel-Abrecht/DPA-ACME2
Ich hatte noch mehr Zeugs, auch in anderen Sprachen, aber ich glaube das
sind genug Beispiele.
Ich bin natürlich nicht der Einzige, der das macht:
1&2) Das SDL Grafikframework und QT haben etliche Backends für alles
mögliche, sei es X11, KMS, fbdev, für Grafik, pulse oder also für sound,
xinput oder libinput für IO, etc.
3) Die gnome-chatty app nutzt libpurple plugins als backends, genauso
wie glaube ich pidgin (ich glaube von dort kommt es ursprünglich)
4) gnome-calls hat modemmanager und ofono backends
5) X11 hat die DIX. Heutzutage abstrahiert da zwar mesa & gbm fast
alles, so das nur noch die modesetting DIX benötigt wird, aber NVIDIA
und ein paar andere querulanten kochen noch ihr eigenes Süppchen
Zudem sollte man auch die Möglichkeit optionaler runtime & compiletime
Dependencies nicht vergessen.
Ich denke an all dem sieht man schön, dass nicht alle Abhängigkeiten
immer gleich stark abhängig machen müssen. Es gibt weichere und härtere
Abhängigkeiten, stärker integrierte und besser segregierte, ersetzbare
und unersetzbare, etc.
Abstraktion ist natürlich wichtig, hier geht es aber gerade, um es in
deinen Worten zu sagen, eine konkrete Implementierung und den Probleme
die mit einem Versionswechsel bei einer 3rdParty Lib einhergehen
cppbert3 schrieb:> Abstraktion ist natürlich wichtig, hier geht es aber gerade, um es> in> deinen Worten zu sagen, eine konkrete Implementierung und den Probleme> die mit einem Versionswechsel bei einer 3rdParty Lib einhergehen
oder besser - natürlich sollte(oder muss) man eine Abstraktion haben (um
die Features zu erhalten die du aufzeigst) aber das war hier definitiv
gar nicht das Thema :)
Um wieder den Link zu Cargo zu machen, in wieweit sind diese Art von
Abhängigkeiten - also optionale Backends - damit abbildbar?
In debian / apt kann man sagen Packet X bietet Y, Paket Z braucht Y, und
man kann sagen welche Implementation man bevorzugt (als Z braucht X oder
ein Y, wobei apt dann zuerst Z versucht, falls noch kein Y vorhanden
oder mitangegeben). Man beachte, Z braucht nichts von X oder anderen Y
zu wissen, es wird es beim Kompilieren nicht gebraucht, es geht um
runtime dependencies.
Wie gut kann man mit Cargo sowas abbilden? Ist das überhaupt im scope
von Cargo, oder hilft einem das nur mit direkten compile time
Abhängigkeiten?
Ich finde es interessant, wie die Cargo-Proponenten dafür trommeln, dass
man
(a) ausschließlich die neuesten Versionen nutzt;
(b) keine Code-Reviews macht, sondern automatisiert testet;
(c) sich auch bei hunderten von Abhängigkeiten mal nicht so anstellen
soll;
(d) verschwinden soll, wenn's einem nicht passt.
Jedes dieser Argumente hat seine Berechtigung, aber eben auch Schwächen.
Die hier mal ganz elegant wegerklärt werden.
Das Sahnehäubchen ist noch, dass das natürlich auch für die Toolchain
selbst zutrifft.
Achso, und dass vorausgesetzt wird, dass Version 1.2.4 strikt besser ist
als Version 1.2.3, garantiert und ohne jede Ausnahme - man verlässt sich
schließlich darauf.
🐧 DPA 🐧 schrieb:> ist das überhaupt im scope von Cargo
Naja, die ganzen Alternativen-Automatismen von apt hat cargo wohl eher
nicht.
Und ich wüsste auch nicht wozu.
Mit cargo baut man eine Applikation und die dependencies. Und das lässt
sich über Features konfigurieren. Wenn du jetzt gerne eine andere Dep
verwenden würdest, musst du das Feature selektieren.
Es steht ja jedem frei hier apt drüberzustülpen und diese ganze
Dependency-Magie zu bauen.
S. R. schrieb:> Ich finde es interessant, wie die Cargo-Proponenten dafür trommeln, dass> man> (a) ausschließlich die neuesten Versionen nutzt;
Ich denke das hat niemand gesagt.
Ich jedenfalls nicht.
Ganz im Gegenteil wurde ja aufgezeigt, dass man mehrere Möglichkeiten
hat. Man pinnt eine Version oder man nutzt halt semantic versioning.
Es gibt viele Arten die Dependency-Versionen festzulegen.
Einfach mal die Cargo Doku lesen.
> (b) keine Code-Reviews macht, sondern automatisiert testet;
Das ist jetzt aber stark verkürzt zitiert.
Es geht darum, dass man eher keine Reviews der Dependencies macht,
weil die ja schon ein Review und eine Qualitätsfreigabe vom Autor haben.
> (c) sich auch bei hunderten von Abhängigkeiten mal nicht so anstellen> soll;
Wer hat das gesagt?
> (d) verschwinden soll, wenn's einem nicht passt.
Stänkere bitte woanders herum.
Packet-Manager und die Probleme/Vorteile, die man sich damit einhandelt
sind ja wohl kein Alleinstellungsmerkmal von Rust.
Die fehlende Ahnung vom
- Konzept einer Versionsverwaltung
- Open Source Arbeit und
- Öffentliches Packet-Repository
und
- alte Rechner
- falsche Bedienung
- noch nicht mal das richtige Log posten, damit einem geholfen werden
kann ... bei einem Problem in ... einem von tausenden Paketen ... in
einem Thread wo das vollkommen off-topic ist
sind absolute dämliche Argumente.
Ja es sind immer die Anderen schuld. Besonders die Leute, die einem
freiwillig und ungefragt ihre Arbeitsstunden in Form von
funktionierenden Bibliotheken zur Verfügung stellen.
Entweder selber machen oder nutzen. Oder vielleicht selbst zum Projekt
beitragen? Das mag ein Diskussionsthema sein, aber zuerst einmal ist das
eine Frage des Charakters.
Zu Cargo: Niemand wird gezwungen Cargo zu benutzen um mit Rust zu
arbeiten!
Das ist zwar totaler Blödsinn, so "frei wie ein Vogel" zu arbeiten, aber
wahr und möglich. Das gilt auch für Conan, dub, npm, leinen, nuget,
etc., pp. Wer die Anforderung hat mit absolut strikten und lokalen
Abhängigkeiten zu arbeiten kann das tun. Dazu muss man nur die Scheiß
Anleitung lesen.
Sorry für den Kraftausdruck.
MaWin schrieb:> 🐧 DPA 🐧 schrieb:>> ist das überhaupt im scope von Cargo>> Naja, die ganzen Alternativen-Automatismen von apt hat cargo wohl eher> nicht.> Und ich wüsste auch nicht wozu.>> Mit cargo baut man eine Applikation und die dependencies. Und das lässt> sich über Features konfigurieren. Wenn du jetzt gerne eine andere Dep> verwenden würdest, musst du das Feature selektieren.
Und du hinterfragst nicht, ob das eine gute Sache ist, oder was für
Auswirkungen auf die resultierende Software das hat?
Diese Limitation wird auch direkt negative Netzwerkeffekte nach sich
ziehen.
Es werden alle Anwendungen, die aus vielen unabhängigen Anwendungen,
bestehen, oder anderweitig komplett unabhängige Implementationen für
gewisse Programmteile benötigen, aber kein konkretes voraussetzen,
benachteiligt.
Eigentlich werden sogar sämmtliche reinen Runtimeabhängigkeiten
benachteiligt.
Diese würden bei der Verwendung nämlich einen Mehraufwand bedeuten, da
Cargo einem bei diesen Dependencies nicht weiterhilft, anders als bei
compile time dependencies.
Im Grunde bedeutet das, dass die Praxis, alles mit compile time
dependencies zu machen inzentiviert wird. Da hilft mir auch nicht, dass
ich weiterhin apt dass ich selbst für einige Distros mit apt das Problem
für meine eigenen Anwendungen lösen könnte, denn dies ist ein
Netzwerkeffekt, also etwas, dass sich auf mit Cargo verwaltete Software
allgemein auswirkt. Man sieht hier schön, das geht so weit, dass den
Entwicklern schon gar nicht mehr klar ist, dass es das nicht die Einzige
Möglichkeit ist, oder wozu unabhängige und/oder runtime-only
Abhängigkeiten gut sein sollen.
Der Effekt, den sowas auf die Software haben dürfte, sollte eigentlich
jedem offensichtlich sein: Weniger bis keine zur Runtime Auswählbaren,
weglassbare oder Austauschbare Komponenten. Daraus folgt auch weniger
Flexibilität für den Endnutzer, sowie weniger Auswahlmöglichkeiten
allgemein. Es würde mich nicht erstaunen, wenn auch die Interoperation
und Integration voneinander unabhängiger Programme, und damit die UX des
Gesammtsystems, darunter leidet.
Das ständige Argument "aber theoretisch könntest du/man ja" überall
nervt mich auch etwas. Es ist ja immer schön, was ich selbst alles
anders machen könnte, aber deshalb ist mir nicht egal, wie sich die
Freie Software Welt insgesamt entwickelt. Das hat dann nämlich nachher
auch wieder direkte Folgen für mich.
🐧 DPA 🐧 schrieb:> Und du hinterfragst nicht, ob das eine gute Sache ist, oder was für> Auswirkungen auf die resultierende Software das hat?>> Diese Limitation wird auch direkt negative Netzwerkeffekte nach sich> ziehen.> Es werden alle Anwendungen, die aus vielen unabhängigen Anwendungen,> bestehen, oder anderweitig komplett unabhängige Implementationen für> gewisse Programmteile benötigen, aber kein konkretes voraussetzen,> benachteiligt.> Eigentlich werden sogar sämmtliche reinen Runtimeabhängigkeiten> benachteiligt.> Diese würden bei der Verwendung nämlich einen Mehraufwand bedeuten, da> Cargo einem bei diesen Dependencies nicht weiterhilft, anders als bei> compile time dependencies.
Das ist doch kompletter Unsinn.
Mit der Argumentation wäre C/C++ noch viel eingeschränkter, weil es
überhaupt kein Build- und Paketsystem mitbringt.
Cargo ist eine Option.
Niemand ist gezwungen Rust-Programme mit Cargo zu bauen und zu
vertreiben.
Wenn du dein Rust-Programm mit CMake bauen willst und mit Apt vertreiben
willst, dann ist das selbstverständlich möglich und es steht dir frei.
Davon zu sprechen, dass Cargo eine Limitation für Rust ist, ist ganz
einfach Unsinn. Es zeigt nur auf, dass derjenige, der das behauptet,
keine Ahnung von Rust hat.
Eine zusätzliche Option (Cargo) kann nie eine Limitation sein. Das
schließt sich logisch einfach aus.
Lies den Text von Jedzia D.
Dort ist alles sehr schön zusammengefasst.
Hast du mein Argument überhaupt gelesen?
Ich sage nicht cargo ist eine Limitation, ich sage Cargo hat eine
Limitation (bezüglich runtime dependencies). Ich sage sogar genau, was
diese Limitation ist.
Auch dass man Cargo nicht verwenden muss ist nicht relevant bei
meiner Argumentation. In der praxis wird es verwendet, und auch wenn es
die theoretische mögichkeit gibt, es nicht zu verwenden, ist dies in
den meisten Anwendungsfällen bei Rust nicht besonders praktikabel.
Cargo wird verwendet. Es hat Designentscheidungen, und damit wie
jede Software auch Limitationen.
Meine Argumentation basiert darauf, dass /eine konkrete dieser
Limitationen/, gewisse Softwarearchitekturen stärker als andere
begünstigt, und im Umkehrschluss einige Softwarearchitekturen
beungünstigt, welche ich aber wünschenswert finde, da sie für den
Endbenutzer einige Vorteile (in dem konkreten Fall mehr Auswahl /
Modularität zur runtime) bietet. Es ist ein Nebeneffekt, der durch die
breite Nutzung des Systems und dessen Eigenheiten entsteht. Ein
Netzwerkeffekt.
Aber ich seh schon, mit euch lässt ist nicht reden. Einfach sämtliche
Kritik Ignorieren ("Das ist doch kompletter Unsinn"), und die Leute in
eine Schublade packen ("müssen wohl alles rust nicht-versteher sein"),
ist ja auch einfacher, als zu versuchen, die Kritiken & Argumente zu
verstehen, das ganze mal von einem anderen Blickwinkel zu betrachten,
und selbst mal darüber nachzudenken.
🐧 DPA 🐧 schrieb:> und auch wenn es> die theoretische mögichkeit gibt, es nicht zu verwenden, ist dies in> den meisten Anwendungsfällen bei Rust nicht besonders praktikabel.
Blödsinn.
Warum soll das so sein?
Niemand zwingt dich Cargo zu verwenden.
MaWin schrieb:> Niemand zwingt dich Cargo zu verwenden.
Dann kannst du sicher schnell eine Beschreibung aus deinem Ärmel
schütteln, wie man z.B. das oben genannte RAV1E ohne cargo baut?
MaWin schrieb:> Niemand zwingt dich Cargo zu verwenden.
Wie schon gesagt, das spielt bei meiner Argumentation oben bewusst keine
rolle. Es genügt, dass es von so ziemlich jedem verwendet wird.
MaWin schrieb:> Blödsinn.
Bitte beende diese Diskussion an dieser Stelle.
Mit deiner Art von „Argumentation“ tust du weder Rust einen Gefallen,
noch überzeugst du damit irgendwen.
(Dies war ein „Warnschuss“ in meiner Eigenschaft als Moderator. Ich
möchte, dass die Diskussion wieder auf ein sinnvolles Niveau kommt.)
mh schrieb:>> Niemand zwingt dich Cargo zu verwenden.>> Dann kannst du sicher schnell eine Beschreibung aus deinem Ärmel> schütteln, wie man z.B. das oben genannte RAV1E ohne cargo baut?
Warum?
Schüttelst du dann eine Beschreibung aus deinem Ärmel, wie man OpenSSL
ohne Make baut?
🐧 DPA 🐧 schrieb:> Es genügt, dass es von so ziemlich jedem verwendet wird.
Und deshalb bist du gezwungen, es selbst auch zu verwenden?
Warum?
Jörg W. schrieb:>> Blödsinn.> Bitte beende diese Diskussion an dieser Stelle.
Ich behaupte hier nicht ständig Unwahrheiten.
> Mit deiner Art von „Argumentation“ tust du weder Rust einen Gefallen,> noch überzeugst du damit irgendwen.
Ja. Zu behaupten Cargo wäre mit Rust untrennbar verbunden, tut Rust
wirklich keinen gefallen. Weil es ganz einfach falsch ist.
MaWin schrieb:> Jörg W. schrieb:>>> Blödsinn.>> Bitte beende diese Diskussion an dieser Stelle.>> Ich behaupte hier nicht ständig Unwahrheiten.
Es geht weniger um Inhalte als um deinen Diskussionsstil. Der ist
unterirdisch, und den möchte ich in diesem Thread nicht mehr dulden.
MaWin schrieb:> mh schrieb:>>> Niemand zwingt dich Cargo zu verwenden.>>>> Dann kannst du sicher schnell eine Beschreibung aus deinem Ärmel>> schütteln, wie man z.B. das oben genannte RAV1E ohne cargo baut?>> Warum?>> Schüttelst du dann eine Beschreibung aus deinem Ärmel, wie man OpenSSL> ohne Make baut?
Nö, ich habe aber auch nicht behauptet, dass man C ohne maku und co
sinnvoll einsetzen kann. Mal davon abgesehen, dass keine der
besprochenen cargo Features etwas mit make zu tun haben.
mh schrieb:> ich habe aber auch nicht behauptet, dass man C ohne maku und co> sinnvoll einsetzen kann.
Das habe ich auch nicht behauptet.
Aber du hast den Zusammenhang hergestellt, dass man Rust nicht verwenden
kann, weil irgendeine X-beliebige Dependency Cargo verwendet.
Das ist ganz einfach aus vielen Gründen falsch.
Allen voran, dass man halt die Dependency nicht verwenden muss.
Man kann eine Alternative verwenden. Oder den Code selbst neuschreiben.
Aber selbst wenn man die Dep unbedingt verwenden will, dann kann man sie
natürlich auch mit Aufwand ohne Cargo übersetzen.
Genau wie man OpenSSL auch auf jedes andere Buildsystem umstellen kann.
Warum ist es kein Problem, wenn OpenSSL Make benutzt, und warum ist es
ein Problem, wenn irgendeine Rust-Lib Cargo nutzt?
MaWin schrieb:> Schüttelst du dann eine Beschreibung aus deinem Ärmel,> wie man OpenSSL ohne Make baut?
Ein sinnvoller Vergleich wäre vielleicht mit den Autotools, CMake oder
einem anderen Buildsystem statt mit make gewesen.
Es spielt keine Rolle, ob man theoretisch Rust auch ohne Cargo verwenden
könnte. Solange Cargo die Basis für so ziemlich alle Rust-Projekte ist,
das Rust-Ökosystem auf Cargo aufbaut und die Nichtverwendung von Cargo
deutlich teurer ist als die Verwendung, ist das schlicht irrelevant.
Das ist ähnlich wie App-Entwicklung für Android und Gradle. Ja, kann man
theoretisch auch ohne machen, praktisch ist das aber unmöglich.
S. R. schrieb:> das Rust-Ökosystem auf Cargo aufbaut
Tut es aber halt nicht.
Informiert euch halt mal, bevor ihr hier so einen (das darf ich ja nicht
mehr schreiben) postet.
Man kann Rust z.B. auf kleinsten Microcontrollern verwenden.
Ohne Buildtime-Download.
Ohne Cargo.
Ohne stdlib.
bare metal.
Es gibt ü-ber-haupt kein Zwang zu Cargo.
Das liegt vollständig in der Gewalt des Entwicklers.
Aber die meisten benutzen es natürlich, weil es halt sehr gut ist.
Aber niemand (In Worten: Niemand) zwingt dich auch nur im Geringsten das
alles zu nutzen.
Bei jeder beliebigen C-Lib Dependency ist das auch nicht anders.
Oder beschwerst du dich auch, dass es ja untragbar sei, dass
Depencency-X Buildsystem Y nutzen?
Warum nicht?
DPA, könntest Du bitte ein konkretes Beispiel dafür liefern, was Du mit
der von dir genannten Inflexibilität ins Sachen Runtime-Code meinst? Und
was das wirklich mit Cargo zu tun haben soll?[4]
Cargo ist das "make" und der Paketmanager, das Test-Tool ... einfach das
build-utility von Rust.
Im Beispiel von Dergute W mit rav1e sind einige der aufgelösten Pakete
nötig um zusätzlich zum Code von rav1e ein spezielles Build-System[1]
extra für diesen Spezialfall zu erschaffen. Meta, Meta, anders
übersetzt: Extrem kompliziert und extrem flexibel.Dieses System erlaubt
gleichzeitig einen Bootloader für PowerPC zu schreiben und mit 'cargo
run' die ganze Chaussee in QEMU zu starten. Alles zentral, alles ganz
einfach (natürlich nicht hinter den Kulissen)[3].
Da ist nur eine Abhängigkeit zu Cargo: Es ist die
Eierlegendewollmilchsau, die dein rav1e baut.
Du meinst bestimmt etwas anderes aber:
1
rustup target list
erschlägt dich mit Runtimes, fehlt deine noch?[2]
Jedes Komponentensystem, dass Runtime-Code nachlädt ließe sich über
C-Schnittstellen schnell, oder als Eigenimplementierung mit Aufwand auch
in Rust lösen.
Die flexibilität von Cargo kannst auch Du nutzen um ein komplett neues
Buildsystem zu erfinden. Etwa
1. Hilfs-Build-Tool wird gebaut
2. RISC-X helper/spezial-linker extra für diese Hardware-Konstellation
wird gebaut
3. build: Applikation und Virtuelle Maschine für den internen Flash
4. build: VM-Code für das externe EEprom.
5. Spezielles Flash-Tool für diese Hardware wird gebaut
6. VM-Code in den externen Speicher laden
7. MCU flashen
8. Debugger starten
...
X. Auf die Erfindung von Risc-X warten:)
Viele Komponenten und Bibliotheken haben Schalter mit denen man das
verhalten der Runtime beeinflussen kann. Es steht nicht unter Strafe
selbst welche einzubauen. ([profile] und Configuration keys)[5]
Wie wäre es mit der Erzeugung und Einbindung einer Shared-Library zur
Laufzeit? -> https://github.com/manthanrtilva/runtime_plugin
cranelift-simplejit -> Eine einfache JIT-Bibliothek, die von Cranelift
unterstützt wird, Gruss an Alex
dynasm -> Ein Plugin zum Zusammenstellen von Code zur Laufzeit. In
Kombination mit dem Runtime Crate Dynasmrt können damit JIT-Compiler
einfach geschrieben werden.
Es ist auch keine gute Diskussionskultur Fakten einfach nach belieben zu
ignorieren, wie die mehrmals erwähnte Freiheit etwas anders als Cargo zu
benutzen. Ein Spezialfall? Ja! Genau so wie die Fähigkeit Runtime Code
flexibel zu benutzen.
[1]https://crates.io/crates/nasm-rs
[2]https://github.com/rust-lang/rustup/issues/215
[3]https://github.com/rust-osdev/bootimage
[4]https://prev.rust-lang.org/en-US/faq.html#does-rust-have-a-runtime
[5]https://doc.rust-lang.org/cargo/reference/config.html
Bleibt cool, ist doch nur ein Tool. Davon gibt es viele:)
Achja, noch ganz nebenbei:
https://github.com/rust-lang/rust
Hier lebt der Rust Compiler
https://github.com/rust-lang/cargo
Hier wohnt Cargo
Das sind doch zwei Verschiedene Orte, oder irre ich mich?
Falls die wirklich verheiratet sind, wie Einige hier sagen, dann
verstehe ich die Gerüchte um Trennung und den Rosenkrieg, der nicht nur
hier im Forum tobt.
Über das obige nachzudenken ist kein Muss. Down voten reicht;)
Jedzia D. schrieb:> DPA, könntest Du bitte ein konkretes Beispiel dafür liefern, was Du mit> der von dir genannten Inflexibilität ins Sachen Runtime-Code meinst? Und> was das wirklich mit Cargo zu tun haben soll?[4]
Das habe ich doch nun wirklich schon sehr Detailliert beschrieben, aber
ich Versuches trotzdem nochmal. Als Beispiel nehme ich mal ein "Hello
World" Program, um es so simpel wie möglich zu halten. Die Sprache und
Art von Interface (Programm, Library funktionen, dbus, rest, etc.) ist
für das eigentlich unerheblich, darum bringe ich mal 2 Beispiele mit
unterschiedlichen Interfaces und Sprachen.
---
Zunächst mal ein Beispiel mit C:
Erstmal wird ein interface definiert. Dass kann teil von Projekt A sein,
oder separat, oder generiert, etc. Hier will ich ein "greeter
interface". Ich definiere es so:
Interface:
greeter/greeter.h:
1
voidgreet(constchar*who);
Projekt A, von Person A, die eigentliche Anwendung:
Compile time dependencies: greeting interface
Runtime dependencies: Eine greeter implementation, aber keinen
bestimmten!
A/main.c:
1
#include<greeter.h>
2
intmain(intargc,char*argv[]){
3
greet(argc>1?argv[1]:"World");
4
}
1
cd A
2
# dummy library, damit ich keinen loader schreiben muss und kein dlopen brauche
Projekt "hallo", von Person B: Eine greeter implementation: "Hallo"
Greeter:
Compile time dependencies: greeting interface
Runtime dependencies: keine
hallo/main.c:
Projekt "Geburtstag", von Person C: Eine greeter implementation:
Geburtstags Greeter:
Compile time dependencies: greeting interface
Runtime dependencies: keine
geburtstag/main.c:
Man beachte, ist das Interface separat, sind die Projekte "A", "Hallo"
und "Geburtstag" sind beim kompilieren unabhängig voneinander. Falls man
des Interface in "A" platziert, haben "Hallo" und "Geburtstag" eine
compile time Abhängigkeit von "A". "A" hat in jedem fall keine compile
time Abhängigkeit von "Hallo" oder "Geburtstag".
"A" hat aber eine runtime dependecy, es braucht eine "greeter"
implementierung. "Hallo" und "Geburtstag" bieten eine "greeter"
implementierung an.
Der Witz ist, es ist nachträglich möglich, für den Benutzer ohne neu
kompilieren, die greeter Implementation zu wählen:
1
$ cp A/A.elf . # Programm installieren
2
$ ./A.elf
3
./A.elf: error while loading shared libraries: libgreeter.so: cannot open shared object file: No such file or directory
Und die 3 Projekte können dennoch völlig unabhängig voneinander
entstanden sein, von unterschiedlichen Autoren usw.
---
Beispiel 2, mit bash, nochmal das selbe, aber Anwendungen als Interface:
Inteface greeter:
Auch hier wieder, A braucht eine greeter implementation. hallo greeter
und birthday greeter bieten eine greeter implementation. hallo greeter
und birthday greeter hängen nicht von A ab (ich könnte sie einfach
alleine aufrufen).
---
Das ist ein Beispiel einer Abhängigkeitsstruktur, die sich mit Cargo
meines wissens nicht ohne weiteres abbilden lässt. Bildet man nur die
tatsächlichen compile time Abhängigkeiten ab, muss man sich manuell ein
Backend suchen. Mit z.B. apt ist das anders, dort kann ich die
Abhängigkeit, und meine bevorzugter Implementation, genau so angeben.
In den meisten fällen werden die Entwickler daher vermutlich nicht diese
struktur wählen, es läuft dann nämlich nicht einfach so, nach dem
builden, weil Cargo die runtime dependency ja nicht kennt. Ein
Entwickler von Projekt A wird sich deshalb normalerweise kein Interface
ausdenken, er wird sich statdessen den "hallo greeter" oder den
"birthday greeter" aussuchen, und eine direkte kompile time Abhängigkeit
darauf machen. "hallo greeter" und "birthday greeter" haben auch keinen
Grund mehr, einem gemeinsamen Interface gerecht zu werden. Sie werden
vermutlich ihr eigenes Interface machen, und dadurch nicht mehr zur
runtime austauschbar sein. Der Entwickler müsste dann einen mehraufwand
betreiben, wenn er beide greeter unterstützen möchte. Wenn beide zur
runtime verfügbar sein sollen, hätte man dann zur compile time zu beiden
eine Abhängigkeit. Andernfalls müsste man halt zur compile time wählen.
Ein anderer Entwickler, der einen konkurierenden Greeter schreibt,
könnte der Endanwender nachher auch nicht einfach installieren, selbst
wenn dieser das selbe Interface hätte, entweder müsste erst jemand die
Dependencies jeder einzelnen Anwendung, die einen Greeter nutzt,
anpassen, oder der Endanwender müsste die Dependency bei sich lokal
anpassen, und neu Kompilieren.
Jenachdem, wo das Interface ist, wer es festlegt, usw. beeinflusst das
auch die Anforderungen, das Design, die Art der Interessen daran (ein
gutes Interface entwickeln (unabhängig entwickeltes Interface) vs. ein
Interface für was ich will (Interface in Anwendung, welches es nutzt)
vs. ein Interface, mit dem ich Alleinstellungsmerkmale habe (Interface
in Library)), etc.
Ich hoffe, es ist nun absolut klar, was die Problematik ist, auf die ich
hinaus wollte.
Und vorneweg schonmal, ja, ich weiss dass man das in rust implementieren
kann. Darum geht es mir nicht. Es geht um Cargo, und welche Strukturen
dort einfacher umzusetzen sind.
🐧 DPA 🐧 schrieb:> Und vorneweg schonmal, ja, ich weiss dass man das in rust implementieren> kann.
Und wo ist dann das Problem?
> Es geht um Cargo,
Warum?
Warum willst du Cargo verwenden, wenn du doch bereits angeblich erkannt
hast, dass es deinen Usecase nicht unterstützt?
MaWin schrieb:> Warum willst du Cargo verwenden, wenn du doch bereits angeblich erkannt> hast, dass es deinen Usecase nicht unterstützt?
Auch wenn ich es nicht nutze, nutzen es so ziemlich alle anderen. Cargo
beeinflusst durch sein Design die Architektur von mit cargo erstellter
Software, und damit im grossen und granzen betrachtet von Rust
Anwendungen. Mit der steigenden Relevanz von Rust in Linux und dem
OpenSource umfeld allgemein, beeinflusst das das gesammte OpenSource
umfeld. Ob ich persönlich cargo nutze oder nicht, hat keinen Einfluss
auf dessen Netzwerkeffekte insgesammt, und ist daher nicht relevant.
Um es nochmal gesagt zu haben:
🐧 DPA 🐧 schrieb:> Es ist ja immer schön, was ich selbst alles anders machen könnte, aber> deshalb ist mir nicht egal, wie sich die Freie Software Welt insgesamt> entwickelt. Das hat dann nämlich nachher auch wieder direkte Folgen für> mich.
🐧 DPA 🐧 schrieb:> Und vorneweg schonmal, ja, ich weiss dass man das in rust implementieren> kann. Darum geht es mir nicht. Es geht um Cargo, und welche Strukturen> dort einfacher umzusetzen sind.
Du unterschlägst in deinen Beispielen wie du zum ausführbaren Code
kommst. GCC und make fürs obere? Und bash fürs shell Beispiel?
So, bash-runtime-interpreter + make sind hier das Äquivalent zu Teilen
der Funktionalität von Cargo.
println!("Hello Denkfehler.
Try https://doc.rust-lang.org/rust-by-example/mod.html
");
Ist so merkwürdig formatiert wegen dem Spass und der URL.
11. Crates und
12. Cargo
nicht vergessen zu lesen.
Anderes zum anschauen als Hilfe gegen deine DLL-Hell(aber nur die c
runtime):
1
rustflags=["-C","target-feature=+crt-static"]
libgreeter.so Beispiel ... Rust: Danke, das es dieses Probleme dort
nicht gibt. Du vergisst, dass alle Bibliotheken als source-code
vorliegen. (Das ist dieses ... Cargo + crates.io). Wenn du Einzelnes wie
Bibliotheken in ein apt/deb/etc-paket verpackst und nicht mit deiner
Versionierung klarkommst ist das nicht das Problem von Cargo. Ähnliches
Beispiel: Ubuntu Python-packages, die im Ubuntu repository vorliegen.
Aber manche Schlaumeier installieren mit pip. Das geht ja auch immer
gut.
Notiz: Ich sollte einen https://crates.io/crates/dpa.greeter erstellen:)
P.S.: Für uns Gentoo-Weiber ist das völlig normal und ein alter Hut.
Inklusive der Probleme. Wir reden hier schließlich über Software. Zeig
mir eine ohne Probleme;)
Jedzia D. schrieb:> Du unterschlägst in deinen Beispielen wie du zum ausführbaren Code> kommst. GCC und make fürs obere? Und bash fürs shell Beispiel?
Nein, die Kommandos zum Builden sind bei meinen Beispielen vorhanden,
jeweils direkt unter dem Code.
> Ist so merkwürdig formatiert wegen dem Spass und der URL. 11. Crates und> 12. Cargo nicht vergessen zu lesen.
Hab ich. Das löst aber das zugrundeliegende Problem nicht.
> Anderes zum anschauen als Hilfe gegen deine DLL-Hell(aber nur die c> runtime):
Das ist keine DLL Hell, das ist gutes Design.
> Du vergisst, dass alle Bibliotheken als source-code vorliegen.
Ich habe auch schon gentoo verwendet, und grosse rust projekte
kompiliert. Das gehört aber nicht zu meinen Lieblingstätigkeiten.
Deshalb weiss ich binary distributionen und runtime dependencies sehr zu
schätzen.
> Wenn du Einzelnes wie Bibliotheken in ein apt/deb/etc-paket verpackst
Mach ich doch gar nicht. Apt ist lediglich ein Beispiel für einen
Paketmanager, der diese Paketstruktur sauber abbilden kann.
> und nicht mit deiner Versionierung klarkommst ist das nicht das Problem> von Cargo.
Wenn Cargo keinen Mechanismus vergleichbar zum Provides Mechanissmus von
apt hat, und die Dependencies für gewisse Softwarearchitekturen schlicht
nicht modellierbar sind, ist das sehr wohl ein Problem von Cargo.
Jedzia D. schrieb:> Notiz: Ich sollte einen https://crates.io/crates/dpa.greeter erstellen:)
Wenn du willst. Lass mich vorher die Problematik nochmal zusammenfassen:
1) Es gibt mindestens 3 crates:
* Die Anwendung A (Entspricht oben der A.elf, btw. der A.sh)
* Der hallo greeter
* Der geburtstags greeter
2) Beim ausführen von A mit "cargo run" muss eine greeter implementation
durch cargo bereits automatisch bereitgestellt worden sein, der user
soll keinen Mehraufwand haben.
3) Die Anwendung A darf aber nicht explizit von einem oder beiden
greetern abhängen, es soll nur angeben, dass es irgend einen braucht, es
darf höchstens eine Präferenz angeben. Andere sollen auch greeter crates
erstellen können, die man dann als Alternative wählen könnte, und Nutzer
müssen sich einfach alle Optionen anzeigen lassen können. Das andere
unabhängig welche über das repo (z.B. crates.io) hinzufügen können, ist
der Witz an der ganzen Sache.
4) Es muss eine einfache Standardlösung sein, denn andernfalls wäre
diese Architektur ja unter Entwicklern nicht mit direkten Dependencies
konkurrenzfähig.
Ich glaube ja nicht, dass das möglich ist, aber ich lasse mich gerne
eines besseren belehren.
🐧 DPA 🐧 schrieb:> Ich glaube ja nicht, dass das möglich ist, aber ich lasse mich gerne> eines besseren belehren.
In diesem Thread wurden bereits Möglichkeiten genannt, Dinge dynamisch
zu laden.
Aber davon abgesehen, funktionieren diverse Dinge in Rust halt anders.
Da muss man sich dann mit abfinden, oder man verwendet es halt nicht,
wenn man seine alten C-Techniken weiterverwenden will.
Rust linkt eben grundsätzlich statisch.
Das hat aber wiederum auch gar nichts mit Cargo zu tun.
Aber trotzdem kann man natürlich Funktionen als DLLs aufrufen. Wie,
wurde bereits erklärt.
Du kannst dir unendlich viele synthetische Beispiele in C
implementieren, die in Rust nur schwerer als in C zu lösen sind. z.B.
aufgrund des Borrow-Checkers.
Aber das ist eben so gewollt.
Wenn man in Rust programmiert, muss man grundsätzlich umdenken.
Wenn dir das nicht gefällt, dann ist Rust halt nichts für dich.
Zum Thema "Dynamisches Linken":
Wenn dein C- oder C++-Programm eine bestimmte Lib in einer bestimmten
Version vorraussetzt dann hast du erstmal drei Möglichkeiten, die zu
deployen (keinen Anspruch auf Vollständigkeit).
1) Du schreibst in die Doku dass sich der User lib XYZ in Version 123
händisch auf seinen Rechner packen soll. Das ist die hässliche Lösung.
2) Du legst die lib deinem Binary bei. Das ist die Windows-Lösung.
3) Du löst die Abhängigkeit über einen Paketmanager auf, z.B. apt oder
pacman. Das ist die Linux-Lösung.
Lösung 3 funktioniert mit Rust-Binaries genauso wie mit C-Binaries und
löst exakt das von DPA geschilderte Problem. Sogar optionale
Abhängigkeiten oder Alternativen sind möglich.
Auch in C/C++ werden Laufzeitabhängigkeiten auf einem aktuellen Linux
über den Paketmanager aufgelöst.
Warum ist das bei Rust ein Problem?
MaWin schrieb:> In diesem Thread wurden bereits Möglichkeiten genannt, Dinge dynamisch> zu laden.
Dass das möglich ist, habe ich, wie ich schon mehrfach auch schrieb,
nicht bestritten. Nochmal, es geht um die Limitationen des
Abhängigkeitssystems für Cargo, und dessen daraus resultierenden
Einfluss auf die Programmarchitektur der darauf basierenden Programme,
und damit das Rust-Ökosystem insgesamt.
Wenn ich so darüber nachdenke, fällt mir außerdem auf, das die selbe
Problematik ebenfalls mit compile time Dependencies existiert, für diese
bietet Cargo ebenfalls keinen einfachen Provides mechanismus. Statisches
linken kann die Problematik also nicht lösen.
Die Problematik ist von der Art der Schnittstelle auch unabhängig,
vergleichbare Architekturen könnte ich auch mit Rest, dbus, etc.
nachbilden.
> Aber davon abgesehen, funktionieren diverse Dinge in Rust halt anders.> Da muss man sich dann mit abfinden, oder man verwendet es halt nicht,> wenn man seine alten C-Techniken weiterverwenden will.
Wie ich bereits weiter oben gesagt habe, erschwert dies in dem von mir
aufgezeigten Fall die Implementation von Plugin und Backend Systemen, wo
man nicht selbst alle Plugins, Backends, etc. schreibt / selbst kennt,
ungemein, was zwangsläufig negative Folgen auf Dinge wie die
Flexibilität und Auswahlmöglichkeiten des Endnutzers bei sämtlicher mit
Cargo gebauter Software, und letztendlich sämtliche OpenSource Software
haben muss, da diese Architektur dadurch seltener verwendet wird, als
dies andernfalls der Fall gewesen wäre.
Das halte ich für eine negative Entwicklung, deshalb halte ich es auch
für notwendig, diese Problematik aufzuzeigen.
Und wie ich schon mehrfach schrieb, auch wenn ich selbst cargo nicht
verwenden würde, als Nutzer einer Distribution mit Binärpaketen
(Debian/Devuan), bin ich trotzdem von Fallout dieses Problems betroffen.
Wenn das Entwicklungsmodell diese Form der Modularität behindert, habe
ich dann nämlich, wenn ich mal eines der Programme oder Libraries als
Endnutzer brauche, weniger Auswahlmöglichkeiten /
Einstellungsmöglichkeiten.
Le X. schrieb:> Lösung 3 funktioniert mit Rust-Binaries genauso wie mit C-Binaries und> löst exakt das von DPA geschilderte Problem. Sogar optionale> Abhängigkeiten oder Alternativen sind möglich.>> Auch in C/C++ werden Laufzeitabhängigkeiten auf einem aktuellen Linux> über den Paketmanager aufgelöst.> Warum ist das bei Rust ein Problem?
Weil bei der Entwicklung so ziemlich jeder Cargo verwendet, um bei der
Entwicklung seine Abhängigkeiten zu verwalten. Wenn diese Art der
Abhängigkeit, die ich oben beschrieb, also schon dort, bereits in der
Entwicklung, mit dem von allen verwendeten Tool, nicht ohne weiteres
realisierbar ist, werden die Entwickler das schlicht nicht so umsetzen.
Und wenn die unabhängigen Plugins und Backends im vornherein schon nicht
entwickelt werden, kann man die nachher auch nicht in apt Pakete
verpacken.
🐧 DPA 🐧 schrieb:> Weil bei der Entwicklung so ziemlich jeder Cargo verwendet, um bei der> Entwicklung seine Abhängigkeiten zu verwalten. Wenn diese Art der> Abhängigkeit, die ich oben beschrieb, also schon dort, bereits in der> Entwicklung, mit dem von allen verwendeten Tool, nicht ohne weiteres> realisierbar ist, werden die Entwickler das schlicht nicht so umsetzen.> Und wenn die unabhängigen Plugins und Backends im vornherein schon nicht> entwickelt werden, kann man die nachher auch nicht in apt Pakete> verpacken.
Hast du denn da Erfahrungen aus der Praxis oder ist das eine Vermutung?
Man müsste hier mal in etwa gleich komplexe Projekte aus C/C++ und Rust
auf die Art des Linkens hin untersuchen.
Ich habe mich mit Rust beschäftigt, und finde dessen Konzepte sehr
interessant. Die Erfahrung aus der Softwareentwicklung der letzten
Jahrzehnte, in neue Sprachen einfließen zu lassen, halte ich für einen
richtigen Schritt. In unserer Firma gibt es Gruppen in denen Rustthemen
auch immer wieder diskutiert werden. Momentan beruht das aber
ausschließlich auf persönlichen Interessen.
Im industriellen Bereich sind Produktlebenszeiten von 20...30 Jahren
nichts besonderes. Die embedded Software dieser Produkte muss dann auch
über diesen Zeitraum hinweg wartbar sein. Wartbar heißt nicht das eine
Firmware in einer neue Sprache neu geschrieben wird, es wird nur das
Bestehende am Laufen gehalten. Anders geht es aufgrund der hohen Kosten
auch nicht. Wer schon mal mit der Begutachtung von Software zu tun
hatte, dem ist klar was ich meine.
Es ist also sehr wohl Kontinuität über Jahrzehnte hinweg gefragt. Da
habe ich mit Rust noch so meine Zweifel. So lange mit Rust auf Dauer
Abhängigkeiten zum Internet bestehen, sehe ich in unserem Bereich keinen
Einsatz von Rust im grösseren Umfang.
Julius schrieb:> Es ist also sehr wohl Kontinuität über Jahrzehnte hinweg gefragt. Da> habe ich mit Rust noch so meine Zweifel. So lange mit Rust auf Dauer> Abhängigkeiten zum Internet bestehen, sehe ich in unserem Bereich keinen> Einsatz von Rust im grösseren Umfang.
Klar das ist ein wichtiger Faktor um die Produkt-Sicherheit zu
gewährleisten. Wo bezieht ihr eure, sagen wir Keil, ST(M) o.ä. Libraries
und Frameworks her?
Kommt der Werksfahrer?:)
In Rust kannst Du genau so manuell oder selbstbestimmt deine Software
lokal verwalten. Sogar mit Cargo.
Relative Pfade und "Cargo.lock" sind die Stichworte hierzu.
https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
Le X. schrieb:> Hast du denn da Erfahrungen aus der Praxis oder ist das eine Vermutung?
Ich kann leider nicht wissen, ob in der Praxis die Software wirklich
anders ausgesehen hätte, wenn Cargo einen provides ähnlichen Mechanismus
gehabt hätte. Aber ich halte es für naheliegend, dass wenn ein
Mechanismus vorhanden ist, dieser auch öfter genutzt wird, mit allen
sich daraus ergebenden Folgen, und umgekehrt.
> Man müsste hier mal in etwa gleich komplexe Projekte aus C/C++ und Rust> auf die Art des Linkens hin untersuchen.
Man sollte das nicht so stark Einschränken. Libraries sind nur eine
einer Vielzahl möglicher Arten von Schnittellen. Bei Anwendungsaufruf,
REST und dbus Schnittellen z.B., ist es etwas Einfacher, keine \/ eine
umgedrehte / Austauschbare Abhängigkeit zu haben, als bei Libraries.
Es ist aber auch nicht immer eindeutig, was effektiv von was abhängig
ist, ob, von wem und in wie weit das Interface von jemandem kontrolliert
/ festgelegt wird, welches die normale Richtung ist, etc.
Ausserdem gibt es in dem Fall noch die Möglichkeit, dass eine Anwendung
/ ein Projekt selbst auch Backends beinhaltet, aber trotzdem unabhängige
Projekte ebenfalls Backends bereitstellen können. z.B. gibt es in X11 im
Xorg Projekt die modesetting DDX, aber es gibt in anderen Repos
unabhängige DDX für Nvidia, Intel, AMD, etc.
Man kann da so ziemlich alle möglichen und unmöglichen Kombinationen
antreffen. Je nach eigenen Kriterien könnte man das dann so oder so
einordnen.
🐧 DPA 🐧 schrieb:> wie ich schon mehrfach auch schrieb,
Ja Ok. Wir drehen uns im Kreis.
Das bringt nichts, denn du bist echt nicht zugänglich für Fakten.
🐧 DPA 🐧 schrieb:> wenn Cargo einen provides ähnlichen Mechanismus> gehabt hätte.
Es ergibt überhaupt gar keinen Sinn einen provides-Mechanismus in Cargo
zu haben.
Cargo ist keine System-Paketverwaltung.
Wenn du das brauchst, dann musst du halt apt oder etwas ähnliches
nutzen.
Ich verstehe das ganze argumentieren hier irgendwie gar nicht
entweder ist man an Rust interresiert und hat aber Probleme mit Cargo,
dann involviert man sich und verbessert die Situation, ist open source
für direktwerkeln oder man redet mit den Entwicklern bei github oder
reddit, dauert eben eine ganze Weile, aber das bei allen Projekten so
oder man findet die Sprache nicht gut und lässt es, oder wartet das es
besser wird, aber einfach nur meckern oder beschweren ohne das es
wenigstens so wirkt als wolle man positive Impulse geben ist einfach
sinnfrei
Rust ist eine Programmiersprache, deren Ökosystem relativ eng mit Cargo
verknüpft ist. Cargo finde ich blöd, also ist Rust auch nichts für mich.
Deswegen bin ich raus.
Android scheint langsam auch Rust-Unterstützung zu bekommen, vielleicht
fällt da ja ein besseres Buildsystem bei ab.
S. R. schrieb:> Rust ist eine Programmiersprache, deren Ökosystem relativ eng mit Cargo> verknüpft ist. Cargo finde ich blöd, also ist Rust auch nichts für mich.> Deswegen bin ich raus.
d.h. die supertollen Rust-Features können das nicht ausbügeln oder gibt
es für dich einfach keine supertollen Featuren in Rust?
cppbert schrieb:> S. R. schrieb:>> Rust ist eine Programmiersprache, deren Ökosystem relativ eng mit Cargo>> verknüpft ist. Cargo finde ich blöd, also ist Rust auch nichts für mich.>> Deswegen bin ich raus.>> d.h. die supertollen Rust-Features können das nicht ausbügeln oder gibt> es für dich einfach keine supertollen Featuren in Rust?
Was gibt es denn neben Ownership/Memorysafety für supertolle Features in
Rust?
(Für mich bringt rust da auch keine Vorteile, da modernes C++ in dem
Bereich kaum Möglichkeiten für Fehler bietet. Und wenn es einen Fehler
gibt fällt der ziemlich sicher dank gcc und clang Sanitizern schnell
auf.)
mh schrieb:> Was gibt es denn neben Ownership/Memorysafety für supertolle Features in> Rust?
vieles
match
traits
macros-rules
proc-macros
generics
unmutable default
enums (nein, enums in Rust sind nicht äquivalent zu C/C++ enums)
Option (Sicherer Null-Ersatz)
Result (Sicherer Ersatz für Exceptions und generelles
Returnwert-gefrickel)
?-Operator (nein, der hat nichts mit ?: zu tun)
lifetimes
Vernünftiger Parser. Keine Deklarationen.
Einfaches und effektives Modulsystem.
und vieles vieles mehr.
> (Für mich bringt rust da auch keine Vorteile, da modernes C++ in dem> Bereich kaum Möglichkeiten für Fehler bietet.
kaum Möglichkeiten < keine Möglichkeiten
MaWin schrieb:> kaum Möglichkeiten < keine Möglichkeiten
Bevor einer meckert:
Ich meinte "kaum" ist schlechter als "keine".
Der Operator sollte nicht die Anzahl vergleichen :)
MaWin schrieb:> mh schrieb:>> Was gibt es denn neben Ownership/Memorysafety für supertolle Features in>> Rust?>> vieles> [...]
Und was davon ist jetzt ein Alleinstellungsmerkmal?
MaWin schrieb:>> (Für mich bringt rust da auch keine Vorteile, da modernes C++ in dem>> Bereich kaum Möglichkeiten für Fehler bietet.>> kaum Möglichkeiten < keine Möglichkeiten
Und mal wieder hast du nur die halbe Aussage zitiert.
mh schrieb:> Und was davon ist jetzt ein Alleinstellungsmerkmal?
Alles zusammen.
> Und mal wieder hast du nur die halbe Aussage zitiert.
Na dann den Rest auch noch. Kommt aber auf die selbe Aussage raus:
>Und wenn es einen Fehler gibt fällt der ziemlich sicher dank gcc und clang
Sanitizern schnell auf.)
"ziemlich sicher" schlechter als "sicher".
"schnell" schlechter als "sofort schon beim Compiler".
mh schrieb:> (Für mich bringt rust da auch keine Vorteile, da modernes C++ in dem> Bereich kaum Möglichkeiten für Fehler bietet. Und wenn es einen Fehler> gibt fällt der ziemlich sicher dank gcc und clang Sanitizern schnell> auf.)
Smart pointer, RAII und ASan sind nur Dinge die funktionieren wenn man
sie auch nutzt, also abhängig von Projektqualität und Mitarbeitern, nach
zig Firmen in der Selbständigkeit bei gross und klein kann ich ohne
Probleme sage das es genau so viele gibt die davon gar nichts nutzen, zu
viel - alles mit shared ptr oder eine wilde Mischung, ich hab noch kein
grosses Projekt zur Analyse bekommen das nicht ordentlichen Fehler mit
ASan gezeigt hat, egal wie gut und ordentlich das Team gearbeitet hat,
ab eine gewissen Menge Mitarbeiter und Codegrösse ist es einfach
schwierig, egal wie idealistisch man die Branche, seine eigene Firma
oder die Kollegen einschätz, bei Rust kann niemand, wenn er nicht das
verteufelte unsafe nutzt auch nur einen der typischen Fehler machen ohne
das der Code nicht kompiliert
100.000 C/C++ler können Fehler dieser Art machen, Rustler eben gar nicht
und das auch ohne Garbage Collector
Bei ein paar guten Entwicklern im Team zu meinen das wäre fast das
gleiche lasse ich noch gelten, aber nicht mehr bei hundertausend oder
mehr
Der Unterschied zwischen Fehler ist-nicht-möglich oder möglich ist
riesig wenn du das auf alle potenziellen Entwickler skalierst
Die Frage ist eher ob du den Garantien von Rust glaubst und ob du jedem
Entwickler in C/C++ den du kennst und der mit seiner Arbeit der
Wirtschaft nutz oder schadet die gleichen Fähigkeit wie dir zusprichst
cppbert3 schrieb:> verteufelte unsafe
Unsafe ist nicht verteufelt.
unsafe schaltet überhaupt keine von Rusts safety-Garantien ab.
Der Borrow-Checker und Memory-Safety von allen Rust-Typen ist weiterhin
aktiv.
Es gibt lediglich ein paar wenige zusätzliche Möglichkeiten frei.
Das sind hauptsächlich raw-Pointer-Deref und die Möglichkeit anderen
unsafe-Code aufzurufen.
Unsafe macht Code also nicht automatisch unsicherer.
Unsafe markiert nur Code, in dem man seine Raw-Pointer und
unsafe-Aufrufe ganz genau auditieren sollte.
Normaler Anwendercode braucht in der Regel kein Unsafe.
Es ist aber an der Stelle notwendig, wo z.B. die Rust Runtime auf das
Betriebssystem oder Hardware zugegriffen werden muss. Diese Zugriffe
sind aber für Anwendercode alle in entsprechende safe-APIs gewrappt.
Rust reduziert die zu auditierenden Blöcke also auf die unsafe-Blöcke,
die in typischen Anwendungen bei ziemlich nahe 0% des Codes liegen.
cppbert3 schrieb:> egal wie idealistisch man die Branche, seine eigene Firma> oder die Kollegen einschätz, bei Rust kann niemand, wenn er nicht das> verteufelte unsafe nutzt auch nur einen der typischen Fehler machen ohne> das der Code nicht kompiliert
Denk noch mal über den Satz nach. Wer verhindert, dass deine Kollegen
unsafe nutzen?
Und warum glaubst du, dass Entwickler, die nicht in der Lage sind sich
in C++ an ein paar simple Regeln zu halten, mit rust klar zu kommen? Und
behaupte jetzt bitte nicht, dass rust total einfach und idiotensicher
ist.
cppbert3 schrieb:> Smart pointer, RAII und ASan sind nur Dinge die> funktionieren wenn man sie auch nutzt,
Das gilt aber auch für Rust.
Du kannst existierende C/C++-Projekte, die sowas nicht benutzen, nicht
mit neuen Rust-Projekten vergleichen.
MaWin schrieb:> Unsafe ist nicht verteufelt.
Das ist mir klar, aber das wird gerne als Argument genommen warum Rust
ja doch nicht besser ist und es gab auch schon relevante Projekte die
unnötig viel unsafe genutzt haben, deswegen ist unsafe erstmal verpönt
und für die systemnahen unter uns vorbehalten
mh schrieb:>Wer verhindert, dass deine Kollegen unsafe nutzen?
Dieses Missverständnis habe ich ja bereits erläutert.
> Und warum glaubst du, dass Entwickler, die nicht in der Lage sind sich> in C++ an ein paar simple Regeln zu halten, mit rust klar zu kommen? Und> behaupte jetzt bitte nicht, dass rust total einfach und idiotensicher> ist.
Wenn man sich in Rust nicht an die Regeln hält, compiliert der Code in
der Regel nicht.
In wenigen Fällen sagt er einem zur Laufzeit, dass man etwas getan hat,
was nicht erlaubt ist.
Deshalb werden die Entwickler sich dran halten müssen.
mh schrieb:> cppbert3 schrieb:>> egal wie idealistisch man die Branche, seine eigene Firma>> oder die Kollegen einschätz, bei Rust kann niemand, wenn er nicht das>> verteufelte unsafe nutzt auch nur einen der typischen Fehler machen ohne>> das der Code nicht kompiliert> Denk noch mal über den Satz nach. Wer verhindert, dass deine Kollegen> unsafe nutzen?>> Und warum glaubst du, dass Entwickler, die nicht in der Lage sind sich> in C++ an ein paar simple Regeln zu halten, mit rust klar zu kommen? Und> behaupte jetzt bitte nicht, dass rust total einfach und idiotensicher> ist.
Was glaubst du was leichter ist: die Nutzung von unsafe zu erkennen oder
fehlende Anwendung von sicherem C++?
mh schrieb im Beitrag
> Und warum glaubst du, dass Entwickler, die nicht in der Lage sind sich> in C++ an ein paar simple Regeln zu halten, mit rust klar zu kommen? Und> behaupte jetzt bitte nicht, dass rust total einfach und idiotensicher> ist.
In den meisten Fällen kompiliert es dann einfach nicht und ja es ist
nicht leicht aber definitiv idiotensicher, wenn nicht sogar
idiotenabwehrend
cppbert3 schrieb:> Das ist mir klar,
Ich wollte das nur noch etwas untermauern, damit keine Missverständnisse
entstehen.
> aber das wird gerne als Argument genommen warum Rust> ja doch nicht besser ist
Ja. Das ist genau das Missverständnis, was es auszuräumen gilt.
>es gab auch schon relevante Projekte die unnötig viel unsafe genutzt haben,
Ja, das ist natürlich in der Regel unnötig. Und es ist unschöner Stil.
Aber es macht sie nicht per se unsicher.
Aber solche Projekte sind ja mit ihren unsafe-Blöcken eindeutig als
Murks markiert.
Und da kann man dann seine Entscheidungen drauf basieren, ob man es denn
verwendet oder nicht.
Man braucht in Rust keine komplexen Checker-Tools, um potentiell
unsicheren Code zu identifizieren, sondern nur
grep unsafe
cppbert3 schrieb:> Was glaubst du was leichter ist: die Nutzung von unsafe zu erkennen oder> fehlende Anwendung von sicherem C++?
Für mich, die fehlende Anwendung von sicherem C++.
S. R. schrieb:> Das gilt aber auch für Rust.
Du kannst diese Konzepte in Rust nicht umgehen sonst kompiliert dein
Code nicht
Aliasing, Leaking oder sonstige Fehler dieser Art sind by design nicht
möglich
Ich glaube einigen ist das hier immer noch nicht wirklich klar
Der Kompiler erhält durch die zusätzlich Ownership Annotation genug
Informationen zur Kompilezeit um Fehler zu erkennen und ohne die
annotation kompilierts nicht
mh schrieb:> Für mich, die fehlende Anwendung von sicherem C++.
Weil du eine Plaintextsuche nach "unsafe" nicht durchführen kannst?
Das erklärt einiges.
MaWin schrieb:> mh schrieb:>> Für mich, die fehlende Anwendung von sicherem C++.>> Weil du eine Plaintextsuche nach "unsafe" nicht durchführen kannst?> Das erklärt einiges.
Das ist ein Schritt mehr, als ich in C++ machen muss.
Du vergleichst eine alte C/C++-Codebasis, die keinerlei Sanitizer und
Vorsichtsmaßnahmen nutzt mit einer kompletten Neuentwicklung in Rust.
Ist ja schön, dass Rust so geil ist, aber wenn man C++ richtig benutzt,
mit den Sanitizern und Compilerwarnungen, was ist dann noch der Vorteil?
mh schrieb:> cppbert3 schrieb:>> Was glaubst du was leichter ist: die Nutzung von unsafe zu erkennen oder>> fehlende Anwendung von sicherem C++?>> Für mich, die fehlegrepnde Anwendung von sicherem C++.mh schrieb:> cppbert3 schrieb:>> Was glaubst du was leichter ist: die Nutzung von unsafe zu erkennen oder>> fehlende Anwendung von sicherem C++?>> Für mich, die fehlende Anwendung von sicherem C++.
Ich meinte in 300.000 Zeile fremden Code den du morgen auf den Tisch
bekommst
In Rust suche ich nach "unsafe", der Rest ist per se Safe, Logikfehler
kann ich in Rust und C++ machen
S. R. schrieb:> Du vergleichst eine alte C/C++-Codebasis, die keinerlei Sanitizer> und Vorsichtsmaßnahmen nutzt mit einer kompletten Neuentwicklung in> Rust.>> Ist ja schön, dass Rust so geil ist, aber wenn man C++ richtig benutzt,> mit den Sanitizern und Compilerwarnungen, was ist dann noch der Vorteil?
Egal welcher Idiot den Rust code schreibt, er kann keinen der
Speicherprobleme von C++ aufweisen
S. R. schrieb:> Ist ja schön, dass Rust so geil ist, aber wenn man C++ richtig benutzt,> mit den Sanitizern und Compilerwarnungen, was ist dann noch der Vorteil?
Das "wenn" wird eliminiert.
Der Code compiliert nicht mehr.
Der Compiler beweist das "wenn".
cppbert3 schrieb:> In Rust suche ich nach "unsafe", der Rest ist per se Safe, Logikfehler> kann ich in Rust und C++ machen
Es ist auch trivial, in C++ nach new zu suchen. Und die Tools, die
derartige Dinge überprüfen, laufen so oder so über den Code.
Warum glaubt ihr, jemand der nicht in der Lage ist Sanitizer und
änhliche Tools zu nutzen, kommt mit rust klar?
S. R. schrieb:> Du vergleichst eine alte C/C++-Codebasis, die keinerlei Sanitizer> und Vorsichtsmaßnahmen nutzt mit einer kompletten Neuentwicklung in> Rust.>> Ist ja schön, dass Rust so geil ist, aber wenn man C++ richtig benutzt,> mit den Sanitizern und Compilerwarnungen, was ist dann noch der Vorteil?
Du denkst nur in den kleinen kontrollierten Bedingungen deiner Projekte
und Teams
Wenn dein tolles grüne Wiese Projekt in C++ fertig ist komme andere nach
dir und machen Sachen die du nicht so machen würdest, weil du schon dann
schon an x anderen Projekten in einer anderen Abteilung arbeitest
mh schrieb:> Es ist auch trivial, in C++ nach new zu suchen.
new produziert unsicheren Code?
So ein be*****es Argument habe ich ja lange nicht mehr gelesen.
SoOderSo schrieb:> Einerseits wird mit der Weiterentwicklung von C++ argumentiert dass Rust> nicht notwendig sei. Anderseits sehe ich aber eine massive> Relativierung und mangelnde Akzeptanz der C++ Neuerungen.
Ob nun C++ oder Rust oder noch eine Handvoll Versuche, aus C irgend
etwas Zukunftsweisendes zu machen, ist doch egal.
Es ist immer wieder C und nochmals C und allenfalls mit einem Sack neuer
Kollateraleffekte und Stolperfallen versehen, an die man sich gewöhnen
müßte, wenn man so etwas als Programmiersprache tatsächlich benützen
wollte.
Überlaßt doch ganz einfach diese untoten Leichen sich selbst und ihren
Fans.
W.S.
mh schrieb:> Warum glaubt ihr, jemand der nicht in der Lage ist Sanitizer und> änhliche Tools zu nutzen, kommt mit rust klar?
Das behauptet niemand.
Aber Leute, die sich einen Dreck um sicheren Code scheren, werden mit
Rust aussortiert.
mh schrieb:> cppbert3 schrieb:>> In Rust suche ich nach "unsafe", der Rest ist per se Safe, Logikfehler>> kann ich in Rust und C++ machen>> Es ist auch trivial, in C++ nach new zu suchen. Und die Tools, die> derartige Dinge überprüfen, laufen so oder so über den Code.>> Warum glaubt ihr, jemand der nicht in der Lage ist Sanitizer und> änhliche Tools zu nutzen, kommt mit rust klar?
In Rust brauche ich diese Tools gar nicht
Ich nutze die Sanitizer seit der 1. Stunde (und die sind ja echt noch
superjung, ich hab vorher 20 jahre ohne gearbeiter und die sind ein
Segen) und alle kommerziellen und kostenfreien Analyser mit allen
möglichen Kompilern auf fast allen Platformen die marktrelevant sind,
weil es ohne zu fahrlässig ist
Du bestätigst doch selbst das man ohne Sanitizer nicht arbeiten sollte
erklär mir doch einfach bitte warum eine Sprache die solche Tools
unnötig macht nicht gut sein soll, traust du den versprechungen von Rust
nicht?
MaWin schrieb:> mh schrieb:>> Es ist auch trivial, in C++ nach new zu suchen.>> new produziert unsicheren Code?> So ein be*****es Argument habe ich ja lange nicht mehr gelesen.
Du hast offensichtlich keine Ahnung von modernem C++, wenn du nicht
verstehst, warum new ein Indiz für unsicheren Code ist.
S. R. schrieb:> cppbert3 schrieb:>> Wenn dein tolles grüne Wiese Projekt in C++ fertig ist>> Ich lache mal und verlasse dann leise die Diskussion.
Wie stellst du sicher das andere nach dir den Code nicht schlechter
machen als du?
cppbert3 schrieb:> In Rust brauche ich diese Tools gar nicht
Vielleicht, weil dieses Tool in den Compiler eingebaut ist? Oder wie
wird Ownership in rust überprüft?
W.S. schrieb:> Ob nun C++ oder Rust oder noch eine Handvoll Versuche, aus C irgend> etwas Zukunftsweisendes zu machen, ist doch egal.>> Es ist immer wieder C und nochmals C
Rust hat mit C überhaupt gar nichts gemeinsam, außer einige wenige
Grammatikdetails.
Jemand der C programmieren kann, kann noch lange keine einzige Zeile
Rust programmieren.
Ich war ja auch lange der Meinung, dass jeder, der wenigstens C kann,
innerhalb von Tagen jede andere imperative Sprache erlernen kann.
Rust hat mir das Gegenteil bewiesen.
Man muss deutlich anders denken.
Und es ist gut so!
Rust eröffnet einem ganz neue Paradigmen. Ganz neue Denkweisen.
Die kann man auch teilweise in andere Sprachen übertragen, die solche
Garantien nicht haben.
mh schrieb:> Du hast offensichtlich keine Ahnung von modernem C++, wenn du nicht> verstehst, warum new ein Indiz für unsicheren Code ist.
Ja. Ein Indiz.
Rust beweist.
Unterschied: Indiz <-> Beweis.
mh schrieb:> MaWin schrieb:>> mh schrieb:>>> Es ist auch trivial, in C++ nach new zu suchen.>> new produziert unsicheren Code?>> So ein be*****es Argument habe ich ja lange nicht mehr gelesen.>> Du hast offensichtlich keine Ahnung von modernem C++, wenn du nicht> verstehst, warum new ein Indiz für unsicheren Code ist.
Du kannst aber auch noch nicht soo viel Erfahrung haben wenn du denkst
das due suche nach new alle Speicherprobleme mit C++ aufzeigt, was ist
mit Aliasing, Use-After-Free in cast-Ctors und und und, die Liste ist
sehr lang aber viele C++ Entwickler glauben einfach das die anderen
Entwickler eben auch so gut arbeiten wie man selbst und dem ist eben oft
nicht so, klar kann man die alle entlassen, gehen die eben zu einer
anderen Firma bis die dicht macht, schlussendlich bleiben die am Markt
und werden eben genutzt
In Rust können die wenigstens kein schwer zu findenden Speicherfehler
machen, und nein hier geht es nicht um Memoryleaks die sind die
einfachste Form
mh schrieb:> Vielleicht, weil dieses Tool in den Compiler eingebaut ist?
Es ist in die Sprache eingebaut.
Das ist ein Unterschied.
> Oder wie wird Ownership in rust überprüft?
Überhaupt nicht.
Es ist ein intrinsisches Sprachdetail.
Ich glaube du verwechselst das mit Borrowing. (vgl. C++ shared_ptr, aber
zur Compilezeit)
mh schrieb:> cppbert3 schrieb:>> In Rust brauche ich diese Tools gar nicht>> Vielleicht, weil dieses Tool in den Compiler eingebaut ist? Oder wie> wird Ownership in rust überprüft?
Rust hat keine Runtime Sanitation sonder kompiletime Analyse, klar
irgendwie das gleiche - aber Rust braucht nichtmal Tests um den Fehler
vor dem Lauf zu finden, nicht jedes Programm erreicht aus dem Stand 100%
Coverage d.h. du musst in einem nicht-grüne-Wiese oder Fremden Code
Projekt erstmal die Codezeile auslösen damit der Sanitizer wirkken kann,
zeig mir mal wie du das schnell mit einem 100KLoc Programm mache das ich
gerade erst bekommen habe, wo irgendwelche Fehler, scheinbar drinn sind
- in Rust sind diese Fehler einfach nicht möglich
W.S. schrieb:> Ob nun C++ oder Rust oder noch eine Handvoll Versuche, aus C irgend> etwas Zukunftsweisendes zu machen, ist doch egal.
ROTFL.
Vielleicht solltest du dir ja wenigstens minimal was zur Sprache
angucken, über die du hier gerade verdammt große Bögen spuckst. Könnte
sonst sein, die Wurfparabel war falsch berechnet, und du schießt dir mit
deiner Spucke ein Eigentor. :-)
Ihr argumentiert also gerade über den negativen Netzwerkeffekt des
fehlenden Features der erzwungenen memory safety bei C++, der wäre, dass
Programme des C++ Ökosystems häufiger Speichermanagementprobleme
aufweisen, als wenn diese dieses Feature hätte. Also eine
Designentscheidung des Systems, das Einfluss auf das Ökosystem hat.
Euch mag eventuell auffallen, dass dies die selbe Art von Argument ist,
wie ich es beim fehlenden provides Feature von Cargo vorbrachte.
Ich könnte hier jetzt auf die selbe Art dagegen argumentieren, "Dann
nutze doch keine C++/Cargo Anwendungen.", "Ist das eine Vermutung?",
"Rust kann dynamisch linken" vs. "Das geht in C++ schon, mit smart
Pointern.", usw.
Die Probleme sind Echt. Nur mal so zum drüber nach denken...
Nur damit das klar ist
Rust macht zur Kompilezeit eine programmweite Analyse, also 100% Source
Abdeckung und bricht den Kompiliervorgang ab wenn irgendein
Speicherfehler auftreten kann, aber nicht weil der Fehler passiert
sondern weil die Rust Semantik solche Problem nicht erlaubt oder besser
gesagt überhaupt abbilden kann, ist also ein Kompiletime Semantik-Fehler
Die Sanitizer müssen durch Unit- oder manuelle oder Fuzzy Tests gezielt
oder zufällig über ein Problem stolpern
Zwischen den beiden Konzepten liegen Welten
Rust ist wie bei Minority Report wo man vor dem Mord schon im Knast
sitzt, die Sanitizer sind eher wie Polizisten die zufällig oder weil
jemand sie dort hingeschickt hat den Mord beobachten
Daniel A. schrieb:> Nur mal so zum drüber nach denken...
Ich verstehe kein Wort von dem, was du schreibst.
Könntest du das bitte verständlich neu formulieren?