fit 2002 > Programmmiersprachentypen > die reale Praxis > Funktionale Sprachen

Überblick


Industrielle Anwendungen

  • Erlang >[erlang.org]

    Erlang ist eine funktionale Programmiersprache, die für skalierbare, parallele Echtzeitanwendungen verwendet wird.

    Erlang ist verwendet worden, um einige sehr grosse Telekommunikationsschaltsystemprodukte (hunderttausende Zeilen Quellcode) zu entwickeln, die weltweit von Ericsson heute vermarktet werden. Es ist auch verwendet worden, um unzählige Prototypen und Experimente zu Erstellen.

    Ericson ist einer der weltgrößten Hersteller von Nachrichtentechnikausrüstung. Ericsson ist in mehr als 100 Ländern aktiv und hat ungefähr 80000 Angestellte.

    Entwickler:
    Erlang wurde von einer Gruppe am Ericsson Informatik-Labor entwickelt

    Zahl der Benutzer:
    Ungefähr 300 innerhalb Ericsson, viele anderswo

    Zahl der Aufstellungsorte:
    35 innerhalb Ericsson über 80 anderswo

    Im Gebrauch:
    Seit 1987.

    Compiler:
    Drei Compiler (geschrieben in Erlang)

    Verwendbarkeit:
    Frei verfügbar auf der Erlang Home Page

  • AnnoDomini >[hafinum.com]

    AnnoDomini ist Hafinums Y2K Werkzeug. Es ist ein Programm zum Finden und Bereinigen von Y2k-Problemen in COBOL Programmen. AnnoDomini wird für IBM OS/VS COBOL entwickelt und läuft unter Windows NT und Windows 95. AnnoDomini basiert auf einer polymorphen Arttheorie des Romans, die spezifisch für das Lösen von von Problemen des Jahres 2000 entwickelt worden ist.

    AnnoDomini ist teilweise in Standard-ml geschrieben, und es scheint, ein vollkommenes Beispiel "der anderen Art" des realen Weltgebrauches von funktionaler Programmierung zu sein: Mit hilfe von funktionalen Techniken werden COBOL Programme auf andere COBOL Programme übersetzt.

    Nur das Herz der Software, die Analyse und Umwandlungs-Maschine, wird in einer funktionalen Sprache eingeführt. SML grammatische Definition und Lexer-Generatoren werden benutzt, um fast die Hälfte des Funktionscodes zu erzeugen, und Abhängigkeit mit anderen Sprachen (Visual Basic GUI) und Werkzeugen (LPEX, ein Syntax-empfindlicher Programmherausgeber entwickelt von IBM) ist für das komplette Paket wichtig.

    Entwickler:
    Hafnium (Präsident: Mads Tofte)

    Zahl der Benutzer:
    unbekannt

    Sprachen:
    Standard-ML, Visual Basic

    Compiler:
    unbekannt

    LOC:
    über 60K für das Standard-ml Teil, über 25K mit ML-Lex und ML-Yacc erzeugt.


  • LS/2000 >[legasys.com]

    Das System LS/2000 führt automatisierte Designwiederaufnahme und "Jahr 2000" Remediation des Vermächtnises COBOL, PL/I und RPG der Anwendungen durch. Die Architektur von LS/2000 ist Compiler-ähnlich. Seine Kernverfahren und -daten, die Quellenprogrammstruktur, semantische Analyse und anwendbare Quellumwandlungen darstellen, werden in TXL , eine reine erstrangige funktionale Programmierung Sprache geschrieben. Details von LS/2000 und von TXL sind im Netz vorhanden.
    Entwickler:
    Legasys Corporation

    Im Gebrauch:
    seit 1996

    Sprache:
    TXL

    Größe:
    über 50K LOC.

    Verfügbarkeit:
    Unter Lizenz.

  • Shop.com Verkaufs System >[shop.com]

    Shop.com ist eine e-commerce Lösung die Geschäften eine Plattform für den Internetauftritt bietet. Sie besteht im wesentlichen aus einer Datenbank die Händler Kategorieren und Links speichert.Die Datenbank selbst wird als Haskell Quellcode gespeichert. Der Seiteninhalt wird erzeugt, indem HUGS (ein Haskell Compiler) über die Datenbank läuft.

    Entwickler:
    Shop.com

    Zahl der Benutzer:
    3

    Im Gebrauch:
    seit 1998

    Sprache:
    Haskell

    Compiler:
    HUGS

    LOC:
    500 ausschließlich in der Datenbank

    Verfügbarkeit:
    Proprietär

  • Peval

    Peval ist ein Programm für teilweise Auswertung der Sprache CRL. CRL wird verwendet, Fluglinien Crews zu managen. Peval ist ein Teil eines Produktes, gebildet von Carmen Systems AB, verwendet durch fast alle europäischen (grossen) Fluglinien. Das Verwenden von Peval beschleunigt die Terminplanung um einen Faktor von 2. Das Verwenden Peval ist völlig automatisch und erfordert keine Benutzerintervention.

    Entwickler:
    Lennart Augustsson

    Zahl der Benutzer:
    ungefähr 50

    Im Gebrauch:
    seit 1995

    Sprache:
    Haskell

    Compiler:
    hbc

    LOC:
    über 10K.

    Verfügbarkeit:
    Proprietär

  • ECDL >[hp.com]

    Dieses ist eine kurze Beschreibung des Gebrauches von einer funktionale Programmiersprache in der realen Welt. Hewlett-Packard's Event Correlation Services (HP ECS), welches vor kurzem angekündigt worden ist. HP ECS ist ein Teil des HP Openview Produktes.

    Ein Fernmeldenetz schickt Fallanzeigen, wie Ausfallwarnungen, zu einer Netzführungstation. Diese werden für die Operatoren angezeigt. Aber einige Ereignisse in einem Fernmeldenetz können viele Fehlerfälle pro Ereignis erzeugen, genannt einen Fallsturm. Ein Beispiel ist, wenn ein Stammkabel geschnitten wird. Gewöhnlich erzeugt jede Führung im Kabel eine Warnung Anzeige, wenn sie und eine andere Mitteilung geschnitten wird, wenn sie wieder hergestellt wird.

    Ein Fallsturm überbelastet die Operatoren mit den Informationen, die es schwierig macht, zu erklären, welcher Art das Ereignis ist und wo es auftrat. Um dieses Problem zu lösen wird ein Fallwechselbeziehungstadium zwischen dem Netz und der Managementstation eingesetzt. Ein Korrelator übersetzt Gruppen von Fällen in einen einzelnen Fall, der besser die Natur des Ereignisses beschreibt.

    Der Korrelator wendet die Sachkenntnis des Operators an, wenn er die Ursache des Fallsturms beurteilt. Einige Handelsprodukte benutzen ein Expertensystem, um die Wechselbeziehung durchzuführen. Diese neigen, langsam zu sein, zu langsam für Fallstürme in den großen Netzen. Das andere Übermaß soll die Sachkenntnis in der Logik eines Programms in irgendeiner herkömmlicher Sprache wie C kodieren. Dieses gibt ein schnelles correlator aber eins, das schwierig beizubehalten ist.

    Das System besteht aus den folgenden Teilen:

    • Eine Maschine, die den Algorithmus implementiert
    • Eine Sprache benannte Event Correlation Beschreibung Sprache (ECDL) die den Zusammenhänge beschreibt. ECDL wird zu einer virtuellen Maschinensprache kompiliert, die in die Maschine geladen wird.
    • Ein GUI für das Entwerfen und das Simulieren. Das GUI produziert ECDL für den Compiler. (A Benutzer kann direkt in ECDL kodieren).

    ECDL hat eine strukturelle Seite und eine Funktionsseite. Die strukturellen Seitlichen beinhaltet die Beschreibung Die Funktionsseite ist für das Einführen der Funktionen, die einen Nullpunkt z.B. parameterisieren. das Prädikat eines Filternullpunktes. Es ist eine eifrige Funktionsminisprache, die nach Standard-ml modelliert wird. Die Arten in ECDL umfassen:

    • einfache Typen wie Integer, Boolean oder Strings
    • Domain-spezifische Typen
    • Tuple, Listen und Funktionen
    • Dictionary
    • Typ-Sammlungen

    Ein Fall kann von den unterschiedlichen Formaten sein, verwendet durch unterschiedliche Arten der Netze. Diese schließen ASN.1 für CMIP, ein eingeschränktes ASN.1 für SNMP oder manchmal ASCII Zeichenketten mit ein. Wie da ECS wird erwartet, mit irgendwelchen dieser Formate fertig zu werden, liefert es nur allgemeinere Datenstrukturen Tuples und Listen. Die Maschine bildet den Fall in ECDL Datenstrukturen ab.

    Ein Fall wird als Typ (ein Formationsglied von) Wörterbuch von Attribute zu Werte dargestellt. Die Art eines Attributwertes kann möglicherweise nicht bekannt, bis Laufzeit also ECDL dynamisch geschrieben ist (je nach Entwurf).

    Die Eigenschaften der funktionalen Sprachen, die zum Fallwechselbeziehunggebiet besonders nützlich sind, umfassen:

    • Zustandslosigkeit
    • Kombination von Funktionen

  • Design/CPN >[design/cpn]

    Design/CPN ist ein Werkzeugpaket, das den Gebrauch von farbigen Petrinetzen unterstützt (auch bekannt als CP-nets oder CPN). Es hat drei integrierte Teile: Der CPN Herausgeber unterstützt Aufbau, Änderung und Syntaxprüfung der CPN Modelle. Der CPN Simulator stützt wechselwirkende und automatische Simulation der CPN Modelle. Dase Auftreten-Diagramm-Werkzeug stützt Aufbau und Analyse der Auftretendiagramme für die CPN Modelle (auch bekannt als Zustandräume oder reachability graphs/trees). Der Simulator und das Auftretendiagrammwerkzeug werden beide in der funktionalen Ssprache ML eingeführt. Ausserdem ist die Werkzeugsprache selbst (die Beschreibungsprache) ml.

    Entwickler:
    Universität von Aarhus (Dänemark) und von Meta Software Corporation (Cambridge MA, USA)

    Zahl der Aufstellungsorte:
    200

    Im Gebrauch:
    1989 - Geschenk

    Sprache:
    CPN ml, das SML/NJ mit syntaktischem Zucker ist

    Compiler:
    SML/NJ 0,93

    Verfügbarkeit:
    Kostenlos mit Lizenz

  • ptk

    ptk ist ein Werkzeug, das eine syntaktische und semantische Analyse auf "Message Sequence Charts'' durchführt und Test-Skripts in verschiedenen Sprachen (z.b. SDL, TTCN und C) generiert. Message Sequence Charts werden typischer Weise in der Telekom-Branche für Systemspezifikationen verwendet. Die generierten Test-Skripts können prüfen ob eine Implementation der Spezifikation genüge tut.

    Die Implementierung modelliert MSCs mit der Prozeßalgebra CSP und verwendet eine taktische Bezeichnung, die Maschine neu schreibt, um Testindexe zu erzeugen. Funktionale Sprachen haben sich als dafür besonders geeignet erwiesen.
    Entwickler:
    Motorola Labors

    Zahl der Benutzer:
    n/a

    Im Gebrauch:
    seit 1998

    Sprache:
    Standard-ML

    Compiler:
    SML/NJ

    LOC:
    über Linien 52K

  • Kombinatoren für finanzielle Ableitungen

    Finanzielle- und Versicherungsverträge klingen nicht wie vielversprechende Gegend für die funktionale Programmierung und formale Semantik, aber tatsächlich haben wir entdeckt, daß Einblicke von Programmiersprachen direkt auf dem komplizierten Thema des Beschreibens und des Bewertens einer großen Kategorie Verträge tragen.

    Es gibt eine Kombinator-Bibliothek, die uns erlaubt, solche Verträge genau zu beschreiben, und eine kreative denotational Semantik entwickelt, die sagt, was solche Verträge sind.

    Entwickler:
    Jean-Treber Eber und Simon Peyton Jones

    Zahl der Benutzer:
    4

    Im Gebrauch:
    unter Entwicklung

    Sprache:
    Der mlFi Compiler wird in OCaml geschrieben

    LOC:
    12,000

    Verfügbarkeit:
    Ein Handelsprodukt von den Lexifi Technologien (bald)


