Fallstricke beim Schreiben von Hilde

Diese Liste sammelt jeden Fallstrick, auf den wir beim Schreiben des Compilers, der Standardbibliothek und der Anwendungen darauf gestoßen sind. Zu jedem stehen der Fehlercode und die Meldung des Compilers, der falsche und der richtige Code und eine Regel in einem Satz. Die Zeile „Jetzt“ sagt, wie der Compiler heute damit umgeht: Der Fallstrick ist beseitigt, die Meldung nennt ihn und schlägt die Korrektur vor, oder es hat sich nichts geändert, mit Begründung. Neue Einträge kommen ans Ende.

Sprache und Compiler

1. Ein linearer Wert wird in einem Zweig verbraucht, der zurückkehrt

2. Ein Integer-Literal ist ein Int32, wo seine Stelle einen anderen Typ verlangt

3. Keine Operatorrangfolge

4. Eine lokale Variable heißt wie eine Deklaration des Moduls

5. Ein Parameter heißt wie eine importierte Funktion

6. Die Schnittstelle importiert, was ihre Verträge aufrufen

7. Eine Typklasse in einer Einschränkung, die das Modul nicht importiert

8. Eine Instanz, deren Modul nicht importiert ist

9. Kein valueOr in der Sprache

10. Ein Vertrag, der ein Byte eines String liest

11. Ein Feld einer Schreibreferenz oder eine Neuausleihe, zweimal verwendet

12. Ein geliehenes Literal und der Apostroph

13. Ein reserviertes Wort als Name

14. Ein Index auf dem Ergebnis eines Aufrufs

15. Ein Index einer Modulkonstante

16. Ein Pfad in einen Wert statt in eine Referenz

17. Eine Bindung eines case, die einen vorher gebundenen Namen nimmt

18. Eine lineare var erneut zugewiesen und None einer linearen Option zu früh gebaut

19. Ein linearer Wert in den Zweigen eines if-Ausdrucks

20. Ein Span einer Ausleihe einer lokalen Variable, gebunden mit einem Regionsnamen

21. Zwei Module exportieren denselben Namen

22. \u{...} in einem String-Literal

23. Eine importierte C-Funktion innerhalb von @embed

24. None() als Argument eines Parameters vom Typ Option

Außerhalb des Compilers

25. Prüfungen, die eine erzeugte C-Variable nennen

26. SQLite und SQLCipher in einem Programm

27. Eine Einstellung von DuckDB, die zu allem Ja sagt

28. Ein Commit von DuckDB nach einer fehlgeschlagenen Anweisung

29. Eine data:-URL in einem URL-Attribut einer Vorlage

30. Eine Funktion eines neueren Hilde in einer Anwendung, die mit einem älteren gebaut ist

31. Ein verankertes Muster mit einem Literal nach seinem Anfang

32. = zwischen zwei Spans

33. Ein reserviertes Wort als Name: is, skip und die anderen

34. Ein unbekanntes Modul für einen Parse-Fehler an anderer Stelle

35. Ein erfundener Wert zum Zurückgeben nach abort

36. Ein Docstring zwischen pragma Slot und seiner Deklaration

37. Eine Schreibreferenz weitergereicht, wo eine Leseferenz verlangt wird

38. Ein Feld eines Ergebnisses in einem ensures ausgeliehen

39. Ein Feld des Ergebnisses eines Aufrufs