Saya sering mendengar istilah bahwa bahasa A ditulis dalam bahasa B. Misalnya, PHP telah ditulis C , C # ditulis dalam C ++ .
Dapatkah seseorang tolong jelaskan apa artinya itu dan apakah itu benar? Apakah itu ada hubungannya dengan kompiler interpreter yang digunakan oleh bahasa?
Selain itu, faktor apa saja yang menjadi dasar pemilihan bahasa pelaksana?
s/written/implemented/
dan itu jauh lebih jelas.Jawaban:
Sebagian besar bahasa pemrograman terbagi dalam dua kategori: bahasa yang ditafsirkan dan dikompilasi.
Bahasa yang dikompilasi diterjemahkan oleh kompiler ke dalam kode mesin , bahasa yang CPU secara langsung jalankan langkah demi langkah. Bahasa yang ditafsirkan, di sisi lain, menggunakan perantara, juru bahasa , untuk menjalankan kode bahasa. Interpreter itu sendiri adalah program lain, biasanya itu sendiri dikompilasi ke kode mesin.
PHP adalah bahasa yang diartikan. Anda memerlukan program terpisah untuk menjalankan kode PHP, komputer tidak menjalankan program secara langsung. Program terpisah itu, juru bahasa PHP, ditulis dengan huruf C.
C # adalah bahasa yang dikompilasi, tetapi tidak dikompilasi ke kode mesin. Sebaliknya, ini dikompilasi ke bahasa spesialis, kode byte, untuk dijalankan pada mesin virtual. Java adalah contoh lain dari pengaturan semacam itu. Anda bisa melihatnya sebagai gabungan antara kompilasi dan interpretasi, di mana mesin virtual adalah seorang juru bahasa. Mesin virtual untuk C # (CLI, atau Infrastruktur Bahasa Umum ) ditulis dalam C ++.
Contoh lain adalah:
sumber
Anda pada dasarnya benar. Jika dikatakan bahwa Ruby ditulis dalam C, ini berarti bahwa penerjemah bahasa dan bagian dari perpustakaan inti ditulis dalam C.
Jadi interpreter Ruby adalah program C yang mengambil file teks sebagai input, memprosesnya dan kemudian memanggil fungsi-fungsi yang ada di file teks lain (jika ditulis dalam Ruby) atau yang menyusun kode C, sebanyak fungsionalitas dasar yang membutuhkan untuk secara langsung mengakses sumber daya sistem seperti memori, sistem file dan banyak lagi. Dan beberapa fungsi yang membutuhkan kinerja sangat tinggi.
Jadi Anda memiliki bagian berbeda dari bahasa yang dapat atau harus ditulis dalam bahasa lain. Tidak ada yang akan mencegah Anda menulis juru bahasa di C dan perpustakaan di C ++ (meskipun mungkin membuat beberapa hal lebih sulit). Anda bahkan dapat memiliki beberapa langkah dan menggunakan bahasa yang sangat bagus dalam pemrosesan teks untuk menghasilkan beberapa data perantara yang kemudian diproses oleh beberapa kode C.
Faktor-faktor untuk keputusan mungkin sama seperti untuk aplikasi kompleks lainnya. Performa adalah satu. Kemampuan untuk menulis kode yang dapat mengakses sumber daya sistem secara langsung. Jadi dalam banyak kasus itu harus bahasa yang dikompilasi (meskipun secara teori Anda bisa menulis interpreter Ruby dengan Python). Ketersediaan pada sistem yang berbeda adalah penting jika Anda ingin bahasa Anda berjalan di Linux, Win, OS X dan lainnya.
sumber
Ini berarti bahwa sebagian besar inti dari bahasa A ditulis dalam bahasa B. Apa "inti dari bahasa A" mungkin berbeda dari bahasa ke bahasa, tetapi secara umum Anda menebak dengan benar, itu berarti kompiler atau juru bahasa. Faktor penentu dalam memilih bahasa untuk menulis bahasa lain adalah, seperti pada hampir setiap proyek, bahasa apa yang lebih dikenal oleh pengembang.
Yang mengatakan, "bahasa A ditulis dalam bahasa B" adalah penyederhanaan yang berlebihan untuk sebagian besar bahasa modern. Jika kita mengambil Python sebagai contoh, sedangkan implementasi referensi, CPython , memang ditulis dalam C ada implementasi yang ditulis dalam bahasa lain, seperti Jython (ditulis dalam Java), IronPython (ditulis dalam C #), PyPy (ditulis dalam Python), CLPython (ditulis dalam Common Lisp), Stackless Python (ditulis dalam C dan Python) dan Unladen Swallow (ditulis dalam C ++).
Bahasa pemrograman adalah sebuah definisi, dan seperti yang ditunjukkan oleh contoh Python, sebenarnya tidak ada batasan pada bahasa apa yang dapat ditulis oleh kompiler, penerjemah, dan perpustakaan. Dan tentu saja juga memungkinkan untuk bahasa yang ditulis sendiri, melalui proses yang disebut bootstrap .
sumber
string.lower(s)
adalah fungsi python yang mendelegasikan itureturn s.lower()
, itu benar. The CPython operasi kasus 3.3 string yang diimplementasikan dalam C.Dari perspektif menggunakan bahasa pemrograman, bahasa pemrograman hanyalah sebuah program. Mungkin kompiler, atau mungkin juru bahasa, atau mungkin semacam mesin virtual. Semua itu hanyalah program komputer, dan dengan demikian dapat ditulis dalam bahasa apa pun.
Jadi, jika Anda ingin membuat versi PHP Anda sendiri, Anda bisa mulai dengan bahasa apa pun yang paling lancar Anda gunakan. Anda kemudian akan menulis program yang dapat membaca kode berformat PHP dan melakukan apa pun yang menurut spesifikasi PHP program Anda harus lakukan . Anda dengan demikian membuat bahasa PHP dalam bahasa X.
sumber
explode
yang mengambilString
dan mengembalikan sebuahArray
, implementasinya (yaitu kode yang akan beroperasi pada string untuk menghasilkan array) ditulis dalam C , kan?Ungkapan yang sangat mirip dengan makna yang sangat berbeda adalah "menulis bahasa A dalam bahasa B", misalnya "menulis C di Jawa".
Ini menjelaskan kode yang secara sintaksis benar dalam satu bahasa, tetapi menggunakan struktur, idiom, dan konvensi dari bahasa lain. Dalam contoh "menulis C di Jawa", tanda-tanda ini akan mendeklarasikan semua variabel lokal di atas setiap metode, menggunakan konstanta integer alih-alih enum, menggunakan identifiers_with_underscores, dll.
Biasanya ini terjadi ketika seseorang telah bekerja dengan satu bahasa untuk waktu yang lama (terutama ketika mereka hanya bekerja dengan bahasa itu) dan sangat baru dengan bahasa saat ini (atau tidak tertarik untuk menulis kode bersih).
sumber
Teknologi adalah proses yang berulang secara inheren. Kami mulai dengan alat sederhana dan kemudian menggunakan alat itu untuk membuat yang lebih baik. Bahasa assembly pertama cukup banyak terjemahan 1: 1 dari bytecode instruksi standar untuk chip; arsitektur 8086 dan assemblernya menjadi dominan di atas arsitektur lain seperti Z80, RISC, dll, sehingga kami mulai mengembangkan bahasa yang dapat dicerna menjadi perakitan 8086, seperti FORTRAN, COBOL, Pascal dan C. Program yang menginterpretasikan kode sumber dari bahasa-bahasa ini harus ditulis dalam sesuatu yang lebih primitif, jika tidak Anda berakhir dengan argumen ayam-dan-telur; jika kode sumber untuk kompiler C pertama ditulis dalam C, lalu apa yang dikompilasi kode sumber C, dan bukankah itu, menurut definisi, menjadi kompiler C pertama?
Pada dasarnya, "C # ditulis dalam C ++" harus diartikan bahwa pustaka kompiler dan runtime / inti yang pertama dan / atau paling populer yang mematuhi spesifikasi bahasa C # (yang adalah Microsoft .NET Framework, dan kompiler baris perintah program CSC.exe) ditulis dalam C ++.
sumber
"Bahasa A ditulis dalam bahasa B" berarti bahwa satu-satunya implementasi bahasa A (atau satu-satunya yang banyak digunakan) adalah yang sebenarnya merupakan proyek yang dikembangkan dalam bahasa B, dan satu-satunya yang lengkap, mutakhir. spesifikasi A adalah kode sumber B yang mengimplementasikannya sehingga jika dokumentasi dan program B tidak setuju, program B biasanya dianggap benar.
sumber