Compiler und Interpreter

  • Glasgow Haskell Compiler >[GHC]

    Der Glasgow Haskell Kompilator (GHC) ist ein industrieller Stärke Haskell Kompilator.

    • GHC bietet ein ausbaubares I/O System, basiert auf einem "monad".
    • Eine Anzahl von bedeutenden Sprachenerweiterungen sind implementiert.
    • Ein Profiler um Programme auf Zeit- und Platzverhalten zu untersuchen.
    • Sehr gute Fehlermeldungen.
    Entwicklungsmannschaft:

    Simon Peyton Jones (Teamleiter), Jim Mattson , Wille Partain , Andy Kieme , Cordy Hall, Kevin Hammond , Simon Marlow , John Launchbury , Bryan O'Sullivan , Alastair Reid, Patrick Sansom , Andre Santos , Philip Wadler


    Zahl der Benutzer:
    Viele

    Im Gebrauch:
    Seit 1992

    Sprache:
    Haskell 1,2

    Compiler:
    Selbst (GHC), HBC, NHC

    Verfügbarkeit:
    >[download]

  • ML Partieller Evaluator

    Ein partieller Evaluator für ML. Binding time Analyse wird durch Set-basierte Analyse geboten. Der primäre Fokus ist den Overhead der durch Modularisierung von ML entsteht zu Messen.

    Entwickler:
    Karoline Malmkjaer, Aarhus
    Nevin Heintze, Fuchs-Projekt, CMU
    Olivier Danvy, Aarhus

    Im Gebrauch:
    Noch unter Entwicklung.

    Sprache:
    SML/NJ

    Compiler:
    Eine geänderte Version von SML/NJ 0.93

  • Standard-ml of New Jersey

    SML/NJ ist ein Compiler und eine Programmierumgebung für die Standard-ML Sprache. Es wurde entwickelte gemeinsam an den Bell Laboratories und der Princeton Universität. Es ist ein offenes System (Quellecode ist frei vorhanden), implementiert in Standard-ML. Version 0.93 von SML/NJ erzeugt maschinenabhängige Sprache für 68020, SPARC und die MIPS (big und little endian), I386/486, HPPA(HP9000/700) und RS/6000 unter verschiedenen Versionen des Unix Betriebssystems (SunOS, Ultrix, Mach, Irix, Riscos, HPUX, AIX, ZUSATZ, etc.) und auf dem Macintosh OS (Mac II, System 7.x, minimales RAM 12MB oder irgendein System von der grösseren oder gleichen Energie, die die meisten Macs miteinschließt, die nach ungefähr 1987 produziert werden).

    SML/NJ kommt mit einem Quellecode Debugger, Auswerteprogramm, GNU Emacs Schnittstelle, ML Implementierungen von LEX, YACC und dem Twig, unterschiedlichem Kompilation Service, parallelem ML, der eXene X Fensterbibliothek und der SML/NJ Bibliothek. Es läuft interaktiv oder kann ausführbare Anwendungen generieren.

    Es gibt diverse non-standard Extensions wie first-class-continuations, Unix Signal Behandlung und Funktionen höherer Ordnung.

    Entwickler:
    Andrew W. Appel und David B. MacQueen, mit Beiträgen von den Dutzenden von anderen.

    Zahl der Benutzer:
    300+

    Im Gebrauch:
    seit 1988

    Sprache:
    Standard-ML

    Compiler:
    SML/NJ

    Verfügbarkeit:
    frei verfügbar

  • Objective Caml >[ocaml.org]

    Objective Caml ist eine Implementation von ML mit vielen Erweiterungen. Es vereint imperative, objektorientierte und funktionale Programmierung.

    Es bietet sowohl einen Interpreter als auch einen Compiler und läuft unter Unix, MacOS und Windows.

    Wie alle Dialekte von ML bietet es:

    • First class functions
    • Mächtiges Typsystem mit parametrischem Polymorphismus
    • Benutzerdefinierte Typen
    • Pattern matching
    • Exceptions
    • Automatic memory management
    Zusätzlich hat es aber noch folgende Vorzüge anzubieten:
    • Ausgeklügeltes Modulsystem
    • Klassenbasierten OOP Layer
    Entwickler:
    Didier Rémy, Xavier Leroy, Pierre Weis

    Verfügbarkeit:
    frei erhältlich


