Jürgen Böhms Heimatseiten - Wissenschaft
Lisp
Computer-
algebra
surfxp
graphics
software
asxp
graphics
software
Numerics
Mathematik
Physik
Informatik

Informatik - Computerwissenschaften

Der Stand der Dinge - eine politische Vorbemerkung

Wer heute in einer Fachbuchhandlung nach Literatur über Programmiersprachen sucht, wird meterweise Bücher über C++, Java, Perl, Visual Basic, C finden, sowie einiges über "Scripting-Languages" oder auch "Web-Languages".

Ferner werden ihm unzählige Bücher über HTML, XML, CSS, Datenbanken, ständig neue Entwurfsmethodologien sowie Spezialbücher aus der Unix/Linux Welt bzw. dem konkurrierenden Microsoft-Universum begegnen.

Sucht er hingegen Bücher über Algorithmen oder über die Programmiersprachen Eiffel, Ada, Smalltalk oder Lisp wird er wahrscheinlich selbst in einer sehr gut sortierten Buchhandlung nur auf ein oder zwei Bücher über Algorithmen stossen und Bücher zu Eiffel, Ada und Lisp sollte er wohl besser gleich bei einem Internet-Buchhändler per Katalog bestellen - der Buchladen seines Vertrauens wird sie nicht vorrätig haben.

Auf ernstzunehmende Bücher zur Geschichte der Computertechnik, die die grossen Entwicklungslinien aufzeigen und historische Vergleiche ermöglichen, braucht er übrigens gar nicht zu hoffen - das wenige, was in der Buchhandlung ausliegt, sind oberflächlich zusammengeschriebene Machwerke von Journalisten - immerhin kann sich der ernsthaft Interessierte mit wissenschaftlichen Vorkenntnissen einiges an Quellenmaterial im Internet beschaffen, vieles bleibt jedoch auf zahllose Fachartikel in den wissenschaftlichen Bibliotheken verstreut.

Der polemische Ton, den ich oben angeschlagen habe, wird es schon angedeutet haben: Ich halte diesen Zustand nicht für ideal, sondern für die Kulmination von Fehlentwicklungen, die seit Mitte der 80er Jahre ihren Anfang im Bereich der "Mikrocomputer" genommen haben. Leider gibt es zu diesem ganzen Komplex noch keine konzentrierte geschichtliche Darstellung, entweder in Buchform oder im Internet. Eine solche Darstellung würde enthüllen, dass noch jenseits des allseits bekannten Krieges zwischen "Linux" und "Microsoft", zwischen "Open Source" und "Intellectual Property" technische und technik-organisatorische Chancen vertan wurden, deren Wahrnehmung uns eine völlig andere - und bessere - Computerwelt beschert hätte.

Wer diese Behauptung an den Fakten überprüfen will, wird viele Einstiegspunkte auf meinen Lisp-Seiten finden - besonders eine Erkundung der Geschichte der Lisp-Maschinen und ihres legendären Betriebssystems "Genera" dürfte dem aufgeschlossenen Betrachter wohl die Augen übergehen lassen.

C++ - Ideologie und Wahrheit

WWW C++ Information, FZ Jülich

Ian Joyner: C++ ?:A Critique of C++ (3rd ed.)

Die Linksammlung des renommierten FZ Jülich zum Thema C++ zeichnet sich nicht nur durch ihre sinnvolle Zusammenstellung für denjenigen aus, der in C++ programmieren muss oder will, sondern auch durch die Fairness, mit der Kritik an dieser Sprache unter der Rubrik "C++ Critique" zugänglich gemacht wird.

Der (lange, genaue und materialreiche) Artikel von Joyner, der C und C++ einerseits immanent kritisiert und andererseits mit Alternativen wie Eiffel vergleicht könnte für manchen, der bisher schon ein leichtes Unbehagen über C++ empfand, zum Augenöffner werden.

Wer eher etwas positives über C++ lesen will, findet eine gute Übersicht auf den Seiten des Erfinders, Bjarne Stroustrup.

C++: Konklusio

