Cottage is a project for exploring programming language and tooling integration. It includes:
- a small prototype language ("Cottage")
- a language server via LSP
- a VSCode extension
From a layman's perspective, tooling often feels like an afterthought compared to core language research and development, especially tooling aimed at increasing programmer productivity during the act of programming. It almost feels like we, as an industry, have abandonded the idea of programming being anything different from the "edit, compile, run, assess" loop we use today.1,2
Cottage tests the hypothesis that a shorter feedback loop results in a better programming environment.3 The idea is based on the perceived similarities between programming and other professions like carpentry and painting, which have an immediate cause/effect workflow. When a painter makes a stroke or a carpenter makes a cut, they immediately see the effects of their action and react based on it. It's not apparent why building a digital system should be any different.
- Hinge the development workflow on an immediate feedback loop. Code entered into the editor is evaluated and results are displayed immediately.
- Provide a realtime, interactive, trace-like view of the program in a separate window from the editor.
- Embrace existing tooling, including editors (like VSCode, [Neo]Vim, Emacs, Atom), version control (like git) and protocols (like LSP).
- Learn something.
- Focus on language innovation instead of integration and tooling.
- Develop tools that don't integrate with established conventions (e.g., non-version controllable files).
It seems much more straightforward to build a small toy language which can be extended to meet the needs of the project, rather than try to build on top of a foundation which isn't amenable to the goal. The idea is to focus on the tooling integration and see if the ideas outlined above have merit. If they're fruitful, I plan to reimplement the ideas, using Cottage, into a more robust package.
No, this is a "full-code" solution. It's not a structured editor (remember, a goal is to embrace existing tooling), it's not visual programming, and it's not "boxes and arrows." Those things have their own place, and I don't presume to knock any of them. The goal of Cottage is to explore an immediate feedback loop in the context of general-purpose programming using as much existing tooling as possible.
No, not directly. I'm a programmer/developer/software engineer, and I want better tools to work with. While exploring the idea, I've come across enough projects, both old and new, that attempt to make similar strides, leading me to conclude that there's at least somewhat of a likeminded pulse, although faint, across the industry.
That's not to say the ideas wouldn't be relevant to education or helping others learn programming. They certainly would, but the target audience is professionals who solve problems with code.