Beispiel Erlang

Als Beispiel fuer eine lebendinge, in der Industrie verwendete Programmiersprache wird oft Erlang genannt. Entwickelt von Ericson für Telefoniesysteme ist sie eine der wenigen funktionalen Sprachen bei denen empirisch nachgewiesen wurde das Applikationen gewisser Anwendungsgebiete damit mit weit geringerem Aufwand entwickelt werden können als mit einem prozeduralem oder objekt-orientiertem Ansatz. Es folgt die Zusammenfassung aus einer englischen Studie die genau das Bewiesen hat >[case study].

"For Erlang to be used inside Ericsson it was required that it was used outside and for Erlang to spread outside Ericsson there had to be wide use of it inside. The only way to get around this was a steady spread of the language in both spheres. In fact, in the dynamic world of telecommunications, the history of Erlang has proceeded in a seesaw fashion with focus alternating between internal and external use, see Table 10.1.

The development and use of Erlang shows that for a new programming language to be reasonably successful there are, at least, the following prerequisits:

  • There has to be a sizeable and stable support organisation. The OTP product unit numbers 18-20 people financed by the in-house Ericsson projects.
  • There must be training and consultants available.
  • There has to be some niche that is sufficiently interesting and important for large sectors of industry. In Erlang's case high-availability, reliable, distributed systems and rapid design through high abstraction level and prototyping.
  • The language must be reasonably simple to learn and to implement.
