Wie programmiert man eine Programmiersprache?

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Programmiersprachen werden nicht programmiert, sie waren mit dem Urknall auf dieser Erde "anwesend". ;)

Ah natürlich, wie konnte ich denn nicht darauf kommen!!??

4
@Grizold

Im Anfang schuf Gott Himmel und Erde; die Erde aber war wüst und wirr, Finsternis lag über der Urflut, und Gottes Geist schwebte über dem Wasser.  

Gott sprach: Es werde Licht. Und es wurde Licht. Gott sah, daß das Licht gut war. Gott schied das Licht von der Finsternis, und Gott nannte das Licht Tag, und die Finsternis nannte er Nacht. Es wurde Abend, und es wurde Morgen: erster Tag.  

Dann sprach Gott: Ein Gewölbe entstehe mitten im Wasser und scheide Wasser von Wasser. Gott machte also das   
Gewölbe und schied das Wasser unterhalb des Gewölbes vom Wasser oberhalb des Gewölbes. So geschah es, und Gott nannte das Gewölbe Himmel. Es wurde Abend, und es wurde Morgen: zweiter Tag.  

Dann sprach Gott: Das Wasser unterhalb des Himmels sammle sich an einem Ort, damit das Trockene sichtbar werde. So geschah es. Das Trockene nannte Gott Land, und das angesammelte Wasser nannte er Meer. Gott sah, daß es gut war. Dann sprach Gott: Das Land lasse junges Grün wachsen, alle Arten von Pflanzen, die Samen tragen, und von Bäumen, die auf der Erde Früchte bringen mit ihrem Samen darin. So geschah es. Das Land brachte junges Grün hervor, alle Arten von Pflanzen, die Samen tragen, alle Arten von Bäumen, die Früchte bringen mit ihrem Samen darin. Gott sah, daß es gut war. Es wurde Abend, und es wurde Morgen: dritter Tag.  

Dann sprach Gott: Lichter sollen am Himmelsgewölbe sein, um Tag und Nacht zu scheiden. Sie sollen Zeichen sein und zur Bestimmung von Festzeiten, von Tagen und Jahren dienen; sie sollen Lichter am Himmelsgewölbe sein, die über die Erde hin leuchten. So geschah es. Gott machte die beiden großen Lichter, das größere, das über den Tag herrscht, das kleinere, das über die Nacht herrscht, auch die Sterne. Gott setzte die Lichter an das Himmelsgewölbe, damit sie über die Erde hin leuchten, über Tag und Nacht herrschen und das Licht von der Finsternis scheiden. Gott sah, daß es gut war. Es wurde Abend, und es wurde Morgen: vierter Tag.  

Dann sprach Gott: Das Wasser wimmle von lebendigen Wesen, und Vögel sollen über dem Land am Himmelsgewölbe dahinfliegen. Gott schuf alle Arten von großen Seetieren und anderen Lebewesen, von denen das Wasser wimmelt, und alle Arten von gefiederten Vögeln. Gott sah, daß es gut war. Gott segnete sie und sprach: Seid fruchtbar, und vermehrt euch, und bevölkert das Wasser im Meer, und die Vögel sollen sich auf dem Land vermehren. Es wurde Abend, und es wurde Morgen: fünfter Tag.  

Dann sprach Gott: Das Land bringe alle Arten von lebendigen Wesen hervor, von Vieh, von Kriechtieren und von Tieren des Feldes. So geschah es. Gott machte alle Arten von Tieren des Feldes, alle Arten von Vieh und alle Arten von Kriechtieren auf dem Erdboden. Gott sah, daß es gut war. Dann sprach Gott: Laßt uns Menschen machen als unser Abbild, uns ähnlich. Sie sollen herrschen über die Fische des Meeres, über die Vögel des Himmels, über das Vieh, über die ganze Erde und über alle Kriechtiere auf dem Land. Gott schuf also den Menschen als sein Abbild; als Abbild Gottes schuf er ihn. Als Mann und Frau schuf er sie. Gott segnete sie, und Gott sprach zu ihnen: Seid fruchtbar, und vermehrt euch, bevölkert die Erde, unterwerft sie euch, und herrscht über die Fische des Meeres, über die Vögel des Himmels und über alle Tiere, die sich auf dem Land regen. Dann sprach Gott: Hiermit übergebe ich euch alle Pflanzen auf der ganzen Erde, die Samen tragen, und alle Bäume mit samenhaltigen Früchten. Euch sollen sie zur Nahrung dienen. Allen Tieren des Feldes, allen Vögeln des Himmels und allem, was sich auf der Erde regt, was Lebensatem in sich hat, gebe ich alle grünen Pflanzen zur Nahrung. So geschah es. Gott sah alles an, was er gemacht hatte: Es war sehr gut. Es wurde Abend, und es wurde Morgen: der sechste Tag.  

