Le Post Infeeny

Les articles des consultants et experts Infeeny

Ten Tips When Writing Hybrid Language Metro style Application / Lessons learned designing the Windows runtime

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

 

 

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :