ubuntuusers.de

Programmiersprache

Wiki/Icons/develop.png Jeder, der intensiv mit dem Computer arbeitet, wünscht sich irgendwann einmal, selbst ein Computerprogramm schreiben zu können. Sei es, weil die Anwendung, die man bräuchte, einfach (noch) nicht vorhanden ist oder weil ein bestimmter Ablauf bzw. eine bestimmte Aufgabe automatisiert und damit vereinfacht werden soll. Als Programmiereinsteiger steht man dann üblicherweise vor mindestens zwei Fragen:

Dieser Artikel soll hierzu eine Einführung bzw. Hilfestellung geben.

Programmieren und Übersetzen

Eine Programmiersprache ist das Werkzeug, um für ein Rechensystem (z.B. einem Computer) zu beschreiben, wie Information be- bzw. verarbeitet werden sollen. Das fertige Produkt wird Quelltext (engl. Sourcecode) genannt. Anschließend wird der Quelltext für ein Rechensystem übersetzt, sodass dieses ihn verstehen und ausführen kann, wobei verschiedene Übersetzungstechniken zum Einsatz kommen können.

Die drei wichtigsten Übersetzungstechniken sind:

Compiler

Der Compiler ist eine Software, die den vollständigen Quelltext in Maschinensprache übersetzt. Maschinensprache besteht aus Instruktionen, welche ein Rechensystem direkt ausführen kann. Für den Menschen ist dieser "Binärcode" aber ohne weiteres nicht mehr lesbar. Der Übersetzungsvorgang wird "Kompilieren" genannt.

Interpreter

Der Interpreter übersetzt den Quelltext nicht in die Maschinensprache. Hingegen liest er den Quelltext ein, analysiert ihn und führt die enthaltenen Instruktionen aus. Dadurch erhält der Quelltext eine gewisse Plattformunabhängigkeit, da nur noch der Interpreter auf andere Rechensysteme portiert werden muss. Diesen Vorteil bezahlt man aber häufig mit Rechenleistung (= geringere Geschwindigkeit). Um diesen Geschwindigkeitsverlust abzuschwächen, wird der Quelltext oft per Compiler in plattformunabhängigen Bytecode übersetzt. Diesen Bytecode kann ein Interpreter viel schneller verarbeiten. Sprachen, die einen Interpreter verwenden, werden auch Skriptsprachen genannt.

JIT-Compiler

Der Just-in-Time-Compiler stellt den Kompromiss zwischen Compiler und Interpreter dar. Er funktioniert wie ein Interpreter – mit einem Unterschied, denn er übersetzt bei Bedarf den Bytecode in die Maschinensprache. Dadurch, dass der JIT-Compiler den momentanen Zustand des Rechensystems kennt, kann er schnelleren Maschinencode erzeugen als ein normaler Compiler, der nur statischen Code erzeugt. Die Übersetzung in Maschinensprache zur Laufzeit kostet dennoch Leistung, die aber nur einmal aufgewendet werden muss und bei weiteren Durchläufen des selben Programmabschnitts entfällt.

Welches ist "die beste" Sprache?

Auf diese Frage gibt es keine gültige Antwort. Wie in den weiter unten folgenden Kurzvorstellungen beschrieben, lassen sich mit den meisten Sprachen Probleme aller Arten lösen bzw. Programmen schreiben. Weiterhin ist es so, dass es nicht so schwer ist, eine zweite Progammier- oder Skriptsprache zu erlernen, wenn man bereits eine andere beherrscht, die in die gleiche Sprachkategorie fällt (objektorientierte / funktionale / logische / imperative Programmierung), da bestimmte Sprachelemente in allen Sprachen einer Gruppe in ähnlicher Form vorhanden sind.

Außerdem kommt es beim Programmieren auch stark auf die richtige Strukturierung und Herangehensweise an ein bestimmtes (Programmier-) Problem an. Die richtige Strukturierung und Vorgehensweise ist meistens für alle Sprachen gleich wichtig und weitestgehend unabhängig von der konkreten Sprache, nicht aber von der Sprachklasse. Am besten liest man im Internet ein paar Einsteiger-Tutorials zu den verschiedenen Sprachen oder schaut in der Buchhandlung entsprechende Bücher an, um sich einen besseren Eindruck zu verschaffen und so die Entscheidung zu vereinfachen.

