Przeszedłem przez linię podobną do tej: „PHP nie ma natywnej obsługi Unicode”. Przeczytałem również, że Python ma natywne wsparcie dla Unicode. Teraz możesz wywołać funkcję utf8_encode()
w PHP, aby zakodować ciąg znaków w Unicode, i możesz użyć funkcji unicode()
w Pythonie, aby przekonwertować ciąg znaków na Unicode. Co to znaczy natywnie obsługiwać Unicode? Również niektóre języki mają natywne wsparcie dla współbieżności, podczas gdy niektóre nie mają natywnego wsparcia. Co to znaczy
Język X natywnie obsługuje funkcję Y
programming-languages
lovesh
źródło
źródło
Odpowiedzi:
Oznacza to, że do obsługi danej funkcji programista nie musi używać komponentu, który nie jest osadzony w samym języku, takiego jak rozszerzenie lub produkt innej firmy.
Na przykład PHP nie ma natywnego wsparcia dla Unicode, ponieważ każda funkcja, która obsługuje łańcuchy w samym PHP, nie obsługuje Unicode. Na przykład, aby uzyskać podłańcuch, nie można go użyć
substr
, ale trzeba go użyćmb_substr
, co wymaga użycia rozszerzenia Ciąg wielobajtowy.Aby mieć natywną obsługę danej funkcji, nie wystarczy po prostu dodać rozszerzenie do pnia kodu źródłowego. Zamiast tego PHP miałoby natywne wsparcie dla Unicode, jeśli unicode byłoby domyślnym kodowaniem, jak w C # lub Java.
źródło
mb_string
funkcjonalność w źródle PHP, stałaby się natywna?s = "Müsliriegel"mb;
zamiast czegoś podobnegos = toMb("Müsliriegel");
(jest to oczywiście trywialnie spełniane przez wszystkie języki, które używają UTF8 jako domyślnego kodowania)„Język X natywnie obsługuje funkcję Y” oznacza, że można używać funkcji Y bez żadnego rozszerzenia ani żadnego innego wysiłku, aby ją uruchomić. Jest bezpośrednio użyteczny z samego języka.
Możesz na przykład powiedzieć,
„Język C ++ natywnie obsługuje przeciążanie operatora”.
„Język Java natywnie obsługuje automatyczne czyszczenie pamięci”, ponieważ nie trzeba używać żadnych innych bibliotek ani narzędzi, które wykonują automatyczne czyszczenie pamięci. Pochodzi z samego języka (i platformy).
źródło
Czytałbym natywny w kontekstach, które wspomniałeś jako wbudowane . Jeśli język nie zapewnia natywnej obsługi niektórych funkcji, musisz go zaimplementować samodzielnie lub znaleźć bibliotekę lub moduł, który je zapewnia.
Innym kontekstem, w którym często widujesz natywny, jest aplikacja na jakiejś platformie. W takich przypadkach oznacza to skompilowanie dla platformy, a nie interpretację lub tłumaczenie. Natywna aplikacja iOS to taki, który jest napisany w języku Objective-C jak i kompilowane do kodu, który działa bezpośrednio na rodziny ARM procesorów (czyli to, co można znaleźć w urządzeniach z iOS).
źródło
Uważam to za niewłaściwe użycie tego terminu. Aby coś było „rodzime” dla danego języka, należy zbudować odpowiednie udogodnienia. Natywne wsparcie dla czegoś takiego jak Unicode miałoby surowe typy w języku, który w jakiś sposób implementuje Unicode. Zwykle jednak nie jest to część języka, ale część biblioteki.
Wywołanie IMHO czegoś, co pojawia się w domyślnej bibliotece języka lub nie, nie powoduje, że coś jest rodzime.
Kilka przykładów:
C ++ ma natywne wsparcie dla klas. C nie. Nie ma słów kluczowych ani pism językowych, które umożliwiałyby pisanie i korzystanie z klas, należy je kodować ręcznie.
Powiedziałbym jednak, że C ++ nie ma natywnego typu ciągu niż C. W bibliotece standardowej znajduje się szablon basic_string, ale nie jest to narzędzie językowe.
Wydaje się jednak, że C ++ 11 dodał obsługę Unicode, ponieważ do samego języka dodano nowe słowa kluczowe i typy raw, aby ułatwić pracę z wartościami Unicode.
Mam nadzieję, że to wyjaśnia różnicę, którą widzę.
źródło
bytes
typ), więc myślę, że można powiedzieć, że Python obsługuje Unicode natywnie.unicode
typ, chociaż korzystanie z niego jest bardziej bolesne niż w Pythonie 3. C ++ jest dziwną bestią pod tym względem, że tak wiele tego, co zwykle jest częścią języka, znajduje się w bibliotekach.char[]
), a nawet literały ciągów. Nie wszystkie „typy surowe” muszą mieć pasujące literały, na przykład wskaźniki w C nie. (NULL
można tylko przekonwertować naint*
)„Obsługa natywna” przynajmniej w językach interpretowanych lub skompilowanych w JIT zazwyczaj oznacza kod, który jest po prostu linkiem do wstępnie skompilowanej funkcjonalności, która znajduje się poniżej interpretera.
Na przykład w JavaScript, jeśli ostrzeżesz window.open w Firefox, prawdopodobnie zobaczysz funkcję, której wnętrzności mówią coś w stylu „[kod natywny]”. Chociaż wszystkie odniesienia są podawane do tłumacza i należy podjąć kroki w celu ustalenia kontekstu i zakresu, wnętrze jest w zasadzie buforowane i gotowe do użycia. Na przykład window.open prawdopodobnie wywołuje coś ze środowiska wykonawczego przeglądarki.
Różni się to od nienatywnych obiektów i metod napisanych przez ciebie lub kogoś innego, ponieważ w takich przypadkach wszystkie twoje wypowiedzi muszą być interpretowane / oceniane.
Gdyby ktoś użył tego terminu w odniesieniu do języka, który prekompiluje, założyłbym, że miał on na myśli wszystkie podstawowe rzeczy językowe, które kompilator faktycznie tokenizuje i konwertuje na kod maszynowy, w przeciwieństwie do tego, co sam definiujesz, co bardziej dotyczy struktury i odniesienia użyte do połączenia tego wszystkiego razem.
źródło