Skip to content

Commit

Permalink
Add gems/attributes.md (#13)
Browse files Browse the repository at this point in the history
* Update install-d-locally.md

* Update links-documentation.md

* Add basics/loops.md (#30)

* Add basics/foreach.md (dlang-tour#31)

* Add basics/further-reading.md (dlang-tour#36)

* Add basics/templates.md (dlang-tour#38)

* Add basics/delgates.md (dlang-tour#40)

* Add basics/interfaces.md (dlang-tour#35)

* Add basics/ranges.md  (dlang-tour#33)

* Add basics/exceptions.md (dlang-tour#37)

* Add basics/associative-arrays.md (dlang-tour#34)

* Add basics/alias-strings.md (dlang-tour#32)

* Add basics/classes.md (dlang-tour#39)

* Create attributes.md

* Create attributes.md

* Update classes.md (dlang-tour#44)

* Update index.yml

enable all files in basics
  • Loading branch information
SMietzner authored Sep 13, 2017
1 parent ad10bcb commit 40ee4b6
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 15 deletions.
3 changes: 2 additions & 1 deletion basics/classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@ void main()
];
foreach (any; anys) {
writeln("Typ von any = ", any.getType());
writeln("Typ von any = ",
any.getType());
writeln("Inhalt = ",
any.convertToString());
}
Expand Down
20 changes: 10 additions & 10 deletions basics/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ ordering:
- structs
- arrays
- slices
#- alias-strings
#- loops
#- foreach
#- ranges
#- associative-arrays
#- classes
#- interfaces
#- templates
- alias-strings
- loops
- foreach
- ranges
- associative-arrays
- classes
- interfaces
- templates
- delegates
#- exceptions
#- further-reading
- exceptions
- further-reading
72 changes: 72 additions & 0 deletions gems/attributes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Attribute

Funktionen können in D auf verschiedene Arten mit
Attributen versehen werden. Im folgenden werden
zwei spracheigene und die benutzerdefinierten
Attribute näher beleuchtet. Darüber hinaus gibt
es `@safe`, `@system` und `@trusted`, die bereits
im ersten Kapitel erwähnt wurden.

### `@property`

Eine als `@property` markierte Funktion sieht für
die äußere Welt wie ein normaler Member aus.

struct Foo {
@property bar() { return 10; }
@property bar(int x) { writeln(x); }
}

Foo foo;
writeln(foo.bar); // ruft tatsächlich foo.bar() auf
foo.bar = 10; // calls foo.bar(10);

### `@nogc`

Wenn der D-Compiler auf eine als `@nogc` markierte Funktion
trifft, wird sichergestellt, dass **keine** Speicherallokationen
im Kontext dieser Funktion vorgenommen werden. Eine
`@nogc`-Funktion darf nur Funktionen aufrufen, die ihrerseits
als `@nogc` markiert sind.

void foo() @nogc {
// FEHLER:
auto a = new A;
}

### Benutzerdefinierte Attribute (UDAs)

Jede Funktion und jeder Typ in D kann mit benutzerdefinierten
Attributen (engl: user-defined attributes, UDAs) versehen werden:

struct Bar { this(int x) {} }

struct Foo {
@("Hello") {
@Bar(10) void foo() {
...
}
}
}

Jeder Typ, spracheigen oder benutzerdefiniert, kann
Funktionen als Attribut beigefügt werden.
Die Funktion `foo()` in diesem Beispiel besitzt die
Attribute `"Hello"` vom Typ `string` und `Bar` von Typ
`Bar` mit dem Wert `10`. Zugang zu den Attributen
bieten die im Compiler integrierten *Traits*
(dt.: Merkmale / Eigenschaften) mittels
`__traits(getAttributes, Foo)`, die einen
[`TypeTuple`](https://dlang.org/phobos/std_typetuple.html)
zurückgeben.

Benutzerdefinierte Attribute können generischen Code
verbessern, indem sie benutzerdefinierten Typen eine
weitere Dimension hinzufügen, die Kompilierzeit-Generatoren
helfen, sich diesen spezifischen Typen anzupassen.

### Weiterführende Quellen

- [Benutzerdefinierte Attribute in _Programming in D_](http://ddili.org/ders/d.en/uda.html)
- [Attribute in D](https://dlang.org/spec/attribute.html)

8 changes: 4 additions & 4 deletions welcome/install-d-locally.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# D lokal installieren

Auf der [Website der Programmiersprache](https://dlang.org) wird stets die neuste
Version des Referenzcompilers **DMD** (Digital Mars D) zum [Download](http://dlang.org/download.html)
Version des Referenz-Compilers **DMD** (Digital Mars D) zum [Download](http://dlang.org/download.html)
angeboten und kann wie folgt installiert werden:

### Windows
Expand Down Expand Up @@ -31,15 +31,15 @@ Für viele Distributionen werden auch Pakete angeboten:

### Andere Compiler

Neben dem DMD-Referenzcompiler, der sein eigenes Backend verwendet, gibt es noch
Neben dem Referenz-Compiler DMD, der sein eigenes Backend verwendet, gibt es noch
zwei weitere Compiler, die über den Downloadbereich auf [dlang.org](https://dlang.org/download.html)
heruntergeladen werden können:

* [**GDC**](http://gdcproject.org/downloads) - basierend auf dem GCC-Backend
* [**LDC**](https://github.com/ldc-developers/ldc#installation) - basierend auf dem LLVM-Backend

GDC und LDC verwenden nicht immer das neuste DMD-Frontend, ermöglichen dafür
aber eine bessere Optimierung und unterstützen weitere Plattformen
wie zum Beispiel ARM.
aber eine bessere Optimierung und unterstützen weitere Prozessorarchitekturen,
+wie z.B. ARM.

Weitere Informationen bietet das [DWiki](https://wiki.dlang.org/Compilers).

0 comments on commit 40ee4b6

Please sign in to comment.