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).