[linux-l] Ocml vs. Java

olafBuddenhagen at gmx.net olafBuddenhagen at gmx.net
Mo Okt 3 00:57:45 CEST 2005


Hallo,

> > Was spricht denn gegen Listen? Allein die Dateiegröße?
> 
> Ja, aber nicht nur. Ist die Datei ne Pipe, dann will ich, dass das
> Programm sofort nach jeder Zeile reagiert, und nicht erst, nachdem die
> Pipe ein EOF sendet.
> 
> Außerdem: Schon prinzipiell packe ich nichts in eine Liste, von dem
> ich 1. im Voraus die Größe nicht abschätzen kann und 2. nur
> sequentiellen Zugriff brauche. Das ist für mich eine Grundregel des
> gesunden Programmierer-Verstands.

Genau um solche Fragen sollte sich der Programmierer garnicht kümmern
müssen.

Die Listen sind bei rein funktionalen Sprachen doch nur eine
Abstraktion. Der Compiler sollte selbst entscheiden, ob er tatsächlich
eine komplette Liste aufbaut, oder das ganze rein sequentiell
abarbeitet, oder vielleicht jeweils kleine Blöcke liest und abarbeitet.
(Soweit es der Algorithmus zulässt, wird es eigentlich immer auf
Letzteres hinauslaufen, da das am effizientesten ist -- Parallität der
Hardware kann ausgenutzt werden, und es wird sparsam mit Speicher/Cache
umgegangen.)

Das mit der Pipe ist allerdings ein gutes Beispiel für die Grenzen rein
funktionaler Programmierung -- ein sehr ähnliches wollte ich für den
anderen Teilthread benutzen:

Zur Zeit bastle ich an einigen Progrämmchen, die bestimmte Testtöne
erzeugen. Nun gibt es diverse Möglichkeiten, das zu Implementieren: Man
kann in einer Schleife jedes Sample jeweils komplett für sich berechnen
und gleich ausgeben. Oder man könnte den gesammten Ton im Speicher
aufbauen und dann ausgeben. Oder halt Blockweise. Auch kann man
bestimmte Werte, die immer wieder benutzt werden, schon vor dem Eintritt
in die Hauptschleife berechnen. Und so weiter.

All diese Entscheidungen würde mir bei einer rein funktionalen Sprache
der Compiler abnehmen. (Vorausgesetzt ich habe den Algorithmus so
entworfen, dass es keine unnötigen Abhängigkeiten gibt, die ein
bestimmtes Vorgehen erzwingen...) Allerdings gibt es eine gewisse
Schwierigkeit: Die erzeugten Testtöne werden nämlich nicht irgendwo
gespeichert, sondern direkt (per sox) an die Soundkarte gepipet -- und
die möchte die Daten nun mal recht kontinuierlich. Wenn der Compiler
meint, es wäre optimal in sehr großen Blöcken zu rechnen, gibt es ein
Problem.

Es muss also Möglich sein, die zeitlichen Vorgaben der Soundkarte
irgendwie dem Compiler mitzuteilen. Fragt sich ob das praktikabel ist,
ohne die rein funktionale Welt zu verlassen. Ansätze für sowas würden
mich ziemlich interessieren... Schätze ich sollte mich mit dem Thema mal
ernsthafter beschäftigen :-)

-Olaf-



Mehr Informationen über die Mailingliste linux-l