Kurz: Tabelle mit Erscheinungsjahr, Paradigma, Typisierung und Ausführung von 44 Programmiersprachen zum schnellen Vergleichen.
Die Tabelle
| Sprache | Jahr | Paradigmen | Typisierung | Ausführung | Pakete |
|---|---|---|---|---|---|
| Ada | 1983 | multi: imperativ, objektorientiert, nebenläufig | statisch, stark | kompiliert (GNAT) | Alire |
| Assembler (x86-64) | 1949 | maschinennah, imperativ | keine | Assembler erzeugt Maschinencode | — |
| AWK | 1977 | datengetrieben (Muster–Aktion) | dynamisch | Interpreter | — |
| Bash | 1989 | imperativ, Skript | dynamisch (alles ist Text) | Shell-Interpreter | — |
| C | 1972 | imperativ, prozedural | statisch, schwach | kompiliert zu Maschinencode | Systempakete, vcpkg, Conan |
| C# | 2000 | objektorientiert, funktional, nebenläufig | statisch, stark | CLR (JIT/AOT) | NuGet |
| C++ | 1985 | multi: objektorientiert, generisch, prozedural | statisch | kompiliert zu Maschinencode | vcpkg, Conan, CMake |
| COBOL | 1959 | imperativ, geschäftsorientiert | statisch | kompiliert (Mainframe, GnuCOBOL) | — |
| Common Lisp | 1958 | multi: funktional, objektorientiert (CLOS), Metaprogrammierung | dynamisch, stark | kompiliert (SBCL) oder interpretiert | Quicklisp / ASDF |
| Dart | 2011 | objektorientiert, funktional | statisch (Null-Safety) | JIT und AOT, Übersetzung nach JavaScript | pub.dev |
| Elixir | 2011 | funktional, nebenläufig (Actor-Modell) | dynamisch | BEAM (Erlang-VM) | Mix / Hex |
| Erlang | 1986 | funktional, nebenläufig (Actor-Modell) | dynamisch | BEAM (Erlang-VM) | rebar3 / Hex |
| F# | 2005 | funktional zuerst, auch objektorientiert | statisch, Typinferenz | CLR (.NET) | NuGet |
| Fortran | 1957 | imperativ, numerisch | statisch | kompiliert zu Maschinencode | fpm |
| Go | 2009 | imperativ, nebenläufig (Goroutinen) | statisch | kompiliert zu Maschinencode | Go-Module |
| Groovy | 2003 | objektorientiert, funktional, dynamisch | dynamisch, optional statisch | JVM | Grape / Gradle |
| Haskell | 1990 | rein funktional, lazy | statisch, stark, Typinferenz | kompiliert (GHC) oder interpretiert | Cabal, Stack / Hackage |
| HTML + CSS | 1993 | deklarativ (Auszeichnung und Gestaltung) | keine Programmiersprache im engeren Sinn | Browser-Rendering | npm (Frameworks) |
| Java | 1995 | objektorientiert, generisch, nebenläufig | statisch, stark | Bytecode auf der JVM (JIT) | Maven / Gradle |
| JavaScript | 1995 | ereignisgesteuert, funktional, prototypbasiert | dynamisch, schwach | JIT-Engine (V8, SpiderMonkey) | npm |
| Julia | 2012 | multi (Multiple Dispatch), funktional | dynamisch, optionale Typen | JIT über LLVM | Pkg |
| Kotlin | 2011 | objektorientiert, funktional | statisch, Typinferenz | JVM, JavaScript, Native | Gradle / Maven |
| Lua | 1993 | imperativ, funktional, prototypbasiert | dynamisch | Bytecode-VM (leicht einbettbar) | LuaRocks |
| MATLAB | 1984 | imperativ, numerisch (Matrizen) | dynamisch | Interpreter (Kurs: GNU Octave) | Toolboxen / Add-ons |
| Nim | 2008 | multi: imperativ, funktional, Metaprogrammierung | statisch, Typinferenz | Übersetzung nach C/C++/JavaScript | Nimble |
| OCaml | 1996 | funktional, imperativ, objektorientiert | statisch, Typinferenz | Bytecode oder nativ kompiliert | opam / dune |
| Pascal | 1970 | prozedural, strukturiert (Object Pascal: objektorientiert) | statisch, stark | kompiliert zu Maschinencode | Lazarus OPM / Delphi GetIt |
| Perl | 1987 | multi: imperativ, funktional, objektorientiert | dynamisch | Interpreter | CPAN |
| PHP | 1995 | imperativ, objektorientiert | dynamisch (optionale Typen) | Interpreter (Zend-VM, JIT) | Composer / Packagist |
| PowerShell | 2006 | objektorientierte Shell, Pipeline | dynamisch (.NET-Typen) | Interpreter auf .NET | PowerShell Gallery |
| Prolog | 1972 | logisch, deklarativ | dynamisch | Interpreter (WAM, SWI-Prolog) | SWI-Prolog Packs |
| Python | 1991 | objektorientiert, imperativ, funktional | dynamisch, stark | Interpreter (Bytecode, CPython) | pip / PyPI |
| R | 1993 | funktional, statistisch | dynamisch | Interpreter | CRAN |
| Racket | 1995 | funktional, Sprachbaukasten | dynamisch (Typed Racket: statisch) | Racket-VM (Chez Scheme) | raco pkg |
| Ruby | 1995 | objektorientiert, funktional | dynamisch, stark | Interpreter (YARV, JIT) | RubyGems / Bundler |
| Rust | 2010 | multi: imperativ, funktional, nebenläufig | statisch, stark (Ownership) | kompiliert zu Maschinencode | Cargo / crates.io |
| Scala | 2004 | objektorientiert und funktional | statisch, stark | JVM (auch JavaScript, Native) | sbt / Maven |
| Scheme | 1975 | funktional, minimalistisch | dynamisch | je nach Implementierung (Guile, Chez, Chicken) | je nach Implementierung |
| SQL | 1974 | deklarativ | statisch (Schema) | Datenbankmanagementsystem | — |
| Swift | 2014 | multi: objektorientiert, funktional, protokollorientiert | statisch, stark | kompiliert (LLVM) | Swift Package Manager |
| Tcl | 1988 | imperativ, Skript (alles ist ein String) | dynamisch | Bytecode-Interpreter | Tcllib / Teapot |
| TypeScript | 2012 | objektorientiert, funktional, ereignisgesteuert | statisch (strukturell), graduell | Übersetzung nach JavaScript | npm |
| Visual Basic .NET | 2002 | objektorientiert, ereignisgesteuert | statisch, stark (Option Strict) | CLR (.NET) | NuGet |
| Zig | 2016 | imperativ, systemnah | statisch | kompiliert zu Maschinencode | build.zig / zon |
So liest du die Tabelle
- Paradigma: der Programmierstil, den die Sprache unterstützt – siehe Programmierparadigmen.
- Typisierung: wann und wie streng Datentypen geprüft werden – siehe Typsysteme.
- Ausführung: wie aus dem Quelltext ein laufendes Programm wird – siehe Kompiliert oder interpretiert? und Laufzeitumgebungen.