Apa yang dimaksud dengan "dukungan asli untuk fitur" dalam bahasa pemrograman?


15

Saya melewati garis agak seperti ini "PHP tidak memiliki dukungan asli untuk Unicode". Saya juga membaca bahwa Python memiliki dukungan asli untuk Unicode. Sekarang Anda dapat memanggil fungsi utf8_encode()dalam PHP untuk menyandikan string ke Unicode dan Anda dapat menggunakan fungsi unicode()dalam Python untuk mengubah string menjadi unicode. Jadi apa artinya mendukung Unicode secara asli? Juga beberapa bahasa memiliki dukungan asli untuk konkurensi sementara beberapa tidak memiliki dukungan asli. Jadi apa yang dimaksud dengan

Bahasa X secara native mendukung fitur Y


Faktanya, Python 3 memang mendukung unicode secara asli. Seperti halnya 2.7.
nmichaels

Jawaban:


16

Ini berarti bahwa untuk mendukung fitur yang diberikan, pengembang tidak perlu menggunakan komponen yang tidak tertanam dalam bahasa itu sendiri, seperti ekstensi atau produk pihak ketiga.

Misalnya, PHP tidak memiliki dukungan asli untuk unicode, karena setiap fungsi yang berkaitan dengan string dalam PHP itu sendiri tidak mendukung unicode. Misalnya, untuk mendapatkan substring, Anda tidak dapat menggunakan substr, tetapi harus menggunakan mb_substr, yang mengharuskan untuk menggunakan ekstensi String Multibyte.

Untuk mendapatkan dukungan asli dari fitur yang diberikan, tidak cukup hanya dengan memasukkan ekstensi di trunk kode sumber. Sebaliknya, PHP akan memiliki dukungan asli untuk unicode jika unicode akan menjadi pengkodean default, seperti di C # atau Java.


1
Jadi ini hanya tentang apakah komponen itu bagian dari bahasa atau tidak? Maksud saya jika mereka memasukkan mb_stringfungsionalitas dalam sumber PHP itu akan menjadi asli?
lovesh

1
@lovesh: tidak semudah itu. Jika mereka memasukkan ekstensi di trunk PHP, tetapi tanpa membuat unicode pengkodean default , saya tidak yakin apakah itu akan dianggap asli. Sebaliknya, jika unicode akan menjadi pengkodean default, seperti dalam C #, maka ya, ini akan menjadi dukungan asli.
Arseni Mourzenko

Atau Anda bisa mengatakan itu didukung secara alami tetapi tidak umum / bukan default. Itu hanya semantik.
BlueRaja - Danny Pflughoeft

2
Untuk bahasa untuk native mendukung beberapa jenis string, saya setidaknya akan memerlukan untuk memiliki sintaks untuk string literal untuk jenis string. Sebagai contoh, akan ada sesuatu seperti s = "Müsliriegel"mb;bukannya sesuatu seperti s = toMb("Müsliriegel");(ini, tentu saja, sepele dipenuhi oleh semua bahasa yang menggunakan UTF8 sebagai penyandian default)
user281377

11

"Bahasa X mendukung fitur Y" berarti Anda dapat menggunakan fitur Y tanpa ekstensi apa pun atau upaya lain untuk membuatnya berfungsi. Secara langsung dapat digunakan dari bahasa itu sendiri.

Misalnya Anda bisa mengatakan itu,

"Bahasa C ++ secara alami mendukung overloading operator."

"Bahasa Jawa secara alami mendukung pengumpulan sampah otomatis", karena Anda tidak perlu menggunakan perpustakaan atau alat lain yang melakukan pengumpulan sampah otomatis. Muncul dengan langauge (dan platform) itu sendiri.


9

Saya telah membaca yang asli dalam konteks yang Anda sebutkan sebagai bawaan . Jika suatu bahasa tidak menyediakan dukungan asli untuk beberapa fitur, Anda harus mengimplementasikannya sendiri atau menemukan beberapa perpustakaan atau modul yang menyediakannya.

