Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Wieder eine Stelle, an der C++ alles doppelt macht: using in verschiedenen Scopes.

  namespace Namespace {
    enum Foo { };
  }

  struct Struct {
    enum Foo { };
  };

  // … in einer Funktion:
  using Namespace::Foo; // OK
  using Struct::Foo; // ERROR: a class qualified name is not allowed
  using Foo = Struct::Foo; // OK
  using Foo = Namespace::Foo; // auch OK


… weil ja auch jeder, der einen Typ von wo anders benutzen möchte, erstmal den Unterschied zwischen Class Scope und Namespace Scope lernen möchte!

BONUS:

  namespace Namespace {
    namespace Foo { }
  }
  using namespace Namespace::Foo; // alle guten Dinge sind drei


Gibt es überhaupt noch Leute, die C++ lernen wollen?!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Jammer-Thread

Beitrag von Lord Delvin »

Würde erwarten, dass es was mit Overload Resolution zu tun hat und auf extrem merkwürdige Weise an den Programmierer exportiert wird.
Mir ist ehrlich gesagt nicht klar, was die Alternative zu C++ sein soll, wenn man eine nicht-GC Sprache lernen will.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Lord Delvin hat geschrieben: 15.04.2022, 13:53 Mir ist ehrlich gesagt nicht klar, was die Alternative zu C++ sein soll, wenn man eine nicht-GC Sprache lernen will.
Eventuell Rust.
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Jammer-Thread

Beitrag von Lord Delvin »

Rust habe ich mir in den letzten zehn Jahren zweimal sehr ernsthaft angesehen und kann nur deutlich davon abraten. Das Problem ist einfach Stabilität gepaart mit Selbstbetrug. Wenn eine Programmiersprache stabil ist, dann darf es für niemanden ein Problem sein, drei Jahre auf die nächste Version zu warten. Das war bei Rust beide Male sehr weit weg davon.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
x1m4
Establishment
Beiträge: 106
Registriert: 02.04.2022, 22:56
Kontaktdaten:

Re: Jammer-Thread

Beitrag von x1m4 »

Was ist eigentlich mit dem CCC passiert, warum wird da größtenteils nur noch Müll hochgeladen?
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Jammer-Thread

Beitrag von Lord Delvin »

Weil sie irgendwann von einer Gruppe Computerenthusiasten zu einem linksextremen Haufen mutiert sind. Wie auch die Piratenpartei. So ziehst du halt viele gute Leute nicht mehr an und fällst im Niveau ins Bodenlose.
Wenn du dich als Computerenthusiast schämst Geld zu verdienen bist du in der falschen Branche.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Krishty hat geschrieben: 15.04.2022, 04:04 Wieder eine Stelle, an der C++ alles doppelt macht: using in verschiedenen Scopes.

  namespace Namespace {
    enum Foo { };
  }

  struct Struct {
    enum Foo { };
  };

  // … in einer Funktion:
  using Namespace::Foo; // OK
  using Struct::Foo; // ERROR: a class qualified name is not allowed
  using Foo = Struct::Foo; // OK
  using Foo = Namespace::Foo; // auch OK


… weil ja auch jeder, der einen Typ von wo anders benutzen möchte, erstmal den Unterschied zwischen Class Scope und Namespace Scope lernen möchte!
Naja, das sind zwei komplett verschiedene Arten von declarations. Zum einen hast du da using-declarations (using blub;), zum anderen alias-declarations (using blub = blab;). Eine using-declaration führt einen Satz von Deklarationen aus einem anderen Scope in den Scope ein in dem die using-declaration steht. D.h. was dein using Struct::Foo; tut ist es versucht die Deklaration des Members Foo von Struct in den globalen Namespace zu bringen. Im globalen Namespace kannst du aber keine Klassenmember deklarieren. Daher macht das keinen Sinn. Die alias-declaration using Foo = Struct::Foo; dagegen deklariert den Namen Foo im globalen Namespace als Alias für den Typ Struct::Foo. Das macht Sinn.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Tiles »

