Group: Software/research/ProgrammingLanguages
(→Toolchain status: Properly add python interpreters) |
(→Toolchain status: Add information about shared libraries) |
||
Line 15: | Line 15: | ||
! Automake | ! Automake | ||
! GCC 12 support<ref>Compared with other compilers like LLVM and rustc, GCC supports many CPU architectures and it's quite well integrated with various other software (gdb, gprof, build systems, etc). It also has long term support in mind as it continues to support other programming language standards. It also has good documentation that explain how it handles C code for instance. In addition it's a GNU project, so it has users freedom in mind. In addition Guix has made GCC bootstrapable from a binary that is less than 1KB, and it doesn't require huge resources to build or bootstrap.</ref> | ! GCC 12 support<ref>Compared with other compilers like LLVM and rustc, GCC supports many CPU architectures and it's quite well integrated with various other software (gdb, gprof, build systems, etc). It also has long term support in mind as it continues to support other programming language standards. It also has good documentation that explain how it handles C code for instance. In addition it's a GNU project, so it has users freedom in mind. In addition Guix has made GCC bootstrapable from a binary that is less than 1KB, and it doesn't require huge resources to build or bootstrap.</ref> | ||
+ | ! Shared libraries<ref name="shared-libraries">Shared libraries systems enable way better performances on older computers as it uses way less RAM.</ref> | ||
! Microcontrollers<ref name="microcontrollers">Can we compile and/or run code for/on microcontrollers, if so which compilers/interpreters are used / necessary for that.</ref> | ! Microcontrollers<ref name="microcontrollers">Can we compile and/or run code for/on microcontrollers, if so which compilers/interpreters are used / necessary for that.</ref> | ||
! Strict specifications<ref name="strict-specifications">Having a standard or something similar to refer to enables people to write code that can still be used without requiring too much maintenance to adapt to newer compiler versions.</ref> | ! Strict specifications<ref name="strict-specifications">Having a standard or something similar to refer to enables people to write code that can still be used without requiring too much maintenance to adapt to newer compiler versions.</ref> | ||
Line 22: | Line 23: | ||
| | | | ||
| {{yes}} | | {{yes}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 29: | Line 31: | ||
| {{yes}} | | {{yes}} | ||
| {{yes}} | | {{yes}} | ||
+ | | {{yes|defaults to shared libraries}} | ||
| {{yes|GCC, SDCC}} | | {{yes|GCC, SDCC}} | ||
| {{Orange|Drafts are available gratis, probably not under free licenses.}}<ref>Ideally the specifications should be available under free licenses.</ref> | | {{Orange|Drafts are available gratis, probably not under free licenses.}}<ref>Ideally the specifications should be available under free licenses.</ref> | ||
Line 36: | Line 39: | ||
| {{yes}} | | {{yes}} | ||
| {{yes}} | | {{yes}} | ||
+ | | {{yes|defaults to shared libraries}} | ||
| {{yes|GCC, other?}} | | {{yes|GCC, other?}} | ||
| ? | | ? | ||
Line 43: | Line 47: | ||
| | | | ||
| {{yes}} | | {{yes}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 50: | Line 55: | ||
| | | | ||
| {{no}} | | {{no}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 57: | Line 63: | ||
| {{yes|Fortran 77, Fortran 9x}} | | {{yes|Fortran 77, Fortran 9x}} | ||
| {{yes}} | | {{yes}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 64: | Line 71: | ||
| {{no}} | | {{no}} | ||
| {{yes}} | | {{yes}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 71: | Line 79: | ||
| {{yes|with CGJ}} | | {{yes|with CGJ}} | ||
| {{no}} | | {{no}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 78: | Line 87: | ||
| {{yes}} | | {{yes}} | ||
| {{yes}} | | {{yes}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 85: | Line 95: | ||
| {{yes}} | | {{yes}} | ||
| {{yes}} | | {{yes}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 92: | Line 103: | ||
| {{no}} | | {{no}} | ||
| {{no|Work in progress}} | | {{no|Work in progress}} | ||
+ | | | ||
| | | | ||
| {{no}}<ref>See one of the two talks on rust in [https://gcc.gnu.org/wiki/cauldron2022 GNU cauldron 2022].</ref> | | {{no}}<ref>See one of the two talks on rust in [https://gcc.gnu.org/wiki/cauldron2022 GNU cauldron 2022].</ref> | ||
Line 99: | Line 111: | ||
| {{yes|partial}} | | {{yes|partial}} | ||
| {{no}} | | {{no}} | ||
+ | | | ||
| | | | ||
| ? | | ? | ||
Line 106: | Line 119: | ||
| {{yes|partial}} | | {{yes|partial}} | ||
| {{yes|valac uses GCC}} | | {{yes|valac uses GCC}} | ||
+ | | | ||
| {{no|depends on glib}} | | {{no|depends on glib}} | ||
| ? | | ? |
Revision as of 06:17, 23 December 2022
Contents
Introduction
The goal of this page is to understand the status of various programming languages and toolchains. It can help people deciding on a programming language to choose or to learn, or enable people to understand where distributions need contributions to support well a language.
It could also contain information on what language works where or if we can target specific operating systems with free software or not.
Toolchain status
Compilers features and languages
Language | Autoconf | Automake | GCC 12 support[1] | Shared libraries[2] | Microcontrollers[3] | Strict specifications[4] |
---|---|---|---|---|---|---|
Ada | Yes | ? | ||||
C | Yes | Yes | Yes | defaults to shared libraries | GCC, SDCC | Drafts are available gratis, probably not under free licenses.[5] |
C++ | Yes | Yes | Yes | defaults to shared libraries | GCC, other? | ? |
D | Yes | ? | ||||
Erlang | Yes | No | ? | |||
Fortran | Fortran 77, Fortran 90, Fortran 95 | Fortran 77, Fortran 9x | Yes | ? | ||
Go | basic support for gccgo | No | Yes | ? | ||
Java | with CGJ | No | ? | |||
Objective-C | Yes | Yes | Yes | ? | ||
Objective-C++ | Yes | Yes | Yes | ? | ||
Rust | No | No | Work in progress | No[6] | ||
Unified Parallel C. | partial | No | ? | |||
Vala | partial | valac uses GCC | depends on glib | ? |
Compilers bootstraping
Compiler | Languages | Dependencies |
---|---|---|
gcc-ada |
|
Depends on gcc-ada |
valac |
|
valac depends on itself but translated C files are provided by upstream |
Interpreters features and languages
Language | Interpreter | Dependencies | Microcontrollers[3] | Strict specifications[4] |
---|---|---|---|---|
Python | CPython | C, some C libraries | No | ? |
MicroPython | C, some C libraries | Yes |
Build system status
Build system | Cross compilation | Easy to support in distributions |
---|---|---|
Autotools | Yes | Yes |
setup.py | ? | Yes |
Didstributions status
Guix status
Guix is the most strict FSDG compliant distribution with regard to languages support: it requires the bootstrap process to be reproducible.
While there are still binary compilers being used in the bootstrap process for some languages, other languages are completely bootstrapped from source.
Language | Toolchain | GNU/Hurd i586 | GNU/Linux armv7h | GNU/Linux aarch64 | GNU/Linux i686 | GNU/Linux mips64el | GNU/Linux powerpc | GNU/Linux powerpc64le | GNU/Linux riscv64 | GNU/Linux x86_64 | Mingw i686 | Mingw x86_64 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Ada | No | |||||||||||
C | gcc-toolchain | Yes | Yes | Yes | Reduced Binary Seed of about 145MiB[7] | Yes | Yes | Yes | Yes | Reduced Binary Seed of about 145MiB[7] | Yes | Yes |
C# | No | |||||||||||
Haskell | ghc | No | No | No | Bootstrapped from ghc-4 binaries | No | No | No | No | Bootstrapped from ghc-4 binaries | No | No |
Java | openjdk | ? | ? | ? | bootstraped from source[8] | ? | ? | ? | ? | bootstraped from source[8] | ? | ? |
Rust | rustc | No[9] | No[9] | Bootstrapped from source with mrustc[9] | No[9] | No[9] | No[9] | No[9] | Bootstrapped from source with mrustc[9] | Bootstrapped from source with mrustc[9] | No[9] | No[9] |
Parabola status
Parabola has a policy which requires all the packages to be built from source. But it doesn't have a policy to reduce the size of the bootstrap binaries, so there can be circular dependencies.
Language | Toolchain | GNU/Linux armv7h | GNU/Linux i686 | GNU/Linux x86_64 |
---|---|---|---|---|
Ada | gcc-ada | No | Yes | Yes |
C | gcc-toolchain | Yes | Yes | Yes |
C# | mono | Yes | Yes | Yes |
Haskell | ghc | No | Yes | Yes |
Java | openjdk | Yes | Yes | Yes |
Rust | rustc | Yes | Yes | Yes |
Vala | valac | Yes | Yes | Yes |
References
- ↑ Compared with other compilers like LLVM and rustc, GCC supports many CPU architectures and it's quite well integrated with various other software (gdb, gprof, build systems, etc). It also has long term support in mind as it continues to support other programming language standards. It also has good documentation that explain how it handles C code for instance. In addition it's a GNU project, so it has users freedom in mind. In addition Guix has made GCC bootstrapable from a binary that is less than 1KB, and it doesn't require huge resources to build or bootstrap.
- ↑ 3.03.1 Can we compile and/or run code for/on microcontrollers, if so which compilers/interpreters are used / necessary for that.
- ↑ 4.04.1 Having a standard or something similar to refer to enables people to write code that can still be used without requiring too much maintenance to adapt to newer compiler versions.
- ↑ Ideally the specifications should be available under free licenses.
- ↑ See one of the two talks on rust in GNU cauldron 2022.
- ↑ 7.07.1 https://guix.gnu.org/en/manual/devel/en/guix.html#Bootstrapping
- ↑ 8.08.1 In gnu/packages/java.scm icedtea-7 depends on jamvm which depends on jamvm-1-bootstrap which is built from source. The source bootstrap is not architecture specific.
- ↑ 9.009.019.029.039.049.059.069.079.089.099.10 See supported-systems in the rust 1.54 package definition