So wurden Himmel und Erde vollendet und ihr ganzes Gefüge.   
Am siebten Tag vollendete Gott das Werk, das er geschaffen hatte, und er ruhte am siebten Tag, nachdem er sein ganzes Werk vollbracht hatte. Und Gott segnete den siebten Tag und erklärte ihn für heilig; denn an ihm ruhte Gott, nachdem er das ganze Werk der Schöpfung vollendet hatte.   
Das ist die Entstehungsgeschichte von Himmel und Erde, als sie erschaffen wurden. 

Aber damit nicht genug schuf Gott die Programmiersprachen

Javascript, Java, C, C++, C#(C Sharp), Visual Basic, PHP, Python, Scratch, Delphi/Object Pascal, Swift, SQL, HTML & CSS und viele mehr... Auch eine Version...
3
@Grizold

Achja, und diese Programmiersprachen auch:

0–9

4th Dimension

A

A

A#

A+

ABAP

ABC

Action

ActionScript

Active Oberon

ACUCOBOL

Ada

ADbasic

Adenine

Agilent VEE

AIMMS

Aldor

Alef

Aleph

ALGOL (ALGOL 60, ALGOL W, ALGOL 68)

Alice

AML

AmigaBASIC

AMOS BASIC

AMPL

AngelScript

ANSYS Parametric Design Language

APL

App Inventor

Applied Type System

AppleScript

Arden-Syntax

ARLA

ASIC

Atlas Transformation Language

Autocoder

AutoHotkey

AutoIt

AutoLISP

Automatically Programmed Tools (APT)

awk (awk, gawk, mawk, nawk)

B

B

B-0

BANCStar

BASIC, siehe auch Liste der BASIC-Dialekte

Basic Calculator

Batch

Bash

Basic Combined Programming Language (BCPL)

BeanShell

Befunge

Beta (Programmiersprache)

BLISS (Programmiersprache)

Blitz Basic

Boo

Brainfuck, Brainfuck2D

C

C

C++

C--

C#

C/AL

Caml, siehe Objective CAML

Ceylon

C for graphics

Chef

CHILL

ChucK (Programmiersprache)

CL

Clarion

Clean

Clipper

CLIPS

CLIST

Clojure

CLU

Cluster

Co-array Fortran

COBOL

Cobra

CoffeeScript

COMAL

COMIT

Common Lisp

Component Pascal

Comskee

CONZEPT 16

CPL

CURL

Curry

CycL

Cython

D

D

DarkBASIC

Dart

Datalog

Delphi (Object Pascal)

Digital Command Language (DCL)

Dylan

E

E

Easytrieve

Eiffel

ELAN

Elixir

Elm

Emacs Lisp

Enterprise Generation Language (EGL)

Erlang

ESPOL

Esterel

Euler

Euphoria

EXAPT

F

F (Variante von Fortran)

F#

Factor

Faust

FileMaker Script

FlagShip

Flavors

FLOW-MATIC

FOCAL (HP-41)

Forth

Fortran

Fortress

FRACTRAN

FreeBASIC

FreeMat

G

G

Gambas

Game Maker Language (GML), siehe Game Maker

Gauss

Generative Modelling Language (GML)

GFA-BASIC

Go

Gofer

GPSS (General Purpose Simulation System)

GrGen.NET

Grape

Groovy

H

 

Hack

HAL

Haskell

Haxe

High Level Shading Language (HLSL)

Hollywood

HQ9+

I

iCon-L

Industrial Robot Language (IRL)

Inform

Interactive Data Language (IDL)

INTERCAL

Io

ISWIM

J

J

J#

Jasmin

Java

JavaScript (JScript, ECMAScript, DHTML)

Job Control Language (JCL)

JOVIAL

Joy

JScript

JScript .NET

Julia

Jython (JPython)

K

KiXtart

Kornshell

Kotlin

L

LabVIEW

Liberty Basic

Lingo

Limbo

Linda

Linden Scripting Language (LSL)

Linear Programming Language (LPL)

Lisp

Logo

LPC

Lua

Luna

Lustre

Lite-C

M

M

M4

Malbolge

Maple

Mathematica

Matlab

Max/MSP

MDL

Mercury

Mesa

Miranda

MIXAL

ML

Modula (Modula-2, Modula-2+, Modula-3)

Monkey X

MPD

MUMPS

N

Nasal

NATURAL

NetLogo

NeWS

Newsqueak

NewtonScript

