Differences between version 25 and revision by previous author of ProgrammingLanguage.
Other diffs: Previous Major Revision, Previous Revision, or view the Annotated Edit History
Newer page: | version 25 | Last edited on Wednesday, February 11, 2004 1:35:47 pm | by AristotlePagaltzis | Revert |
Older page: | version 23 | Last edited on Thursday, November 20, 2003 11:16:05 pm | by StuartYeates | Revert |
@@ -2,36 +2,40 @@
A human-readable language to control computers. SourceCode written in a ProgrammingLanguage may either be compiled into a [BinaryExecutable] or [ByteCode] by a [Compiler] or executed directly by means of an Interpreter.
!!! Very high level general purpose languages
+
+These languages are highly abstract compared to how the machine actually executes them. Data types and data structures in these languages are often encapsulated in a large shell of metainformation that the programmer never gets (and indeed never needs) to see, managed by the language implementation on the fly behind the scenes to accomodate the code's needs. These languages are designed to make it easy for the programmer to express the problem at hand without much red tape. The complete opposite to systems programming languages, they're highly preferrable for userland applications that do not require execution speed over everything. Code written in these languages often is or can be much easier to maintain than a comparable lower level language implementation, if only due to its reduced size. Especially very simple tasks tend to have ludicruously high ratios of low level language code size to high level language code size.
<?plugin BackLinks page=CategoryVeryHighLevelProgrammingLanguages noheader=1 ?>
!!! Machine oriented general purpose languages
-[Lisp
] is not included here
, because while
[Lisp
] is closely tided to
the lisp machines
, the lisp machines were derived from the structure and purpose
of lisp and not ''visa versa''
.
+These languages make no attempt to conceal the MachineCode's view of their data structures. Simple data types are directly derived from those the
[CPU
] supports
, and the memory layout of complex data structures is usually known to the programmer. As the predominant
[CPU
] architecture
is the [VonNeumann | JohnVonNeumann] architecture
, they all follow its principles as well. They're also all imperative languages. Sometimes called "glorified [AssemblyLanguage]", it is generally
the point
of such languages to be compiled
.
<?plugin BackLinks page=CategoryMachineOrientedProgrammingLanguages noheader=1 ?>
+
+[Java] only barely fits this definition because it abstracts the memory layout away from the programmer (which is in fact its entire point), but is still here because its design is otherwise the same as that of any other machine oriented language.
!!! Systems programming languages
-These languages are designed for low-level software: drivers, OperatingSystems
, game engines, any code that has to go really fast. They tend to be simplistic
languages that closely follow the [VonNeumann | JohnVonNeumann] architecture [CPU]s are based on which allows skilled programmers to predict
and control exactly how their code will be executed
.
+These languages are designed for low-level software: drivers, [OperatingSystem]s
, game engines, any code that has to go really fast. They are necessarily compiled machine oriented
languages and allow quite precise
control of the resulting MachineCode
.
<?plugin BackLinks page=CategorySystemsProgrammingLanguages noheader=1 ?>
Strangely, to date they tend to be very "unsafe" languages too. In code written in [C], the systems programming language for [Unix], it's easy to introduce tiny bugs that mysteriously screw everthing up from time to time -- not something you want your OperatingSystem to do. [Modula2] is the exception to this rule.
!!! Imperative programming languages
-Imperative programming
languages are those in which the program tells the computer
''do this,'' ''do that
'' and ''do this next thing.'' The implementation
is responsible
for making sure that the results were as
if these things had all been done, and in the specified order
.
+Code in these
languages is a series of instructions for
''how
'' the computer does its work (as opposed to functional languages where the computer figures out the sequence of instructions
and declarative languages where the computer
is only given facts and figures out everything
for itself). Most widely adopted languages fall in this category, even
if they're not explicitly listed here
.
<?plugin BackLinks page=CategoryImperativeProgrammingLanguages noheader=1 ?>
!!! Functional programming languages
Functional programming is a __paradigm__ based loosely on the LambdaCalculus approach to ComputerScience, in which everything in a program is a function.
-In pure functional programming, there are no side effects; you cannot assign a value to a variable more than once, only return values from functions. Therefor, a function's return value depends only on the parameters passed. As a result, you can even mathematically prove the correctness of a program. You can also easily "memoize" functions, ie shortcircuiting
their execution by looking
up the return value of a previous call to a computationally expensive function for the same set of arguments in a cache
. It
also allows the computer to execute all parts of the program in arbitrary order to arrive and
the desired result.
+In pure functional programming, there are no side effects; you cannot assign a value to a variable more than once, only return values from functions. Therefor, a function's return value depends only on the parameters passed. As a result, you can even mathematically prove the correctness of a program. You can also easily "memoize" functions, ie shortcircuit
their execution by look
up in a cache
the return value of a previous call to a computationally expensive function for the same set of arguments. Purely functional programming
also allows the computer to execute all parts of the program in arbitrary order to arrive at
the desired result by using LazyEvaluation and PartialEvaluation
.
<?plugin BackLinks page=CategoryFunctionalProgrammingLanguages noheader=1 ?>
Programmers generally prefer imperative programming as they find it easier to understand and build practical applications with. Indeed, some things that depend on side effects and are easy in imperative programming are unreasonably hard to solve in pure functional programming - I/O is an example. However, problems that may seem terribly difficult in imperative programming are often trivial in pure functional programming.
@@ -39,27 +43,27 @@
It has been theorised this preference for imperative programming is a result of most people learning imperative programming languages ([C++], [BASIC], [Java] etc). If they even learn functional programming at all, it is usually much later and in much less depth, so they never really learn to think like a functional programmer. Perhaps if more programmers were taught to think in a functional style from their infancy we would see more applications written in functional languages.
!!! Object oriented programming languages
-As that page, ObjectOrientation is mostly a style and only to an extent a paradigm of programming, and so need not be supported by a ProgrammingLanguage to write programs in object oriented fashion. The following languages are ones which do support this style directly:
+As that page mentions
, ObjectOrientation is mostly a style and only to an extent a paradigm of programming, and so need not be supported by a ProgrammingLanguage to write programs in object oriented fashion. Although applicable to any language, ObjectOrientation tends to be used to make modularization and code reuse easier mainly in imperative languages which inevitably suffer from a lack of complexity management mechanisms
. The following languages are ones which do support this style directly:
<?plugin BackLinks page=CategoryObjectOrientedProgrammingLanguages noheader=1 ?>
!!! Obfuscated languages
-These languages are not intended to be used for serious work, but to stretch the brain.
+These languages are not intended to be used for serious work, but to stretch the brain. They attempt to make programming difficult at least by making code very hard to read, sometimes also hard to write
.
<?plugin BackLinks page=CategoryObfuscatedProgrammingLanguages noheader=1 ?>
You might also be interested in PolyGlot.
!!! Special purpose languages
-Special purpose
languages are designed
to solve
a very narrow
problem very well. Generally they imbbed
domain-knowledge about the domain in
which they are specialised
, which makes
them great
in the domain but less good outside it
.
+As the name implies, these
languages apply mostly
to a very small
problem domain for
which they are offer powerful abstractions. While often even turing complete
, they are not intended to be used as general purpose languages. Trying to coerce
them into such a role almost invariably results
in impossibly unreadable code
.
<?plugin BackLinks page=CategorySpecialPurposeProgrammingLanguages noheader=1 ?>
!!! Deprecated languages
-Deprecated languages
are still around
because there are many millions
of lines
of code and many thousands
of systems that depend on
them. Generally depricated due their their age and cruftiness, in times of crisis
(such as the y2k debarkle)
programmers who are willing to speak
these languages can have great leverage
.
+Don't learn these unless your idea of fun is something like stabbing yourself in the eyeball with a fork repeatedly. Or if you
are in bad need for money,
because some
of them that were implementation languages
of choice in certain areas in the past have left behind a large legacy
of code written in
them that needs to be maintained
. (Some
programmers would still consider selling their body sooner than working in
these languages.)
<?plugin BackLinks page=CategoryDeprecatedProgrammingLanguages noheader=1 ?>