编程语言中的“功能的本机支持”是什么意思?


15

我经历了这样的一行:“ PHP没有对Unicode的本机支持”。我还读到Python对Unicode具有本机支持。现在,您可以utf8_encode()在PHP中调用一个函数以将字符串编码为Unicode,并且可以unicode()在Python中使用一个函数将字符串转换为unicode。那么原生支持Unicode是什么意思呢?同样,某些语言对并发具有本地支持,而某些语言则没有对本地支持。那是什么意思

X语言本身支持功能Y


实际上,Python 3确实本地支持unicode。与2.7一样。
nmichaels 2012年

Answers:


16

这意味着要支持给定功能,开发人员无需使用未嵌入语言本身的组件,例如扩展程序或第三方产品。

例如,PHP没有对unicode的本机支持,因为在PHP本身中处理字符串的每个函数都不支持unicode。例如,要获取子字符串,您不能使用substr,而需要使用mb_substr,这需要使用Multibyte String扩展名。

要获得对给定功能的本地支持,仅在源代码主干中加入扩展是不够的。相反,如果unicode是默认的编码(如在C#或Java中),则PHP将对unicode提供本机支持。


1
因此,有关该组件是否属于语言的一部分呢?我的意思是,如果它们mb_string在PHP源代码中包含的功能,它将成为本地代码吗?
lovesh 2012年

1
@lovesh:不是那样简单。如果他们在PHP主干中合并了扩展名,但是没有将unicode设置为默认编码,则不确定是否将其视为本机。相反,如果unicode像C#中那样成为默认编码,则可以,这将是本机支持。
阿森尼·穆尔琴科(

或者您可以说它是本机支持的,但不是通用的/不是默认的。这只是语义。
BlueRaja-Danny Pflughoeft 2012年

2
对于一种本机支持某种字符串的语言,我至少要求它具有该字符串的字符串文字语法。例如,会有类似s = "Müsliriegel"mb;而不是类似的东西s = toMb("Müsliriegel");(当然,使用UTF8作为默认编码的所有语言都会
轻松实现

11

“ X语言本身支持功能Y”意味着您可以使用功能Y,而无需进行任何扩展或其他任何努力。它可以从语言本身直接使用。

例如,您可以这样说:

“ C ++语言本身支持运算符重载。”

“ Java语言本身支持自动垃圾收集”,因为您不需要使用任何其他进行自动垃圾收集的库或工具。它附带了语言(和平台)本身。


9

我已经在您提到的内置环境中阅读了native。如果一种语言不提供对某些功能的本机支持,则需要自己实现或找到一些提供此功能的库或模块。

您会经常看到本机的另一个上下文是关于某个平台或其他平台上的应用程序的。在那种情况下,它意味着为平台编译,而不是以某种方式解释或翻译。本机iOS应用程序是用Objective-C之类的语言编写的,并编译为直接在ARM系列处理器上运行的代码(这是在iOS设备中找到的)。


5

我认为这是一个误用。为了使某种语言成为语言的“本机”,需要为其内置一些功能。对unicode之类的本机支持将在某种程度上以某种方式实现unicode的语言具有原始类型。通常,尽管这不是语言的一部分,而是库的一部分。

恕我直言,调用某种出现在该语言默认库中的内容不会使它成为本机语言。

一些例子:

C ++具有对类的本机支持。C没有。没有语言关键字或类型工具可用于编写和使用类,因此必须手动进行编码。

我会说,尽管C ++的本机字符串类型不比C多。标准库中有一个basic_string模板,但这不是语言工具。

尽管C ++ 11似乎实际上已经增加了Unicode支持,因为新的关键字和原始类型已添加到语言本身,以方便使用Unicode值。

希望能澄清我所看到的差异。


您对“原始类型”一词的使用使我感到困惑。你能澄清一下吗?
杰里米·海勒

在Python 3中,所有字符串都是unicode(有一个单独的bytes类型),因此我认为可以说Python本机支持unicode是公平的。
布伦丹·朗

Python 2的unicode类型也很不错,尽管使用起来比Python 3更痛苦。C++是一种怪异的野兽,因为语言中通常包含的大部分内容都在库中。

@JeremyHeiler:看来“原始类型”是基本的,非复合的,非库类型。例如,C 确实具有字符串类型(char[]),甚至还有字符串文字。并非所有“原始类型”都需要具有匹配的文字,例如,C语言中的指针不需要。(NULL只能转换int*
MSalters 2014年

-1

至少使用解释性或JIT编译语言的“本机支持”通常意味着代码基本上只是指向解释器下方预编译功能的链接。

例如,在JavaScript中,如果您在Firefox中警告window.open,您可能会看到一个函数,其内部提示为“ [native code]”。尽管所有引用都馈给了解释器,并且需要采取步骤来建立上下文和范围,但内脏基本上已被缓存并可以使用。例如,window.open可能会从浏览器的运行时环境中调用某些内容。

这与您或其他人编写的非本机对象和方法不同,因为在这种情况下,您所有的语句都需要解释/评估。

如果有人使用该术语来指代预编译的语言,那么我认为它们仅表示编译器实际上将其标记化并转换为机器代码的所有核心语言内容,而不是您自己定义的内容。用于将它们链接在一起的结构和参考。


1
这不是该语言的本机支持。这是库中的本机支持。
SLaks 2012年

您不同意哪一点?您可能是在误读我,或者是我没有理解一些核心概念,但这有点含糊。
埃里克·雷彭
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.