Was bedeutet "native Unterstützung für ein Feature" in einer Programmiersprache?

15

Ich habe eine Zeile wie diese "PHP hat keine native Unterstützung für Unicode" durchgesehen. Ich habe auch gelesen, dass Python native Unterstützung für Unicode hat. Jetzt können Sie eine Funktion utf8_encode()in PHP aufrufen , um einen String in Unicode zu kodieren, und Sie können eine Funktion unicode()in Python verwenden, um einen String in Unicode zu konvertieren. Was bedeutet es also, Unicode nativ zu unterstützen? Einige Sprachen bieten native Unterstützung für Parallelität, während andere keine native Unterstützung bieten. Was ist damit gemeint?

Die Sprache X unterstützt nativ die Funktion Y

Liebe
quelle
Tatsächlich unterstützt Python 3 Unicode nativ. Wie auch 2.7.
nmichaels

Antworten:

16

Dies bedeutet, dass der Entwickler zur Unterstützung einer bestimmten Funktion keine Komponente verwenden muss, die nicht in der Sprache selbst eingebettet ist, wie z. B. eine Erweiterung oder ein Produkt eines Drittanbieters.

Zum Beispiel hat PHP keine native Unterstützung für Unicode, da jede Funktion, die sich mit Strings in PHP befasst, Unicode nicht unterstützt. Um beispielsweise eine Teilzeichenfolge abzurufen, können Sie diese nicht verwenden substr, sondern müssen sie verwenden. Hierzu mb_substrmuss die Erweiterung "Multibyte-Zeichenfolge" verwendet werden.

Um eine native Unterstützung für ein bestimmtes Feature zu erhalten, reicht es nicht aus, nur eine Erweiterung in den Quellcode-Trunk aufzunehmen. Stattdessen hätte PHP native Unterstützung für Unicode, wenn Unicode die Standardcodierung wäre, wie in C # oder Java.

Arseni Mourzenko
quelle
1
Es geht also nur darum, ob die Komponente Teil der Sprache ist oder nicht. Ich meine, wenn sie die mb_stringFunktionalität in PHP-Quellcode enthalten, würde es nativ werden?
Liebe
1
@lovesh: es ist nicht so einfach. Wenn sie die Erweiterung in den PHP-Trunk integrieren, aber Unicode nicht zur Standardcodierung machen , bin ich mir nicht sicher, ob dies als nativ angesehen wird. Wenn stattdessen Unicode die Standardcodierung wird, wie in C #, dann ist dies eine native Unterstützung.
Arseni Mourzenko
Oder man könnte sagen, es wird von Haus aus unterstützt, ist aber nicht allgemein / nicht die Standardeinstellung. Es ist nur Semantik.
BlueRaja - Danny Pflughoeft
2
Für eine Sprache nativ eine Art von String zu unterstützen, würde ich es zumindest erfordern eine Syntax für Stringliterale für diese Art von Zeichenfolge zu haben. Zum Beispiel würde es so etwas wie s = "Müsliriegel"mb;anstelle von so etwas geben s = toMb("Müsliriegel");(dies wird natürlich trivialerweise von allen Sprachen erfüllt, die UTF8 als Standardkodierung verwenden)
user281377
11

"X-Sprache unterstützt nativ Feature Y" bedeutet, dass Sie Feature Y ohne Erweiterung oder sonstigen Aufwand verwenden können, damit es funktioniert. Es ist direkt aus der Sprache selbst verwendbar.

Zum Beispiel kann man sagen, dass

"C ++ - Sprache unterstützt nativ das Überladen von Operatoren."

"Java unterstützt die automatische Garbage Collection von Haus aus", da Sie keine anderen Bibliotheken oder Tools verwenden müssen, die die automatische Garbage Collection durchführen. Es kommt mit der Sprache (und Plattform) selbst.

Mert Akcakaya
quelle
9

Ich würde native in den Kontexten lesen, die Sie als eingebaut bezeichnet haben . Wenn eine Sprache für eine Funktion keine native Unterstützung bietet, müssen Sie sie selbst implementieren oder eine Bibliothek oder ein Modul finden, die bzw. das sie bietet.

Ein weiterer Kontext, in dem Sie native häufig sehen, betrifft Anwendungen auf der einen oder anderen Plattform. In diesen Fällen bedeutet es, dass es für die Plattform kompiliert und nicht irgendwie interpretiert oder übersetzt wird. Eine native iOS-App ist eine App , die in einer Sprache wie Objective-C geschrieben und zu Code kompiliert wurde, der direkt auf der ARM-Prozessorfamilie (die Sie auf iOS-Geräten finden) ausgeführt wird.