Ich kotz grad über ein neues "Security" Feature von Git ab. Ich hab die Ownerschaft über alle meine Git Repositories verloren. So kann ich natürlich auch nichts mehr committen. Und der Befehl den die da angeben zum fixen funktioniert zwar bei einem Repo, aber bei einem anderen schon nicht mehr. Nun darf ich wohl erst mal alle Repos neu klonen. Fingers crossed dass das überhaupt was nutzt -.-

https://github.blog/2022-04-12-git-secu ... announced/
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Tiles hat geschrieben: 18.04.2022, 09:23 Ich kotz grad über ein neues "Security" Feature von Git ab. Ich hab die Ownerschaft über alle meine Git Repositories verloren. So kann ich natürlich auch nichts mehr committen. Und der Befehl den die da angeben zum fixen funktioniert zwar bei einem Repo, aber bei einem anderen schon nicht mehr. Nun darf ich wohl erst mal alle Repos neu klonen. Fingers crossed dass das überhaupt was nutzt -.-

https://github.blog/2022-04-12-git-secu ... announced/
Irgendwie korrelieren deine Aussagen nicht mit dem Blog-Artikel. Der Artikel sagt primär aus, dass man dringend seine git-Installationen updaten sollte, da dort einige Security-Vulnerabilities drin sind. Und das ist nicht "Security", sondern definitiv Security-Updates, welche beide eine Möglichkeit für unwanted code execution fixen.

Zudem haben Git-Repositories keine Ownership (by Design), darum wundere ich mich etwas, warum du nichs committen kannst.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Tiles »

Das Problem kommt eben mit einem der Fixes. Plötzlich habe ich eben keine Ownership mehr über meine Repos. Weil sicherer dann ...

Und ja, das war ja das Kuriose :)

Das endete mit dem Fehler hier. Nur dass ich eben auf Windows bin, und nicht auf Github Actions: https://github.com/actions/checkout/issues/760

Ich habe das Repo frisch gezogen. Nun stimmen die Rechte wieder. Aber sowas sollte eigentlich nicht passieren.

EDIT, hab noch nen Screenie dazu ausgebuddelt. Ich hatte das aufgenommen für ein Tutorial. So sieht das dann aus wenn du committen willst ^^
Dateianhänge
fatal.jpg
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
EyDu
Establishment
Beiträge: 100
Registriert: 24.08.2002, 18:52
Wohnort: Berlin
Kontaktdaten:

Re: Jammer-Thread

Beitrag von EyDu »

Tiles hat geschrieben: 18.04.2022, 11:36 Das Problem kommt eben mit einem der Fixes. Plötzlich habe ich eben keine Ownership mehr über meine Repos. Weil sicherer dann ...
Bei dem Fix geht es nicht um die Ownership deiner Repositories. xq ist darauf ja schon eingegangen. Es geht um die Ordner-Rechte lokal bei dir auf dem Rechner. Mit dem Fix wird unterbunden, dass jemand in einem Top-Level-Ordner irgendwo ein Repository angelegt wird und alle git-Aufrufe, welche in diesem Unterordner liegen und nicht in einem git-Repository, auf das Top-Level-Repo umgebogen werden. Es könnte sonst leicht passieren, dass du private Dinge in ein anderes Repo commitest.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Tiles »

Ja. Und die Konsequenz war wie gesagt dass ich die Rechte und die Ownership an meinen Repositories verloren habe. Ich nenne das einen Bug :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

xq hat geschrieben: 18.04.2022, 11:28Und das ist nicht "Security", sondern definitiv Security-Updates, welche beide eine Möglichkeit für unwanted code execution fixen.
Einspruch! Das dachte ich nämlich auch, bis ich es gelesen habe:
CVE-2022-24765
This vulnerability affects users working on multi-user machines where a malicious actor could create a .git directory in a shared location above a victim’s current working directory. On Windows, for example, an attacker could create C:\.git\config, which would cause all git invocations that occur outside of a repository to read its configured values.
Mal ganz doof: Wenn du in einem Verzeichnis arbeitest, dessen Elternverzeichnis jemandem gehört, dem du nicht traust, bist du doch sowieso gefickt.

