TÉMOIGNAGE : « C++ ou Java : quel est le meilleur langage pour les systèmes de trading ? »

eFC logo
TÉMOIGNAGE : « C++ ou Java : quel est le meilleur langage pour les systèmes de trading ? »

Vous avez effectué votre travail en data science sur Python : les chiffres ont du sens et les résultats sont non négligeables ? Désormais, il vous suffit de les mettre en pratique. Vous souhaiteriez obtenir les mêmes résultats exceptionnels - uniquement pour les nouvelles données arrivant en temps réel, 24h sur 24, 7 jours sur 7.

Devez-vous simplement nettoyer votre code Python du notebook Jupyter (faites-le fonctionner, faites-le bien, faites-le vite) puis le packager sous la forme d'une collection de modules - en tant que bibliothèque - et le mettre en production pour une utilisation en temps réel par d'autres ?  

Parfois, la réponse est oui. Mais le plus souvent la réponse est non. Python n'est pas un langage idéal pour une utilisation en production. Il est plus lent que beaucoup d'autres langages. Il y a ce verrou d’interprète global (GIL). Le typage dynamique de Python est une arme à double tranchant : ces vérifications ennuyeuses auxquelles vous étiez heureux de renoncer au prototypage pourraient vous faire craquer lorsqu’un cas d’exception surgit lors d’une utilisation réelle. Et ils surgissent toujours.

Alors, vous commencez à réfléchir à une autre question : C ++ ou Java ?

C ++ : Le langage de programmation le plus difficile d’entre tous

C ++ est sans doute le langage de programmation le plus difficile, conçu uniquement pour les personnes les plus intelligentes. Le code d'assemblage C ++ est plus proche du métal. C ++ est le favori des développeurs hardcore (et des quants) depuis que Bjarne Stroustrup l’a créé en 1985.

Un pointeur C ++ est l'adresse d'une variable en mémoire. Mais la grande puissance de l'accès à la mémoire de bas niveau implique la grande responsabilité de la gestion de la durée de vie et de la propriété des objets. L'effet secondaire est le suivant : vous pensez que vous déboguez un moteur Monte Carlo ou un solveur PDE, alors qu'en réalité vous passez la plupart de votre temps à déboguer l'accès à la mémoire. Surtout si vous êtes nouveau en C ++ :  il faut du temps, potentiellement des années, pour y arriver rapidement.

Les pointeurs intelligents facilitent quelque peu la tâche de gestion de la mémoire mais n'éliminent pas complètement le problème.

Java : pour les nuls en C ++ ?

Java a été créé par James Gosling comme une version allégée de son cousin aîné de dix ans. Le garbage collector de Java s'occupe de la gestion de la mémoire à votre place. Cela fonctionne en deux étapes simples. Au cours de l'étape de marquage, il identifie les éléments de mémoire utilisés et ceux qui ne le sont pas. Au cours de l’étape de balayage, les objets identifiés lors de l’étape de marquage sont supprimés.

Dans la plupart des applications qui ne sont pas en temps réel, le garbage collector ne devrait pas être un problème. Toutefois, si vous écrivez un système de trading haute fréquence, celui-ci peut provoquer des pointes de latence intrusives.

Il existe des options pour aider à atténuer cela. Le garbage collector natif d’Oracle est hautement configurable. Azul Systems, Inc Zing est un kit de développement Java (JDK) alternatif qui élimine immédiatement les problèmes de dépassement de délais des applications sans qu'il soit nécessaire de continuer à optimiser Java Virtual Machine (JVM).

La latence non déterministe est également une préoccupation de Java en ce qui concerne les systèmes en temps réel. Cependant, il y a eu des progrès. La bibliothèque de messagerie inter-threading hautes performances, LMAX Disruptor, a permis de réduire ce temps de latence grâce à son orientation hardware sur lequel il tourne et son fonctionnement sans verrouillage.

Le fait que Java soit compilé en bytecode et tourne sur une machine virtuelle signifie qu'il est hautement portable et qu'il peut s'exécuter sous Windows, Linux et MacOS avec un minimum d'ajustements. Le code source C ++ est, en théorie, portable, mais les compilateurs peuvent se comporter différemment sur des systèmes différents, ce qui nécessite beaucoup de peaufinage.

La syntaxe rigide de Java le rend plus simple pour les environnements de programmation tels que Eclipse et IntelliJ IDEA. Mais cette augmentation de la productivité a un prix. Les génériques de Java constituent davantage un axe syntaxique que les puissants modèles de C ++.

Les deux langages ont progressé mais les systèmes existants sont archaïques 

C ++ et Java ont tous deux progressé ces dernières années. C ++ a subi plusieurs révisions, à savoir C ++ 03, C ++ 11, C ++ 14 et C ++ 17. De nouvelles fonctionnalités sont envisagées pour inclusion dans le futur C ++ 20. Parmi les dernières fonctionnalités C ++, on trouve : sémantique de déplacement, initialisation unifiée, fonctions lambda, multithreading et modèle de mémoire, expressions régulières, pointeurs intelligents normalisés, tables de hachage, std :: array, verrous lecture-écriture, expressions de pliage, déclarations de liaison structurées, algorithmes parallèles et encore plein d’autres choses que les programmeurs C++ trouvent excitantes.

Post C ++ 11 est un langage très différent, parfois considéré comme moderne, par opposition au C ++ classique.

Java a également été développé avec les versions 7, 8, 9, 10, 11 et 12. Il comprend désormais des expressions lambda, des interfaces fonctionnelles, des méthodes par défaut et statiques dans les interfaces, une API Java Stream pour les opérations de traitement de données en bloc sur des collections, une API Java Time, une collection, etc. accès simultané, améliorations de l’API I / O, etc.

Toutefois, ces nouvelles fonctionnalités ne vous serviront pas à grand-chose si vous êtes confronté à la tâche bien trop courante consistant à prendre en charge le code hérité sur un legacy system. Dans ce cas, la vraie question est de savoir si vous devez prendre en charge la base de code existante ou réécrire le produit en utilisant des versions modernes des langages et des outils de développement modernes. A  vous de décider au cas par cas.

Ancien trader quantitatif et algorithmique chez Deutsche Bank, Citi et Nomura, Paul Bilokon enseigne également à temps partiel à l'Imperial College de Londres. Il est l'un des fondateurs des Thalésiens, une société d’Intelligence Artificielle (IA) spécialisée dans la néo-cybernétique, l’économie numérique, la finance quantitative, l’éducation et le conseil.

Vous avez un scoop, une anecdote, un conseil ou un commentaire que vous aimeriez partager ? Contact : tiochem@efinancialcareers.com

A lire aussi…

Secteurs les plus recherchés

Loading...

Recherche emploi

Rechercher articles

Close
Loading...