NewLISP

Nice

Not Quite C (NQC)

Not eXactly C (NXC)

Nyquist

O

Oberon

Objective-C

Objective-C++

OCaml

Object Pascal (Delphi)

Occam

Octave

Opal

OPL

OpenGL ES Shading Language

OpenGL Shading Language

Ook!

Oz

P

Pacbase

Pascal

PEARL

Perl

Phalanger

Pharo

PHP

Piet

Pike

PILOT

PL/0

PL/I

PL/M

PL/S

PL/SQL

Plankalkül

Posity

PostScript

POW!

PowerScript

PowerShell

Processing

PROGRES

Prolog (Arity Prolog, Turbo Prolog, Sicstus, CLP, CLPR)

PROSA

Puck

PureBasic

Pure Data

Python

Q

QuakeC

QML

R

R

Racket

REBOL

REXX

Robot Karol

RPG

Ruby

Rust

S

S

S-Lang

SabreTalk

SAIL (Stanford AI Language)

SassScript

Sather

Scala

Scilab

Scheme

Strukturierter Text (SCL)

Scratch

Script.NET

Server Side Includes (SSI)

Seed7

Self

SETL

Shakespeare

Shell (sh, ksh, bash, csh, zsh)

Simula

Simulink

Sing#

Slate

Sleep

Smalltalk

Snap! (BYOB)

SNOBOL4

Solidity

Spec#

Specification and Description Language (SDL)

Squeak

Squirrel

SR

Standard ML (SML)

StatPascal

StepTalk

STOS BASIC

Strongtalk

StarOffice Basic (auch bekannt als StarBasic und OOoBasic)

Swift

SuperCollider

System Management Language (SML)

T

TACL

TAL (Transaction Application Language)

Tcl

TECO

TELON (auch CA-Telon)

TI-Basic

Timing Definition Language (TDL)

Transact-SQL

TTCN

TTCN-3

Turing

TypeScript

U

UnrealScript

V

Vala

VEE

Visual Basic Classic (VB)

Visual Basic .NET (VB.NET)

Visual Basic for Applications (VBA)

Visual Basic Script (VBScript)

Visual FoxPro

Visual J++

Visual Objects (VO)

Vienna Definition Language (VDL)

VisSim

Vulcan.NET

vvvv

W

Web

Web Language

Whitespace

WinDev

WordBasic

WMLScript

Wyvern

X

X10

Xbase++

XL

XL (XML-Programmiersprache)

Xojo

XProfan

XSL Transformation (XSLT)

Xtend

Z

Zonnon

3
@Grizold

Computer Unser,

Der Du bist der Server,

Geheiligt seie Dein Bildschirm.

Dein Output komme, Dein Wille geschehe,

Wie im Speicher, so auf dem Drucker.

Unsere Arbeit erleichter uns heute

Und vergib uns unsere Fehler,

Wie auch wir vergeben denen,

Die nicht richtig programmieren.

Lass uns nicht lange warten.

Und erlöse uns vor dem Shutdown.

Denn Dein sind die Bits

Und die Bytes und das Netz

In Ewigkeit.

ENTER

4

Eine Programmiersprache wird überhaupt nicht programmiert, denn die ist ja nur ein Regelwerk.

Was programmiert wird, ist ein Compiler (oder ein Interpreter).

In der Regel implementiert man den ersten Compiler einer neuen Sprache in einer bereits existierenden Sprache (oft in ANSI C, weil es für diese Sprache für so gut wie jede erdenkliche Architektur Compiler gibt). Nachdem es den ersten Compiler für eine neue Sprache gibt, implementiert man jeden weiteren Compiler in der Regel in der Sprache selbst. Dann übersetzt man jeden neuen Compiler zuerst mit seinem "Vorgänger" (denn der neue Compiler ist ja noch nicht fertig und kann damit noch nicht übersetzen) und, nachdem das passiert ist, noch einmal "mit sich selbst", d. h. die Binary des neuen Compilers, die mit dem alten Compiler erstellt wurde, übersetzt noch einmal den Quellcode des neuen Compilers. Das bewirkt, dass die Binary des neuen Compilers alle Optimierungen enthält, die der neue Compiler selbst enthält.

Den Vorgang, Compiler erst mit einem anderen Compiler zu übersetzen, bezeichnet man auch als Bootstrapping.

Die ersten Compiler musste man notwendigerweise in einer Assemblersprache implementieren und die ersten Assembler widerum tatsächlich in Maschinensprache, aber das ist lange her.

Bei Interpretern ist es in der Regel so, dass diese in einer anderen, compilierten Sprache implementiert sind. Die Referenzimplementierung des Interpreters für die Programmiersprache Python beispielsweise heißt CPython, weil sie in ANSI C implementiert ist.