Anstatt C:\.git\config anzulegen und dich über git dazu zu bringen, meinen Code auszuführen, könnte ich einfach C:\Users löschen/bewegen und durch einen Hardlink ersetzen - zu einem Verzeichnis, das mir gehört. Jetzt habe ich volle Lese- und Schreibrechte auf allem, womit du arbeitest. Jetzt kann ich direkt in C:\Users\xq\.git\config schreiben. Oder ein Executable namens git in deinem Arbeitsverzeichnis anlegen, das anstelle des echten git ausgeführt wird, wenn du git in deine Shell eintippst. Und und und.

Ich sehe wirklich nicht, wie so eine blöde Konfigurationsvariable irgendwas bringen soll. Gehört das Elternverzeichnis deines Arbeitsverzeichnisses einem Bösewicht, bist du am Arsch. Mit oder ohne das Security-Update.

Die andere Sicherheitslücke mit dem Uninstaller hatten wir übrigens vor drei Jahren schon: Hat Microsoft in MSI gefixt. Und seitdem wird das wöchentlich wiederentdeckt bei Leuten, die lieber eigene Installer/Uninstaller ausliefern statt MSI zu benutzen. Immer und immer wieder, seit Jahren. Wegen solcher Scheiße starten mittlerweile Programme, die nicht-MSI-Installer mitbringen (oder MSI mit ausführbarem Code als Erweiterung), bei mir mit -100 Punkten.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

dot hat geschrieben: 16.04.2022, 13:16
Krishty hat geschrieben: 15.04.2022, 04:04… weil ja auch jeder, der einen Typ von wo anders benutzen möchte, erstmal den Unterschied zwischen Class Scope und Namespace Scope lernen möchte!
<150 Wörter über den Unterschied zwischen using-declarations und alias-declarations>
Entschuldige, ich hätte das vielleicht deutlicher als Sarkasmus markieren sollen ;) Der Punkt ist, dass ich sowas nicht wissen müssen möchte, und dass C++ keinen einfachen oder eindeutigen Weg bietet, "X bezieht sich hier immer auf Blah::X" auszudrücken, ohne sich erstmal diese accidental complexity und historisch gewucherte Sprach-Kategorien ins Hirn zu stopfen. Wenn man sowas gern tut, sieht man das natürlich weniger als Makel und eher als interessantes Detail.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2352
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Lord Delvin hat geschrieben: 15.04.2022, 20:20 Rust habe ich mir in den letzten zehn Jahren zweimal sehr ernsthaft angesehen und kann nur deutlich davon abraten. Das Problem ist einfach Stabilität gepaart mit Selbstbetrug. Wenn eine Programmiersprache stabil ist, dann darf es für niemanden ein Problem sein, drei Jahre auf die nächste Version zu warten. Das war bei Rust beide Male sehr weit weg davon.
Was heißt es konkret, wenn es ein Problem ist auf die nächste Version zu warten?
Ich meine, meine Perspektive auf Rust ist, dass ich mir die Sprache angeschaut habe und die Ideen extrem vielversprechend finde. So als ob man wirklich einfach mal alles was man in den letzten 30 Jahren über Sprachentwicklung gelernt hat ohne Altlasten zu einem sinnvollen System zusammengefügt hätte. C++ hat einfach Probleme, die nie behoben werden können (weil man ja kompatibel zu allem bleiben muss - du kannst ja schon triviale Dinge wie const-correctness vergessen, wenn du eine Bibliothek benutzt, die das nicht macht), also ist es aus meiner Sicht logisch demnächst auf ein komplett neues System umzustellen - und da sehe ich außer Rust eigentlich keine sinnvollen Konkurrenten für das Einsatzgebiet von C++ (alleine schon weil ja quasi jeder Garbage Collection macht).

