Projektwoche
Projektwoche 2010 2010 Sprechen
Sprechen Sie Sie D? D?
Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm
Hochschule Harz
FB Automatisierung und Informatik
mwilhelm@hs-harz.de
http://mwilhelm.hs-harz.de
Raum 2.202
Tel. 03943 / 659 338
Inhalt
1. Sprachfamilien / Geschichte von D
Assembler, Interpreter, Native Sprachen, KI, GUI
2. Einfache Sprachkonstrukte
Datentypen, if-Bed., Schleifen, Unterprogramme
3. Ein- Ausgabe
4. Felder, Listen 5. Exception
6. Struct / Objekte
7. Reguläre Ausdrücke
8. Beispiele
C ⇒ C++ ⇒ D
1. Sprachfamilien / Geschichte von D
Sprachfamilien
Assembler: native, Hardwarenah, nicht portierbar, schnell, komplex, fehleranfällige Programmierung
Cobol, Fortran: native, alt, 1955, Unterprogramme, fehleranfällige Programmierung, technisch vs. kommerziell
C: native, Hardwarenah, (portierbar), schnell, komplex, fehleranfällige Programmierung, Pointer
Pascal, Modula, Oberon: Modular: native, modular, Schulsprache (Wirth)
Delphi: native, modular, Objektorientiert, Schnittstellen, modular,
Sprachfamilien / Geschichte von D
VBA, Basic: Interpreter, einfach zu lernen, Goto, frühe Skriptsprache
Perl, Python, PHP, Ruby: moderne Skriptsprachen, Interpreter, Objektorientiert
Haskell, Lisp: funktionale Sprache
C++: native, portierbar, sehr komplex, fehleranfällige
Programmierung, Objektorientiert, Multivererbung, Pointer
Java, C#: Interpreter, portierbar, komplex, leichte Programmierung, Objektorientiert, Schnittstellen, Garbage Colletion
D: native, portierbar, schnell, komplex, leichte Programmierung, Objektorientiert, Schnittstellen, Garbage Colletion, keine
Headerdateien,
Sprachfamilien
Sprachkonstrukte
Hexdezimale Programmierung
Assembler
Hochsprachen: Cobol, Fortran, C
Modular: Pascal, Modula, Oberon
Funktional: Haskell, Lisp
Skriptsprachen:
Objektorientiert, native, multivererbung: Smalltalk, C++
Objektorientiert, Intepreter: Java, C#
Objektorientiert, native, …: D
Ablauf Assembler-Programmierung
Assembler-Code: mov AX, 33
Übersetzen in hexadezimaler Darstellung: 3FE5 Ergebnis: OBJ-Datei
Zusammenfügen einer / mehrere OBJ-Dateien
Linker-Ergebnis: Exe-Datei
Ausgabe eines Textes mittels Assembler
data_seg segment 'data' zkette1 db 'Hallo Welt' data_seg ends
start: MOV bx,0
MOV dx,offset zkette1 MOV ah,40h
MOV cx,10 INT 21h
MOV al,0
MOV ah,4Ch
INT 21h
Ablauf Java-Programmierung
Java-Code: System.out.println("Hallo Welt");
Übersetzen in eine Pseudo-Code Ergebnis: Class-Datei
Starten der Java Virtual-Machine Parameter: Class-Datei
Übersetzen des Pseudo-Befehls in
Maschinenbefehle
Ablauf C/C++/D-Programmierung
Programm-Code: a=b+c;
Übersetzen in hexadezimaler Darstellung: 4FE5 Ergebnis: OBJ-Datei
Zusammenfügen einer / mehrere OBJ-Dateien
Linker-Ergebnis: Exe-Datei
Was ist D?
Allgemeine Hochsprache für systemnahe Programme
Modern konzeptiert, besser als C++, Geschichte
Native, Exe-Programm
Kein Interpreter
Einfach zu lernen
Portierbar (Windows, Linux)
D-Compiler ist wesentlich einfacher ein C++
Mit C++ kann man sehr unterschiedliche Programmstrukturen schreiben: C, C++, Mixed, Präprozessor, STL kein Bestandteil
C Standard hat 500 Seiten, C++hat 750 Seiten
D hat eine einfache Programmstruktur
Major Goals of D
Reduce software development costs by at least 10% by adding in proven productivity enhancing features and by adjusting language features so that common, time-consuming bugs are eliminated from the start.
Make it easier to write code that is portable from compiler to compiler, machine to machine, and operating system to operating system.
Support multi-paradigm programming, i.e. at a minimum support imperative, structured, object oriented, and generic programming paradigms.
Have a short learning curve for programmers comfortable with programming in C or C++.
Provide low level bare metal access as required.
Make D substantially easier to implement a compiler for than C++.
Be compatible with the local C application binary interface.
Have a context-free grammar.
Easily support writing internationalized applications.
Incorporate Contract Programming and unit testing methodology.
Be able to build lightweight, standalone programs.
Reduce the costs of creating documentation.
Features To Keep From C/C++
Die allgemeine Struktur (look and feel) von C/C++ bleibt erhalten. Es benutzt die
gleiche Algebraische Syntax. Identisch: Ausdrücke, IF, Schleifen, Allgemeine Layout.
D Programme können geschrieben werden in C style function-and-data, C++ style object-oriented, C++ style template metaprogramming, oder eine Mix.
Der Ablauf ist wie in C: compile/link/debug. Man könnte aber auch D in Bytecode und als Interpreter entwickeln.
Exception handling. Das Exception-handling ist wesentlich besser als die tradiotionelle C Methode (error codes und errno globals).
Runtime Type Identification. Implemnetiert in Java/C++. In D ist diese Eigenschaften noch mehr ausgebaut. Besserer „garbage collection“, besseres Debugging, Objekte Speichern
D erlaubt die „link compatibility“ mit der C-Aufruf-Konvention. Damit kann man direkt auf C-API´s zugreifen. Kenntnisse bzgl. API können in D genutzt werden.
Wenige Änderungen in Programmcode.
Features To Keep From C/C++
Operator overloading. D Programme erlauben Funktionen mit Operatoren zu verknüpfen.
Template Metaprogramming. Templates, Schablonen, ist der Weg allgemeine Struktur-Programme zu schreiben (sortieren ohne Datentyp). Einge
Programmsprachen benutzen Makros zu diesem Zweck (Fehlerquelle). Der Datentyp
„Variants“ ist möglich, aber ineffizient und nicht sicher (type checking). Die „C++
templates“ sind komplex und sie fügen sich nicht sehr gut in die allgemeine Syntax ein. D bietet eine wesentlich einfacheres System für Templates.
RAII (Resource Acquisition Is Initialization). RAII Techniken erlauben die Identifizierung eines Objektes (Attribute, Methoden, Beans).
Down and dirty programming. D behält die Möglichkeit des „down-and-dirty programming“ ohne dass man externe Module, in anderen Sprachen, benötigt.
Manchmal ist es sinnvoll, Pointer oder direkten Assember-Code zu benutzen
(Systemprogramme). D's Ziel ist es nicht „down and dirty programming“ zu
verhindern, sondern zu minimieren.
Eigenschaften von D
Native, schnell
Assembleraufruf intern
OOP, Schnittstellen
Operator-overloading
Einfachere Templates
Echtes Typedef
Schneller Compiler
STL in der Sprache
Versionierung
Syntax à la Java
Link-Kompatibel mit C
Eingebettete Funktionen
Var-Parameter für einfache Datentypen
Einfachere Sprachkonstrukte
For each
Arrays, Teilarrays
Assoziative Arrays
Echte Funktionspointers
Modular
Exception
Eingebaute Unit-Tests
Reguläre Ausdrücke
Synchronization / Threads
Assert-Expression
Socket, URL etc