Alles in allem wird man, wohl oder übel, noch eine ganze Zeit mit C++ leben müssen und es ist - ich will es gar nicht abstreiten - in C++ sehr viel möglich, wenn auch mit barocken Komplikationen im Quellcode. Der Hauptvorteil von C++ wird aber wohl immer der folgende bleiben: Es zwingt, wie auch C davor, den Programmierer zur Effizienz, indem es ihm keinen "leichten Weg" eröffnet, wie (als extremster Gegensatz) Common Lisp ihn immer bereithält. Exploratives, spielerisches Programmieren ist bei C++ nicht gefragt, hier wird konstruiert, vorgeplant und dann so planmäßig umgesetzt, wie auf einer Großbaustelle der Baubetrieb abläuft. Dagegen gleicht der Umgang mit Lisp eher der Gestaltung einer Plastik aus Lehm oder (wie von Paul Graham bemerkt) dem Malen eines Ölgemäldes. Verschiedene Welten also...

Eine C++ Demo

Daß C++ auch schön sein kann, habe ich mit einem kleinen Spielprojekt entdeckt, wo ich versucht habe, Grundfunktionen eines symbolischen Algebraprogramms - ich will hier nicht das Wort "System" gebrauchen - in C++ möglichst elegant zu realisieren. Leider fehlt mir zum weiteren Ausbau die Zeit, hätte ich unbegrenzt von ihr zur Verfügung, würde ich dieses Projekt schon aus Freude an der Klarheit und Stringenz des Programmaufbaus sicherlich weitertreiben.

Wer interessiert ist: Polysim im gleichnamigen Ordner.

Und als tar.gz Download Polysim.tar.gz

Template Metaprogramming

Daß in C++ viel möglich ist, beweist übrigens das vielbewunderte "Template Metaprogramming", das auf der "Entdeckung" beruhte, daß der Template-Instanziierunsprozeß Turing-vollständig ist. (Man hatte das lange Zeit übersehen, obwohl die Standard-kompatiblen Compiler diese Möglichkeit längst boten. C++ hatte sich wieder einmal als "Wundertüte" erwiesen). Ein Beispiel dafür liefert der folgende Code, der meine persönliche Rekonstruktion dieser Idee wiedergibt:



#include <iostream>

#include <vector>

#include <iterator>

using namespace std;

vector<int> v;




template<int i>  class f {
public:
	const static int val =  i * f<i-1>::val;
};

template<> class f<1> {
public:
	const static int val = 1;
};

template<int x, bool a, bool b> class isf {
public:
	const static bool val = b;
};

template<bool a, bool b> class isf<0,a,b>  {
public:
	const static bool val = a;
};

template<bool x> void isfb (int j) {
	v.push_back(j);
};

template<> void isfb<false> (int j) {
	return;
};


template<bool x, int tval, int fval> class myif {
public:
	const static int val = tval;
};

template<int tval, int fval> class myif<false, tval, fval> {
public:
	const static int val = fval;
};



template<int i, int j> class p {

public:

	const static bool val =
		isf<(i % j),false,p<i,j-1>::val>::val;
	
};



template<int i> class p<i,1> {

public:
 
 const static bool val = true;
 
};


template<int i> void l() {
const bool bb = p<i,i-1>::val;
isfb<bb>(i);	
l<i-1>();
};

template<> void l<1>() { return; }





int main (int argc, char* argv[]) {

int ff = f<12>::val;

cout << "fak = " << ff << endl;

l<25>();

cout << "test = " << myif<1==0,12,22>::val << endl;

typedef vector<int>::iterator vintIt;


for (vintIt it = v.begin(); it < v.end(); it++ ) {
	cout << *it << endl;
};


};

Wenn man das mit gcc -S ee.cpp -O2 übersetzt (ee.cpp enthalte den obigen Programmtext) so findet man in ee.s... (wird nicht verraten...).

...to be continued !


Navbutton Zentrum Anfang Anfang Ende   mailto Webmaster     Zuletzt geändert - 15 07 2001
Impressum