Ich meine, wenn man Rust jetzt mit einem Early-Access-Spiel vergleicht, dann wäre das ja ok. Ich will ja noch nicht unbedingt jetzt sofort damit produktiv arbeiten, und wenn das größte Problem ist, dass man es etwas zu voreilig als stabil bezeichnet hat, dann wäre das für mich kein starkes Gegenargument. Oder meinst du noch etwas anderes?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Da sich hier Leute mit Rust-Erfahrung herumzutreiben scheinen: Stimmen die Gerüchte, dass in Rust alles statisch gelinkt werden muss und keine stabile ABI existiert, die z. B. für ein Plugin- oder DLL-System nötig wäre?

(Anmerkung: C++ hat auch keine stabile ABI, schließlich kann man nicht zwei Klassen aus unterschiedlichen Projekten zusammenlinken, ohne auf Compiler-spezifische Garantien zurückzugreifen. Aber soviel zu „aus den letzten 30 Jahren gelernt“ …)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Jammer-Thread

Beitrag von Lord Delvin »

Kann ich nicht sagen. So weit bin ich nie gekommen. Für mich hat sich die Frage gestellt, ob ich mich beruflich in die Richtung entwickeln will. Meine Antwort war nein und ich werde es die nächsten Jahre auch nicht nochmal prüfen.
Den Vergleich mit einem Early-Access-Spiel ist passend. Allerdings würde ich sagen es ist eines, bei dem nicht klar ist, ob es fertig wird.

Die Idee "was man in den letzten 30 Jahren über Sprachentwicklung gelernt hat" kann ich nicht nachvollziehen. Mir wäre keine andere Sprache bekannt, die ein MUST-Ownership-Typsystem im Kern der Sprache hat. Das ist ein so großer Unterschied, dass sich fast alles nicht mehr ernsthaft übertragen lässt. Ich glaube wenn sie so drauf gewesen wären das und Macros rauszulassen, wäre es heute eine gute Sprache.

Das Plugin-System kann man auch durch statisches Linken erreichen. Das DLL-System würde ich in dem Bereich nicht mehr machen; liegt aber vielleicht auch ein bisschen daran, dass ich im Cloudbereich arbeite und da sowieso alles statisch gelinkt werden *könnte*. D.h. ich würde allen Code statisch linken und einmal LTO drüber jagen.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
x1m4
Establishment
Beiträge: 106
Registriert: 02.04.2022, 22:56
Kontaktdaten:

Re: Jammer-Thread

Beitrag von x1m4 »

Krishty hat geschrieben: 23.04.2022, 09:37 Stimmen die Gerüchte, dass in Rust alles statisch gelinkt werden muss und keine stabile ABI existiert, die z. B. für ein Plugin- oder DLL-System nötig wäre?
Krass, ich dachte Rust hat gerade bei der ABI ein stabiles Interface eingeführt, da das in C/C++ ja echt chaotisch und schmerzhaft ist.

Ich dachte eine Zeit lang, dass ich unbedingt Rust lernen muss. Hab die letzten Jahre immer wieder Versuche unternommen, aber irgendwie hat mich nichts an der Sprache wirklich gepackt. Ich war eher genervt von den ganzen Prinzipien, die mir die Sprache aufzwingen will.
Ein ähnliches Problem hab ich auch mit C++, die Sprache wirkt wie ein riesiger Salat an Features, die über die Jahre einfach dazugekippt wurden, ohne eine wirkliche Guideline.

Da bleib ich lieber bei C und Typescript, da ist die Syntax stumpf, es gibt keine komplizierten Konzepte und wirklich jeder kapiert es.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Lord Delvin hat geschrieben: 23.04.2022, 10:15Das Plugin-System kann man auch durch statisches Linken erreichen. Das DLL-System würde ich in dem Bereich nicht mehr machen; liegt aber vielleicht auch ein bisschen daran, dass ich im Cloudbereich arbeite und da sowieso alles statisch gelinkt werden *könnte*. D.h. ich würde allen Code statisch linken und einmal LTO drüber jagen.
Kannst du mir das bitte genauer erklären? Nehmen wir an, ich hätte ein Spiel in Rust geschrieben (EXE) und wollte Spielern erlauben, eigene Bot-KI (ebenfalls in Rust geschrieben) ins Spiel zu laden. Was genau müssten die zur Verfügung stellen, und was würde mein Spiel laden?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2352
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

