Was ist das: eine Programmiersprache? ł Formale Sprache*), die zur Beschreibung von Berechnungen in Computern verwendet wird: 6. Programmiersprachen im Überblick Programme = Daten + Algorithmen *) Mengen von Wörtern über einem Alphabet: (Folge von Symbolen) L A* ł Wichtig: - Sprache für menschlichen Leser verständlich; - effizient implementierbar ł Sprache hat Syntax (vgl. Grammatiken, EBNF) und Semantik (Bedeutung, Wirkung). Version: 21. Okt. 2015 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Probleme und Fragen Programmiersprachen: eine Auswahl Forth Mehr als 1000 unterschiedliche Programmiersprachen in Forschungsgruppen, internationalen Komitees sowie in Computerfirmen entwickelt [Wilson 93] IBM: Fortran, PL1 Algol 60 Fortran Smalltalk Algol 68 SETL Simula 67 YACC PL/1 LEX CLU SPSS Sun: Java awk Pascal Snobol IFIP: Algol 60, Algol 68 Universitäten: Pascal, Modula-2, CLU Cobol Concurrent Pascal Turbo-Pascal DoD: Cobol, Ada SQL Alphard SDL DELPHI OPS-5 Oberon • Sprachen, Dialekte, Versionen ... und das Hauptproblem der Vielfalt: Portabilität Eiffel Object Cobol Miranda Chill Ada HTML CDL 2 Beta Modula-3 Ada 95 C C++ Assemblersprachen Objective-C Scheme UML Common Lisp Oberon-2 C# Basic Standard-ML VDM Clipper RPG Lotus K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Z Act-One Haskell CSP Maschinensprachen Occam Lisp Opal Prolog II BCPL Mesa 3 Hope Prolog APL • Klassifikation … ... nach Anwendungsgebieten ... nach der Historie ... nach Programmiersprachengenerationen ... nach Programmierparadigmen ... nach Verbreitungsgrad Latex Postscript Modula-2 • Klassifikation: Wie kann eine Ordnung in die Vielfalt gebracht werden? K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 2 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 T Linda Java PHP 4 Welche Programmiersprache ... Programmiersprachen und Varianten Pascal • • • • • • Pascal-P Standard-Pascal Concurrent Pascal VAX-Pascal DEC-Pascal Turbo-Pascal - Version 2 ... - Version 3 ... - Version 4... - Version 5 ... - Version 6 ... • Object Pascal • DELPHI Pascal Sprachdialekt • ... sollte man beherrschen? Fortran • ... ist weit verbreitet? • • • • • Version Fortran 77 Fortran IV Fortran 90, 95 HP-Fortran ... • ... ist die beste? • ... ist modern? Compiler Æ Portabilitätsprobleme Java Hauptziel: Portabilität Ækeine Dialekte - Version 1.3 (Mai 2000) - Version 1.4.0 - Version 1.4.2 - Version 1.5.0 … - Version 8 (März 2014) Sollte man möglichst viele Programmiersprachen beherrschen? C • • • • • Kernighan-Ritchie-C ANSI C (Standard) Visual C Borland C ... K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Wie kann eine Ordnung in die Vielfalt von Programmiersprachen gebracht werden? 5 Klassifikationen 6 Klassifikationen ... nach Anwendungsgebieten ... nach Anwendungsgebieten ... nach der Historie ... nach Programmiersprachengenerationen ... nach Programmierparadigmen ... nach Verbreitungsgrad K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 7 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 8 Programmiersprachen und Anwendungen (1) Programmiersprachen und Anwendungen (2) • Wissenschaftlich-technischer Bereich (Physik): • Statistik: Fortran SPSS R (statistische Auswertung von „big data“, 1990, pupulär ab 2010) • Kommerzieller Bereich (Banken, Verwaltung): Cobol • Künstliche Intelligenz (Expertensysteme ...): Prolog, Lisp, Haskell ... • Schriften / Texte: • Systemsoftware (Compiler, Betriebssysteme): Nicht mehr Programmiersprachen im engeren Sinne Latex, Postscript C, C++, Ada, Java, CDL 2 • Echtzeit: • Compiler-Generatoren: Ada95, Pearl Lex, Yacc • Datenbanken: SQL • formale Spezifikationen: • Telekommunikation: Z Chill • SW-Architekturen: Achtung: Viele Sprachen sind universell anwendbar (C, C++, Ada, Java, Pascal, Python ...) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 UML 9 10 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Entwicklung von Programmiersprachen (Quelle: nach Appelrath, Ludewig 'Scriptum Informatik‘‚ 1995) Assemblersprachen 1950 alte Sprachen 1962 1966 APL Außenseiter Algol58 OO Sprachen 1960 Klassifikationen Algol-Familie Fortran 1957 Algol60 Lisp Cobol Basic Algol-W Simula 67 PL/1 Algol68 1968 BCPL 1970 ... nach der Historie Pascal Fortran IV Concurrent Pascal FORTH 1074 C PROLOG Modula Mesa 1976 Fortran 77 OPS5 Smalltalk-80 1980 Modula-2 1984 C++ 1988 1995 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 11 Ada Eiffel HP-Fortran Delphi Java Ada95 Ruby (1995), Python (1995), PHP (1997), C# (2000), Swift (Apple, 2014), Cuda (2015) 12 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Internet: Informationen zu Programmiersprachen Liste (aller) Programmiersprachen (Stand 6. 10. 2015): http://de.wikipedia.org/wiki/Liste_von_Programmiersprachen Klassifikationen Liste objektorientierter Programmiersprachen (Stand 30. Mai 2015): http://de.wikipedia.org/wiki/Liste_objektorientierter_Programmiersprachen ... nach Programmiersprachengenerationen Zeittafel: http://de.wikipedia.org/wiki/Zeittafel_der_Programmiersprachen 13 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 14 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Programmiersprachgenerationen • Programmiersprachen der 1. Generation: Klassifikationen Maschinensprachen • Programmiersprachen der 2. Generation: Assemblersprachen ... nach Programmierparadigmen • Programmiersprachen der 3. Generation: höhere algorithmische u. objektorientierte Sprachen Æ Pascal, Ada, C, Basic, Java ... • Programmiersprachen der 4. Generation: Tabellenkalkulation, Datenbanksprachen Æ Lotus, SuperCalc, dBase ... Ganz wichtig! • Programmiersprachen der 5. Generation: Sprachen der künstlichen Intelligenz ÆProlog, Lisp, OPS-5 ... deskriptive Sprachen K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Æ Abstraktionsniveau 15 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 16 Programmiermodell (Paradigma) Programmiermodell (Paradigma) Programmiersprachen Programmiersprachen imperative (algorithmische) maschinennah höhere objektorientierte Assemblersprachen Pascal, Ada, C, Fortran, Cobol, Chill, PL/1 Forth, Basic Oberon-2, Haskell, Prolog, Eiffel, Lisp, Prolog II, Simula 67, Scheme, OPS-2 C++, Hope, Object Cobol, Miranda, Beta, Standard ML Programmentwicklung folgt Java, Delphi einem Modell – konzentriert sich C# auf Beschreibung von … Achtung: Mischformen - Java: objektorientiert, imperativ - Common Lisp: objektorientiert, funktional, imperativ - funktionale maschinennah höhere Klassifikation deskriptive krrip wird später noch einmal objektorientierte kttorie diskutiert ffunktionale unk nalle logische AssemblerAssemblersprachen sprrachen Pascal, Ada, Ada, C C,, Fortr ran, Fortran, Cobol, Chill, PL/1 Forth, Basic Oberon-2, Eiffel, S imula a 67, 6 7, Simula C ++, C++, Object Cobol, Beta, Java, Delphi C# imperative (algorithmische) deskriptive logische Algorithmen Objekten Funktionalen Zusammenhängen Logik des Problems K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 17 Programmiermodell: imperativ Haskell, H as Lisp, L isp Sch Scheme, Ho Hope, Mi Miranda, St Standard ML Prolog, Prolog II, OPS-2 Achtung: Mischformen - Java: objektorientiert, imperativ - Common Lisp: objektorientiert, funktional, imperativ K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 18 Programmiermodell: objektorientiert • Orientiert auf Beschreibung von kooperierenden Objekten: • Orientiert am Algorithmusbegriff: - Programme als Folgen sequentiell auszuführender Anweisungen Objekt = • Auf von-Neumann-Rechner ausgerichtet: Semantische Einheit aus - Anweisungen verändern Daten im Speicher - Daten (Variablen) • Basiskonzepte: - Operationen / Algorithmen zur Bearbeitung der Daten - Variable: zur Datenspeicherung - Anweisung: zur Bearbeitung von Variablen-Werten • Strukturierungsmethode: - Teilalgorithmus, d. h. Prozedur, Methode, Funktion K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Klasse = Beschreibungsform für ähnliche Objekte Programm = Menge von Klassen 19 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 20 Programmiermodell: logisch Programmiermodell: funktional • Programm = auf die logische Beschreibung eines Problems orientiert Programm = Ein funktionales Programm beschreibt eine Komposition von (mathematischen) Funktionen. Beschreibung von Relationen zwischen 'Daten' / d.h. zwischen 'Objekten der Realität' Mathematische Funktion f: D Æ W (Definitionsbereich, Wertevorrat) mittels der Prädikatenlogik Beispiel: - Keine Zuweisung von Werten an Variablen; - Keine Beschreibung von Algorithmen; z.B. kein Zyklus - Kein Von-Neumann-Rechner als Hardware-Modell elternteil (lisa, maria). elternteil (hans, maria). Beispiel: schwester (X, Y) :elternteil (Z, X), elternteil (Z, Y), weiblich (X). weiblich (maria). weiblich (lisa). Programm map, das Funktion f auf alle Elemente einer Liste anwendet, z.B map (add 1) [1,2,3] => [2,3,4] map (mult 2) [1,2,3] => [2,4,6] Problem beschrieben; nicht: Algorithmus maennlich (hans). 21 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Gegenstand der Vorlesung GdP höhere objektorientierte Assemblersprachen Pascal, Ada, C, Fortran, Cobol, Chill, PL/1 Forth, Basic Oberon-2, Eiffel, Simula 67, C++, Object Cobol, Beta, Java, Delphi C# K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 22 Es kommt nicht so sehr darauf an, möglichst viele Programmiersprachen zu beherrschen, sondern vielmehr: • Konzepte (Anweisungen, Typen ...) • Programmiertechniken (Sortieren, Suchen ...) • Komponentenbildung (Modularisierung: Zerlegung von großen Programmen) • Paradigmen (objektorientiert, imperativ, logisch, funktional) • Methoden zur Entwicklung komplexer Software (Software Engineering) • theoretische Grundlagen der Programmierung • Teamarbeit • Kenntnisse der Fachdisziplin deskriptive maschinennah K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Resümee Programmiersprachen imperative (algorithmische) Realisiert durch folgendes funktionales Programm map: map f [] = [] (1. Fall: leere Liste []) map f (x:xs) = f x : map f xs (2. Fall: nicht-leere Liste) (Funktion f auf nicht-leere Liste x:xs angewandt, wobei x erstes Element, xs die Restliste ist; „:“ ist Verkettung)) funktionale Haskell, Lisp, Scheme, Hope, Miranda, Standard ML logische Prolog, Prolog II, OPS-2 Î Man muss in der Lage sein, sich zielgerichtet in eine neue Sprache einzuarbeiten! Logik für Informatiker 23 Î Man sollte Vertreter wichtiger Sprachklassen aktiv beherrschen: Java (oder C++, Eiffel, Smalltalk, Delphi), C (oder Pascal), Prolog, Lisp ... K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 24 Warum denn so viele und immer wieder neue Programmiersprachen? Forth Algol 60 Fortran Smalltalk Algol 68 SETL Simula 67 YACC PL/1 LEX CLU SPSS awk Pascal Snobol Programmiersprachen: Warum so viele und immer wieder neue? Cobol Concurrent Pascal Turbo-Pascal OPS-5 Oberon Eiffel Object Cobol Prolog Miranda HTML CDL 2 Lisp Beta Scheme Modula-3 C++ Common Lisp Oberon-2 Act-One Haskell CSP Basic Standard-ML VDM Clipper Maschinensprachen RPG Occam Z C# Assemblersprachen Objective-C UML Opal Prolog II BCPL C 25 Latex Hope Chill Ada Mesa T Lotus K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Linda Java PHP PHP (1997), C# (2000) 26 Warum denn so viele und immer wieder neue Programmiersprachen? Kooperationsprojekte der Gruppe Softwaretechnik (Bothe) Kandidaten für DIE endgültige Sprache – in der Vergangenheit Assemblersprachen 1950 Daimler (Stuttgart): Java (Diplomarbeit) Leipniz-Institut: Fortran 77, 90, 95 (zwei Diplomarbeiten) Institut für Physik der HU: C++ Hahn-Meitner-Institut: Turbo-Pascal, LabVIEW (visuelle Programmierung) Siemens: C# Institut für Psychologie der HU: Smalltalk Fortran 1957 Algol58 Algol60 1960 1962 1966 APL Lisp Cobol Basic Algol-W Simula 67 PL/1 Algol68 1968 BCPL 1970 Pascal Fortran IV Concurrent Pascal FORTH 1074 C PROLOG Modula Mesa 1976 Fortran 77 OPS5 Smalltalk-80 1980 Modula-2 1984 1995 27 Ada C++ 1988 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 SDL Postscript Modula-2 APL Ada 95 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 SQL Alphard DELPHI Eiffel HP-Fortran Delphi Java Ada95 Ruby (1995), Python (1995), PHP (1997), C# (2000), Swift (Apple, 2014), Cuda (2015) 28 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Alte Sprachen und immer wieder neue Sprachen: neue Programmiertechnologien und -aufgaben Assemblersprachen 1950 Fortran 1957 Algol58 Algol60 1960 Die Macht der altenAPL Sprachen Basic 1966 1962 1968 1970 Neue Erkenntnisse und Technologien Fortran IV FORTH 1074 1976 Cobol Strukturierte Programmierung: Algol-W Simula 67 Anweisungen und DatenAlgol68 Pascal Komplexität von SW: Concurrent Modulare und Pascal Objektorientierte Modula Programmierung Smalltalk-80 Spezialaufgaben: 1984 wiss. Rechnen, kommerzieller Bereich 1988 Eiffel 1995 HP-Fortran Delphi PL/1 Andere BCPL Paradigmen C PROLOG Mesa Fortran 77 1980 Lisp Modula-2 Java Ada Spezielle Ziele: OPS5 - Portabilität - Flexibilität - Sicherheit C++ - …………….. Die Macht der alten Sprachen Fakten zu Cobol • 1960 entwickelt • Anwendung: kommerzieller Bereich (Banken, Verwaltung) • weltweit mehr als 200 Milliarden LOC Cobol-Code im Einsatz • pro Jahr: 5 Milliarden LOC neu geschriebener Cobol-Code • 86 % aller Geschäftsdaten durch Cobol-Systeme verarbeitet Gründe: - Reife von Cobol durch ihre Weiterentwicklung, - Spezialalgorithmen für kaufmännische Berechnungen, - Routine (Quelle: Computer Zeitung, 3. März 2003) Ada95 Ruby (1995), Python (1995), PHP (1997), C# (2000), Swift (Apple, 2014),Webseiten Cuda (2015) Verändertes technologisches Umfeld: Internet, 29 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 30 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 The 2015 Top Ten Programming Languages *) Klassifikationen ... nach Verbreitungsgrad *) Quelle: IEEE Spectrum, Juli 2015 http://spectrum.ieee.org/computing/software/the-2015-top-ten-programming-languages/?utm_source=techalert&utm_medium=email&utm_campaign=072315 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 31 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 32 The 2015 Top Ten Programming Languages The 2015 Top Ten Programming Languages (2015) (2014) “What are the most popular programming languages? The only honest answer: It depends. Are you trying to land a job at a hot mobile app startup, model electricity flows across a continent, or create an electronic art project? Languages are tools, and what’s a “must have” in one domain can be a “whatever” in another.” • “Java and C are in first place, • data-analysis language R is rising in popularity, • newcomers like Apple's Swift and Nvidia's Cuda are making waves.” Quelle: IEEE Spectrum, Juli 2015 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 33 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Quelle: IEEE Spectrum, Juli 2015 34