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

15

Ho seguito una riga simile a questa "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. Quindi cosa significa supportare nativamente Unicode? Inoltre alcune lingue hanno il supporto nativo per la concorrenza mentre alcuni non hanno un supporto nativo. Quindi cosa si intende per

X language natively supports feature Y

    
posta lovesh 09.05.2012 - 23:26
fonte

5 risposte

16

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

Ad esempio, PHP non ha alcun supporto nativo per Unicode, poiché ogni funzione che si occupa di stringhe in PHP non supporta l'Unicode. Ad esempio, per ottenere una sottostringa, non è possibile utilizzare substr , ma è necessario utilizza mb_substr , che richiede l'uso dell'estensione per stringa Multibyte.

Per avere un supporto nativo di una determinata funzione, non è sufficiente incorporare 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.

    
risposta data 09.05.2012 - 23:36
fonte
11

"La lingua X supporta in modo nativo la funzione Y" significa che puoi 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 in modo nativo l'overloading dell'operatore."

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

    
risposta data 09.05.2012 - 23:50
fonte
9

Ho letto nativo nei contesti che hai citato come integrato . Se una lingua non fornisce il supporto nativo per alcune funzionalità, dovrai implementarlo tu stesso o trovare qualche libreria o modulo che le fornisce.

Un altro contesto in cui vedrai nativo molto è relativo alle applicazioni su qualche piattaforma o altro. In questi casi, significa compilato per la piattaforma anziché essere in qualche modo interpretato o tradotto. Un'app nativa per iOS è quella scritta in un linguaggio come Objective-C e compilata per codice che viene eseguita direttamente sulla famiglia di processori ARM (che è ciò che si trova nei dispositivi iOS).

    
risposta data 09.05.2012 - 23:38
fonte
5

Considererei un abuso del termine. Affinché qualcosa sia "nativo" in una lingua, è necessario che vi siano strutture integrate. Il supporto nativo per qualcosa come unicode avrebbe i tipi raw nella lingua che implementa unicode in qualche modo. Di solito anche se questo non è parte della lingua ma parte di una libreria.

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

Alcuni esempi:

C ++ ha il supporto nativo per le classi. C no. Non ci sono parole chiave di lingua o funzionalità di tipo che consente la scrittura e l'uso di classi, è necessario codificarle a mano.

Direi 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 però sembra aver effettivamente aggiunto il supporto Unicode quando nuove parole chiave e tipi grezzi sono stati aggiunti alla lingua stessa per facilitare il lavoro con i valori Unicode.

Spero che chiarisca la differenza che vedo.

    
risposta data 10.05.2012 - 00:58
fonte
-1

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

In JavaScript, ad esempio, se avvisi window.open in Firefox, probabilmente vedrai una funzione i cui elementi interni dicono qualcosa come "[codice nativo]." Mentre tutti i riferimenti sono forniti all'interprete e sono necessari dei passi per stabilire il contesto e la portata, le interiora sono fondamentalmente nascoste e pronte per essere utilizzate. window.open, ad esempio, probabilmente chiama qualcosa dall'ambiente run-time di un browser.

Questo è diverso dagli oggetti e dai metodi non nativi scritti da te o da qualcun altro, perché in quei casi tutte le tue istruzioni devono essere interpretate / valutate.

Se qualcuno usasse il termine in riferimento a un linguaggio che precompila, presumo che intendessero tutti i contenuti linguistici di base che il compilatore in realtà tokenizza e converte in codice macchina rispetto alle cose che tu stesso definisci che è maggiori informazioni sulle strutture e sui riferimenti utilizzati per collegarlo tutti insieme.

    
risposta data 10.05.2012 - 00:02
fonte

Leggi altre domande sui tag