Commit Graph

48 Commits

Author SHA1 Message Date
Kartik Agaram 01ce563dfe 4262 - literal 'null' 2018-06-17 15:57:37 -07:00
Kartik Agaram dd66068298 4261 - start using literals for 'true' and 'false'
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.
2018-06-17 00:29:22 -07:00
Kartik K. Agaram 4a48bedcd1 4134 - 'input' = 'ingredient' 2017-12-03 23:25:40 -08:00
Kartik K. Agaram 5f94a25e85 3947
Fix CI.
2017-06-24 07:45:35 -07:00
Kartik K. Agaram 5cac8865dd 3945
Fix a discrepancy between fake screen and real terminal behavior. (See
recent commits.)
2017-06-23 23:17:52 -07:00
Kartik K. Agaram 54edd3d25e 3943
Undo commit 3938 and almost everything after. Let's do this right.
2017-06-23 23:03:56 -07:00
Kartik K. Agaram b2eff9f97e 3942
No, my conclusion in the previous commit was wrong. When you print a
character on the right margin, the cursor coordinates always wrap around
to the left margin on the next row. It's just that if you're at the
bottom of the screen, scrolling gives the impression that the row didn't
change.
2017-06-23 19:47:09 -07:00
Kartik K. Agaram b1e558cfe4 3941
Even though the bug of commit 3938 is now fixed, I'm still trying to
track down why the failure looked different on the fake screen than on
the real one. Snapshot as I try to track down the difference.

One key lesson is that the approach of commit 3860 -- updating the
cursor before rather than after printing each character -- turns out to
be untenable. A sequence of `print` followed by `cursor-position` needs
to behave the same as the real screen.

But it's still not clear how the real screen. When you get to the end of
a line the cursor position wraps after print to the left margin (column
0) on the next row. When you get to the bottom right the cursor position
wraps to the *bottom left* margin. How the heck does it know to scroll
on the next print, then? Is there some hidden state in the terminal?
2017-06-23 15:39:14 -07:00
Kartik K. Agaram 3c6cd5e8dc 3882
Hook up fake screen to scroll properly on cursor-down.

Thanks Lakshman Swaminathan for finding this hole in commit 3860 with your
incessant fidgeting :)
2017-05-27 20:54:31 -07:00
Kartik K. Agaram ee1a18f050 3860 - stop buffering the screen in termbox
To achieve this we have to switch to a model of the screen in termbox that
is closer to the underlying terminal.

Before:
  a screen is a grid of characters
  writing out of bounds does nothing

After:
  a screen is a scrolling raster of characters
  writing out of bounds wraps to next line and scrolls if necessary

To move to the new model, it was essential that I migrate my fake screen
at the same time to mimic it. This is why the first attempt (commit 3824)
failed (commit 3858). This is also why this commit can't be split into
smaller pieces.

The fake screen now 'scrolls' by rotating screen lines from top to bottom.
There's still no notion of a scrollback buffer.

The newer model is richer; it permits repl-like apps that upstream termbox
can't do easily. It also permits us to simply use `printf` or `cout` to
write to the screen, and everything mostly works as you would expect. Exceptions:

  a) '\n' won't do what you expect. You need to explicitly print both '\n'
  and '\r'.

  b) backspace won't do what you expect. It only moves the cursor back,
  without erasing the previous character. It does not wrap.

  Both behaviors exactly mimic my existing terminal's emulation of vt100.

The catch: it's easy to accidentally scroll in apps. Out-of-bounds prints
didn't matter before, but they're bugs now. To help track them down, use
the `save-top-idx`, `assert-no-scroll` pair of helpers.

  An important trick is to wrap the cursor before rather after printing
  a character. Otherwise we end up scrolling every time we print to the
  bottom-right character. This means that the cursor position can be invalid
  at the start of a print, and we need to handle that.

In the process we also lose the ability to hide and show the screen. We
have to show the prints happening. Seems apt for a "white-box" platform
like Mu.
2017-05-18 09:57:57 -07:00
Kartik K. Agaram 27ec57de4c 3858
Lose the ability to hide the cursor. If we want to stop buffering the screen
in termbox, it needs to go.

