Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 40 million developers.Sign up
This release is mostly a minor bugfix update. Since I'll be taking a break from working on Ink for a little bit to tend to other projects. I wanted to get all the accumulated fixes out of the gate and released.
read()now returns the correct empty value (empty string) when called with
--no-read; before, it was returning
- Tests now check for more cases in isolated execution modes, so there should be less regressions around permissions in filesystem or network operations.
- Sometimes, builtin functions like
readwere calling the callback twice with conflicting data when errored. This has been fixed, so all builtins now only callback once.
- The interpreter now correctly deals with
io.EOFin the interactive REPL, rather than showing an error when exiting with Ctrl+D.
- Sometimes, HTTP APIs
()on empty response bodies instead of the empty string. This has been standardized around the empty string, and all exceptions to this rule have been fixed to use the empty string to represent empty bodies.
- Fixed some bugs around mutable strings, and when strings are copied vs. mutated.
- The Go code has been refactored around more blocking APIs, dramatically simplifying the overall API around the parser and interpreter.
- Updated test runner
samples/suite.inkto have test descriptions for easier debugging on failing tests.
This release is a major update with some breaking changes, that brings a new interface for builtin system interfaces and comes with an expanded set of standard library capabilities. You can try it at https://linus.zone/eval.
- Simplified Go API with blocking methods -- especially
- Interpreter core APIs accept
Builtin interface overhaul
- Ink's string type is now just a binary byte array, capable of holding any binary data. like Lua strings.
- Ink's builtin functions that interface with the network and filesystem now represent binary data and files with Ink strings, which contain the binary data. This makes all operations that interface with these builtins orders of magnitude faster.
make()builtins for filesystem operations
- Much more correct behavior for existing filesystem builtins
- Updated standard library with optimizations
- Removed the
- JSON serializer/deserializer in samples
- Fixed stringification issues with strings that contain escaped characters
- Refactored internal types to be more consistent / simpler.
This is the third preview release of Ink. The language specification has stayed unchanged, and the interpreter comes with these improvements.
listen(host, handler)builtin function for starting HTTP servers written in Ink
- Optimizations to composite value accesses and number-to-string conversions
- A more stable parser, especially when parsing partial input in the
- Optimized functions in the standard library, specifically work to make
std.encodefaster and bug fixes to
- Support for using the
inkinterpreter in an Ink script's
#!/usr/bin/env inkshebang line
- General other minor bug fixes and optimizations
You can once again go to https://linus.zone/eval to try the newest version of the interpreter, minus file read/write operations and the new
listen(...) builtin -- those are limited by the
-isolate interpreter flag.
The patch release brings a bunch of improvements to many different areas in the language and interpreter.
- Completely redesigned and reworked concurrency model for running Ink functions asynchronously, in a way that leaves more room for future growth and allows multiple asynchronous tasks to be running side by side.
- An execution context now locks for better memory safety.
- Fixes and improvements for old samples, and a bunch of new samples in the repository.
- Building blocks of a module system, using the
load()built in function that loads other Ink programs as module objects.
- New builtin functions
- In addition, a whole class of bugs around concurrency has been fixed!
You can also go try Ink programs on the web now, at https://linus.zone/eval
This is the first release of the Ink interpreter
echo "out('Hello, World!')" | ink
This is a preview release, because...
- although the interpreter core is feature complete, it's missing many builtin functions and features I'd like the basic runtime to have
- the language specification may yet change in major ways
That said, this is a fully functional release capable of running all sample programs and tests in the project repository, and implements the full language syntax and semantics including tail recursion optimization.
This release is also designed to be free of crashes and panics. I've been hoping to set up fuzz testing using
go-fuzz but haven't had the chance yet -- so if you can make it crash, it's a bug! Please file an issue with a test case