2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-25 22:38:04 +02:00
LaTeX-examples/documents/Programmierparadigmen/X10.tex

99 lines
3.8 KiB
TeX
Raw Normal View History

2014-03-09 16:38:27 +01:00
%!TEX root = Programmierparadigmen.tex
\chapter{X10}\index{X10|(}%
X10 ist eine objektorientierte Programmiersprache, die 2004 bei IBM entwickelt
wurde.
2014-03-28 11:51:59 +01:00
Wie in Scala sind auch in X10 Funktionen First-Class Citizens.
X10 nutzt das PGAS-Modell:
\begin{definition}[PGAS\footnotemark]\xindex{PGAS}%
PGAS (partitioned global address space) ist ein Programmiermodell für
Mehrprozessorsysteme und massiv parallele Rechner. Dabei wird der globale
Adressbereich des Arbeitsspeichers logisch unterteilt. Jeder Prozessor
bekommt jeweils einen dieser Adressbereiche als lokalen Speicher zugeteilt.
Trotzdem können alle Prozessoren auf jede Speicherzelle zugreifen, wobei auf
den lokalen Speicher mit wesentlich höherer Geschwindigkeit zugegriffen
werden kann als auf den von anderen Prozessoren.
\end{definition}
\footnotetext{\url{https://de.wikipedia.org/wiki/PGAS}}
2014-03-28 11:51:59 +01:00
Im PGAS-Modell gibt es \texttt{places}. Diese sind Platzhalter für Aktivitäten
und Objekte.
\begin{itemize}
\item \texttt{Place.FIRST\_PLACE} ist der place 0.
\item \texttt{here} ist der Prozess-eigene place.
\item \texttt{main} wird in \texttt{place 0} ausgeführt.
\end{itemize}
2014-03-09 16:38:27 +01:00
\section{Erste Schritte}
Als erstes sollte man x10 von \url{http://x10-lang.org/x10-development/building-x10-from-source.html?id=248} herunterladen.
2014-03-26 09:17:52 +01:00
Dann kann man die \texttt{bin/x10c} zum erstellen von ausführbaren Dateien nutzen.
Der Befehl \texttt{x10c HelloWorld.x10} erstellt eine ausführbare Datei namens
2014-03-09 16:38:27 +01:00
\texttt{a.out}.
2014-03-26 09:17:52 +01:00
\inputminted[numbersep=5pt, tabsize=4, frame=lines, label=HelloWorld.x10]{cpp}{scripts/x10/HelloWorld.x10}
2014-03-09 16:38:27 +01:00
2014-02-01 13:46:33 +01:00
\section{Syntax}
2014-03-28 11:06:02 +01:00
Genau wie Scala nutzt X10 \texttt{val}\xindex{val} und \texttt{var}\xindex{var}, wobei \texttt{val} für
\enquote{value} steht und ein unveränderbarer Wert ist. \texttt{var} hingegen
steht für \enquote{variable} und ist veränderbar.
Eine Besonderheit sind sog. \textit{Constrianed types}\xindex{types!constrained}:
\inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/x10/constrained-type-example.x10}
2014-03-28 11:51:59 +01:00
\subsection{Closures}\xindex{closure}%
Closres werden unterstützt:
\inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/x10/closures-example.x10}
\subsection{async}\xindex{async}%
Durch \texttt{async S} kann das Statement \texttt{S} asynchron ausgeführt werden.
Das bedeutet, dass ein neuer Kindprozess (eine Kind-Aktivität) erstellt wird, die
\texttt{S} ausführt. Dabei wird nicht auf das Beenden von \texttt{S} gewartet.
Will man das, so muss \texttt{finish}\xindex{finish} vor das Statement gestellt werden.
\subsection{atomic}\xindex{atomic}%
Durch \texttt{atomic S} wird das Statement \texttt{S} atomar ausgeführt. Auch
Methoden können atomar gemacht werden.
\inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/x10/atomic-example.x10}
2014-03-09 19:06:23 +01:00
\section{Datentypen}
2014-03-28 11:06:02 +01:00
Byte, UByte, Short, UShort, Char, Int, UInt, Long, ULong, Float, Double, Boolean,
Complex, String, Point, Region, Dist, Array
2014-03-28 11:51:59 +01:00
\subsection{Arrays}%
Arrays werden in X10 wie folgt definiert:
\inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/x10/array-example.x10}
Das ergibt den Array \texttt{[ 0, 2, 4, 6, 8 ]}.
2014-03-28 11:06:02 +01:00
\subsection{struct}\xindex{struct}%
In X10 gibt es, wie auch in C, den Typ \texttt{struct}. Dieser erlaubt im Gegensatz
zu Objekten keine Vererbung, kann jedoch auch interfaces implementieren.
Alle Felder eines X10-Structs sind \texttt{val}.
Structs werden verwendet, da sie effizienter als Objekte sind.
\begin{beispiel}[struct]
\inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/x10/x10-struct-example.x10}
\end{beispiel}
2014-03-09 19:06:23 +01:00
2014-02-01 13:46:33 +01:00
\section{Beispiele}
2014-03-28 11:51:59 +01:00
\todo[inline]{ACHTUNG: Das folgende Beispiel kompiliert noch nicht!}
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Fibonacci.x10]{scala}{scripts/x10/Fibonacci.x10}
2014-03-09 16:38:27 +01:00
\section{Weitere Informationen}
\begin{itemize}
\item \url{http://x10-lang.org/}
\end{itemize}
\index{X10|)}