* add support for stack integers * update documentation * revise value type stack variables
3.5 KiB
Language Changes
V0.1
-
The GOAL language version has been set to 0.1
-
Calling a function with unknown argument/return types is now an error instead of a warning
-
Getting a method of an object or type with
methodreturns the correct type for methods using the_type_feature -
The
object-newmacro will now type check arguments -
The size argument to
(method object new)is now anintinstead ofint32 -
Using
set!incorrectly, like(set! 1 2)will now create an error instead of having no effect -
GOOS now has a
fmtform which wrapslibfmtfor doing string formatting. -
GOOS now has an
errorform for throwing an error with a string to describe it -
GOAL
ifnow throws errors on extra arguments instead of silently ignoring them -
The first 1 MB of GOAL memory now cannot be read/written/executed so dereferencing a GOAL null pointer will now segfault
-
The runtime now accepts command line boot arguments
-
The runtime now defaults to loading
KERNEL.CGOand using itskernel-dispatcherfunction. -
The runtime now accepts a
-nokernelparameter for running withoutKERNEL.CGO. -
The runtime will now refuse to load object files from another major GOAL version
-
Using
&+and&+!now produces a pointer with the same type as the original. -
There is a
&-which returns auintand works with basically any input types -
The
&operator works on fields and elements in arrays -
The
&->operator has been added -
The
newoperator can create arrays and inline arrays on heaps -
The value of
deftypeis nownone -
Creating a method with more than 8 arguments is an error instead of a crash.
-
The
defconstantform for defining a constant in GOAL but not GOOS has been added -
Both
defconstantanddefglobalconstantthrow an error if you define a constant with the same name as a symbol. -
The
uint64type now uses 8 bytes instead of 81 in a type (this was a typo) -
deftypeallows basics/structures with a field that is the same type as the basic/structure. -
Doing a
define-externwith a type oftypewill forward declare the type. -
deftypenow has a:no-runtime-typeflag to disable the creation of a runtime type. -
There is a
declare-typeform for forward declaring types to allow circular dependencies. -
Types that are
structurebut notbasiccan request that they be tightly packed when possible with:pack-me. -
Using
methodon a forward declared type is an error. The old behavior was to get a method oftype, which is confusing. -
Loading an
int64/uint64gives aint/uint, like the other register integers. -
Defining a type with
deftypewill auto-generate an inspect method. -
The
newoperator can now create static structures and basics and set fields to integers or symbols. -
The
neq?operator now works when used outside of a branch condition (previously it generated a syntax error) -
Methods which do not return a value no longer cause the compiler to abort
-
The
&+form now accepts more than two arguments. -
The
&+form now works oninline-arrayandstructure. -
In the case where the type system would use a result type of
lca(none, x), the result type is nownoneinstead of compiler abort. -
The "none value" is now
(none)instead ofnone -
Creating a field of 128-bit value type no longer causes a compiler crash
-
128-bit fields are inspected as
<cannot-print> -
Static fields can now contain floating point values
-
Fixed a bug where loading a float from an object and immediately using it math would cause a compiler crash
-
Arrays of value types can be created on the stack with
new.