diff options
author | JJ | 2024-05-10 01:00:01 +0000 |
---|---|---|
committer | JJ | 2024-05-10 02:41:52 +0000 |
commit | 073c902a31936c2b53d89245662fb272c9670169 (patch) | |
tree | a8789ed4561dc4c3dde84489a600272cbd5f806b /std/prelude/numbers.pk | |
parent | 51c8b349a77a8d8b1b34ce8e03518dad6e3cba00 (diff) |
std: sweeping changes.
- replace interfaces with classes
- replace : with then and do
- solidify memory management as rust-style ownership
- replace unsafe blocks with safe/unsafe attributes
- add magic and copy attributes
- switch Coerce impl from from to to
Diffstat (limited to 'std/prelude/numbers.pk')
-rw-r--r-- | std/prelude/numbers.pk | 53 |
1 files changed, 43 insertions, 10 deletions
diff --git a/std/prelude/numbers.pk b/std/prelude/numbers.pk index 7857d34..801591a 100644 --- a/std/prelude/numbers.pk +++ b/std/prelude/numbers.pk @@ -3,53 +3,73 @@ # reference: https://en.wikipedia.org/wiki/IEEE_754 ## The default integer type. Size depends on architecture. +@[copy, magic] pub type int ## A signed 8-bit integer. +@[copy, magic] pub type i8 ## A signed 16-bit integer. +@[copy, magic] pub type i16 ## A signed 32-bit integer. +@[copy, magic] pub type i32 ## A signed 64-bit integer. +@[copy, magic] pub type i64 ## A signed 128-bit integer. +@[copy, magic] pub type i128 ## The default unsigned integer type. Size depends on architecture. +@[copy, magic] pub type uint ## An unsigned 8-bit integer. +@[copy, magic] pub type u8 ## An unsigned 16-bit integer. +@[copy, magic] pub type u16 ## An unsigned 32-bit integer. +@[copy, magic] pub type u32 ## An unsigned 64-bit integer. +@[copy, magic] pub type u64 ## An unsigned 128-bit integer. +@[copy, magic] pub type u128 ## A floating-point type. Takes up 64 bits by default. pub type float = f64 ## A 32-bit floating point type. Single precision. +@[copy, magic] pub type f32 ## A 64-bit floating point type. Double precision. +@[copy, magic] pub type f64 ## A 128-bit floating point type. Quadruple precision. +@[copy, magic] pub type f128 ## A decimal type, according to IEEE 754. Takes up 64 bits by default. pub type decimal = dec64 ## A 64-bit decimal type. +@[copy, magic] pub type dec64 ## A 128-bit decimal type. +@[copy, magic] pub type dec128 -## 8-bit bytes. +## A primitive byte type. 8 bits wide. pub type byte = u8 -## 4-byte chars. These represent distinct Unicode characters. -pub type char = distinct u32 -## An alias to `char`, to match with `str`. -pub type chr = char +## A primitive char type. 4 bytes wide. +## These represent distinct Unicode characters, and are useful with `str`. +pub type chr = u32 + +## Get the underlying length of a char, in bytes. 1-4. +pub func len(self: chr): uint = + ... ## The IEEE floating point value of *Not a Number*. pub const NaN: f64 = 0x7FF7FFFFFFFFFFFF @@ -60,18 +80,31 @@ pub const NegInf: f64 = 0xFFF0000000000000 # todo: type conversions +# fixme: types are all wrong +@[magic] pub func +[T](a: T, b: T): T +@[magic] pub func -[T](a: T, b: T): T +@[magic] pub func *[T](a: T, b: T): T +@[magic] pub func /[T](a: T, b: T): float -pub func ^[T](a: T, b: T): T # todo: should be exp? +@[magic] +pub func exp[T](a: T, b: T = eulers_number): T +@[magic] +pub func log[T](a: T, b: T = eulers_number): T +@[magic] +pub func abs[T](a: T): T + +@[magic] pub func div[T](a: T, b: T): T -pub func mod[T](a: T, b: T): T # fixme +@[magic] +pub func mod[T](a: T, b: T): T +@[magic] pub func rem[T](a: T, b: T): T +@[magic] pub func shl[T](a: T): T +@[magic] pub func shr[T](a: T): T - -pub func abs[T](a: T): T -pub func neg[T](a: T): bool |