it-swarm-id.com

Sudahkah Anda menggunakan salah satu juru bahasa C++ (bukan kompiler)?

Saya ingin tahu apakah ada yang menggunakan UnderC, Cint, Cling, Ch, atau penerjemah C++ lainnya dan dapat membagikan pengalaman mereka.

65
Allan Wind

CATATAN: yang berikut ini agak spesifik CINT, tetapi mengingat bahwa itu mungkin yang paling banyak digunakan C++ penerjemah mungkin berlaku untuk semuanya.

Sebagai seorang mahasiswa pascasarjana dalam fisika partikel yang menggunakan CINT secara luas, saya harus memperingatkan Anda. Sementara itu "bekerja", itu sedang dalam proses dihapus , dan mereka yang menghabiskan lebih dari satu tahun dalam fisika partikel biasanya belajar menghindarinya karena beberapa alasan: 

  1. Karena akarnya sebagai penafsir C, ia gagal menafsirkan beberapa komponen paling kritis dari C++. Template, misalnya, tidak selalu berfungsi, jadi Anda tidak disarankan menggunakan hal-hal yang membuat C++ sangat fleksibel dan bermanfaat. 

  2. Ini lebih lambat (setidaknya faktor 5) daripada C++ yang dioptimalkan secara minimal. 

  3. Pesan debug jauh lebih samar daripada yang diproduksi oleh g ++. 

  4. Pelingkupan tidak konsisten dengan C++ yang dikompilasi: cukup umum untuk melihat kode formulir 

    if (energy > 30) { 
        float correction = 2.4;
    }
    else {
        float correction = 6.3;
    }
    
    somevalue += correction; 
    

    sedangkan kompiler C++ yang berfungsi akan mengeluh bahwa correcton telah keluar dari ruang lingkup, CINT mengizinkan ini. Hasilnya adalah bahwa kode CINT tidak benar-benar C++, hanya sesuatu yang terlihat seperti itu. 

Singkatnya, CINT tidak memiliki kelebihan C++, dan semua kekurangan ditambah beberapa. 

Fakta bahwa CINT masih digunakan sama sekali kemungkinan lebih merupakan kecelakaan historis karena dimasukkan dalam kerangka ROOT. Kembali ketika ditulis (20 tahun yang lalu), ada kebutuhan nyata untuk bahasa yang ditafsirkan untuk merencanakan/pemasangan interaktif. Sekarang ada banyak paket yang mengisi peran itu, banyak yang memiliki ratusan pengembang aktif. 

Tak satu pun dari ini ditulis dalam C++. Mengapa? Sederhananya, C++ tidak dimaksudkan untuk ditafsirkan. Pengetikan statis, misalnya, memberi Anda keuntungan besar dalam pengoptimalan selama kompilasi, tetapi sebagian besar berfungsi untuk mengacaukan dan membatasi kode Anda jika komputer hanya diizinkan melihatnya saat runtime. Jika Anda memiliki kemewahan untuk dapat menggunakan bahasa yang ditafsirkan, belajar Python atau Ruby, waktu yang Anda butuhkan untuk belajar akan lebih sedikit daripada yang Anda kehilangan tersandung pada CINT, bahkan jika Anda sudah tahu C++. 

Dalam pengalaman saya, peneliti lama yang bekerja dengan ROOT (paket yang harus Anda instal untuk menjalankan CINT) akhirnya mengkompilasi pustaka ROOT ke dalam C++ yang dapat dieksekusi untuk menghindari CINT. Mereka yang berada di generasi yang lebih muda mengikuti jejak ini atau menggunakan Python untuk scripting. 

Secara kebetulan, ROOT (dan dengan demikian CINT) membutuhkan sekitar setengah jam untuk dikompilasi pada komputer yang cukup modern, dan kadang-kadang akan gagal dengan versi gcc yang lebih baru. Ini adalah paket yang melayani tujuan penting bertahun-tahun yang lalu, tetapi sekarang jelas menunjukkan usianya. Melihat ke dalam kode sumber, Anda akan menemukan ratusan gips gaya-c yang sudah usang, lubang besar dalam keamanan jenis, dan penggunaan variabel global yang banyak. 

Jika Anda akan menulis C++, tulis C++ sebagaimana seharusnya ditulis. Jika Anda benar-benar harus memiliki penerjemah C++, CINT mungkin merupakan taruhan yang bagus. 

29
Shep

Ada cling proyek Cern dari penerjemah C++ berdasarkan clang - itu pendekatan baru berdasarkan 20 tahun pengalaman dalam ROOT cint dan cukup stabil dan direkomendasikan oleh Cern guys.

Berikut ini adalah Nice Google Talk: Memperkenalkan cling, a C++ Interpreter Berdasarkan clang/LLVM .

23

cint adalah pemroses perintah untuk paket analisis fisika partikel ROOT . Saya menggunakannya secara teratur, dan itu bekerja dengan sangat baik untuk saya.

Ini cukup lengkap dan cocok dengan kode yang dikompilasi (Anda dapat memuat modul yang dikompilasi untuk digunakan dalam penerjemah ...)

late edit :: Disalin dari duplikat yang lebih baru karena poster pada pertanyaan itu sepertinya tidak ingin dikirim di sini: igcc . Belum pernah mencobanya secara pribadi, tetapi halaman web terlihat menjanjikan.

19
dmckee

Saya telah (sekitar setahun yang lalu) bermain-main dengan Ch dan menemukan itu cukup bagus.

4
Alan

Dulu, saya menggunakan juru bahasa C++ yang disebut CodeCenter. Itu cukup bagus, meskipun tidak bisa menangani hal-hal seperti bitfields atau fancy pointer mangling. Dua hal keren tentang hal itu adalah Anda dapat menonton ketika variabel berubah, dan Anda dapat mengevaluasi kode C/C++ sambil menjalankan debug. Hari ini, saya pikir debugger seperti GDB pada dasarnya sama baiknya.

2
jfm3

Juga lama saya menggunakan panggilan produk Instant C tetapi saya tidak tahu bahwa itu pernah dikembangkan lebih lanjut

2
user11269

Ada program yang disebut c-repl yang bekerja dengan mengkompilasi kode Anda berulang kali ke pustaka bersama menggunakan GCC, lalu memuat objek yang dihasilkan. Tampaknya akan berkembang dengan cepat, mengingat versi dalam repositori Ubuntu ditulis dalam Ruby (tidak termasuk GCC tentunya), sedangkan git terbaru ada di Haskell. :)

0

Saya melihat menggunakan ch beberapa waktu lalu untuk melihat apakah saya bisa menggunakannya untuk pengujian kotak hitam DLL yang saya bertanggung jawab. Sayangnya, saya tidak tahu bagaimana cara memuat dan menjalankan fungsi dari DLL. Lagi pula, saya tidak begitu termotivasi dan mungkin ada jalan. 

0
Jon Trauntvein