Answers:
这意味着要支持给定功能,开发人员无需使用未嵌入语言本身的组件,例如扩展程序或第三方产品。
例如,PHP没有对unicode的本机支持,因为在PHP本身中处理字符串的每个函数都不支持unicode。例如,要获取子字符串,您不能使用substr
,而需要使用mb_substr
,这需要使用Multibyte String扩展名。
要获得对给定功能的本地支持,仅在源代码主干中加入扩展是不够的。相反,如果unicode是默认的编码(如在C#或Java中),则PHP将对unicode提供本机支持。
mb_string
在PHP源代码中包含的功能,它将成为本地代码吗?
s = "Müsliriegel"mb;
而不是类似的东西s = toMb("Müsliriegel");
(当然,使用UTF8作为默认编码的所有语言都会
我认为这是一个误用。为了使某种语言成为语言的“本机”,需要为其内置一些功能。对unicode之类的本机支持将在某种程度上以某种方式实现unicode的语言具有原始类型。通常,尽管这不是语言的一部分,而是库的一部分。
恕我直言,调用某种出现在该语言默认库中的内容不会使它成为本机语言。
一些例子:
C ++具有对类的本机支持。C没有。没有语言关键字或类型工具可用于编写和使用类,因此必须手动进行编码。
我会说,尽管C ++的本机字符串类型不比C多。标准库中有一个basic_string模板,但这不是语言工具。
尽管C ++ 11似乎实际上已经增加了Unicode支持,因为新的关键字和原始类型已添加到语言本身,以方便使用Unicode值。
希望能澄清我所看到的差异。
bytes
类型),因此我认为可以说Python本机支持unicode是公平的。
unicode
类型也很不错,尽管使用起来比Python 3更痛苦。C++是一种怪异的野兽,因为语言中通常包含的大部分内容都在库中。
char[]
),甚至还有字符串文字。并非所有“原始类型”都需要具有匹配的文字,例如,C语言中的指针不需要。(NULL
只能转换为int*
)
至少使用解释性或JIT编译语言的“本机支持”通常意味着代码基本上只是指向解释器下方预编译功能的链接。
例如,在JavaScript中,如果您在Firefox中警告window.open,您可能会看到一个函数,其内部提示为“ [native code]”。尽管所有引用都馈给了解释器,并且需要采取步骤来建立上下文和范围,但内脏基本上已被缓存并可以使用。例如,window.open可能会从浏览器的运行时环境中调用某些内容。
这与您或其他人编写的非本机对象和方法不同,因为在这种情况下,您所有的语句都需要解释/评估。
如果有人使用该术语来指代预编译的语言,那么我认为它们仅表示编译器实际上将其标记化并转换为机器代码的所有核心语言内容,而不是您自己定义的内容。用于将它们链接在一起的结构和参考。