Cosa si intende per "supporto nativo per una funzione" in un linguaggio di programmazione?


15

Ho attraversato una linea in questo modo "PHP non ha supporto nativo per Unicode". Inoltre ho letto che Python ha il supporto nativo per Unicode. Ora puoi chiamare una funzione utf8_encode()in PHP per codificare una stringa in Unicode e puoi usare una funzione unicode()in Python per convertire una stringa in Unicode. Cosa significa supportare Unicode in modo nativo? Inoltre alcune lingue hanno un supporto nativo per la concorrenza, mentre altre non hanno un supporto nativo. Quindi cosa si intende per

Il linguaggio X supporta nativamente la funzione Y


In realtà, Python 3 supporta nativamente Unicode. Come fa 2.7.
nmichaels,

Risposte:


16

Significa che per supportare una determinata funzionalità, lo sviluppatore non ha bisogno di usare un componente che non è incorporato nella lingua stessa, come un'estensione o un prodotto di terze parti.

Ad esempio, PHP non ha supporto nativo per Unicode, perché ogni funzione che si occupa di stringhe in PHP stesso non supporta Unicode. Ad esempio, per ottenere una sottostringa, non è possibile utilizzare substr, ma è necessario utilizzare mb_substr, che richiede l'utilizzo dell'estensione String multibyte.

Per avere un supporto nativo di una determinata funzionalità, non è sufficiente incorporare solo un'estensione nel trunk del codice sorgente. Invece, PHP avrebbe il supporto nativo per Unicode se Unicode sarebbe la codifica predefinita, come in C # o Java.


1
Quindi si tratta solo se il componente fa parte del linguaggio o no? Voglio dire se includessero mb_stringla funzionalità nella fonte PHP diventerebbe nativa?
lovesh

1
@lovesh: non è così facile. Se incorporano l'estensione nel trunk PHP, ma senza rendere unicode la codifica predefinita , non sono sicuro che sarebbe considerato nativo. Se invece Unicode diventasse la codifica predefinita, come in C #, allora sì, questo sarebbe un supporto nativo.
Arseni Mourzenko,

Oppure potresti dire che è supportato nativamente ma non comune / non predefinito. È solo semantica.
BlueRaja - Danny Pflughoeft

2
Affinché una lingua supporti nativamente un qualche tipo di stringa, vorrei almeno che avesse una sintassi per i letterali di stringa per quel tipo di stringa. Ad esempio, ci sarebbe qualcosa di simile s = "Müsliriegel"mb;invece di qualcosa di simile s = toMb("Müsliriegel");(questo, ovviamente, è banalmente soddisfatto da tutte le lingue che usano UTF8 come codifica predefinita)
user281377

11

"Il linguaggio X supporta nativamente la funzione Y" significa che è possibile utilizzare la funzione Y senza alcuna estensione o altro sforzo per farlo funzionare. È direttamente utilizzabile dalla lingua stessa.

Ad esempio puoi dire che,

"Il linguaggio C ++ supporta nativamente il sovraccarico dell'operatore."

"Il linguaggio Java supporta nativamente la garbage collection automatica", perché non è necessario utilizzare altre librerie o strumenti che eseguano la garbage collection automatica. Viene fornito con la lingua (e la piattaforma) stessa.


9

Ho letto nativo nei contesti che hai citato come incorporato . Se una lingua non fornisce supporto nativo per alcune funzionalità, dovrai implementarla tu stesso o trovare una libreria o un modulo che la fornisce.

Un altro contesto in cui vedrai molto nativo è rispetto alle applicazioni su una piattaforma o l'altra. In questi casi, significa compilato per la piattaforma anziché essere in qualche modo interpretato o tradotto. Un iOS app nativa è uno che è scritto in un linguaggio come Objective-C e compilato in codice che viene eseguito direttamente sulla famiglia di processori ARM (che è quello che si trova nei dispositivi iOS).


5

Lo considererei un uso improprio del termine. Affinché qualcosa sia "nativo" in una lingua, è necessario creare strutture per esso. Il supporto nativo per qualcosa come Unicode avrebbe tipi grezzi nella lingua che implementano Unicode in qualche modo. Di solito però questo non fa parte della lingua ma fa parte di una biblioteca.

IMHO che chiama qualcosa che appare o no nella libreria predefinita della lingua non rende nativo o meno.

Qualche esempio:

C ++ ha il supporto nativo per le classi. C no. Non esistono parole chiave per la lingua o funzionalità di tipo che consentano la scrittura e l'uso delle classi, è necessario codificarle manualmente.

Direi però che C ++ non ha più un tipo di stringa nativo di C. C'è un modello basic_string nella libreria standard, ma questa non è una struttura linguistica.

C ++ 11 sembra che abbia effettivamente aggiunto il supporto Unicode poiché nuove parole chiave e tipi non elaborati sono stati aggiunti al linguaggio stesso per facilitare l'utilizzo dei valori Unicode.

Spero che chiarisca la differenza che vedo.


Il tuo uso delle parole "tipi grezzi" mi confonde. Potresti chiarire?
Jeremy Heiler,

In Python 3, tutte le stringhe sono unicode (c'è un bytestipo separato ), quindi penso che sia giusto dire che Python supporta unicode in modo nativo.
Brendan Long,

Python 2 fa altrettanto in quanto ha un unicodetipo, sebbene sia più doloroso da usare rispetto a Python 3. Il C ++ è una strana bestia in quanto gran parte di ciò che normalmente fa parte di un linguaggio è nelle librerie.
Gort il robot,

@JeremyHeiler: Sembra che i "tipi grezzi" siano tipi fondamentali, non compositi, non di libreria. Ad esempio, C ha un tipo stringa ( char[]), e anche letterali stringa. Non tutti i "tipi grezzi" devono avere letterali corrispondenti, ad esempio i puntatori in C. ( NULLpuò essere convertito solo in int*)
MSalters

-1

"Supporto nativo" almeno nei linguaggi interpretati o compilati da JIT significa in genere codice che è fondamentalmente solo un collegamento a funzionalità precompilate che si trova sotto l'interprete.

In JavaScript, ad esempio, se avvisi window.open in Firefox, probabilmente vedrai una funzione le cui viscere dicono qualcosa come "[codice nativo]". Mentre tutti i riferimenti sono forniti all'interprete e devono essere prese misure per stabilire il contesto e la portata, le viscere sono sostanzialmente memorizzate nella cache e pronte per essere eseguite. window.open per esempio, probabilmente chiama qualcosa dall'ambiente di runtime di un browser.

Questo è diverso dagli oggetti e dai metodi non nativi che tu o qualcun altro avete scritto, perché in quei casi tutte le vostre dichiarazioni devono essere interpretate / valutate.

Se qualcuno stesse usando il termine in riferimento a un linguaggio che precompila, suppongo che significassero solo tutte le cose del linguaggio di base che il compilatore in realtà tokenizza e converte in codice macchina rispetto alle cose che tu definisci che sono più strutture e riferimenti usati per collegare tutto insieme.


1
Questo non è supporto nativo nella lingua; questo è il supporto nativo nella libreria.
SLaks,

Con quale punto non sei d'accordo? O mi stai fraintendendo o non capisco alcuni concetti fondamentali, ma è piuttosto vago.
Erik Reppen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.