about summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
* 4288Kartik Agaram2018-06-282-1/+20
| | | | Give subx too the recent support for running a single test.
* 4287Kartik Agaram2018-06-281-1/+1
| | | | Fix CI. Looks like 'std::' sometimes doesn't work.
* 4286Kartik Agaram2018-06-281-25/+33
| | | | Make prints uniform.
* 4285Kartik Agaram2018-06-281-1/+1
|
* 4284 - implement first syscall for subxKartik Agaram2018-06-282-0/+20
| | | | Hopefully I won't need much more than exit, read and write.
* 4283Kartik Agaram2018-06-281-1/+1
|
* 4282 - subx now loads teensy/test4Kartik Agaram2018-06-281-13/+53
| | | | | We're now parsing the ELF spec more closely and better handling multiple program header table entries.
* 4281Kartik Agaram2018-06-281-3/+3
|
* 4280 - fix test program to use subx instructionsKartik K. Agaram2018-06-272-4/+7
| | | | | I don't know how to tell nasm to generate an imm32. It's a minor stepping-stone anyway; just emit the machine code directly.
* 4279 - load_elf() now working on teensy/test5Kartik K. Agaram2018-06-271-2/+2
| | | | Turns out it was an open question I never got around to answering.
* 4278 - load_elf() isn't actually working yetKartik Agaram2018-06-2711-0/+76
| | | | Here's a few test binaries generated on 32-bit Linux.
* 4277 - make room for a 'compile' sub-commandKartik Agaram2018-06-272-5/+10
|
* 4276 - switching gears to subxKartik Agaram2018-06-271-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | New plan: spend some time learning to program in machine code atop subx, relying solely on a tiny subset of kernel-provided syscalls. Gradually introduce helpers. Helpers we're sure we don't need, so far: a) Nested expressions b) Garbage collection c) One-size-fits-all memory allocation primitive d) Function overloading and generics Helpers we're sure we need, so far: a) Dependency-injected versions of syscalls b) Tangling directives c) Statically checked types Workflow for a C translator from ascii to binary: a) run generated machine code atop subx (unit tests probably go here) b) emit machine code packaged as an ELF file c) check that the ELF binary runs natively d) check that the ELF binary can be unwrapped and run atop subx This is different from a conventional compiler because the 'HLL' is unconstrained. It is also different from Forth given the emphasis on types. We want a simple stack that also encourages code sharing between programmers. Conventional languages grow monotonically complex. Forth discourages code sharing; it is non-trivial to figure out the 'shape' of data a strange function expects on the stack.
* 4275Kartik Agaram2018-06-252-0/+2
| | | | Fix CI.
* 4274Kartik Agaram2018-06-251-1/+1
| | | | Fix CI.
* 4273Kartik Agaram2018-06-251-0/+0
|
* 4272 - type-check variables in non-local spacesKartik Agaram2018-06-256-42/+87
| | | | | | So far we only checked if a single recipe used a variable with multiple types in any single space. Now we also ensure that the types deduced for a variable in a space are identical across recipes.
* 4271 - bugfix unrelated to alloc-idsKartik Agaram2018-06-252-2/+18
|
* 4270 - tweak the experimental concurrent builderKartik Agaram2018-06-252-17/+25
|
* 4269 - start validating alloc-ids on lookupKartik Agaram2018-06-243-5/+58
| | | | | | | | | | Seems incredible that this is all it took. Needs more testing. I also need to rethink how we organize our layers about addresses. Alloc-id stuff is scattered everywhere. The space for alloc-ids is perhaps unavoidably scattered. Just assume the layout from the start. But it seems bad that the scenario testing the lookup-time validation is in the 'abandon' layer when the code is in the 'lookup' layer.
* 4268 - add a simple validation of the alloc-idKartik Agaram2018-06-241-0/+9
| | | | Tautological for now since all alloc-ids are zero.
* 4267Kartik Agaram2018-06-241-4/+0
| | | | Drop a stray hunk that is obsoleted by 'deaddress'.
* 4266 - space for alloc-id in heap allocationsKartik Agaram2018-06-2436-648/+926
| | | | This has taken me almost 6 weeks :(
* 4265Kartik Agaram2018-06-1711-136/+136
| | | | Standardize use of type ingredients some more.
* 4264Kartik Agaram2018-06-1714-0/+0
| | | | Undo the relayout of 4259.
* 4263Kartik Agaram2018-06-173-41/+23
| | | | | Implement literal constants before type abbreviations, reducing some unnecessary tangling.
* 4262 - literal 'null'Kartik Agaram2018-06-1748-246/+268
|
* 4261 - start using literals for 'true' and 'false'Kartik Agaram2018-06-1748-368/+340
| | | | | | | | | They uncovered one bug: in edit/003-shortcuts.mu <scroll-down> was returning 0 for an address in one place where I thought it was returning 0 for a boolean. Now we've eliminated this bad interaction between tangling and punning literals.
* 4260 - make address coercions explicitKartik Agaram2018-06-167-21/+48
| | | | | 'deaddress' is a terrible name. Hopefully I'll come up with something better.
* 4259Kartik Agaram2018-06-1614-0/+0
|
* 4258 - undo 4257Kartik Agaram2018-06-1538-757/+381
|
* 4257 - abortive attempt at safe fat pointersKartik Agaram2018-06-1538-381/+757
| | | | | | | | | | | | | | | | I've been working on this slowly over several weeks, but it's too hard to support 0 as the null value for addresses. I constantly have to add exceptions for scalar value corresponding to an address type (now occupying 2 locations). The final straw is the test for 'reload': x:num <- reload text 'reload' returns an address. But there's no way to know that for arbitrary instructions. New plan: let's put this off for a bit and first create support for literals. Then use 'null' instead of '0' for addresses everywhere. Then it'll be easy to just change what 'null' means.
* 4256 - get rid of container metadata entirelyKartik Agaram2018-06-096-438/+84
| | | | | We have some ugly duplication in computing size_of on containers between layers 30/33 and 55.
* 4255Kartik Agaram2018-06-071-1/+1
|
* 4254Kartik Agaram2018-06-061-3/+5
|
* 4253 - support running just a single C testKartik Agaram2018-06-067-1/+24
| | | | We've had this ability for Mu scenarios forever.
* 4252Kartik Agaram2018-06-063-4/+4
|
* 4251 - speed up repeated builds until the same layerKartik Agaram2018-06-052-2/+14
| | | | Also allow running a single test, to speed things up still further.
* 4250Kartik Agaram2018-05-251-3/+5
| | | | Avoid modifying memory *before* the null check.
* 4249Kartik Agaram2018-05-251-1/+0
| | | | Why do we have this silent null check? All tests pass without it.
* 4248 -- simplify CIKartik Agaram2018-05-252-2/+4
|
* 4247Kartik Agaram2018-05-251-0/+19
|
* 4246Kartik Agaram2018-05-151-1/+1
|
* 4245 - fix example1.mu to actually runKartik Agaram2018-05-132-3/+9
| | | | | Thanks mahmudov on freenode IRC for the feedback! This was an embarrassing oversight right at the top of my Readme.
* 4244Kartik Agaram2018-05-128-1105/+1037
|
* 4243Kartik Agaram2018-05-1225-958/+966
|
* 4242 - get rid of refcounts entirelyKartik Agaram2018-05-1226-2820/+1231
| | | | | | | | | We're going to lean back into the experiment of commit 4179 back in Jan. If we delete memory it's up to us to ensure no pointers into it survive. Since deep-copy depends on our refcounting infrastructure, it's gone as well. So we're going to have to start watching out for pointers shared over channels.
* 4241Kartik Agaram2018-05-121-2/+2
| | | | | | | | | | | | | | Comparing types by value rather than name seems a bit cleaner. It isn't noticeably faster, though. 4178 - refcount-based memory management 3:27 3:18 3:15 3:15 3:15 4179 - no more abandon 2:13 2:13 2:12 2:11 2:09 2:10 4239 1:42 1:41 1:51 1:43 1:43 1:41 4241 (this commit) 1:53 1:45 1:43 1:43 1:42 1:42
* 4240Kartik Agaram2018-05-121-1/+1
|
* 4239Kartik Agaram2018-05-08139-1030/+1045
|