¿Qué se entiende por "soporte nativo para una función" en un lenguaje de programación?

15

Revisé una línea como esta "PHP no tiene soporte nativo para Unicode". También leí que Python tiene soporte nativo para Unicode. Ahora puede llamar a una función utf8_encode()en PHP para codificar una cadena en Unicode y puede usar una función unicode()en Python para convertir una cadena a Unicode. Entonces, ¿qué significa admitir Unicode de forma nativa? Además, algunos idiomas tienen soporte nativo para la concurrencia, mientras que otros no tienen soporte nativo. Entonces, ¿qué se entiende por

El lenguaje X admite de forma nativa la función Y

lovesh
fuente
De hecho, Python 3 admite unicode de forma nativa. Como lo hace 2.7.
nmichaels

Respuestas:

16

Significa que para admitir una característica determinada, el desarrollador no necesita usar un componente que no esté integrado en el lenguaje en sí, como una extensión o un producto de terceros.

Por ejemplo, PHP no tiene soporte nativo para Unicode, porque cada función que trata con cadenas en PHP en sí no es compatible con Unicode. Por ejemplo, para obtener una subcadena, no puede usar substr, pero debe usar mb_substr, lo que requiere usar la extensión Multibyte String.

Para tener un soporte nativo de una característica dada, no es suficiente incorporar una extensión en el tronco del código fuente. En cambio, PHP tendría soporte nativo para unicode si unicode sería la codificación predeterminada, como en C # o Java.

Arseni Mourzenko
fuente
1
Entonces, ¿se trata solo de si el componente es parte del lenguaje o no? Quiero decir, si incluyen mb_stringla funcionalidad de la fuente PHP, ¿sería nativa?
lovesh
1
@lovesh: no es tan fácil como eso. Si incorporan la extensión en el enlace troncal de PHP, pero sin hacer de Unicode la codificación predeterminada , no estoy seguro de si se consideraría nativo. Si, en cambio, Unicode se convertiría en la codificación predeterminada, como en C #, entonces sí, este sería un soporte nativo.
Arseni Mourzenko
O podría decir que es compatible de forma nativa pero no es común / no es el predeterminado. Es solo semántica.
BlueRaja - Danny Pflughoeft
2
Para que un lenguaje admita de forma nativa algún tipo de cadena, al menos requeriría que tenga una sintaxis para los literales de cadena para ese tipo de cadena. Por ejemplo, habría algo así en s = "Müsliriegel"mb;lugar de algo así s = toMb("Müsliriegel");(esto, por supuesto, se cumple trivialmente en todos los idiomas que usan UTF8 como codificación predeterminada)
user281377
11

"El lenguaje X admite de forma nativa la función Y" significa que puede usar la función Y sin ninguna extensión ni ningún otro esfuerzo para que funcione. Es directamente utilizable desde el propio lenguaje.

Por ejemplo, puedes decir que,

"El lenguaje C ++ admite de forma nativa la sobrecarga del operador".

"El lenguaje Java admite de forma nativa la recolección automática de basura", ya que no necesita utilizar ninguna otra biblioteca o herramienta que realice la recolección automática de basura. Viene con el idioma (y la plataforma) en sí.

Mert Akcakaya
fuente
9

Me da miedo nativo en los contextos que has mencionado como integrados . Si un idioma no proporciona soporte nativo para alguna característica, deberá implementarlo usted mismo o buscar alguna biblioteca o módulo que lo proporcione.

Otro contexto en el que verá mucho nativo es con respecto a las aplicaciones en una plataforma u otra. En esos casos, significa compilado para la plataforma en lugar de ser interpretado o traducido de alguna manera. Una aplicación iOS nativa es una que está escrita en un lenguaje como Objective-C y compilada en un código que se ejecuta directamente en la familia de procesadores ARM (que es lo que se encuentra en los dispositivos iOS).

Caleb
fuente
5

Lo consideraría un mal uso del término. Para que algo sea "nativo" de un idioma, es necesario construir instalaciones para ello. El soporte nativo para algo como Unicode tendría tipos sin formato en el lenguaje que implementan unicode de alguna manera. Por lo general, aunque esto no es parte del lenguaje sino parte de una biblioteca.

En mi humilde opinión, llamar a algo que aparece en la biblioteca predeterminada del idioma o no no hace que algo sea nativo o no.

Algunos ejemplos:

C ++ tiene soporte nativo para clases. C no lo hace. No hay palabras clave de idioma o facilidad de tipo que permita la escritura y el uso de clases, debe codificarlas a mano.

Sin embargo, diría que C ++ no tiene más un tipo de cadena nativa que C. Hay una plantilla basic_string en la biblioteca estándar, pero esta no es una instalación de lenguaje.

Sin embargo, C ++ 11 parece haber agregado soporte Unicode ya que se agregaron nuevas palabras clave y tipos sin formato al lenguaje en sí para facilitar el trabajo con valores Unicode.

Espero que aclare la diferencia que veo.

Edward extraño
fuente
Su uso de las palabras "tipos sin procesar" me confunde. ¿Podrías aclarar?
Jeremy Heiler
En Python 3, todas las cadenas son unicode (hay un bytestipo separado ), por lo que creo que es justo decir que Python admite unicode de forma nativa.
Brendan Long
Python 2 también funciona porque tiene un unicodetipo, aunque es más doloroso de usar que Python 3. C ++ es una bestia extraña, ya que gran parte de lo que normalmente forma parte de un lenguaje está en las bibliotecas.
Gort the Robot
@JeremyHeiler: Parece que los "tipos sin formato" son tipos fundamentales, no compuestos, no de biblioteca. Por ejemplo, C hace tener un tipo de cadena ( char[]), y las cadenas literales pares. No todos los "tipos sin formato" necesitan tener literales coincidentes, los punteros en C, por ejemplo, no. ( NULLsolo se puede convertir a int*)
MSalters
-1

"Soporte nativo", al menos en los idiomas interpretados o compilados JIT, generalmente significa código que es básicamente un enlace a la funcionalidad precompilada que se encuentra debajo del intérprete.

En JavaScript, por ejemplo, si alerta a window.open en Firefox, probablemente verá una función cuyas entrañas dicen algo como "[código nativo]". Si bien todas las referencias se envían al intérprete y se deben tomar medidas para establecer el contexto y el alcance, las entrañas están básicamente en caché y listas para funcionar. window.open, por ejemplo, probablemente llama a algo del entorno de tiempo de ejecución de un navegador.

Esto es diferente de los objetos y métodos no nativos que usted u otra persona escribieron, porque en esos casos todas sus declaraciones deben ser interpretadas / evaluadas.

Si alguien usara el término en referencia a un lenguaje que precompila, supondría que solo se refería a todas las cosas del lenguaje central que el compilador realmente tokeniza y convierte al código de máquina frente a las cosas que usted define, que se trata más sobre estructuras y referencias utilizadas para vincularlo todo.

Erik Reppen
fuente
1
Eso no es soporte nativo en el idioma; eso es soporte nativo en la biblioteca.
SLaks
¿Con qué punto no estás de acuerdo? O me estás malinterpretando o no entiendo algún concepto central, pero eso es algo vago.
Erik Reppen