Caleb
quelle
5

Ich würde das als Missbrauch des Begriffs ansehen. Damit etwas in einer Sprache "muttersprachlich" ist, müssen entsprechende Einrichtungen eingebaut werden. Native Unterstützung für so etwas wie Unicode würde rohe Typen in der Sprache haben, die Unicode auf irgendeine Weise implementieren. Normalerweise ist dies jedoch nicht Teil der Sprache, sondern Teil einer Bibliothek.

IMHO, das etwas aufruft, das in der Standardbibliothek der Sprache angezeigt wird oder nicht, macht etwas nicht native oder nicht.

Einige Beispiele:

C ++ bietet native Unterstützung für Klassen. C nicht. Es gibt keine Sprachschlüsselwörter oder Typfunktionen, die das Schreiben und Verwenden von Klassen ermöglichen. Sie müssen sie von Hand codieren.

Ich würde allerdings sagen, dass C ++ nicht mehr einen systemeigenen Zeichenfolgentyp als C hat. Es gibt eine basic_string-Vorlage in der Standardbibliothek, dies ist jedoch keine Sprachfunktion.

C ++ 11 scheint tatsächlich Unicode-Unterstützung hinzugefügt zu haben, da der Sprache selbst neue Schlüsselwörter und Raw-Typen hinzugefügt wurden, um die Arbeit mit Unicode-Werten zu erleichtern.

Hoffe, das verdeutlicht den Unterschied, den ich sehe.

Edward Strange
quelle
Ihre Verwendung der Worte "Rohtypen" verwirrt mich. Könnten Sie das klären?
Jeremy Heiler
In Python 3 sind alle Zeichenfolgen Unicode (es gibt einen separaten bytesTyp). Ich halte es daher für angemessen, zu sagen, dass Python Unicode nativ unterstützt.
Brendan Long
Python 2 hat auch einen unicodeTyp, obwohl seine Verwendung schmerzhafter ist als Python 3. C ++ ist insofern ein seltsames Biest, als sich so viel von dem, was normalerweise Teil einer Sprache ist, in den Bibliotheken befindet.
Gort the Robot
@ JeremyHeiler: Es scheint, dass "Rohtypen" grundlegende, nicht zusammengesetzte, nicht bibliothekarische Typen sind. Zum Beispiel C hat einen String - Typen haben ( char[]) und sogar Stringliterale. Nicht alle "rohen Typen" müssen übereinstimmende Literale haben, Zeiger in C zum Beispiel nicht. ( NULLKann nur umgewandelt zu int*)
MSalters
-1

"Native Unterstützung", zumindest in interpretierten oder JIT-kompilierten Sprachen, bedeutet normalerweise Code, der im Grunde nur eine Verknüpfung zu vorkompilierten Funktionen ist, die sich unterhalb des Interpreters befinden.

Wenn Sie beispielsweise in JavaScript window.open in Firefox warnen, sehen Sie wahrscheinlich eine Funktion, deren Innereien so etwas wie "[native code]" sagen. Während alle Referenzen an den Interpreter weitergeleitet werden und Schritte unternommen werden müssen, um Kontext und Umfang festzulegen, sind die Innereien im Grunde genommen zwischengespeichert und einsatzbereit. window.open zum Beispiel ruft wahrscheinlich etwas aus der Laufzeitumgebung eines Browsers auf.

Dies unterscheidet sich von den nicht-nativen Objekten und Methoden, die Sie oder jemand anders geschrieben haben, da in diesen Fällen alle Ihre Anweisungen interpretiert / ausgewertet werden müssen.

Wenn jemand den Begriff in Bezug auf eine Sprache verwendet, die vorkompiliert wird, würde ich davon ausgehen, dass er nur das gesamte Kernsprachenmaterial meint, das der Compiler tatsächlich tokenisiert und in Maschinencode konvertiert, im Gegensatz zu dem Material, das Sie selbst definieren Strukturen und Referenzen, die alles miteinander verbinden.

Erik Reppen
quelle
1
Das ist keine native Unterstützung in der Sprache. Das ist native Unterstützung in der Bibliothek.
SLaks
Mit welchem ​​Punkt sind Sie nicht einverstanden? Entweder verstehst du mich falsch oder ich verstehe ein Kernkonzept nicht, aber das ist irgendwie vage.
Erik Reppen