Acute Programming Language
The Acute programming language is an implementation of the Io Programming Language. It is built around a few underlying core principals:
- Provide a nice implementation written in itself so users of the language can easily make changes and contribute
- Experiment with any and all things we can to make Io run faster without sacrificing the flexibility of the language
Complete bootstrapping is critical to providing an implementation which, at all levels, is approachable by all users of this language. Let's face it, any language worth its weight in NAND gates is self hosting.
There are many things that may improve speed in Io. Notably, getting rid of a separate argument list and locals, unifying them. Additionally, we may be able to benefit from object versioning in terms of cheap allocations and other benefits related. Perhaps we can even make the system more lazy, or more implement a better concurrency model (where better means something that takes advantage of multiple processors, but is still friendly to use). The point is, there's lots of neat ideas out there, let's try some!
One other area I'd like to focus some serious time on is designing a standard library which is consistent. But this is a lesser priority at this stage of development.
Acute will be (but presently is not) self hosting. A small bootstrap is being built which will provide a basic object model, some basic types and of course, emit LLVM IR so we can produce a binary. We do this, so we can build our full vm, which will, in turn, compile itself and emit LLVM IR to replace the bootstrap. So long as this version is able to compile itself, and we can generate the LLVM IR, then we have all we need to produce an executable. Of course, the final vm will have to be able to compile itself first.
More information about the bootstrap can be found in the bootstrap directory, including source code.
Copyright (c) 2011, Jeremy Tregunna, All Rights Reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
I'd love to see many people inteterested in helping build this programming language up, and contribute to it ongoing. From documentation to code and even whole subsystems, whatever you can and want to offer, by all means, please let us know.
There are a few things we'd like you to respect though:
- Develop your feature in a separate branch that I can pull into my repo. Don't clobber the
masterbranch. It's the stable branch;
- We want to keep a uniform license. As such, by contributing code to us, you are granting us license to distribute your changes under the terms of the MIT license, as found above; and
- If your code isn't completely done yet, it's ok to open a pull request. Just be sure to clearly note that it is incomplete and shouldn't be merged into the mainline. I test these things out beforehand, but still; be respectful of others who may want your feature now.
- Please include tests. Included is a fork of Jonathan Wright's iospec2 It's not the most complete BDD tool out there, but I'll make it better as needed, please do the same.