Übrigens: egal, für welche Sprache man sich entscheidet – es wird sicherlich keine Fehlentscheidung sein.

Sprachen

awk

Der Interpreter awk zählt zum Urgestein der Unix-Werkzeuge. Er wird auch heute noch vielfach zusammen mit sed in Shell-Skripten eingesetzt, um Textdateien zu bearbeiten, umzuformen oder auszuwerten. Die Leistungsfähigkeit und Kompaktheit, aber auch die Beschränkungen von awk- und sed-Skripten führten zur Entwicklung der Sprache Perl.

C

C ist eine relativ alte Programmiersprache, welche seit den frühen 70ern existiert. C entstammt aus dem Unix-Umfeld und ist unter Linux immer noch die "Hauptsprache". So sind z.B. der komplette Linuxkernel und GNOME sowie viele weitere Programme komplett in C programmiert. Mehr Information zu C/C++-Compilern gibt es hier: GCC (GNU C/C++-Compiler)

C++

C++ ist eine Erweiterung zu C, der Programmierparadigmen wie Objektorientierung oder Generische Programmierung hinzugefügt wurden und ist somit mit C quasi kompatibel. C++ ist auf vielen Plattformen inkl. Linux sehr häufig anzutreffen. Prominentes Beispiel unter Linux ist KDE, welche komplett in C++ bzw. mit Hilfe der C++-Bibliothek Qt geschrieben ist. Mehr Information zu C/C++-Compilern gibt es hier: GCC (GNU C/C++-Compiler)

C#

C# ist eine im Jahr 2000 von der Firma Microsoft entworfene objektorientierte Programmiersprache für die .NET-Plattform. C# wurde in Konkurrenz zu Java entwickelt und weist dementsprechend viele Ähnlichkeiten zu Java auf, greift aber auch Konzepte von C++ und Visual Basic auf. C# Programme werden in einen plattformunabhängigen Bytecode umgewandelt, der dann von einem Interpreter ausgeführt werden kann. Um Programme mit C# zu entwickeln und laufen zu lassen, gibt es für Linux (u. a.) das Mono-Projekt. Beispiele für in C# geschriebene Programme sind das Notizprogramm Tomboy und die Fotoverwaltung F-Spot.

Go

Go ist eine seit 2009 von Google entwickelte plattformunabhängige, bedingt objektorientierte und kompilierte Programmiersprache mit automatischer Speicherbereinigung und Kompatiblität zu C. Go ähnelt syntaktisch C++/Java, bringt aber einige Neuerungen wie einfache nebenläufige Programmierung, Typsicherheit und erweiterte Funktionsdeklaration mit. Zur Zeit werden Compiler für Linux, Mac OS X und experimentell auch für Windows bereitgestellt. Go befindet sich noch in der Entwicklung und ist deshalb noch nicht so weit verbreitet wie beispielsweise C++. Weitere Details sind im Artikel Go zu finden.

Groovy

Groovy ist eine neue agile Programmiersprache, deren Programme in Java Bytecode übersetzt werden. Ihre Syntax wurde von Java entnommen und durch Konzepte aus Ruby, Python und Smalltalk erweitert. Groovy zeichnet sich dadurch aus, dass sowohl Groovy innerhalb von Java als auch in Java geschriebene Klassen und Methoden innerhalb von Groovy benutzt werden können. Außerdem können Groovy-Programme sowohl interpretiert als auch kompiliert werden. Weitergehende Informationen gibt es hier: Groovy.

Haskell

Haskell ist eine rein funktionale Programmiersprache, deren erste Version 1990 veröffentlicht wurde. Die verbreiteste Implementierung ist der Glasgow Haskell Compiler (GHC). Weitere Informationen und Beispiele sind im Artikel Haskell beschrieben

Java

Java ist eine plattformunabhängige, objektorientierte Programmiersprache, die dem Prinzip WORA (Write once, run anywhere) folgt. Die Syntax orientiert sich teils an C++, sodass ein Umstieg nicht sehr schwer fällt. Die Plattformunabhängigkeit von Java ist besonders hervorzuheben, da z.B. unter Linux geschriebene Programme auch unter MacOS oder Windows laufen. So ist z.B. Vuze in Java programmiert. Weitergehende Informationen gibt es hier: Java.