What's more, it has no tests.
2017-05-13 20:48:16 -07:00
Kartik K. Agaram 6f4ce86543 3857 2017-05-13 18:39:41 -07:00
Kartik K. Agaram 0c0d1ea5cd 3854
Revert commits 3824, 3850 and 3852. We'll redo them more carefully.
2017-05-13 12:42:17 -07:00
Kartik K. Agaram ff96aace6d 3850
Bugfix: writes out of bounds used to be skipped, but started clobbering
the screen on commit 3824.
2017-05-10 16:37:35 -07:00
Kartik K. Agaram 769a68cf1d 3842
Always start with an untouched screen that can scroll on printing "\r\n".
We can still clear the screen as needed.

Also drop support for hiding the cursor.
2017-05-04 23:20:37 -07:00
Kartik K. Agaram ace7ffb714 3824 - experiment: stop buffering in termbox
Now it's much more apparent why things are slow. You can see each repaint
happening. Already I fixed one performance bug -- in clear-rest-of-screen.

Since this subverts Mu's fake screen there may be bugs.

Another salubrious side effect: I've finally internalized that switching
to raw mode doesn't have to clear the screen. That was just an artifact
of how termbox abstracted operations. Now I can conceive of using termbox
to build a repl as well.

(I was inspired to poke into termbox internals by
http://viewsourcecode.org/snaptoken/kilo and
https://github.com/antirez/linenoise)
2017-04-16 15:05:31 -07:00
Kartik K. Agaram 79b72b04cd 3736 - support printing booleans 2017-01-22 12:10:38 -08:00
Kartik K. Agaram ab6e672d4e 3735 - get rid of 'print-integer'
We do support printing non-integer numbers for some time, albeit using
the underlying host platform.
2017-01-22 12:05:24 -08:00
Kartik K. Agaram f116818c7c 3656
Periodic cleanup to replace 'reply' with 'return' everywhere in the
repo.

I use 'reply' for students to help reinforce the metaphor of function
calls as being like messages through a pipe. But that causes 'reply' to
get into my muscle memory when writing Mu code for myself, and I worry
that that makes Mu seem unnecessarily alien to anybody reading on
Github.

Perhaps I should just give it up? I'll try using 'return' with my next
student.
2016-11-10 10:24:14 -08:00
Kartik K. Agaram f9294899d0 3622 - handle fractional coordinates in print 2016-11-05 20:35:17 -07:00
Kartik K. Agaram 0606f4ace4 3574
Shorter branches above longer ones.
2016-10-23 21:15:43 -07:00
Kartik K. Agaram 6f65d5918f 3429 - standardize Mu scenarios
A long-standing problem has been that I couldn't spread code across
'run' blocks because they were separate scopes, so I've ended up making
them effectively comments. Running code inside a 'run' block is
identical in every way to simply running the code directly. The 'run'
block is merely a visual aid to separate setup from the component under
test.

In the process I've also standardized all Mu scenarios to always run in
a local scope, and only use (raw) numeric addresses for values they want
to check later.
2016-09-28 19:48:56 -07:00
Kartik K. Agaram a0331a9b0e 3390 2016-09-17 13:00:39 -07:00
Kartik K. Agaram 760f683f27 3389 2016-09-17 12:55:10 -07:00
Kartik K. Agaram 80df524b56 3388 2016-09-17 10:32:57 -07:00
Kartik K. Agaram 7a84094adb 3385 2016-09-17 10:28:25 -07:00
Kartik K. Agaram 08f4628e8b 3379
Can't use type abbreviations inside 'memory-should-contain'.
2016-09-17 00:31:55 -07:00
Kartik K. Agaram 8752e6b09e 3373
Commit 3370 fixed the memory leak but it still had print:character
printing characters rather than numbers like it used to before 3365. Go
back to the old, unambiguous trace.
2016-09-16 23:35:32 -07:00
Kartik K. Agaram 59e47aca14 3341
Process type abbreviations in function headers.

Still a couple of places where doing this causes strange errors. We'll
track those down next.
2016-09-12 10:00:43 -07:00
Kartik K. Agaram ea19d0dc2c 3337 - first use of type abbreviations: text
In the process I've uncover a couple of situations we don't support type
abbreviations yet. They're next.
2016-09-12 00:38:36 -07:00
Kartik K. Agaram ad8161f345 3015 - more symbolic names in tests
There's still a problem: if I ever want to use any of the special
scenario variables like 'screen', 'console', etc., then I can't use
'local-scope' in my scenario.
2016-05-26 16:46:38 -07:00
Kartik K. Agaram 607ddf3391 2983 - migrate buttons over to sandbox/ 2016-05-19 21:35:34 -07:00
Kartik K. Agaram b0bf5321de 2864 - replace all address:shared with just address
Now that we no longer have non-shared addresses, we can just always
track refcounts for all addresses.

Phew!
2016-04-24 11:54:30 -07:00
Kartik K. Agaram 991d76f328 2860 - rename 'index-address' to 'put-index' 2016-04-23 14:51:20 -07:00
Kartik K. Agaram 0d2686c751 2844 - purge get-address from all layers
Only apps left now, and the wait-for-location uses in the channel
primitives.
2016-04-16 15:50:56 -07:00
Kartik K. Agaram 00600d8332 2843 - purge get-address until layer 83 2016-04-16 11:57:20 -07:00
Kartik K. Agaram 1ead356219 2735 - define recipes using 'def'
I'm dropping all mention of 'recipe' terminology from the Readme. That
way I hope to avoid further bike-shedding discussions while I very
slowly decide on the right terminology with my students.

I could be smarter in my error messages and use 'recipe' when code uses
it and 'function' otherwise. But what about other words like ingredient?
It would all add complexity that I'm not yet sure is worthwhile. But I
do want separate experiences for veteran programmers reading about Mu on
github and for people learning programming using Mu.
2016-03-08 01:46:47 -08:00
Kartik K. Agaram 9923285547 2600 - teach 'print' about addresses
Unfortunate that our type system requires this to be explicit..
2016-01-23 19:52:11 -08:00
Kartik K. Agaram 6cb233fc43 2586 - show first sandbox with error in status 2016-01-22 08:59:38 -08:00
Kartik K. Agaram 3151fb2387 2585 - label sandboxes with a number
It also seems useful that the number maps to the name of the file the
sandbox is saved in. However this mapping is currently a happy accident
and not actually tested.

I'm starting to switch gears and help make the editor useable with
many many sandboxes. This is just the first step of several.
2016-01-22 08:52:28 -08:00
Kartik K. Agaram 455fbac64f 2576 - distinguish allocated addresses from others
This is the one major refinement on the C programming model I'm planning
to introduce in mu. Instead of Rust's menagerie of pointer types and
static checking, I want to introduce just one new type, and use it to
perform ref-counting at runtime.

So far all we're doing is updating new's interface. The actual
ref-counting implementation is next.

One implication: I might sometimes need duplicate implementations for a
recipe with allocated vs vanilla addresses of the same type. So far it
seems I can get away with just always passing in allocated addresses;
the situations when you want to pass an unallocated address to a recipe
should be few and far between.
2016-01-19 23:18:03 -08:00
Kartik K. Agaram 802283e450 2559 - stop using 'next-ingredient' explicitly
I still need it in some situations because I have no way to set a
non-zero default for an optional ingredient. Open question..
2016-01-12 22:10:38 -08:00
Kartik K. Agaram bbe0801ab1 2548 - teach 'print' to print integers
Still can't print non-integer numbers, so this is a bit hacky.

The big consequence is that you can't print literal characters anymore
because of our rules about how we pick which variant to statically
dispatch to. You have to save to a character variable first.

Maybe I can add an annotation to literals..
2015-12-28 08:44:36 -08:00
Kartik K. Agaram 9161079515 2477 2015-11-27 11:34:27 -08:00
Kartik K. Agaram 136412d263 2468 - overload print-character as just 'print' 2015-11-21 10:19:34 -08:00
Kartik K. Agaram 3f7eed6c60 2467 - rename 'string' to 'text' everywhere
Not entirely happy with this. Maybe we'll find a better name. But at
least it's an improvement.

One part I *am* happy with is renaming string-replace to replace,
string-append to append, etc. Overdue, now that we have static dispatch.
2015-11-21 10:04:38 -08:00
Kartik K. Agaram 104854ca94 2460 - headers for remaining recipes 2015-11-18 22:03:43 -08:00
Kartik K. Agaram c603cd6cef 2430 - make room for more transforms 2015-11-13 10:08:57 -08:00