x1m4 hat geschrieben: 23.04.2022, 11:18 Ich war eher genervt von den ganzen Prinzipien, die mir die Sprache aufzwingen will.
Ein ähnliches Problem hab ich auch mit C++, die Sprache wirkt wie ein riesiger Salat an Features, die über die Jahre einfach dazugekippt wurden, ohne eine wirkliche Guideline.
Naja, aber das ist eigentlich genau das, was ich mag - C++ hat mittlerweile gute Features, aber wenn die nicht konsequent benutzt werden, sind sie halt nur halb so viel wert. Es gibt ja die offiziellen C++ Coding-Guidelines und wenn die befolgt werden ist z.B. auch immer klar ob eine Funktion die einen Zeiger auf ein Objekt bekommt, das dann selber löscht (wenns ein unique_ oder shared_ptr ist) oder eben nicht (wenns ein raw pointer ist). Aber nö, 7/8 aller Bibliotheken dadraußen halten sich halt nicht dran, und nehmen immer nur raw-pointer entgegen und dann geht wieder was kaputt, weil man Speicher doppelt oder gar nicht freigegeben hat.

Und genau das Problem hatte ich vor 5 Minuten mit Python + Qt, die Lösung war, dass ich ein QImage noch selber als Python Variable gespeichert halten muss, nachdem ich es irgendwo an Qt weitergegeben habe, weil Qt es halt nur benutzt und nicht verwaltet. Und das ist richtig richtig scheiße, weil es halt im Interface absolut nicht ersichtlich ist. Und weil Python mit seinem tollen Carbage Collector das eigentlich nicht brauchen sollte. Außer, wenn man es doch machen muss. Weil hier wieder alles kaputt ist. Gut, von mir aus ist es auch die Schuld von PySide2, vernünftige Bindings hätten diese Garantien ("ich muss mein Memorymanagement in Python nicht selber machen") irgendwie erhalten. Aber das tut es halt nicht, wir sind gezwungen alte Software zu benutzen, die kaputt ist.
Und Ownership-Management zu erzwingen ist halt die einzige Art, wie man dafür sorgen kann, dass es auch tatsächlich funktioniert. Es muss halt diesen harten Schnitt geben, wenn man jemals in einer Welt leben will, wo so Dinge nicht mehr passieren. Ich sehe es absolut nicht ein, eine halbe Stunde Debugingzeit verschwenden zu müssen, für etwas das in einer vernünftigen Sprache ein Compilerfehler gewesen wäre.

Wohlgemerkt geht es mir hierbei darum, dass ich die Idee gut finde, ob Rust das schon gut genug umsetzt und dann wirklich alles besser ist, weiß ich nicht. Aber ich finde es frustrierend, wenn triviale Dinge ewig dauern, weil clevere Lösungen um Code robuster zu machen, nicht verwendet werden.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Tiles »

... und wirklich jeder kapiert es
:'3
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Jammer-Thread

Beitrag von Lord Delvin »

Krishty hat geschrieben: 23.04.2022, 11:34
Lord Delvin hat geschrieben: 23.04.2022, 10:15Das Plugin-System kann man auch durch statisches Linken erreichen. Das DLL-System würde ich in dem Bereich nicht mehr machen; liegt aber vielleicht auch ein bisschen daran, dass ich im Cloudbereich arbeite und da sowieso alles statisch gelinkt werden *könnte*. D.h. ich würde allen Code statisch linken und einmal LTO drüber jagen.
Kannst du mir das bitte genauer erklären? Nehmen wir an, ich hätte ein Spiel in Rust geschrieben (EXE) und wollte Spielern erlauben, eigene Bot-KI (ebenfalls in Rust geschrieben) ins Spiel zu laden. Was genau müssten die zur Verfügung stellen, und was würde mein Spiel laden?
Du hast den Code oder die Zwischendarstellung von allem Code und linkst sie zusammen. In deinem Beispiel ist das nicht sehr realistisch; dein Beispiel kommt mir aber auch wenig realistisch vor.
Wenn man sowas braucht kann man sich immer noch überlegen, die Erweiterungen über eine Konfigurationssprache wie Typescript oder über ein reines C-API zu erledigen. Ist aber beides in dem Bereich in dem ich arbeite eher ungewöhnlich. Wenn überhaupt dann der Typescript-Weg.