A most remarkable observation is that while hardware developments go ahead at great speed (note Moore's law) basic programming still remains at about the same level of technology as 30 years ago. Tremendous efforts are made on various methodolgies and the visions in industry seem to be in the direction of "software factories" where the work can be reduced to mere "coding".

Today when large numbers of people are available with university degrees in Computer Science there should be a greater emphasis on better technologies. Functional programming has been around just as long and difficult problems such as hot code loading and distributed programming can only reasonably be handled through better technology such as Erlang provides.

Was it worth the effort? Did the Erlang development produce the desired technical result and did it serve the needs for product development? The answer must be "yes" on both accounts. Erlang has also shown that:
  • Functional programming can be used for very large applications involving large project teams.

  • Functional programming can be used for industrial real time embedded applictions.

  • Functional programming gives significant commercial advantages in raising design productivity and enabling rapid developments through prototypes and successive increments.
  Internal usage External usage Comments
1984-6 - - Technology evaluations
1987-9   - Experimental developments
  Use in prototypes   Presented at ISS'90
1990-2   Academic distribution Experimental developments
      Noted at ISS'92
1993-5 Limited use in External marketing Erlang Systems established
  products    
1996   External marketing OTP development
  Use for strategic halted OTP product unit
  product   established
1997 development External marketing  
    restarted  
1998 Nine products 3,323 evaluation OTP development
  displayed at CeBit systems delivered and deployment
  Erlang stopped Open source  
  at ERA release  
1999 AXD 301 and GPRS Growing use for Bluetail started
2000 win important orders product development Alteon buys Bluetail

Table 10.1: The history of Erlang summarized.
Erlang provides many examples of the difficulty of technology introduction, notably:
  • Erlang and functional programming in general both enable and require a new way of working with much more interactivity. The top-down waterfall methodologies were designed to handle conventional programming languages. Technol- ogy and methodology both have to be changed.

  • Marketing a new programming language and a new way of working requires a huge effort and investment. Twice Erlang Systems has tried marketing Erlang with limited resources and with meager results. Sun has probably spent a fortune on Java but that has paid back in the form of increased demand for computer equipment. Ericsson is a telecommunications company and selling Erlang would not sell more switches.

  • Open source combined with a good support organisation provided the real breakthrough. Many more programmers can try Erlang and companies know that support and education are available if needed.
When CSLab was established its aim was described thus
  • "CSLab's responsibility in the long term is to create a basic software technology for future telecom systems and support systems and in the near term to contribute to the introduction of new software technology in current systems."

With Erlang/OTP CSLab achieved this aim and has in the process shown that applied research in an industrial laboratory environment, indeed, works as was the proposition in the key paper. While technical progress has continued steadily ­ marketing, dissemination, and other interaction with the external world have shown a much more uneven progress. However, it is hoped that these experiences can be useful for other software developers and hence they have formed the main theme of this thesis."

Weiterführende Informationen


>[realworld]
Functional Programming in the Real World
>[ml] Implementation work using ML

>Entstehungskontext | Konzepte und Techniken | Entwicklung und Auswirkungen | Praxis | Bewertung