The polyglot programmer's universal standard library.
Table of Contents:
- Rationale
- Features
- Roadmap
- Languages
- Packaging: for Languages, for Distros
- Testing
- Documentation
- Tracking
- See Also
Rationale
- Reduces the cognitive load of frequently switching between different programming languages.
- Enables network effects to cross different languages.
- Facilitates code generation for multiple target languages.
- (Personally) Maintains know-how in developing and packaging for the specific target languages.
Features
- Provides predictable package naming across of language ecosystems.
- Respects local naming conventions.
Roadmap
0.0.0
- Namespace registrations on various packaging systems.
0.0.1
- Data representation for the full numeric tower.
- Packaging for all target languages.
0.1.0
(To be written.)
Languages
We are currently at 17 actual target languages, and 23+ potential target languages.
Primary target languages:
- C++ (for systems programming)
- Dart (for Flutter apps)
- Go (for CLI tooling)
- Lua (for embeddable scripting)
- OCaml (for compiler development)
Secondary target languages:
- C (as a code generation target)
- Elixir
- Java (for the JVM ecosystem: Clojure, Groovy, Scala, etc)
- JS (ES8+)
- Python (for general scripting)
Tertiary target languages:
- Common Lisp (for academia and grumpy neckbeards)
- D (for systems programming)
- Julia (for numerical computing)
- Kotlin (for Android apps)
- PHP (for web development)
- Ruby (for general scripting)
- Rust (for systems programming)
Miscellaneous potential target languages:
- Bash? (challenging but tremendously useful if possible)
- C#/.NET (for Unity games and the .NET ecosystem: F#, VB.NET, etc)
- Erlang (for the BEAM ecosystem: LFE, etc)
- Haskell (for academia)
- Scheme (R4RS, R7RS; for academia)
- Standard ML (for academia)
- Swift (for iOS/macOS apps)
Ignored programming languages:
- Objective-C (all the momentum is in Swift now, and can use C)
- Uncommon: Crystal, Haxe, Idris, Nim, Perl 6, Smalltalk, Vala
- Legacy: Ada, BASIC, COBOL, Fortran, Pascal, Perl, Prolog, Tcl
- Domain-specific: Mathematica, MATLAB, PL/SQL, R
- Esoteric: Factor, Forth
- Uninteresting: CoffeeScript, Elm, Hack, TypeScript
Packaging
Packaging for Languages
Language | Package |
---|---|
C/C++ | N/A |
C#/.NET | TODO: drylib on NuGet |
Common Lisp | TODO: ASDF package? |
D | drylib on DUB |
Dart | TODO: drylib on Pub |
Elixir | TODO: drylib on Hex.pm |
Erlang | TODO: drylib on Hex.pm |
Go | GitHub / GoDoc |
Haskell | TODO: Hackage |
Java | TODO: MVN repository on Bintray |
JS | TODO: drylib on NPM |
Julia | GitHub / PackageEvaluator.jl |
Kotlin | TODO: MVN repository on Bintray |
Lua | drylib on LuaRocks |
OCaml | TODO: drylib on OPAM |
PHP | drylib on Packagist |
Python | TODO: drylib on PyPI |
Ruby | drylib on RubyGems |
Rust | TODO: drylib on crates.io |
Scheme | TODO: drylib for Racket |
Standard ML | N/A |
Swift | GitHub |
Packaging for C/C++
No standard packaging/distribution system.
Packaging for C#/.NET
(To be written.)
Packaging for Common Lisp
Packaging for D
- https://code.dlang.org/getting_started
- https://code.dlang.org/publish
- https://code.dlang.org/package-format?lang=json
- https://code.dlang.org/package-format?lang=sdl
- https://code.dlang.org/register_package
- https://dlang.org/spec/module.html
- DUB requires version tags of the form "vX.Y.Z" instead of "X.Y.Z".
- DUB will check for new tags in the repository twice an hour.
Packaging for Dart
Packaging for Elixir
(To be written.)
Packaging for Erlang
(To be written.)
Packaging for Go
(To be written.)
Packaging for Java/Kotlin/JVM
TODO: Bintray for MVN?
Packaging for JS
Packaging for Julia
Packaging for Lua
Packaging for OCaml
Packaging for PHP
(To be written.)
Packaging for Python
(To be written.)
Packaging for Ruby
(To be written.)
Packaging for Rust
Packaging for Scheme
(To be written.)
Packaging for Standard ML
(To be written.)
Packaging for Distros
(To be written.)
TODO: Alpine, Arch, Debian/Ubuntu; Homebrew, MacPorts, pkgsrc.
Testing
Documentation
(To be written.)
Lists of Languages
- http://ar.to/notes/drylib
- https://github.com/dryproject/drylib/blob/master/README.rst#languages
- https://github.com/dryproject repository
- https://github.com/dryproject/drylib-dev/tree/master/targets submodule
- https://bitbucket.org/dryproject/ repository
- Slack #commits subscription
- Google Sheet spreadsheet