A programming
language (e.g. Objective-C) is an artificial language designed to express computations that can be
performed by a machine, particularly a computer. Or with another words, programming language is a
vocabulary and set of grammatical rules for instructing a computer to perform specific tasks. The
term programming language usually refers to high-level languages[1]. It can be used to create programs that control the behavior
of a machine(e.g system
programming), to express algorithms precisely, or as a mode of human communication, e. g. Applications, Utilities, Servers, Systems Programs .
Programming Languages,
About
PL,
Types and PL,
Essentials of PL,
Concepts in PL,
PL Pragmatics
An application program (or just application) is any program designed to perform a specific function
directly for the user or, in some cases, for another application program. Examples of
application programs (pictured) include word processors; database
programs; Web browsers; development tools; drawing, paint, and image editing programs;
and communication programs, and more. Items in the below list is also an example of
application.
Programmers of early 1950s computers, notably UNIVAC I and IBM 701, used machine language programs, that
is, the first generation language (1GL). 1GL programming was quickly
superseded by similarly machine-specific, but mnemonic, second generation languages
(2GL) known as assembly languages or
"assembler".
Assembly languages are similar to machine languages, but they are much easier to program in because they
allow a programmer to substitute names for numbers. Machine languages consist of numbers only.
Later in the 1950s, assembly language programming, which had evolved to include the use of macro
instructions, was followed by the development of
"third generation" (3GL) refers to high-level languages ,
such as BASIC, FORTRAN, PASCAL, ADA, C, C++, COBOL, and JAVA, C#.
Each language has a unique set of keywords (words that it understands) and a special syntax for organizing
program instructions.
High-level programming languages, while simple compared to human languages, are more complex than the
languages the computer actually understands, called machine languages. Each
different type of CPU has its own unique
machine language. [2]
Lying above high-level languages are languages (1970s-1990) called fourth-generation languages (4GL) is a programming
language (closest to human languages) or programming environment designed with a specific purpose in mind,
such as the development of commercial business software. Some
fourth-generation languages: Clipper, FoxPro, SQL, Oracle Reports, ABAP MATLAB, ColdFusion, and etc.
The 4GL was followed by efforts to define and use a fifth-generation languages (5GL), which is a programming
language based around solving problems using constraints given to the program, rather than using an
algorithm written by a programmer. Most constraint-based and logic
programming languages and some declarative languages are fifth-generation languages. Fifth-generation languages are used mainly in artificial intelligence research and neural
networks. Some fifth-generation languages: Prolog, OPS5, and Mercury. 4GL and 5GL projects are more oriented toward problem solving and systems
engineering.
[2]
Languages Categorization (Taxonomies) ⇧
A given programming language
(see History)
does not usually have a single ancestor language.
Languages commonly arise by
combining the elements of several predecessor languages with new ideas in circulation at the time. Ideas
that originate in one language will diffuse throughout a family of related languages, and then leap
suddenly across familial gaps to appear in an entirely different family.
The task is further complicated by the fact that languages can be classified along multiple axes. For example, Java is both an
object-oriented language (because it encourages object-oriented organization) and a concurrent language
(because it contains built-in constructs for running multiple threads in parallel). Python is an
object-oriented scripting language.
Some of the programming languages
grouped by Category
In broad strokes, programming languages divide into programming
paradigms and a classification by intended domain of
use.
More refined paradigms include
imperative language,
declarative
programming,
procedural programming,
object-oriented
programming,
functional programming,
symbolic programming and
logic programming; some
languages are hybrids of paradigms or multi-paradigmatic as in below table. See:
Advanced topics,
Advanced topics2,
Spring Declarative Transaction Management
Array languages
Analytica, IDL,
A+,
R,
Fortran , MATLAB, ...
|
Aspect-oriented
languages
AspectC++,
AspectJ,
CaesarJ,
ObjectTeams, ...
|
Assembly
languages
ASEM-51,
C--,
COMPASS,
GAS ,
MASM, ...
|
Authoring
languages
Bigwig,
Coursewriter, PILOT, TUTOR, ...
|
Command line
interface languages
4DOS, Winbatch, SpiritShadow (2009),
Win PowerShell, sh, bash., ksh,..
Playgrounds,
Online Coding
|
Compiled
languages
Ada, Basic, ALGOL, COBOL, PL/I, Python, C, C++,
C# (compiled
into Intermediate Language ),
Java (usually compiled into JVM bytecode), ...
|
Concurrent
languages, Concurrent Pascal,
Ada,
Concurrency in Java vs Node.js
Cilk - a concurrent C,
Eiffel,
Java, ...
|
Curly-bracket languages
AWK, csh ("C Shell"), C, C++, C#,
ECMAScript (ActionScript, Javascript),
Java (Groovy, JoinJava, X10), PHP, Perl, ...
|
Dataflow
languages
Hartmann pipelines, G (used in LabVIEW), Lucid
Prograph, WebMethods Flow, Monk,...
|
Data-oriented languages
Clarion,
Clipper,
dBase, SPARQL,
Visual FoxPro,
Tutorial D,
WebQL, ...
|
Data-structured
languages
Array-based,
List-based,
Stack-based
|
Declarative
languages
Analytica, Ant, MetaPost, Modelica, SQL, XSL,
DASL(partial declarative, partial imperative),
Prolog, ...
|
Esoteric
languages
Befunge, Brainfuck, FALSE, LOLCODE,
Qwertycode, Shakespeare, Var'aq, ...
|
Extension languages
AutoLISP (specific to AutoCAD), Guile,
Python (Maya and other 3-D), S-Lang, SQL,
Ruby (Google SketchUp), Tcl,..
|
Fourth-generation languages
ABAP, IBM Informix-4GL / Aubit-4GL, Oracle Express 4GL,
Progress 4GL, Today, Visual FoxPro, ...
|
Functional
languages,
e.g.
APL, Charity,, Curl, Lisp, Mathematica, ML -Alice, Poplog, ...
|
Interactive mode
languages
Clojure, Common Lisp, F#, Maple, MATLAB, PostScript, Ruby, S-Lang, Tcl,...
|
Interpreted
languages
Ant, AutoHotkey, Eiffel, Game Maker Language, Groovy,
Haskell , Lisp (Tea), Maple, Ruby,
Groovy,
PostScript, S-Lang, ...
|
Iterative
languages
Aldor, CLU, Cobra, Eiffel, Icon, Python, ...
|
List-based languages - LISPs
Joy, Lisp (Dylan, Arc, Logo), Tcl (Tea), TRAC, ...
|
Little
languages
apply, awk, SQL, ...
|
Logic-based
languages
Oz (Mozart Programming System), Curry, Leda, Prolog (Mercury), ...
|
Machine
languages
ARM, Intel 80x86, IBM System/360,
National 32032, Motorola 680x, Sun SPARC, ...
|
Macro
languages,
PL/I Preprocessors
cpp (the C preprocessor), PHP, SMX,...
|
Metaprogramming
languages
C++, Curl, Lisp, Haskell, Lua, Pels, Python, Smalltalk, XL (concept programming),
...
|
Multiparadigm languages
BETA, C++, C#, Curl, PHP, SCALA, Ruby, Tcl, XL,...
|
Numerical
analysis
Algae, AMPL, GAMS, MATLAB, Seneca an Oberon variant, ...
|
Non-English-based languages
ARLOGO - Arabic, Chinese BASIC - Chinese,
Lexico - Spanish,
Rapira ,
Glagol (Russian), ...
|
Object-oriented class-based languages
Dylan, Goo, BETA, C++, C#, Chrome, Cobra, Java (Groovy, JoinJava, X10),
PHP, Ruby, SCALA,...
|
Object-oriented
prototype-based languages
ABCL/1, ECMAScript (ActionScript, Javascript), Lua, NewtonScript, ...
|
Off-side rule
languages
Ivy, Miranda-Haskell-Curry, XL, ISWIM, ABC (Python, Cobra, Boo), ...
|
Procedural
languages
ADA, ALGOL, BASIC, C, C++, C#, ECMAScript (ActionScript, Javascript), Java (Groovy, JoinJava, X10),
Lasso, Modula-2, MATLAB, Perl, Python, Rapira, S-Lang, X++, XL,...
|
Reflective
languages
Aspect-oriented, ECMAScript (ActionScript, Javascript), Java (Groovy, JoinJava, X10), Lisp, Lua,
PHP, Pico,
Perl, Python, Rapira, Tcl, X++/XL,...
|
Scripting languages
AppleScript, AWK, BeanShell, ColdFusion, ECMAScript (ActionScript, Javascript), PHP, Game Maker
Lang.,
Java (Groovy, JoinJava, X10), Python, Ruby, Smaltalk, S-Lang, Tcl, ...
|
Stack-based languages
Cat, Factor, Forth, Joy, Prolog, PostScript, Urq,...
Dynamically typed
JULIA, Javascript, Python, Ruby, Lua, PHP...
|
Synchronous
languages
Argos, Averest, LEA, Lustre, SyncCharts,...
Syntax handling languages
ANTLR, GNU Flex, lex, JavaCC, ...
|
Visual
languages
CODE, Eiffel, Prograph, Simulink,
Vvvv,...
|
Wirth
languages
ALGOL W, Modula, Modula-2, Oberon, Object Pascal (Borland Delphi),...
|
XML-based languages
Ant, Cω, ECMAScript ECMAScript for XML, MXML, XPath, XQuery, XSLT, XMLmosaic,...
|
Comparison of programming languages ⇧
These days, (see: TIOBE Index for September
2025,
PYPL PopularitY of Programming Language)
programming languages are becoming more and more general and all-purpose, but they still have
their specializations, and each language has its disadvantages and advantages. [4]
Some useful links:
Wiki-Compare,
Wiki-Compare2,
Comparing ,
Compare2,
Compare3
Language Execution - Compilation and
Interpretation⇧
Regardless of what language you use, you eventually need to convert
your program
into machine language so that the computer can understand it. [3] Programming
language implementation, there are two ways to do this: 1.
Compile
the
program, or 2. Interpret the
program.
See more:
Compiler and Interpreter Differences,
Courses,
PL Processors in Java,
Difference
What is the difference between interpreted and compiled
languages?
Interpreted computing languages are languages whose source code is
processed by a
software program called an interpreter that reads in the text and immediately acts upon the
instructions
defined by the text. Compiled computing languages are languages whose
source code is
processed by a software program called a compiler that converts the source code into a file
which can then
be run directly or indirectly by a computer operating system. See also, what is
compiled or interpreted program?
There also exist hybrid languages, such as Java and Python, that have qualities of both compiled and interpreted languages.
Java, for example,
can be
compiled into bytecode which must then itself be run by an interpreter referred to
as a virtual
machine. Since Java source code itself does not have an interpreter, it's reasonable to
consider Java to
be a compiled langauge. In comparison, Python source code can also be compiled into bytecode
to be read by
a virtual machine. However, Python source code can also be interpreted by an interpreter.
So, it is
reasonable to consider Python an interpreted language.
WebAssembly (Wasm) is a
binary instruction format for a stack-based virtual machine. Wasm is designed as a
defines a portable binary-code format and a corresponding text format for executable programs as
well as software interfaces for facilitating communication between such programs and their host
environment.
Wasm is a low-level bytecode
format that runs in the browser just like
JavaScript. It is designed to be faster to parse than JavaScript, as well as faster to execute which makes
it a suitable compilation target for new and existing languages -
see webassembly-language-support.
JIT
((Just-In-Time))
compiler is a runtime technology that improves a program's performance by compiling
frequently executed sections of code into native machine code during the program's execution, rather than
at a separate compilation stage.
GraalVM
(Wasm)
is a high-performance Java Development Kit (JDK) distribution that can accelerate application
performance and efficiency with its advanced compilation technology. It is developed by Oracle and can be
used with applications written in Java, as well as many other popular languages, such as Python,
JavaScript, and Ruby.
See my repo for : GraalVM
Features.
Language Engineering and Language Recognizers ⇧
Software Language Engineering (SLE)
is concerned with the engineering principles of
software languages: their design, their implementation, and their evolution.
Software languages come in many shapes and sizes, including
programming languages, modeling languages,
data format languages, specification languages etc.
Identifying or engineering appropriate languages for the various activities in software and systems
development is one of the most important issues in software engineering.
A language parser
(a language recognizer,
repo
)
is a program that analyzes a string of symbols, such as code or a sentence, to determine
its grammatical structure. This process, known as parsing or syntactic analysis, involves breaking down
the input into its constituent parts and building a structured representation, like a tree, based on a
formal grammar.
One of the most popular language parser is
ANTLR4: Learn more about it in my article:
ANTLR Magic — Developing Language Applications Using Language Recognizer.
Try also antlr4ts - TypeScript/JavaScript target for ANTLR 4:
antlr4ts,
article.
Prominent Language Parsers:
ANTLR -
Mega Tutorial,
Xtext,
Chevrotain -
Playground,
Langium,
ANTLR-alternatives,
JS-parsers,
list-of-parsers,
Comparison of
Parser Generators
Building a Language Applications via Extensions
Developers each have their favorite IDE which facilitates their application development. So, let’s
rephrase the question, have you ever wondered how these IDEs deliver modern coding and debugging
experiences?
To enable the IDEs to support modern coding and debugging experiences, you need to implement a language
server and a client based on the LSP
(read blog - LSP Magic) and
DAP
(read blog - DAP Magic) specifications and integrate them into the IDE.
To
become a client, the code editor (or IDE) adds a small extension, which provides a language-agnostic,
front-end editing capability without any awareness of the semantics of the language.
Visual Studio Code provides smart editing features for different
programming languages through
Language
Extensions APIs (e.g. see your first
extension, language server extension guide, Git Usage) that enable rich language features.
VS Code Extension Samples - GitHubRepo
Examples and blogs:
Shortest COBOL Grammar Support with
ANTLR4,
Developing Language Applications Using Language Recognizer,
PL/I Language Support with Langium,
Langium Demo,
|