Skip to content

Design decisions

Every design question about Dazzle that its author has settled, and every one still open, with the reasons and the alternatives that were turned down. Together they are spec §18.

Older text cites a decision as 18.NN: §18.32 and D-0032 are the same decision.

D-0018 collect
D-0019 ignore in two positions
D-0001 Default type of an unsuffixed float literal
D-0002 Attribute syntax
D-0003 May a &T be stored in a struct field?
D-0004 own field with no Drop
D-0005 Function overloading
D-0006 Is ^Trait one pointer or two?
D-0007 Keep the !T sigil?
D-0008 Error propagation style
D-0009 Macro invocation syntax
D-0010 Allocator passing
D-0011 Concurrency
D-0012 Hot reload
D-0013 Is machine native syntax or a macro?
D-0014 Generics: monomorphize or emit C++ templates?
D-0015 May ? wrap a pointer or reference?
D-0016 Implicit &T → ^T widening, and what a raw pointer may do
D-0017 ^T → &T
D-0020 or unreachable in a release build
D-0021 How Iterate::next spells one signature for both item kinds
D-0022 Is a slice writable through an immutable binding?
D-0023 Where do Ord, Add, Iterate and Format live before the stdlib?
D-0024 Array literals, and reaching an enum variant without naming its type
D-0025 Can a &T be read as a T?
D-0026 Copying a T inside a compile-time branch
D-0027 One operator, two right-hand sides
D-0028 break with a value
D-0029 An associated type per implementation
D-0030 Error.location is a ^T
D-0031 How is a trait implemented, and where?
D-0032 Struct inheritance
D-0033 move on a copyable value
D-0034 mut fn
D-0035 Reading a &T as a T — the open half of 18.25
D-0036 Using a T? when both outcomes continue
D-0037 Read-only pointers, and what C’s const T* becomes
D-0038 How C’s unscoped enums and #defines come in
D-0039 How is a cstr made?
D-0040 A C type whose definition its header does not show
D-0041 What a C union becomes
D-0042 How a for binding holds its element
D-0043 How a case binding holds the payload
D-0044 Assigning to a &mut T
D-0045 A union variant that is an existing struct
D-0046 State that lives for the whole program
D-0047 The standard allocators
D-0048 Compile-time conditionals, and where a location comes from
D-0049 Evaluation order, and pointers as numbers
D-0050 Slices, text and bytes, and moving out of raw memory
D-0051 How for gets an iterator from a container
D-0052 A union variant that owns something
D-0053 T where a T? is wanted
D-0054 Traits an enum has without an impl
D-0055 The standard library’s math
D-0056 Variadic parameters
D-0057 Where a module’s imports are declared
D-0058 Whether a dependency’s names reach the modules that depend on this one
D-0059 What reflection describes, and how a field carries metadata
D-0060 An attribute the compiler does not know
D-0061 How an if let binding holds the value
D-0062 Shared ownership, and handles that may be empty
D-0063 Integer overflow
D-0064 Rc<Derived> where an Rc<Base> is wanted
D-0065 How std reaches the operating system
D-0066 Generic methods
D-0067 Random numbers
D-0068 Files and paths
D-0069 Characters in UTF-8 text
D-0070 Sorting
D-0071 Text operations
D-0072 Arguments passed by name
D-0073 Library formatting
D-0074 When macros expand
D-0075 How a macro is written
D-0076 Hygiene, for declarations
D-0077 Where macros live
D-0078 Methods on unions
D-0079 Diagnostics in an expansion
D-0080 Formatting as macros
D-0081 The collections pass
D-0082 Formatting a pointer
D-0083 SlotMap and Key in std
D-0084 The C heap through an import of stdlib.h, and no alloc or free builtins
D-0085 Struct layout is the C++ compiler’s, in declaration order
D-0086 Projections take their depth range as a required argument
D-0087 The orphan rule counts a trait’s type arguments
D-0088 The module carrying a recipe owns the header’s types
D-0089 Implicit argument conversions through ImplicitAs
D-0090 A recipe can build a library with its own CMake
D-0091 Ties: checked reference invalidation, and memory placed by the compiler
D-0092 How does a function say the text it returns points into nothing that dies?
D-0093 Views are borrowed: no bare str, slices or cstr, and no view outside a reference’s places
D-0094 Safe code has no undefined behaviour: closing the holes ties leave
D-0095 A String keeps short text in place, and a view inside an element dies with the array