Cette RFC partait du constat que les opérateurs de transtypage existant, explicites, n’échouent jamais et ne lèvent jamais d’erreur — ce qui peut être dangereux (surtout s’ils sont utilisés sur des saisies utilisateurs), puisqu’ils retourneront un peu n’importe quoi si les données sur lesquelles on les utilise correspondent elles-mêmes à un peu n’importe quoi.

Elle proposait donc d’ajouter trois fonctions, qui auraient validé leur entrée, au lieu de transtyper aveuglément. Initialement, elles auraient retourné false en cas d’erreur (ce retour aurait pu être soumis à un vote complémentaire) :

  • to_int() : n’aurait accepté que des entiers, des flottants contenant des entiers et pouvant être représentés par des entiers, ou des chaînes contenant la représentation textuelle d’entiers.
  • to_float() : n’aurait accepté que des flottants, des entiers et des chaînes représentant des flottants.
  • to_string() : n’aurait accepté que des chaînes, des entiers, des flottants et des objets transtypables en chaînes.

La RFC entre plus en détail sur le pourquoi de pas mal de choix et donne un long tableau d’exemples.

Les votes ont été ouverts le 19 novembre 2014 et ont été clos le 29 novembre 2014. Nous avons posté un timide +0.5 sur internals@, en considérant que ces fonctions n’allaient pas assez loin vers un réel typage plus strict.
Cette RFC a finalement été rejetée par 16 votes contre 5.