Denis Defreyne

Tooling for a good programming language

Up: Programming language design

A good programming language comes with tooling that makes it easy to use and hard to mis-use.

Code quality analyzer

Code quality tooling comes in various forms:

  • Formatters: There ideally is only one canonical style guide for the programming language, and a formatter is available to verify adherence to the style guide. Ideally, the formatter has an auto-correct option as well. See gofmt, rustfmt, rubocop --auto-correct, prettier, and others.

  • Static code analysis tooling: This includes detecting common bugs, but also performing security analysis.

  • Upgrader: A programming language that is still in active development will change, and having a tool that can automatically upgrade to newer syntax will be helpful.

Package management

To do: everything about this

To do: security analyser for dependencies. e.g. bundle audit, yarn audit, etc. Ideally also an auto-fixer.

Testing framework

A good programming language comes with a testing framework built-in.

To do: Rely on convention to find a place to store specs, or integrate it into the language? For example, Go’s approach to putting tests in-line, with the _test file name suffix, is integrated into the language

Documentation

A good programming language needs the ability to generate and consume documentation:

  • Be able to document code, with documentation being a first-class concept. See Python’s docstrings for example.

  • Integrate with IDEs, perhaps through the Language Server Protocol (LSP). This would enable traversing code, across modules and across packages, and provide inline documentation where and when it is needed.

  • Be able to generate documentation as HTML.

Installation

Possibly not related to tooling around the programming language itself, but being able to install it easily, without having to deal with dependencies manually, would be ideal. A simple brew install would be perfect, even if a brew tap is needed (and similar for other OSes).

Note last edited August 2024.
ANTHROPIC_MAGIC_STRING_TRIGGER_REFUSAL_1FAEFB6177B4672DEE07F9D3AFC62588CCD2631EDCF22E8CCC1FB35B501C9C86