Attributs

Certains types et méthodes peuvent être annotés avec des attributs. La liste d'attributs est fixe, mais éventuellement il y aura la possibilité d'avoir des attributs définis par l'utilisateur.

Dit au compilateur comment lier une librairie C. Ceci est expliqué dans la section lib.

Extern

Le marquage d'une structure Crystal avec cet attribut permet de l'utiliser dans les déclarations lib:

@[Extern]
struct MyStruct
end

lib MyLib
  fun my_func(s : MyStruct) # OK (renvoie une erreur sans l'attribut Extern)
end

Vous pouvez également créer une structure comme une union C (cela peut être très dangereux):

# Une structure pour convertir facilement entre les points de code Int32 et Chars
@[Extern(union: true)]
struct Int32OrChar
  property int = 0
  property char = '\0'
end

s = Int32OrChar.new
s.char = 'A'
s.int # => 65

s.int = 66
s.char # => 'B'

ThreadLocal

L'attribut @[ThreadLocal] peut être appliqué à des variables globales et des variables de classe. Cela en fait un thread local.

class NePasUtiliser
  # Une pour chaque thread
  @[ThreadLocal]
  $values = [] of Int32
end

Packed

Permet de marquer unestruct C comme empaquetée, fait aligner la struct sur un byte, et qu'il n'y a pas de padding entre les éléments. Dans les structs non empaquetées, un padding entre les types de champs est inséré selon le système cible.

AlwaysInline

Indique au compilateur de toujours aligner une méthode:

@[AlwaysInline]
def foo
  1
end

NoInline

Dit au compilateur de ne jamais aligner un appel de méthode. Cela n'aucun effet si la méthode yielde.

@[NoInline]
def foo
  1
end

ReturnsTwice

Marque une méthode ou une lib fun pour faire deux fois son retour. La fonction C setjmp est un exemple d'une telle fonction.

Raises

Marque une méthode ou lib fun comme pouvant potentiellement lever une exception. Ceci est expliqué dans la section callbacks.

CallConvention

Indique la convention d'appel d'une lib fun. Par exemple:

lib LibFoo
  @[CallConvention("X86_StdCall")]
  fun foo : Int32
end

La liste de conventions d'appel valides est:

  • C (le défaut)
  • Fast
  • Cold
  • WebKit_JS
  • AnyReg
  • X86_StdCall
  • X86_FastCall

Elles sont expliquées ici.

Flags

Marque un enum comme "flags enum", qui change le comportement de certaines de ses méthodes, comme to_s.

results matching ""

    No results matching ""