Wenn du Leuten erlaubst Plugins für dein Spiel zu schreiben, die selbiges zum Absturz bringen können, dann musst du damit rechnen, dass du für fremden Code Supportaktivität hast. Das würde ich vermeiden.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Lord Delvin hat geschrieben: 23.04.2022, 13:52dein Beispiel kommt mir aber auch wenig realistisch vor.
Lässt sich drüber streiten … dann eben ein Fall, in dem die Supportfrage geklärt ist: Ich arbeite bei Microsoft und möchte den User-Mode-Teil von Windows in Rust implementieren, damit wir ein OS ohne Speicherfehler haben. Was muss ich bereitstellen, damit Programme à Firefox meine API (Window Management, Process Management, etc.?) nutzen können?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
x1m4
Establishment
Beiträge: 106
Registriert: 02.04.2022, 22:56
Kontaktdaten:

Re: Jammer-Thread

Beitrag von x1m4 »

Tiles hat geschrieben: 23.04.2022, 12:21
... und wirklich jeder kapiert es
:'3
Hüstel ja das war vielleicht ein bisschen weit ausgeholt XD
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Krishty hat geschrieben: 23.04.2022, 09:37 Da sich hier Leute mit Rust-Erfahrung herumzutreiben scheinen: Stimmen die Gerüchte, dass in Rust alles statisch gelinkt werden muss und keine stabile ABI existiert, die z. B. für ein Plugin- oder DLL-System nötig wäre?

(Anmerkung: C++ hat auch keine stabile ABI, schließlich kann man nicht zwei Klassen aus unterschiedlichen Projekten zusammenlinken, ohne auf Compiler-spezifische Garantien zurückzugreifen. Aber soviel zu „aus den letzten 30 Jahren gelernt“ …)
Vorab: Ich habe Rust noch nie produktiv eingesetzt.

Ich denke aber "aus den letzten 30 Jahren gelernt" bedeutet nicht "so tun als hätte es die letzten 30 Jahre nicht gegeben". Es ist unrealistisch anzunehmen, dass du ein neues Ökosystem auf Flughöhe bekommst, wenn du kein C linken kannst und nicht als C gelinkt werden kannst, weil alle anderen das halt unterstützen. Das Feature brauchst du sowieso. Ich vermute das nimmt ein bisschen den Druck raus, an der Front schnell aktiv zu werden, denn es existiert ja ein Workaround. Der Tweet handelt so gesehen "nur" davon, dass er genau diesen Workaround "C FFI" nicht mag, was sein gutes Recht ist.

Ich vermute weiterhin, dass die Idee ist, dass man "meistens" sowieso den Code hat, was mMn ebenfalls generell eine gute Entscheidung ist, um das Ökosystem in die Luft zu bekommen, denn es incentiviert open source ohne den GPL-Lizenz-Wahnsinn.

Meine Erfahrung mit C++ ist dass nichts jemals auf Anhieb unter Windows baut, selbst wenn ich den source code habe. Das hiesige Gejammer über verschiedene Teile der C++ Build Pipeline komplementiert diese Erfahrung.