Lisp

Lisp ist eine funktionale Programmiersprache dessen erste Spezifikation bereits im Jahre 1958 durchgeführt wurde. Lisp ist die Abkürzung für List Processing und arbeitet daher hauptsächlich mit Listen. Eine freie Implementation von Lisp ist clisp.

Lua

Lua ist eine Skriptsprache, welche sich durch einen besonders kleinen und dadurch extrem schnellen Interpreter auszeichnet. Lua-Skripte können vom Interpreter direkt ausgeführt werden, es ist aber auch möglich, Lua als Bibliothek in C einzubinden. Mehr Informationen gibt es hier: Lua.

Pascal

Pascal wurde in den 70ern als Lehrsprache entwickelt und legt viel wert auf Einfachheit und strukturierte Gestaltung. Sie ist nicht so stark verbreitet, dennoch gibt es mit GNU Pascal und Free Pascal zwei freie Implementierungen für Linux. Unter Windows ist die visuelle Programmierumgebung Delphi recht populär, die Linux-Version Kylix wurde eingestellt, stattdessen gibt es jedoch eine freie plattformunabhängige Implementierung namens Lazarus, mit einer Komponentenbibliothek für bekannte GUI-Toolkits.

Perl

Perl ist eine Skriptsprache, die seit Mitte der achtziger Jahre existiert. Zwei "Schlagworte" (bzw. Phrasen) von / für Perl sind, dass es in Perl immer mehr als einen Weg gibt ein (Programmier-) Problem zu lösen und dass "einfache" Probleme / Aufgaben sich auch mit einfachen Programmen lösen lassen. Weitergehende Informationen gibt es hier: Perl.

Prolog

Prolog ist keine klassische Programmiersprache. Hierbei werden logische Problemstellungen in Wissensbasen niedergeschrieben. Wichtig ist die Formulierung des Problems mit seinen Regeln und Fakten. Die Lösung der Probleme wird nicht programmiert, sondern Prolog findet die Lösungswege durch bestimmte Verfahren selbstständig. Den vollständigen Artikel zu Prolog gibt es im Wiki.

Python

Python ist eine recht universelle Skriptsprache, welche weiterhin im Ruf steht, relativ einfach und strukturiert zu sein. Zudem ist Python nicht auf einen bestimmten Programmierstil (wie z.B. objektorientiert oder funktional) festgelegt. So sind z.B. der GNOME-Network-Manager oder auch die Inyoka Plattform, welche von ubuntuusers.de verwendet wird, komplett in Python geschrieben. Weitergehende Informationen gibt es hier: Python.

Ruby

Ruby (engl. für Rubin) ist eine interpretierte, objektorientierte Programmiersprache, die mehrere weitere Programmierparadigmen (Prozedurale Programmierung, Funktionale Programmierung, Nebenläufigkeit) unterstützt. Da Ruby wie Perl und Python eine Interpretersprache ist, muss der Programmcode vor der Ausführung nicht kompiliert werden. Weitergehende Informationen gibt es hier: Ruby.

Shell-Skripte

Die Shell (oft auch Terminal genannt) dient zwar in erster Linie zum Arbeiten mit und am (Datei-)System, ist aber voll skriptfähig. Dazu bringt die Shell eine eigene Skriptsprache mit. Diese ist grundsätzlich gleich für die verschiedenen Shells. Shell-Skripte eignen sich primär für alle Aufgaben rund um das System sowie dessen Verwaltung, sind aber nicht zwingend darauf beschränkt.

Webanwendungen

Will man eine reine Webanwendung schreiben, so eignen sich hierfür eventuell JavaScript oder PHP besser. Da beides aber "spezialisierte" Sprachen sind, erfolgt hier keine weiterführende Betrachtung.

Weitere Programmiersprachen

Außer den oben genannten Programmiersprachen gibt es noch eine große Vielzahl anderer Programmier- und Skriptsprachen. Dazu zählen u. a.:

und noch viele andere. Wie bereits in der Einleitung erwähnt, beschränkt sich dieser Artikel auf die (unter Linux) "gängigsten" Sprachen.

Intern

Extern

Diese Revision wurde am 29. April 2019 07:51 von frustschieber erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, Einsteiger