Message de Roch Baduel
Ten Tips When Writing Hybrid Language Metro style Application / Lessons learned designing the Windows runtime
Ce coup ci, surprise ! : deux sessions pour le prix d’une (la première n’était pas au programme. J )
Et le titre change encore avant le début de session : je pense que là on a le record du plus grand titre de session de la Build 😉
Agenda :
– Quelles sont les points à prendre en compte quand on conçoit un runtime multi-langage ?
– Quel est l’impact sur notre code ?
Il y a actuellement peut être 600 000 ou peut être 1000000 de fonctions dans les différentes API Microsoft. C’est difficile de les utiliser, il y avait plusieurs erreurs de conceptions. Les api WinRT sont des apis modernes organisées par namespace mais ce sont bien les APIs Windows version « moderne ».
– Il y avait besoin d’avoir un système de type qui soit agnostique vis-à-vis du langage.
– La casse dans les méthodes, propriétés, event : suivant les langages les conventions varient (PascalCase ou camelCase) et en javascript les conventions sont parfaitement établies. La décision qui a été prise est de se conformer aux règles des langages et donc de transcrire la casse à il n’est pas possible d’avoir deux méthodes qui se différentient uniquement par la casse !
– WinRT utilise le PascalCase pour les types et les membres
– WinRT fait un mapping pour javascript
Les types
– Tous les indexes (tableau par exemple) ne sont pas signés
– Les types numériques ne sont pas les même en .NET/C++ et Javascript :
- par exemple js ne supporte pas les entiers sur 64 bits)
- Et pourtant l’OS utilise des types 64bits dans plusieurs API
- à si on dépasse les 53 bits en JS les nombres seront tronqués
– Les strings : WinRT introduit un nouveau type de string (ça a pris presque 2 mois) HSTRING immutable.
- Devaient elles être immutables ?
- Elles sont immutables en JS et .NET mais pas en C++
- La valeur Null : en C++ ça n’existe pas pour une string à en c++ null sera traduit par ‘’, ce qui peut poser problème en cas d’aller retour JS/C++ : nullà’’à’’
– Les structures :
- Quand une structure contient des objets doit on copier la référence en cas de copie de la structure ou faire une « deep copy » ?
- La décision : les structures ne contiennent que des values types (NB : en WinRT les strings sont considérées comme des value types : c’est le cas en js mais pas en .NET)
– Les références :
- Le comportement lors d’appels de méthodes est différents suivants les langages (certains peuvent passer par valeur ou référence, d’autre uniquement par référence)
- WinRT ne passe que par référence
- à on peut avoir des paramètres in, out mais pas ref
– Les tableaux : value type ou ref ?
- En WinRT ce sont des value types
- à en JS on peut appeler une méthode qui modifie un tableau (le tableau ne sera pas modifié)
– Les Events
- La syntaxe est # suivant les langages
- En JS suivant la casse utilisée il ne se passera rien
– Collections :
- Les collections WinRT sont des simples Vector ou Map
- à dans certains cas on peut avoir des problèmes de performances suivant la manière dont on les manipule
– Les surcharges de méthodes
- Javascript ne supporte pas la notion de type
- En JS si on appelle une méthode avec plus de paramètres que nécessaire WinRT essaie de mapper sur la plus approchante