Programmiersprachen.tex 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. \chapter{Programmiersprachen}
  2. Im folgenden werden einige Begriffe definiert anhand derer
  3. Programmiersprachen unterschieden werden können.
  4. \begin{definition}\xindex{Programmiersprache}\xindex{Programm}%
  5. Eine \textbf{Programmiersprache} ist eine formale Sprache, die durch eine
  6. Spezifikation definiert wird und mit der Algorithmen beschrieben werden
  7. können. Elemente dieser Sprache heißen \textbf{Programme}.
  8. \end{definition}
  9. Ein Beispiel für eine Sprachspezifikation ist die \textit{Java Language Specification}.\footnote{Zu finden unter \url{http://docs.oracle.com/javase/specs/}} Obwohl es kein guter Stil ist, ist auch
  10. eine Referenzimplementierung eine Form der Spezifikation.
  11. Im Folgenden wird darauf eingegangen, anhand welcher Kriterien man
  12. Programmiersprachen unterscheiden kann.
  13. \section{Abstraktion}
  14. Wie nah an den physikalischen Prozessen im Computer ist die Sprache?
  15. Wie nah ist sie an einer mathematisch / algorithmischen Beschreibung?
  16. \begin{definition}\xindex{Maschinensprache}\xindex{Befehlssatz}%
  17. Eine \textbf{Maschinensprache} beinhaltet ausschließlich Instruktionen, die direkt
  18. von einer CPU ausgeführt werden können. Die Menge dieser Instruktionen
  19. sowie deren Syntax wird \textbf{Befehlssatz} genannt.
  20. \end{definition}
  21. \begin{beispiel}[Maschinensprachen]
  22. \begin{bspenum}
  23. \item \xindex{x86}x86:
  24. \item \xindex{SPARC}SPARC:
  25. \end{bspenum}
  26. \end{beispiel}
  27. \begin{definition}\xindex{Assembler}%
  28. \textbf{Assembler} TODO
  29. \end{definition}
  30. \begin{beispiel}[Assembler]%
  31. TODO
  32. \end{beispiel}
  33. \section{Paradigmen}
  34. Die grundlegendste Art, wie man Programmiersprachen unterscheiden
  35. kann ist das sog. \enquote{Programmierparadigma}, also die Art wie
  36. man Probleme löst.
  37. \begin{definition}[Imperatives Paradigma]\xindex{Programmierung!imperative}
  38. In der imperativen Programmierung betrachtet man Programme als
  39. eine folge von Anweisungen, die vorgibt auf welche Art etwas
  40. Schritt für Schritt gemacht werden soll.
  41. \end{definition}
  42. \begin{definition}[Prozedurales Paradigma]\xindex{Programmierung!prozedurale}
  43. Die prozeduralen Programmierung ist eine Erweiterung des imperativen
  44. Programmierparadigmas, bei dem man versucht die Probleme in
  45. kleinere Teilprobleme zu zerlegen.
  46. \end{definition}
  47. \begin{definition}[Funktionales Paradigma]\xindex{Programmierung!funktionale}
  48. In der funktionalen Programmierung baut man auf Funktionen und
  49. ggf. Funktionen höherer Ordnung, die eine Aufgabe ohne Nebeneffekte
  50. lösen.
  51. \end{definition}
  52. Haskell ist eine funktionale Programmiersprache, C ist eine
  53. nicht-funktionale Programmiersprache.
  54. Wichtige Vorteile von funktionalen Programmiersprachen sind:
  55. \begin{itemize}
  56. \item Sie sind weitgehend (jedoch nicht vollständig) frei von Seiteneffekten.
  57. \item Der Code ist häufig sehr kompakt und manche Probleme lassen
  58. sich sehr elegant formulieren.
  59. \end{itemize}
  60. \begin{definition}[Logisches Paradigma]\xindex{Programmierung!logische}
  61. In der logischen Programmierung baut man Unifikation.\todo{genauer!}
  62. \end{definition}
  63. \section{Typisierung}
  64. Eine weitere Art, Programmiersprachen zu unterscheiden ist die stärke
  65. ihrer Typisierung.
  66. \begin{definition}[Dynamische Typisierung]\xindex{Typisierung!dynamische}
  67. Bei dynamisch typisierten Sprachen kann eine Variable ihren Typ ändern.
  68. \end{definition}
  69. Beispiele sind Python und PHP.
  70. \begin{definition}[Statische Typisierung]\xindex{Typisierung!statische}
  71. Bei statisch typisierten Sprachen kann eine niemals ihren Typ ändern.
  72. \end{definition}
  73. Beispiele sind C, Haskell und Java.
  74. \section{Kompilierte und interpretierte Sprachen}
  75. Sprachen werden überlicherweise entweder interpretiert oder kompiliert,
  76. obwohl es Programmiersprachen gibt, die beides unterstützen.
  77. C und Java werden kompiliert, Python und TCL interpretiert.
  78. \section{Dies und das}
  79. \begin{definition}[Seiteneffekt]\xindex{Seiteneffekt}\xindex{Nebeneffekt}\xindex{Wirkung}
  80. Seiteneffekte sind Veränderungen des Zustandes.\todo{Das geht besser}
  81. \end{definition}
  82. Manchmal werden Seiteneffekte auch als Nebeneffekt oder Wirkung bezeichnet.
  83. \begin{definition}[Unifikation]\xindex{Unifikation}
  84. \todo[inline]{Was ist das?}
  85. \end{definition}