summary refs log blame commit diff stats
path: root/src/db.rs
blob: 93d73a86668fa8496bc2134f202d8210ff9ea4a2 (plain) (tree)
vious layers. <p><b>Part IV</b>: beginnings of a standard library <p/><a href='html/060string.mu.html'>060string.mu</a>: strings in Mu are bounds-checked rather than null-terminated. They're also unicode-aware (code points only; no control characters, no combining characters, no normalization). <br/><a href='html/061channel.mu.html'>061channel.mu</a>: channels are Mu's only synchronization primitive, queues that can cause the routine reading or writing from them to stall without taking up CPU resources. <br/><a href='html/062array.mu.html'>062array.mu</a> <br/><a href='html/063list.mu.html'>063list.mu</a>: linked lists where each node points to the next, permitting fast insertion/deletion but slow for search. <br/><a href='html/064random.cc.html'>064random.cc</a> <br/><a href='html/065duplex_list.mu'>065duplex_list.mu</a>: doubly linked lists that can be traversed both forwards and back. <br/><a href='html/066stream.mu'>066stream.mu</a>: data structure to efficiently append strings. <p><b>Part V</b>: Nascent tools for browsing Mu codebases, and for teaching programming to non-programmers by getting them hooked on the value of tests. The eventual goal is <b>an environment that watches programmers as they manually test their code, and turns these interactive sessions into reproducible test scenarios.</b> <p/><a href='html/070display.cc.html'>070display.cc</a>: primitives for using the keyboard and screen. <br/><a href='html/071print.mu.html'>071print.mu</a>: helpers that can swap the real screen with fake ones for testing. <br/><a href='html/072scenario_screen.cc.html'>072scenario_screen.cc</a>: writing tests that check what is printed to screen. (<a href='html/073scenario_screen_test.mu.html'>examples</a>) <br/><a href='html/074console.mu.html'>074console.mu</a>: helpers that can swap the real keyboard and mouse with fake ones for testing. <br/><a href='html/075scenario_console.cc.html'>075scenario_console.cc</a>: writing tests for keyboard and mouse using the fakes. (<a href='html/076scenario_console_test.mu.html'>examples</a>) <br/><a href='html/080trace_browser.cc.html'>080trace_browser.cc</a>: a zoomable UI for inspecting traces generated by Mu programs. Allows both scanning a high-level view and drilling down into selective details. <br/><a href='html/081run_interactive.cc.html'>081run_interactive.cc</a>: hacky primitives for running Mu code in the programming environment below. <br/><a href='html/082persist.cc.html'>082persist.cc</a>: more hacky primitives for supporting saving/restoring sessions in the Mu programming environment. <p>Finally, the programming environment, the first major application in its own directory. Stop loading after each of these layers to get a working version with just fewer features. The <a href='https://github.com/akkartik/mu/blob/master/edit/Readme.md'>readme for the app</a> contains instructions for running it.<br> <br/><a href='html/edit/001-editor.mu.html'>edit/001-editor.mu</a>: data structures for a simple text editor widget. Load just this layer to see just the rendering and line-wrapping at work. <br/><a href='html/edit/002-typing.mu.html'>edit/002-typing.mu</a>: support for moving the cursor anywhere with the mouse and typing text in there. <br/><a href='html/edit/003-shortcuts.mu.html'>edit/003-shortcuts.mu</a>: support for various keyboard shortcuts for manipulating text you've typed in. <br/><a href='html/edit/004-programming-environment.mu.html'>edit/004-programming-environment.mu</a>: combining two text editor widgets, one on the left, one on the right. <br/><a href='html/edit/005-sandbox.mu.html'>edit/005-sandbox.mu</a>: support for running mu code in the right-hand widget using code from the left, and displaying results in a <em>sandbox</em> below on the right. You can have multiple sandboxes, and hit F4 to rerun them all at anytime with the latest version of the code on the left side. <br/><a href='html/edit/006-sandbox-edit.mu.html'>edit/006-sandbox-edit.mu</a>: click on the title bar of each sandbox to pop it back into the sandbox editor and make changes to it. <br/><a href='html/edit/007-sandbox-delete.mu.html'>edit/007-sandbox-delete.mu</a>: click on the 'x' in the title bar of a sandbox to delete it. <br/><a href='html/edit/008-sandbox-test.mu.html'>edit/008-sandbox-test.mu</a>: click on the results of a sandbox to turn them green and save the output as golden/expected. Any future changes to the output will then be flagged in red. <br/><a href='html/edit/009-sandbox-trace.mu.html'>edit/009-sandbox-trace.mu</a>: click on code in a sandbox to open up a drawer containing its trace. The trace can be added to using the <span style='font-family:courier,fixed'>stash</span> command. <br/><a href='html/edit/010-warnings.mu.html'>edit/010-warnings.mu</a>: support for rendering warnings on both the left and in each sandbox. <br/><a href='html/edit/011-editor-undo.mu.html'>edit/011-editor-undo.mu</a>: support for undo in the editor widget. <hr> <p> The zen of mu: <ul> <li>traces, not interfaces <li>be rewrite-friendly, not backwards-compatible <li>be easy to port rather than portable <li>global structure matters more than local hygiene </ul> <p> Mu's vision of utopia: <ul> <li>Run your devices in 1/1000th the code. <li>1000x more forks for open source projects. <li>Make simple changes to any project in an afternoon, no matter how large it is. <li>Projects don't slow down with age, they continue to evolve just as fast as when they were first started. <li>All software rewards curiosity, allowing anyone to query its design decisions, gradually learn how to tweak it, try out increasingly radical redesign ideas in a sandbox. People learn programming as an imperceptible side effect of tinkering with the projects they care about. <li><a href='https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf'>Habitable</a> digital environments. <li>A <em>literate</em> digital society with widespread skills for comprehending large-scale software structure and comparing-and-contrasting similar solutions. (I don't think anybody is literate by this definition today. All we can do easily is read our own programs that we wrote recently.) </ul> <p style='margin-bottom: 2em'/>