Я прошел через примерно такую строку: «PHP не имеет встроенной поддержки Unicode». Также я читал, что Python имеет встроенную поддержку Unicode. Теперь вы можете вызвать функцию utf8_encode()
в PHP для кодирования строки в Unicode и использовать функцию unicode()
в Python для преобразования строки в Unicode. Так что же значит поддерживать Unicode изначально? Также некоторые языки имеют встроенную поддержку параллелизма, в то время как некоторые не имеют встроенной поддержки. Так что подразумевается под
Язык X изначально поддерживает функцию Y
programming-languages
lovesh
источник
источник
Ответы:
Это означает, что для поддержки данной функции разработчику не нужно использовать компонент, который не встроен в сам язык, например расширение или сторонний продукт.
Например, в PHP нет встроенной поддержки юникода, потому что каждая функция, которая работает со строками в самом PHP, не поддерживает юникод. Например, чтобы получить подстроку, вы не можете использовать
substr
, но должны использоватьmb_substr
, что требует использования расширения Multibyte String.Чтобы иметь встроенную поддержку данной функции, недостаточно просто включить расширение в ствол исходного кода. Вместо этого PHP будет иметь встроенную поддержку Юникода, если Юникод будет кодировкой по умолчанию, как в C # или Java.
источник
mb_string
функциональность в исходный код PHP, он стал бы нативным?s = "Müsliriegel"mb;
а не что-то вродеs = toMb("Müsliriegel");
(это, конечно, тривиально выполняется всеми языками, которые используют UTF8 в качестве кодировки по умолчанию)«Язык X изначально поддерживает функцию Y» означает, что вы можете использовать функцию Y без какого-либо расширения или каких-либо других усилий, чтобы заставить ее работать. Его можно использовать непосредственно из самого языка.
Например, вы можете сказать, что
«Язык C ++ изначально поддерживает перегрузку операторов».
«Язык Java изначально поддерживает автоматическую сборку мусора», потому что вам не нужно использовать какие-либо другие библиотеки или инструменты, которые выполняют автоматическую сборку мусора. Он поставляется с самим языком (и платформой).
источник
Я бы прочитал нативный в тех контекстах, которые вы упомянули как встроенные . Если язык не обеспечивает встроенную поддержку какой-либо функции, вам нужно будет реализовать ее самостоятельно или найти библиотеку или модуль, который ее предоставляет.
Другой контекст, в котором вы часто видите натив, касается приложений на той или иной платформе. В этих случаях это означает, что он скомпилирован для платформы, а не как-то интерпретирован или переведен. Родное приложение IOS является тот , который написан на языке , как Objective-C и компилируется код , который работает непосредственно на ARM семейства процессоров (который является то , что вы найдете в устройствах IOS).
источник
Я бы посчитал это неправильным употреблением этого термина. Чтобы что-то было «родным» для языка, в нем должны быть встроены средства. Встроенная поддержка чего-то вроде юникода будет иметь необработанные типы в языке, которые каким-то образом реализуют юникод. Хотя обычно это не часть языка, а часть библиотеки.
ИМХО вызов чего-то, что появляется в библиотеке языка по умолчанию или нет, не делает что-то родное или нет.
Несколько примеров:
C ++ имеет встроенную поддержку классов. С не делает. Не существует языковых ключевых слов или средств ввода типов, которые позволяют писать и использовать классы, вы должны кодировать их вручную.
Я бы сказал, однако, что C ++ не имеет собственного строкового типа, чем C. В стандартной библиотеке есть шаблон basic_string, но это не языковая возможность.
В C ++ 11, казалось бы, фактически добавлена поддержка Unicode, поскольку новые ключевые слова и необработанные типы были добавлены к самому языку для облегчения работы со значениями Unicode.
Надеюсь, это проясняет разницу, которую я вижу.
источник
bytes
тип), поэтому я думаю, что будет справедливо сказать, что Python поддерживает Unicode изначально.unicode
то же самое в том смысле, что у него есть тип, хотя его более болезненно использовать, чем Python 3. C ++ - странный зверь в том, что большая часть того, что обычно является частью языка, находится в библиотеках.char[]
), и даже строковые литералы. Не все «необработанные типы» должны иметь совпадающие литералы, например указатели в C не имеют. (NULL
может быть преобразован только вint*
)«Встроенная поддержка», по крайней мере, в интерпретируемых или JIT-скомпилированных языках обычно означает код, который в основном представляет собой ссылку на предварительно скомпилированную функциональность, которая находится ниже интерпретатора.
Например, в JavaScript, если вы оповестите window.open в Firefox, вы, вероятно, увидите функцию, внутренности которой говорят что-то вроде «[native code]». В то время как все ссылки передаются интерпретатору, и необходимо предпринять шаги для установления контекста и области действия, внутренности в основном кэшируются и готовы к работе. Например, window.open, вероятно, вызывает что-то из среды выполнения браузера.
Это отличается от неродных объектов и методов, которые вы или кто-то другой написал, потому что в этих случаях все ваши утверждения необходимо интерпретировать / оценивать.
Если бы кто-то использовал этот термин в отношении языка, который предварительно компилируется, я бы предположил, что он имел в виду все базовые языковые вещи, которые компилятор фактически токенизирует и преобразует в машинный код, по сравнению с тем, что вы определяете сами, что больше относится к структуры и ссылки используются, чтобы связать все это вместе.
источник