Wenn ich also die Wahl habe -- in einer Welt begrenzter Ressourcen ist alles ein Trade-Off gegen alles andere, daher denke ich die Dichotomie ist fair -- entweder von Tag 1 an ein stabiles ABI zu bekommen -- was realistisch dann doch wieder das C ABI als Minimalkonsens wäre, denn selbst die Rust-Leute können vermutlich auf einem weißen Blatt Papier alle Eventualitäten vorhersehen -- oder ein Buildsystem und Paketmanager zu bekommen, die Teil der Sprache sind, dann nehme ich mit Kusshand zweiteres.

Ob Rust ready-for-prime-time ist kann und will ich nicht beurteilen. Dass wir in absehbarer Zeit keine Neuimplementierung eines relevanten Betriebssystems in Rust sehen werden, wie du es weiter unten implizierts, ist vermutlich korrekt, für meine persönlichen use-cases aber kein Nachteil.

"Lord Delvin" sprach oben von der Entscheidung eine Sprache zu lernen. Ich habe Sprachen nach einer anfänglichen irrationalen jugendlichen Abneigung gegen Java immer als Tool betrachtet. Wenn ich mich entscheide eine Sprache zu lernen, dann entweder, weil ich beruflich eine Codebase erbe, in der es die Sprache schon gibt, oder weil ich Bock auf die Konzepte habe. Rust optimiert zweiteres, wie keine andere Sprache die ich mir in den letzten 20 Jahren angesehen habe. [Leider habe ich auch weniger Freizeit als vor 20 Jahren, daher bleibt es momentan bei Anschauen].

Abstrakte hireability ist für mich kein Kriterium, was natürlich auch eine Art von Luxus ist. Aber wenn hier junge Leute mitlesen sollten, die nicht aus Interesse oder Notwendigkeit sondern für einen Arbeitsmarkt lernen wollen, vergesst Rust _und_ C++ und lernt fucking node.js ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Alexander Kornrumpf hat geschrieben: 23.04.2022, 15:55Dass wir in absehbarer Zeit keine Neuimplementierung eines relevanten Betriebssystems in Rust sehen werden, wie du es weiter unten implizierts, ist vermutlich korrekt, für meine persönlichen use-cases aber kein Nachteil.
Tatsächlich wollte ich das ausnahmsweise mal nicht implizieren, sondern ich fand das Beantworten der Frage „Wie mache ich dynamisches Linken mit Rust, z. B. in einem Spiel?“ durch „Dynamisches Linken braucht man nicht, tut niemand, und das Beispiel ist sowieso unrealistisch“ etwas unbefriedigend und wollte diplomatisch nachhaken. Danke aber für den Beitrag!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Wenn ich das richtig sehe hat wasm die gleiche Krankheit. Ich könnte mir vorstellen, dass das relativ gleichzeitig gelöst wird. Mich haben immer compile Zeiten abgeschreckt. Da hört man ja immer Horrorstories...
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Ich fand Jon Blow mal wieder erhellend:

https://www.youtube.com/watch?v=4t1K66dMhWk

Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Krishty hat geschrieben: 23.04.2022, 19:28
Alexander Kornrumpf hat geschrieben: 23.04.2022, 15:55Dass wir in absehbarer Zeit keine Neuimplementierung eines relevanten Betriebssystems in Rust sehen werden, wie du es weiter unten implizierts, ist vermutlich korrekt, für meine persönlichen use-cases aber kein Nachteil.
Tatsächlich wollte ich das ausnahmsweise mal nicht implizieren, sondern ich fand das Beantworten der Frage „Wie mache ich dynamisches Linken mit Rust, z. B. in einem Spiel?“ durch „Dynamisches Linken braucht man nicht, tut niemand, und das Beispiel ist sowieso unrealistisch“ etwas unbefriedigend und wollte diplomatisch nachhaken. Danke aber für den Beitrag!
Wie befriedigend ist die Antwort "Du schreibst extern C in deinen Code"?
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ja, das hatte ich gelesen. Für mich als C-Programmierer ist sie natürlich okay. Wenn ich es richtig verstanden habe, verzichte ich damit aber auf viele Features, die Rust von C abheben sollen ¯\_(ツ)_/¯

Gutes Video; thx!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten