O que se entende por "suporte nativo a um recurso" em uma linguagem de programação?

15

Passei por uma linha parecida com a seguinte: "PHP não tem suporte nativo para Unicode". Também li que Python tem suporte nativo para Unicode. Agora você pode chamar uma função utf8_encode()no PHP para codificar uma string em Unicode e pode usar uma função unicode()no Python para converter uma string em unicode. Então, o que significa dar suporte nativamente ao Unicode? Além disso, alguns idiomas têm suporte nativo para simultaneidade, enquanto outros não têm suporte nativo. Então, o que se entende por

A linguagem X suporta nativamente o recurso Y

lovesh
fonte
De fato, o Python 3 suporta nativamente o Unicode. Como faz 2.7.
Nmichaels

Respostas:

16

Isso significa que, para oferecer suporte a um determinado recurso, o desenvolvedor não precisa usar um componente que não esteja incorporado no próprio idioma, como uma extensão ou um produto de terceiros.

Por exemplo, o PHP não tem suporte nativo para unicode, porque todas as funções que tratam de strings no próprio PHP não suportam unicode. Por exemplo, para obter uma substring, você não pode usar substr, mas precisa usar mb_substr, o que requer o uso da extensão Multibyte String.

Para ter um suporte nativo a um determinado recurso, não basta incorporar uma extensão no tronco do código-fonte. Em vez disso, o PHP teria suporte nativo para unicode se unicode fosse a codificação padrão, como em C # ou Java.

Arseni Mourzenko
fonte
1
Então, é apenas sobre se o componente faz parte da linguagem ou não? Quero dizer, se eles incluírem mb_stringa funcionalidade na fonte PHP, ela se tornaria nativa?
lovesh
1
@lovesh: não é tão fácil assim. Se eles incorporarem a extensão no tronco do PHP, mas sem tornar o Unicode a codificação padrão , não tenho certeza se seria considerado nativo. Se, em vez disso, o unicode se tornasse a codificação padrão, como em C #, então sim, isso seria um suporte nativo.
Arseni Mourzenko
Ou você pode dizer que é suportado nativamente, mas não é comum / não é o padrão. É apenas semântica.
BlueRaja - Danny Pflughoeft
2
Para que um idioma suporte nativamente algum tipo de string, eu exigiria pelo menos que ela tivesse uma sintaxe para literais de string para esse tipo de string. Por exemplo, não seria algo como s = "Müsliriegel"mb;, em vez de algo como s = toMb("Müsliriegel");(isso é, naturalmente, trivialmente cumprida por todas as línguas que o uso UTF8 como a codificação padrão)
user281377
11

"O idioma X suporta nativamente o recurso Y" significa que você pode usar o recurso Y sem nenhuma extensão ou qualquer outro esforço para fazê-lo funcionar. É diretamente utilizável a partir do próprio idioma.

Por exemplo, você pode dizer isso,

"A linguagem C ++ suporta nativamente a sobrecarga do operador."

"A linguagem Java suporta nativamente a coleta automática de lixo", porque você não precisa usar nenhuma outra biblioteca ou ferramenta que faça a coleta automática de lixo. Ele vem com o próprio idioma (e plataforma).

Mert Akcakaya
fonte
9

Eu li nativo nos contextos que você mencionou como embutidos . Se um idioma não fornecer suporte nativo para algum recurso, você precisará implementá-lo ou encontrar alguma biblioteca ou módulo que o forneça.

Outro contexto em que você verá muito o nativo é em relação a aplicativos em uma plataforma ou outra. Nesses casos, significa compilado para a plataforma em vez de ser interpretado ou traduzido de alguma forma. Um aplicativo iOS nativo é aquele escrito em uma linguagem como Objective-C e compilado em código que é executado diretamente na família de processadores ARM (que é o que você encontra nos dispositivos iOS).

Caleb
fonte
5

Eu consideraria isso um uso indevido do termo. Para que algo seja "nativo" para um idioma, é necessário que ele seja construído em instalações. O suporte nativo a algo como unicode teria tipos brutos na linguagem que implementam o unicode de alguma forma. Geralmente, embora isso não faça parte do idioma, mas faça parte de uma biblioteca.

IMHO chamar algo que aparece na biblioteca padrão do idioma ou não não torna algo nativo ou não.

Alguns exemplos:

C ++ tem suporte nativo para classes. C não. Não há palavras-chave ou recurso de tipo de idioma que permita a escrita e o uso de classes; você deve codificá-las manualmente.

Eu diria que o C ++ não tem mais um tipo de string nativo do que o C. Há um modelo basic_string na biblioteca padrão, mas este não é um recurso de idioma.

Embora o C ++ 11 pareça ter realmente adicionado suporte a Unicode, novas palavras-chave e tipos brutos foram adicionados ao próprio idioma para facilitar o trabalho com valores Unicode.

Espero que esclareça a diferença que vejo.

Edward Strange
fonte
Seu uso das palavras "tipos brutos" me confunde. Você poderia esclarecer?
Jeremy Heiler
No Python 3, todas as strings são unicode (existe um bytestipo separado ), por isso acho justo dizer que o Python suporta natode unicode.
Brendan Long
O Python 2 funciona tão bem quanto tem um unicodetipo, embora seja mais doloroso de usar do que o Python 3. O C ++ é um animal estranho, pois muito do que normalmente faz parte de uma linguagem está nas bibliotecas.
Gort the Robot
@ JeremyHeiler: Parece que "tipos brutos" são tipos fundamentais, não compostos e sem biblioteca. Por exemplo, C faz ter um tipo de cadeia ( char[]), e strings literais mesmo. Nem todos os "tipos brutos" precisam ter literais correspondentes; os ponteiros em C, por exemplo, não. ( NULLSó pode ser convertido a int*)
MSalters
-1

"Suporte nativo", pelo menos em idiomas interpretados ou compilados por JIT, normalmente significa código que é basicamente apenas um link para a funcionalidade pré-compilada que fica abaixo do intérprete.

Em JavaScript, por exemplo, se você alertar window.open no Firefox, provavelmente verá uma função cujas entranhas dizem algo como "[código nativo]". Embora todas as referências sejam fornecidas ao intérprete e sejam necessárias medidas para estabelecer o contexto e o escopo, as entranhas são basicamente armazenadas em cache e prontas para serem usadas. window.open, por exemplo, provavelmente chama algo do ambiente de tempo de execução do navegador.

Isso é diferente dos objetos e métodos não nativos que você ou outra pessoa escreveu, porque nesses casos todas as suas instruções precisam ser interpretadas / avaliadas.

Se alguém estivesse usando o termo em referência a uma linguagem pré-compilada, eu assumiria que eles apenas significam todas as coisas da linguagem principal que o compilador realmente tokeniza e converte em código de máquina vs. estruturas e referências usadas para vincular tudo.

Erik Reppen
fonte
1
Isso não é suporte nativo no idioma; isso é suporte nativo na biblioteca.
SLaks
Com que ponto você discorda? Ou você está me interpretando mal ou não estou entendendo algum conceito central, mas isso é meio vago.
Erik Reppen