Commit Graph

219 Commits

Author SHA1 Message Date
gingerBill
0f399a7294 Add union #maybe 2020-02-01 11:10:28 +00:00
gingerBill
159150c6d9 Allow not_in as keyword over notin, but still allow notin to work 2020-01-16 10:00:14 +00:00
gingerBill
3bd00fd6b7 Add thread.Pool with example in demo.odin; Update linalg to support handness changes for projection matrices 2020-01-02 15:07:12 +00:00
gingerBill
bdfef08214 Fix typos in demo.odin 2019-12-31 12:54:19 +00:00
gingerBill
5ec8dd166a Add #partial tag for enumerated arrays to prevent common errors using non-contiguous enumerations 2019-12-27 16:55:32 +00:00
gingerBill
f99f351e01 Add constant literal expressions 2019-12-27 15:49:52 +00:00
gingerBill
d1c9fd4e01 Implement #complete switch by default, replace with #partial switch #511 2019-12-22 12:03:48 +00:00
gingerBill
89ccb5b99f Add assert into scratch_allocator_proc to prevent initialization cycles #504 2019-12-15 11:20:06 +00:00
gingerBill
7fbe0a6f23 Fix nil comparisons for soa slices and dynamic arrays 2019-12-01 11:56:08 +00:00
Tetralux
99121d6ff2 Implement core:thread and core:sync on Unix using pthreads
Also do some cleanup and refactoring of the thread, sync and time APIs.

- remove 'semaphore_release' because 'post' and 'wait' is easier to understand

- change 'semaphore_wait' to '*_wait_for' to match Condition

- pthreads can be given a stack, but doing so requires the user to set up the guard
  pages manually. BE WARNED. The alignment requirements of the stack are also
  platform-dependant; it may need to be page size aligned on some systems.
  Unclear which systems, however. See 'os.get_page_size', and 'mem.make_aligned'.
  HOWEVER: I was unable to get custom stacks with guard pages working reliably,
  so while you can do it, the API does not support it.

- add 'os.get_page_size', 'mem.make_aligned', and 'mem.new_aligned'.

- removed thread return values because windows and linux are not consistent; windows returns 'i32'
  and pthreads return 'void*'; besides which, if you really wanted to communicate how the
  thread exited, you probably wouldn't do it with the thread's exit code.

- fixed 'thread.is_done' on Windows; it didn't report true immediately after calling 'thread.join'.

- moved time related stuff out of 'core:os' to 'core:time'.

- add 'mem.align_backward'

- fixed default allocator alignment
  The heap on Windows, and calloc on Linux, both have no facility to request alignment.
  It's a bit of hack, but the heap_allocator now overallocates; `size + alignment` bytes,
  and aligns things to at least 2.
  It does both of these things to ensure that there is at least two bytes before the payload,
  which it uses to store how much padding it needed to insert in order to fulfil the alignment
  requested.

- make conditions more sane by matching the Windows behaviour.
  The fact that they were signalled now lingers until a thread tries to wait,
  causing them to just pass by uninterrupted, without sleeping or locking the
  underlying mutex, as it would otherwise need to do.
  This means that a thread no longer has to be waiting in order to be signalled, which
  avoids timing bugs that causes deadlocks that are hard to debug and fix.
  See the comment on the `sync.Condition.flag` field.

