Qu'entend-on par «prise en charge native d'une fonctionnalité» dans un langage de programmation?

15

J'ai parcouru une ligne un peu comme ceci "PHP n'a pas de support natif pour Unicode". J'ai également lu que Python a un support natif pour Unicode. Vous pouvez maintenant appeler une fonction utf8_encode()en PHP pour coder une chaîne en Unicode et vous pouvez utiliser une fonction unicode()en Python pour convertir une chaîne en Unicode. Alors, que signifie supporter nativement Unicode? De plus, certaines langues ont un support natif pour la simultanéité tandis que d'autres n'en ont pas. Alors qu'est-ce qu'on entend par

Le langage X prend en charge nativement la fonction Y

amour
la source
En fait, Python 3 prend en charge unicode en mode natif. Tout comme 2.7.
nmichaels

Réponses:

16

Cela signifie que pour prendre en charge une fonctionnalité donnée, le développeur n'a pas besoin d'utiliser un composant qui n'est pas intégré dans le langage lui-même, comme une extension ou un produit tiers.

Par exemple, PHP n'a pas de support natif pour unicode, car chaque fonction qui traite des chaînes en PHP lui-même ne prend pas en charge unicode. Par exemple, pour obtenir une sous-chaîne, vous ne pouvez pas utiliser substr, mais devez utiliser mb_substr, ce qui nécessite d'utiliser l'extension de chaîne multi-octets.

Pour avoir un support natif d'une fonctionnalité donnée, il ne suffit pas d'incorporer simplement une extension dans le tronc du code source. Au lieu de cela, PHP aurait un support natif pour unicode si unicode était le codage par défaut, comme en C # ou Java.

Arseni Mourzenko
la source
1
Donc, c'est juste si le composant fait partie de la langue ou non? Je veux dire que s'ils incluent mb_stringla fonctionnalité de PHP dans la source, cela deviendrait natif?
lovesh
1
@lovesh: ce n'est pas aussi simple que ça. S'ils intègrent l'extension dans le tronc PHP, mais sans faire de l'unicode l'encodage par défaut , je ne suis pas sûr que ce soit considéré comme natif. Si, à la place, unicode devenait l'encodage par défaut, comme en C #, alors oui, ce serait un support natif.
Arseni Mourzenko
Ou vous pourriez dire que c'est nativement pris en charge mais pas commun / pas par défaut. C'est juste de la sémantique.
BlueRaja - Danny Pflughoeft
2
Pour qu'un langage supporte nativement une sorte de chaîne, je voudrais au moins qu'il ait une syntaxe pour les littéraux de chaîne pour ce type de chaîne. Par exemple, il y aurait quelque chose comme s = "Müsliriegel"mb;au lieu de quelque chose comme s = toMb("Müsliriegel");(cela est, bien sûr, trivialement rempli par toutes les langues qui utilisent UTF8 comme encodage par défaut)
user281377
11

«Le langage X prend en charge nativement la fonctionnalité Y» signifie que vous pouvez utiliser la fonctionnalité Y sans aucune extension ni aucun autre effort pour la faire fonctionner. Il est directement utilisable à partir de la langue elle-même.

Par exemple, vous pouvez dire que,

"Le langage C ++ supporte nativement la surcharge d'opérateur."

"Le langage Java prend en charge nativement le ramasse-miettes automatique", car vous n'avez pas besoin d'utiliser d'autres bibliothèques ou outils effectuant le ramasse-miettes automatique. Il est livré avec la langauge (et la plate-forme) elle-même.

Mert Akcakaya
la source
9

Je lirais natif dans les contextes que vous avez mentionnés comme intégrés . Si une langue ne fournit pas de support natif pour une fonctionnalité, vous devrez l'implémenter vous-même ou trouver une bibliothèque ou un module qui la fournit.

