Developpez.com

Le Club des Développeurs et IT Pro

DMD : la version 2.085 du compilateur de référence du langage D est disponible

Avec un meilleur interfaçage à Objective-C

Le 2019-03-04 17:51:40, par Patrick Ruiz, Chroniqueur Actualités
La D Language Foundation annonce la disponibilité en téléchargement de la version 2.085.0 de DMD – le compilateur de référence du langage D. Au menu : des avancées dans l’interfaçage avec le langage Objective-C d’Apple ; du nouveau avec le ramasse-miettes et des améliorations au niveau de l’interfaçage avec la bibliothèque standard du langage C++.

Envoyé par la D Language Foundation
La version 2.085.0 de DMD, le compilateur de référence D, est maintenant prête à être téléchargée. Entre autres choses, cette version voit la prise en charge d'OS X 32 bits supprimée, un meilleur interfaçage avec Objective-C et de grandes nouvelles sur le front de la collecte des zones de mémoire inutilisées. Il y a également eu quelquesavancées en ce qui concerne la compatibilité avec la bibliothèque C++ standard. Au total, la version 2.085.0 représente 58 tickets Bugzilla fermés et les efforts de 49 contributeurs.

Sur le front de l’interfaçage avec Objective-C, la D Language Foundation annonce qu’il est désormais possible de déclarer des classes Objective-C directement comme des classes D.

Envoyé par la D Language Foundation
Auparavant, la liaison avec les classes Objective-C nécessitait l'utilisation d'interfaces D. Plus maintenant. Désormais, les classes Objective-C peuvent être déclarées directement comme classes D. Décorez une classe Objective-C avec extern(Objective-C), utilisez l'attribut @selector sur les méthodes et c'est parti.

Code Objective-C :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  
extern (Objective-C) 
class NSObject 
{ 
    static NSObject alloc() @selector("alloc"); 
    NSObject init() @selector("init"); 
    void release() @selector("release"); 
} 
  
extern (Objective-C) 
class Foo : NSObject 
{ 
    override static Foo alloc() @selector("alloc"); 
    override Foo init() @selector("init"); 
  
    int bar(int a) @selector("bar:") 
    { 
        return a; 
    } 
} 
  
void main() 
{ 
    auto foo = Foo.alloc.init; 
    scope (exit) foo.release(); 
  
    assert(foo.bar(3) == 3); 
}

La D Language Foundation prévient à ce propos que « pour mieux faciliter l'interaction entre les deux langues, ces classes ont un comportement légèrement modifié. Toutes les méthodes statiques et finales d'une classe extern (Objective-C) sont virtuelles. »


L’autre nouveauté en ce qui concerne l’interfaçage avec le langage Objective-C est qu’il est désormais possible de déclarer des variables d’instance au sein de classes Objective-C – ainsi qu’à l’intérieur d’une méthode contenue dans une classe Objective-C – pour effectuer un appel spécial.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
extern (Objective-C) 
class NSObject 
{ 
    void release() @selector("release"); 
} 
 
extern (Objective-C) 
class Foo : NSObject 
{ 
    // instance variable 
    int bar; 
 
    int foo() @selector("foo") 
    { 
        return 3; 
    } 
 
    int getBar() @selector("getBar") 
    { 
        return bar; 
    } 
} 
 
extern (Objective-C) 
class Bar : Foo 
{ 
    static Bar alloc() @selector("alloc"); 
    Bar init() @selector("init"); 
 
    override int foo() @selector("foo") 
    { 
        // super call 
        return super.foo() + 1; 
    } 
}
Depuis la version 2.067 du compilateur, il est possible de configurer le ramasse-miettes depuis la ligne de commande ou des options intégrées à un exécutable. Avec la version 2.085, les développeurs peuvent s’appuyer sur cette possibilité pour choisir precise comme option de ramasse-miettes.

Envoyé par la D-Language Foundation
La plus grosse des nouvelles en ce qui concerne le ramasse-miettes est peut-être que l'environnement d'exécution est désormais livré avec un ramasse-miettes précis. Celui-ci peut être activé sur n'importe quel exécutable compilé et lié à la dernière version du runtime en lui passant l'option --DRT-gcopt=gc:precise. En clair, il ne s'agit pas une option du compilateur DMD.

Si vous sélectionnez precise comme ramasse-miettes via les différentes options de configuration, les informations de type seront utilisées pour identifier les possibles ou réels pointeurs au sein des données d'objets alloués dans le heap. Dans ces conditions, les données autres que les pointeurs ne pourront être interprétées comme faux pointeurs vers d’autres emplacements mémoire.

Avec la version 2.085, le compilateur de référence du langage D se dote d’une nouvelle option de contrôle du comportement du ramasse-miettes lorsque l’exécution d’un programme arrive à son terme. L’objectif de son introduction est de donner au développeur la possibilité de provoquer la libération inconditionnelle des zones de mémoire utilisées par un programme en fin d’exécution.

La dernière mouture du compilateur de référence du langage D vient avec deux améliorations en ce qui concerne l’interfaçage avec la bibliothèque standard du C++. Noter à ce propos que les programmes D pourront désormais allouer de la mémoire à partir du heap C++, ce, en s’appuyant sur les opérateurs new et delete. Enfin, la version 2.085 donne l’accès aux conteneurs de la STL par le biais de la classe std::allocator<T> exposée via un module C++.

Source : dlang

Et vous ?

Que pensez-vous des nouvelles fonctionnalités livrées avec cette version du compilateur de référence pour le langage D ?

Avez-vous déjà fait usage du langage D ? Si oui, pour quelle raison devrait-on s'y intéresser ?

Voir aussi :

Quel langage pourrait remplacer C ? Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D
Débuter avec le langage D, un tutoriel de Sébastien Tahier
  Discussion forum
2 commentaires
  • Markand
    Membre éclairé
    D... le langage mort né. Je déteste Go, mais je pense que même Go est mieux que D.
  • Matthieu76
    Membre éclairé
    Bah je ne vois pas l'intérêt de ce language, aussi verbeux que le C++ mais sans ces performances.