Saya punya pertanyaan tentang llvm, dentang, dan gcc pada OS X.
Apa perbedaan antara llvm-gcc 4.2, llvm 2.0 dan dentang? Saya tahu bahwa mereka semua membangun di atas llvm tetapi bagaimana mereka berbeda?
Selain kompilasi yang lebih cepat, apa kelebihan llvm dibanding gcc?
Jawaban:
LLVM awalnya berarti "mesin virtual tingkat rendah", meskipun sekarang hanya berdiri untuk dirinya sendiri karena telah berkembang menjadi sesuatu selain mesin virtual tradisional. Ini adalah seperangkat pustaka dan alat, serta representasi perantara standar, yang dapat digunakan untuk membantu membangun kompiler dan kompiler just-in-time. Ia tidak dapat menyusun apa pun selain dari perwakilannya sendiri; diperlukan frontend khusus bahasa untuk melakukannya. Jika orang hanya merujuk ke LLVM, mereka mungkin berarti hanya perpustakaan dan alat tingkat rendah. Beberapa orang mungkin menyebut Dentang atau llvm-gcc secara tidak benar sebagai "LLVM", yang dapat menyebabkan kebingungan.
llvm-gcc adalah versi GCC yang dimodifikasi, yang menggunakan LLVM sebagai backend-nya dan bukan milik GCC. Sekarang sudah usang, mendukung DragonEgg, yang menggunakan sistem plugin baru GCC untuk melakukan hal yang sama tanpa forking GCC.
Dentang adalah kompiler C / C ++ / Objective-C yang sepenuhnya baru, yang menggunakan frontend sendiri, dan LLVM sebagai backend. Keuntungan yang diberikannya adalah pesan kesalahan yang lebih baik, waktu kompilasi yang lebih cepat, dan cara yang lebih mudah bagi alat-alat lain untuk terhubung ke proses kompilasi (seperti debugger LLDB dan analis statis Dentang ). Ini juga cukup modular, dan dapat digunakan sebagai pustaka untuk perangkat lunak lain yang perlu menganalisis C, C ++, atau kode Objective-C.
Masing-masing pendekatan ini (GCC biasa, GCC + LLVM, dan Dentang) memiliki kelebihan dan kekurangan masing-masing. Beberapa set tolok ukur terakhir yang saya lihat menunjukkan GCC untuk menghasilkan kode yang sedikit lebih cepat pada sebagian besar kasus uji (meskipun LLVM sedikit unggul dalam beberapa kasus), sementara LLVM dan Clang memberikan waktu kompilasi yang lebih baik secara signifikan. GCC dan GCC / LLVM combo memiliki keuntungan bahwa lebih banyak kode telah diuji dan bekerja pada rasa GCC dari C; ada beberapa ekstensi khusus kompiler yang hanya dimiliki GCC, dan beberapa tempat di mana standar memungkinkan penerapannya bervariasi tetapi kode tergantung pada satu implementasi tertentu. Ini jauh lebih mungkin jika Anda mendapatkan sejumlah besar kode C warisan yang akan bekerja di GCC daripada itu akan bekerja di Dentang, meskipun ini membaik seiring waktu.
sumber
Ada 2 hal berbeda di sini.
LLVM adalah kompiler backend yang dimaksudkan untuk membangun kompiler di atasnya. Ini berkaitan dengan optimasi dan produksi kode yang disesuaikan dengan arsitektur target.
Dentang adalah ujung depan yang mem-parsing kode C, C ++ dan Objective C dan menerjemahkannya menjadi representasi yang cocok untuk LLVM.
llvm gcc adalah versi awal dari kompiler C ++ berbasis llvm berdasarkan gcc 4.2, yang sekarang tidak digunakan lagi karena CLang dapat menguraikan semua yang dapat diuraikan, dan banyak lagi.
Akhirnya, perbedaan utama antara Dentang dan gcc tidak terletak pada kode yang dihasilkan tetapi dalam pendekatan. Sementara gcc bersifat monolitik, CLang telah dibangun sebagai rangkaian perpustakaan. Desain modular ini memungkinkan peluang penggunaan kembali yang besar untuk IDE atau alat penyelesaian misalnya.
Saat ini, kode yang dihasilkan oleh gcc 4.6 umumnya sedikit lebih cepat, tetapi Dentang menutup celah.
sumber
llvm-gcc-4.2 menggunakan front-end GCC untuk mem-parsing kode Anda, kemudian menghasilkan output yang dikompilasi menggunakan LLVM.
"Llvm compiler 2.0" menggunakan clang front-end untuk mengurai kode Anda, dan menghasilkan output yang dikompilasi menggunakan LLVM. "Dentang" sebenarnya hanya nama untuk front-end ini, tetapi sering digunakan sebagai nama untuk kompiler secara keseluruhan.
sumber