Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

11.01.2014, 18:40

Sprache ohne null pointer

Vor kurzem habe ich gelesen das Rust eine Sprache ohne null pointer ist.
Was nützt sowas, bzw. wieso macht man das, ich sehe darin nur Nachteile.
Einfaches Beispiel: Angenommen ich habe eine Liste und überprüfe mit "!= null" ob ich schon am Ende bin (ich weiß, dass macht man anders, compositum und so) soetwas wäre also mit Rust nicht möglich zum umsetzen?

Gruß,
MitgliedXYZ

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

11.01.2014, 19:01

Du kannst auch anders prüfen. ;)
Ich sehe in dem nicht Vorhandensein von null Pointern eher mehr Vor- als Nachteile. C++ Referenzen waren ja auch ein Versuch, so etwas zu ermöglichen.
Aber leider ist mir Rust's Syntax absolut zuwider.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

3

12.01.2014, 03:12

C++ hat so etwas mit Referenzen, ja. Ist im Prinzip genau das, bloß noch mit syntaktischem Zucker, da Referenzen keine Zeiger-Arithmetik zulassen.

Der Nachteil von Null-Referenzen/-Zeigern/NIL zeigt sich erst in größeren Programmen, in denen es fix passieren kann, dass man vergisst, zu prüfen, ob eine Addresse/Referenz auch wirklich-wirklich gültig ist. Vergisst man das, kommt es zu etwas happig zurückzuverfolgenden Fehlern, deren abscheulichste Ausartung in NIL von z.B. Ruby vollendet wurde.
Dieser Nachteil bringt allerdings einen gewaltigen Vorteil mit sich:
Wenn eine Referenz ungültig sein darf, kann man sehr fix per simpelster Fallunterscheidung prüfen, ob überhaupt etwas zu Tun ist.

Der Kompromiss zwischen Null-Referenzen-sind-super und Null-ist-riskant sind Null-Objekte. Da kann man nichts vergessen und ihr Verhalten lässt sich passgenau zuschneiden. Der Code braucht auch keine Sonderfälle mehr zu betrachten, da es keine mehr gibt. Die einfachste Form eines Null-Objekts ist eines, das nichts tut. Man könnte aber auch Spielereien wie Trace-Funktionen verbauen, usw.
Aber auch die haben einen Nachteil:
Sie bringen einen Overhead für's Nichts-Tun mit sich.

Und da sitzen wir jetzt. D: Zwei Konzepte, beide mit Vor- und Nachteilen, beide auf zwei gänzlich verschiedene Bedürfnisse zugeschnitten. Und so lange es diese zwei Bedürfnisse gibt (Leistung vs. Robustheit), haben auch beide Konzepte ihre wohlverdiente Existenzberechtigung.

Ich weiß jetzt nicht, wie Rust das umsetzt und wie Rust ausschaut, aber das Geschwätz ist auch eher allgemein gehalten. D;
Mir ist Python's Syntax zuwider.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

12.01.2014, 11:40

Danke für deine ausführliche Antwort.
An dem Punkt wo mir "Null zu riskant" ist, bin ich mit meinen kleinen Projekten noch nicht gekommen, für mich wäre die Sprache also nix.

Werbeanzeige