- add thread priority: `thread.create(worker_proc, .High)`
2019-12-01 00:46:23 +00:00
gingerBill
9b58781122 #soa[dynamic]Type (Experimental) 2019-11-21 19:36:07 +00:00
gingerBill
b74f8f2047 Fix SOA entity usage error on -vet 2019-11-21 18:21:27 +00:00
gingerBill
88c90cf99a Update demo.odin 2019-11-21 14:41:33 +00:00
gingerBill
400f12f31f Update demo.odin 2019-11-21 14:23:59 +00:00
gingerBill
2c5a84bb78 #soa[]Type (Experimental) 2019-11-21 00:07:21 +00:00
gingerBill
d22e5b697d Add new #soa and #vector syntax 2019-11-17 10:30:37 -08:00
gingerBill
301ee664e9 Add Handmade Seattle 2019 Demos 2019-11-16 06:59:48 -08:00
gingerBill
8a46b493fd Fix Slice passed incorrectly in LLVM IR to procedure called via procedure pointer #465 2019-11-05 19:40:08 +00:00
gingerBill
c1176c2bcb Fix typeid comparison bug; Add extra messages for pointer address errors 2019-11-03 19:49:21 +00:00
gingerBill
57853fe1b1 Add SOA Struct Layout (experimental) to demo.odin 2019-11-03 12:52:13 +00:00
gingerBill
013b3b9fb3 Fix for -vet 2019-11-03 11:42:00 +00:00
gingerBill
e3d3a81617 multivalued procedure calls allows in for in to allow a pseudo-iterator; @thread_local for variables in procedure 2019-11-02 16:36:46 +00:00
gingerBill
c7cb754514 Fix typos 2019-10-26 14:37:27 +01:00
gingerBill
a5e42a0465 Add ranged_fields_for_array_compound_literals 2019-10-26 14:36:28 +01:00
gingerBill
d808f9eccf Add range_cache.cpp 2019-10-26 14:29:04 +01:00
gingerBill
c60fb10a6a Move old demos and old stuff to /misc 2019-10-26 10:40:17 +01:00
gingerBill
2a6d9e8927 #panic; Minor change to demo.odin; Fix #assert bug at file scope 2019-10-13 12:38:23 +01:00
gingerBill
1b8c3ca22a Fix typos and make demo work with -vet 2019-10-08 20:28:45 +01:00
gingerBill
71b32ae117 Update demo.odin 2019-10-06 19:20:00 +01:00
gingerBill
d62503d031 Change precedence for in and notin to match + - | ~ 2019-10-06 18:14:02 +01:00
gingerBill
4e8a801b35 strings.split; strings.index; eprint* over print*_err; 2019-10-06 18:13:15 +01:00
gingerBill
e1b711b3b3 Update demo.odin with more information 2019-10-06 15:07:16 +01:00
gingerBill
5fc42bf9c9 Update demo.odin 2019-09-08 19:15:12 +01:00
gingerBill
b9d3129fb3 where clauses for procedure literals 2019-08-31 20:13:28 +01:00
gingerBill
2dc39a5cbd Improve demo.odin 2019-08-29 15:25:46 +01:00
gingerBill
01c10aa944 inline for loops (only for 'in' based for loops) 2019-08-26 13:54:35 +01:00
gingerBill
7bc146e6fd Built-in Quaternions (Not just an April Fool's Joke any more) 2019-08-26 11:33:05 +01:00
gingerBill
4c065a7e99 Keep -vet happy 2019-08-13 22:27:52 +01:00
gingerBill
04036aba9c package reflect; fix substring type bug; fix scoping rules for using on procedure parameter 2019-08-11 23:58:49 +01:00
gingerBill
2d26278a65 Make structs with the same fields but with different tags distinct types 2019-08-09 22:52:19 +01:00
gingerBill
9c63212824 Struct field tags 2019-08-09 21:59:58 +01:00
gingerBill
d26033eb23 Revert demo.odin 2019-07-15 22:41:25 +01:00
gingerBill
c7a70be824 Fix __get_map_key 2019-07-15 22:38:51 +01:00
gingerBill
c40acd008e Add i128/u128 support for bit sets 2019-05-28 20:53:56 +01:00
gingerBill
3d2279fba0 Support 128-bit integers i128 u128 2019-05-28 20:27:45 +01:00
gingerBill
222941727f Add ..< operator for ranges; Add extra checking for bit set assignments 2019-05-28 12:45:20 +01:00
gingerBill
a019059975 Fix -vet for demo.odin 2019-03-30 10:52:53 +00:00
gingerBill
1fd677b42e Remove *_remove from demo and use built-in versions 2019-03-25 21:29:21 +00:00
gingerBill
b08d944c33 Fix typo in demo.odin 2019-03-11 09:32:15 +00:00
gingerBill
007a7989b8 Add implicit selector expression examples to demo.odin 2019-03-06 20:06:37 +00:00