Es gibt aber zum Beispiel auch einen Interpreter für Python mit dem Namen IronPython, der in C-Sharp implementiert ist. Diese Sprache ist widerum selbst interpretiert, beziehungsweise sie ist ein "Hybrid". Der Quellcode in C-Sharp wird zunächst in einen Zwischencode namens Common Intermediate Language (CIL) übersetzt, welcher anschließend von einem Interpreter namens Common Language Infrastructure (CLI) interpretiert wird.

Genauso ist es bei Java auch. Der Quellcode in Java wird zunächst in eine Zwischencode namens Bytecode übersetzt, welcher Anschließend von einem Interpreter namens Java Virtual Machine (JVM) interpretiert wird. Beide "Bytecode-Interpreter" verwenden dabei einen so genannten Just-in-Time-Compiler (JIT-Compiler), um häufig ausgeführte Codeabschnitte in Maschinencode zu übersetzen. Aus diesem Grund trägt die Referenzimplementierung der Java Virtual Machine auch den Namen Hotspot. Sie übersetzt (compiliert) häufig ausgeführte Codesegmente (Hotspots) in Maschinencode und interpretiert den Rest.

Sowohl die Java Virtual Maschine (JVM), als auch die Common Language Infrastructure (CLI) sind in compilierten Sprachen, sehr wahrscheinlich in ANSI C, implementiert. Die Klassenbibliotheken von Java und .NET hingegen sind größtenteils in der jeweiligen Hochsprache selbst implementiert, vermutlich mit ein paar "Schnipseln" C, um Betriebssystemdienste (z. B. ein GUI-Framework) ansprechen zu können.

Die Standardbibliothek von Go (einer compilierten Sprache) beispielsweise ist ebenfalls in Go implementiert und die Standardbibliothek von Python (einer interpretierten Sprache) zumindest größtenteils in Python. Bei Python kann es sogar passieren, dass man bei einem Programmfehler plötzlich vom Interpreter einen Stacktrace bekommt, der in die Standardbibliothek führt. Das ist dann immer besonders hilfreich. (Vorsicht, Ironie!) Bei einem solchen Stacktrace denke ich mir dann immer: "Ich möchte wissen, was ich bei der Verwendung dieser Bibliotheksfunktion falsch gemacht habe und nicht, welchen Ausnahmefall der Entwickler der Standardbibliothek vergessen hat, 'abzufangen', sodass ich nun einen Stacktrace in die Standardbibliothek bekomme." :-)

Bis jetzt habe ich Compilers und Interpreters  für neue Sprachen mit C unter LEX und YACC programmiert (OK ein mal in LISP)

Du hast es sehr gut beschrieben - Super!

3
@iwolmis


Wie man von C auf C++ gekommen ist, ist beschrieben in "The Design and Evolution of C++" von Bjarnene Stroustrup.

Mit Unix Power Tools habe ich einmal einen C++ zum C Convertor geschrieben :-)

OK, da habe ich "m4" total missbraucht.

Warum?

In der Firma, für ich damals Projekte gemacht habe,  war damals nur C im Einsatz und so ein Converter hat mir sehr viel Arbeit gespart :-)

Das war wie C-Front vom Stroustrup.





1

Dem ist eigentlich nicht weiter hinzuzufügen, nur eien Rückfrage aus Neugier. Nutzt Cython heute wirklich noch (pedantisch) Ansi-C, oder ist man auf eine neuere ISO-Variante umgestiegen?

1

man kann sich das so vorstellen, daß jede Taste auf der Tastatur eine bestimmte Funktion hat, ähnlich wie jede Taste auf der Fernbedienung bei einem TV.

Ein Befehl ist nichts anderes als eine bestimmte Tastenabfolge. Um diese zu verstehen, muß der PC diese Tastenabfolge einer bestimmten Routine zuordnen können. Das kann er mithilfe einer bestimmten Sprache.

Dabei ist ein PC ein extrem komplexes Gerät und die Tastatur quasi eine Fernbedienung mit Tausenden Funktionstasten. 

Eine Programmiersprache kann man nicht programmieren, man kann nur einen Compiler oder ein Runtime programmieren.

Der Java Compiler ist zum Beispiel selbst in Java geschrieben und die Java VM HotSpot in C/C++.

Die ersten Compiler überhaupt hat man mit einer Assembler Sprache geschrieben (nur Maschinenbefehle in Wörter übersetzt) und die ersten Assembler musste man dann direkt mit Maschinensprache programmieren.

Was möchtest Du wissen?