Konteks lain di mana Anda akan melihat asli banyak yang sehubungan dengan aplikasi pada beberapa platform yang atau lainnya. Dalam kasus-kasus itu, itu berarti dikompilasi untuk platform yang bertentangan dengan entah bagaimana ditafsirkan atau diterjemahkan. Sebuah aplikasi asli iOS adalah salah satu yang ditulis dalam bahasa seperti Objective-C dan dikompilasi ke kode yang berjalan langsung pada keluarga prosesor ARM (yang adalah apa yang Anda temukan di perangkat iOS).


5

Saya menganggap itu sebagai penyalahgunaan istilah. Untuk sesuatu yang menjadi "asli" dari suatu bahasa perlu dibangun fasilitas untuk itu. Dukungan asli untuk sesuatu seperti unicode akan memiliki tipe mentah dalam bahasa yang mengimplementasikan unicode dalam beberapa cara. Biasanya meskipun ini bukan bagian dari bahasa tetapi bagian dari perpustakaan.

IMHO memanggil sesuatu yang muncul di perpustakaan default bahasa atau tidak tidak membuat sesuatu yang asli atau tidak.

Beberapa contoh:

C ++ memiliki dukungan asli untuk kelas. C tidak. Tidak ada kata kunci bahasa atau jenis fasilitas yang memungkinkan penulisan dan penggunaan kelas, Anda harus kode mereka dengan tangan.

Saya akan mengatakan bahwa C ++ tidak lebih memiliki tipe string asli daripada C. Ada template basic_string di pustaka standar, tetapi ini bukan fasilitas bahasa.

C ++ 11 tampaknya akan benar-benar telah menambahkan dukungan Unicode karena kata kunci baru dan jenis mentah ditambahkan ke bahasa itu sendiri untuk memudahkan bekerja dengan nilai-nilai Unicode.

Harapan yang menjelaskan perbedaan yang saya lihat.


Penggunaan kata "raw type" oleh Anda membuat saya bingung. Bisakah Anda mengklarifikasi?
Jeremy Heiler

Dalam Python 3, semua string adalah unicode (ada bytesjenis yang terpisah ), jadi saya pikir adil untuk mengatakan Python mendukung unicode secara asli.
Brendan Long

Python 2 juga baik karena memiliki unicodetipe, meskipun lebih menyakitkan untuk digunakan daripada Python 3. C ++ adalah binatang aneh karena begitu banyak dari apa yang biasanya merupakan bagian dari bahasa di perpustakaan.
Gort the Robot

@JeremyHeiler: Tampaknya "tipe mentah" adalah tipe fundamental, non-komposit, non-perpustakaan. Sebagai contoh, C memang memiliki tipe string ( char[]), dan bahkan string literal. Tidak semua "tipe mentah" perlu memiliki literal yang cocok, pointer di C misalnya tidak. ( NULLhanya dapat dikonversi ke int*)
MSalters

-1

"Dukungan asli" setidaknya dalam bahasa yang ditafsirkan atau dikompilasi JIT biasanya berarti kode yang pada dasarnya hanya tautan ke fungsionalitas yang dikompilasi yang berada di bawah juru bahasa.

Dalam JavaScript, misalnya, jika Anda mengingatkan window.open di Firefox, Anda mungkin akan melihat fungsi yang jeroan mengatakan sesuatu seperti "[kode asli]." Sementara semua referensi dimasukkan ke penerjemah dan langkah-langkah perlu diambil untuk membangun konteks dan ruang lingkup, jeroan pada dasarnya di-cache dan siap untuk pergi. window.open misalnya, mungkin memanggil sesuatu dari lingkungan run-time browser.

Ini berbeda dari objek dan metode non-pribumi yang Anda atau orang lain tulis, karena dalam kasus-kasus itu semua pernyataan Anda perlu ditafsirkan / dievaluasi.

Jika seseorang menggunakan istilah yang merujuk pada bahasa yang melakukan pra-kompilasi, saya akan berasumsi mereka hanya bermaksud semua hal-hal inti bahasa bahwa kompilator sebenarnya tokenizes dan dikonversi ke kode mesin vs hal-hal yang Anda tentukan sendiri yang lebih tentang struktur dan referensi yang digunakan untuk menghubungkan semuanya.


1
Itu bukan dukungan asli dalam bahasa; itu dukungan asli di perpustakaan.
SLaks

Poin mana yang tidak Anda setujui? Entah Anda salah membaca saya atau saya tidak mengerti beberapa konsep inti tapi itu agak kabur.
Erik Reppen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.