wiki/articles/programming_language.md

34 lines
2.6 KiB
Markdown

# Programming Language
A programming language is a computer language in which programs can be written, it can either be compiled into native machine code or interpreted.
Different programming languages offers distinct amount of abstraction over the machine (low-level and high-level),
being the so called scripting languages the ones with the higher level of abstraction, for example.
The distinction between compiled and interpreted languages can be a bit blurry sometimes, since most "serious" "interpreted"
programming languages actually *compile* to [bytecode](bytecode.md) (instead of machine code) something that can be considered
as compilation. So to summarise, "compiled language" refers to a language that compiles to machine code while an "interpreted language"
compiles to bytecode or is executed by a tree-walk interpreter.
In some ways, assembly can be considered to be a low-level programming language, since it abstracts the numerical opcodes of the machine with mnemonics
(such as `mov`, `call`, `mul`, etc.) and most offer macro capabilities.
Some bloated programming languages such as Python or JavaScript may be acceptable for simple throwaway scripts or for learning programming,
but no serious software should be written on them.
## List of acceptable and non-acceptable (harmful) languages
- [Assembly](assembly.md): yes, but non portable.
- [C](c.md): yes, the first and natural choice for writing programs. The Unix language.
- [Lua](lua.md): yes, good for embedding and quick scripts.
- [Lisp](lisp.md): yes, flexible and relatively fast, prefer Scheme over the more bloated [Common Lisp](common_lisp.md) (still better than C++ however).
- [Forth](forth.md): yes, niche, but it is a nice exercise on [minimalism](minimalism.md).
- [Pascal](pascal.md) (no [OOP](oop.md)): yes, old school and quite verbose, but small and fast compared to, say C++ or Rust; comparable to C in terms
of features.
- [AWK](awk.md): yes, the standard [Unix](unix.md) [DSL](dsl.md) for text processing.
- ([POSIX](posix.md)) [Shell Script](shell_script.md): yes, has its quirks.
- [Perl](perl.md): acceptable, could be used as a replacement for more complex shell scripts and AWK, since it is commonly installed in most
modern unixes.
- [Go](golang.md): acceptable but beware of the big executable sizes.
- [PHP](php.md) (no OOP): acceptable, if you need interactive web pages but stay away from [frameworks](frameworks.md).
- [Python](python.md): Slow and bloated, avoid. Can be acceptable if used as a beginners language only.
- [C++](cpp.md): No.
- [JavaScript](javascript.md): No.
- [Rust](rust.md): NO.