This page records random ideas that interest me.
Learn about Earley parsing.
Develop a prototype of the code collaboration platform that I discussed in A new home for Timeline.
Host this website on my own server. Re-build website whenever a commit is made. Also keep RLiterate book up to date.
Implement minimal OOP-language in the same fashion as Lua.
Different coordinate systems are suited to different problems. Choosing the right coordinate system makes the problem easier to solve. The same should be true for programming problems. Each problem probably has an ideal programming language in which it can be solved. The task for a programmer should be to find that language, implement it, and solve the problem in that language. Try to find and document examples of this hypothesis.
The ideal language is found if no accidental complexity is present when the problem is solved in that language. That will also make the problem be expressed in few lines of code. So a crude metric of good software is its size. Or rather its size for the functionality it gives.
The goal of a free software community should be to maximize the number of contributors. It is first about community, second about the product.
Explore late bound systems. What does late binding mean?
Implement the object model in Open Reusable Object Models to understand it better.
Read the book Mindstorms: Children, Computers, And Powerful Ideas.
The STEPS project:
STEPS Toward The Reinvention of Programming (First Year Progress Report, December 2007.)
Steps Toward Expressive Programming Systems (Annual report to the NSF)
Nice summary blog post: Towards Moore’s Law Software: Part 3 of 3.
Read the blog post Computer Revolution.
Convert rlselect to an RLiterate document and publish it on this blog.
Convert my dotfiles to an RLiterate document and publish it on this blog.
Write more articles in the RLMeta series:
Associativity and precedence. A good resource: http://beastie.cs.ua.edu/proglan/readings/precedence.pdf.
Connecting “Learn how to implement languages” and RLMeta: 6 years later I did what I suggested.
Automatic syntax highlighting for RLMeta grammars.
Bootstrapping with Ohm.
Demonstrate how a feature is added to RLMeta and the need for compiling itself in steps. Link to than post from within the RLMeta post.
Implement a template language that can be used to replace compile scripts. Draft:
import sys #: python -c 'import sys; sys.stdout.write("SUPPORT = "+repr(sys.stdin.read()))' < support.py #: cat support.py #: python "$rlmeta_compiler" < parser.rlmeta #: python "$rlmeta_compiler" < codegenerator.rlmeta join = "".join def compile_grammar(grammar): parser = Parser() code_generator = CodeGenerator() return code_generator.run("ast", parser.run("grammar", grammar)) if __name__ == "__main__": if "--support" in sys.argv: sys.stdout.write(SUPPORT) else: try: sys.stdout.write(compile_grammar(sys.stdin.read())) except _MatchError as e: sys.stderr.write(e.describe()) sys.exit(1)
Direct manipulation. WYSIWYG:
In programming, you don’t want to go through a edit in an editor, submit to a compiler, which submits to a loader, which requires your system to intiialize, and so forth. You just want to be able to deal directly and safely with what you are trying to achieve.
PDF by Lary Tesler about modes: A Personal History of Modeless Text Editing and Cut/Copy-Paste.
How to design new languages?
Implement the solution to a problem manually in “assembly language”, then figure out a higher level syntax that can translate down to it.
All in one’ness: https://www.youtube.com/watch?v=Uv1UfLPK7_Q
Document and program is in the same file.
If someone sends you a document, you can just “run” it. No need to know what program it was written in.
What programs work like this?
“Supercomputers” are everywhere nowadays.
There is no technical reason why I can’t “run” and all in one’ness document on my smartphone.
But everything is (vendor)locked in.
What is the smallest virtual machine that must be ported to different devices to allow all in one’ness documents everywhere?
Is linear text a bad way to organize information?
Is a wiki a better tool for organizing information?
An article (linear text) presents one story. It conveys certain information. But that information can probably be conveyed in a different linear way. Is there a non-linear representation that is useful? Or must information always be presented to other humans in forms of a linear story?
Site proudly generated by Hakyll.