Un autre contexte où vous verrez beaucoup de natif concerne les applications sur une plate-forme ou une autre. Dans ces cas, cela signifie compilé pour la plateforme plutôt que d'être interprété ou traduit d'une manière ou d'une autre. Une application iOS native est une application écrite dans un langage comme Objective-C et compilée en code qui s'exécute directement sur la famille de processeurs ARM (ce que vous trouverez sur les appareils iOS).

Caleb
la source
5

Je considérerais cela comme une mauvaise utilisation du terme. Pour que quelque chose soit «natif» d'une langue, il doit y avoir des installations pour cela. La prise en charge native de quelque chose comme unicode aurait des types bruts dans le langage qui implémentent l'unicode d'une manière ou d'une autre. Habituellement, cela ne fait pas partie de la langue mais fait partie d'une bibliothèque.

IMHO appeler quelque chose qui apparaît dans la bibliothèque par défaut de la langue ou non ne fait pas quelque chose de natif ou non.

Quelques exemples:

C ++ a un support natif pour les classes. C non. Il n'y a pas de mots-clés de langue ou de facilité de type qui permet l'écriture et l'utilisation de classes, vous devez les coder à la main.

Je dirais cependant que C ++ n'a pas plus de type de chaîne natif que C. Il y a un modèle basic_string dans la bibliothèque standard, mais ce n'est pas une fonction linguistique.

C ++ 11 semble cependant avoir ajouté la prise en charge Unicode, car de nouveaux mots clés et types bruts ont été ajoutés au langage lui-même pour faciliter le travail avec les valeurs Unicode.

J'espère que cela clarifie la différence que je vois.

Edward Strange
la source
Votre utilisation des mots «types bruts» me confond. Pourriez-vous clarifier?
Jeremy Heiler
En Python 3, toutes les chaînes sont en unicode (il existe un bytestype distinct ), donc je pense qu'il est juste de dire que Python prend en charge unicode en mode natif.
Brendan Long
Python 2 fait aussi bien en ce qu'il a un unicodetype, bien qu'il soit plus pénible à utiliser que Python 3. C ++ est une bête étrange dans la mesure où une grande partie de ce qui fait normalement partie d'un langage se trouve dans les bibliothèques.
Gort le robot
@JeremyHeiler: Il semble que les "types bruts" soient des types fondamentaux, non composites et non bibliothécaires. Par exemple, C n'avoir un type de chaîne ( ), et même des chaînes littérales. Tous les "types bruts" n'ont pas besoin d'avoir des littéraux correspondants, les pointeurs en C par exemple n'en ont pas. ( ne peut être convertichar[]NULL à int*)
MSalters
-1

«Prise en charge native» au moins dans les langages interprétés ou compilés en JIT signifie généralement du code qui est fondamentalement juste un lien vers une fonctionnalité précompilée qui se trouve sous l'interpréteur.

En JavaScript, par exemple, si vous alertez window.open dans Firefox, vous verrez probablement une fonction dont les entrailles disent quelque chose comme "[code natif]". Alors que toutes les références sont transmises à l'interpréteur et que des mesures doivent être prises pour établir le contexte et la portée, les entrailles sont fondamentalement mises en cache et prêtes à fonctionner. window.open par exemple, appelle probablement quelque chose à partir de l'environnement d'exécution d'un navigateur.

Ceci est différent des objets et méthodes non natifs que vous ou quelqu'un d'autre avez écrits, car dans ces cas, toutes vos déclarations doivent être interprétées / évaluées.

Si quelqu'un utilisait le terme en référence à un langage qui précompile, je suppose qu'ils signifient simplement tous les trucs du langage de base que le compilateur tokenise et convertit réellement en code machine par rapport aux trucs que vous définissez vous-même, qui sont plus structures et références utilisées pour relier le tout.

Erik Reppen
la source
1
Ce n'est pas un support natif dans la langue; c'est un support natif dans la bibliothèque.
SLaks
Sur quel point êtes-vous en désaccord? Soit vous me trompez, soit je ne comprends pas un concept de base, mais c'est un peu vague.
Erik Reppen