プログラミング言語の「機能のネイティブサポート」とはどういう意味ですか?


15

「PHPにはUnicodeのネイティブサポートはありません」というような行をたどりました。また、PythonにはUnicodeのネイティブサポートがあることも読みました。これutf8_encode()で、PHPの関数を呼び出して文字列をUnicodeにエンコードし、unicode()Pythonの関数を使用して文字列をUnicodeに変換できます。では、Unicodeをネイティブでサポートすることはどういう意味ですか?また、一部の言語は並行性をネイティブでサポートしていますが、一部の言語はネイティブをサポートしていません。だから何が意味するの

X言語は機能Yをネイティブでサポートします


実際のところ、Python 3はユニコードをネイティブでサポートしています。2.7と同様。
-nmichaels

回答:


16

つまり、特定の機能をサポートするために、開発者は拡張機能やサードパーティ製品など、言語自体に埋め込まれていないコンポーネントを使用する必要はありません。

たとえば、PHPはUnicodeをネイティブでサポートしていません。これは、PHP自体の文字列を処理するすべての関数がUnicodeをサポートしていないためです。たとえば、サブストリングを取得するには、を使用できませんsubstrmb_substr、マルチバイト文字列拡張機能を使用する必要があるを使用する必要があります。

特定の機能をネイティブでサポートするには、ソースコードトランクに拡張機能を組み込むだけでは不十分です。代わりに、C#やJavaのようにunicodeがデフォルトのエンコーディングである場合、PHPはunicodeをネイティブでサポートします。


1
それで、コンポーネントが言語の一部であるかどうかについてだけですか?mb_stringPHPソースにの機能が含まれているとネイティブになりますか?
-lovesh

1
@lovesh:それほど簡単ではありません。PHPトランクに拡張機能を組み込みますが、Unicodeをデフォルトのエンコーディングにしないと、ネイティブと見なされるかどうかわかりません。代わりに、C#のようにunicodeがデフォルトのエンコーディングになる場合、はい、これはネイティブサポートになります。
アルセニムルゼンコ

または、ネイティブにサポートされているが、一般的ではない/デフォルトではない、と言うこともできます。ただのセマンティクスです。
BlueRaja-ダニーPflughoeft

2
ある種の文字列をネイティブでサポートする言語の場合、少なくともその種の文字列の文字列リテラルの構文が必要です。たとえば、次のようなもののs = "Müsliriegel"mb;代わりに何かがありますs = toMb("Müsliriegel");(もちろん、これはデフォルトのエンコーディングとしてUTF8を使用するすべての言語で簡単に実現されます)
-user281377

11

「X言語は、機能Yをネイティブでサポートします」とは、機能Yを機能拡張するための拡張やその他の努力なしで使用できることを意味します。言語自体から直接使用できます。

たとえば、あなたはそれを言うことができます、

「C ++言語はネイティブに演算子のオーバーロードをサポートしています。」

「Java言語はネイティブに自動ガベージコレクションをサポートしています」。これは、自動ガベージコレクションを行う他のライブラリやツールを使用する必要がないためです。言語(およびプラットフォーム)自体に付属しています。


9

あなたが組み込みとして言及した文脈でネイティブを読みまし。言語が何らかの機能のネイティブサポートを提供しない場合は、自分で実装するか、それを提供するライブラリまたはモジュールを見つける必要があります。

ネイティブがよく見られるもう1つのコンテキストは、何らかのプラットフォーム上のアプリケーションに関するものです。これらの場合、何らかの方法で解釈または翻訳されるのではなく、プラットフォーム用にコンパイルされることを意味しますネイティブiOSアプリは、 Objective-Cのような言語で書かれており、(あなたがiOSデバイスで見つけるものです)、ARMプロセッサファミリ上で直接実行されるコードにコンパイルされています一つです。


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

-1

少なくともインタープリター言語またはJITコンパイル言語での「ネイティブサポート」とは、通常、基本的にインタープリターの下にあるプリコンパイル済み機能への単なるリンクであるコードを意味します。

たとえばJavaScriptでは、Firefoxでwindow.openに警告すると、おそらく「[ネイティブコード]」のような内容の関数が表示されます。すべての参照はインタプリタに送られ、コンテキストとスコープを確立するための手順を実行する必要がありますが、内部は基本的にキャッシュされて準備ができています。たとえば、window.openは、おそらくブラウザのランタイム環境から何かを呼び出します。

これは、あなたや他の誰かが書いた非ネイティブのオブジェクトやメソッドとは異なります。これらの場合、すべてのステートメントを解釈/評価する必要があるからです。

誰かがプリコンパイルする言語を参照してこの用語を使用している場合、コンパイラが実際にトークン化してマシンコードに変換するコア言語のすべてのものを意味していると思います。すべてをリンクするために使用される構造と参照。


1
それは言語のネイティブサポートではありません。それはライブラリのネイティブサポートです。
SLaks

どの点に反対ですか?あなたは私を誤解しているか、または私はいくつかのコアコンセプトを理解していませんが、それはちょっと曖昧です。
エリックReppen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.