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
programming-languages
lovesh
fonte
fonte
Respostas:
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 usarmb_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.
fonte
mb_string
a funcionalidade na fonte PHP, ela se tornaria nativa?s = "Müsliriegel"mb;
, em vez de algo comos = toMb("Müsliriegel");
(isso é, naturalmente, trivialmente cumprida por todas as línguas que o uso UTF8 como a codificação padrão)"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).
fonte
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).
fonte
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.
fonte
bytes
tipo separado ), por isso acho justo dizer que o Python suporta natode unicode.unicode
tipo, 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.char[]
), e strings literais mesmo. Nem todos os "tipos brutos" precisam ter literais correspondentes; os ponteiros em C, por exemplo, não. (NULL
Só pode ser convertido aint*
)"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.
fonte