C ++ adalah bahasa yang bagus dalam banyak hal, tetapi beberapa hal khususnya rumit untuk ditulis tanpa IDE. Sebagai pengguna VIM, akan sangat menarik jika saya memiliki akses ke bahasa tingkat yang lebih tinggi yang memungkinkan saya untuk menulis C ++ dengan S-Expressions dan mungkin dengan macro seperti Lisp, memungkinkan untuk pembuatan kode bersih sambil menghindari penulisan ulang patters yang sama lagi dan lagi.
Saya telah bertanya pada freenode dan menguji beberapa ide, seperti mengkompilasi Lisp-> C dengan kompiler seperti ECL dan Bigloo, tetapi tidak ada satupun yang menghasilkan kode C yang bersih.
Apakah ada karya tentang masalah ini?
Jawaban:
Mengkompilasi bahasa tingkat yang lebih tinggi ke yang lebih rendah adalah kue. Ada banyak contoh yang sedang dilakukan. Tanpa menyinggung banyak singgung, kita dapat menunjuk ke kompiler C ++ awal yang dikompilasi ke C.
Namun, ketika Anda mulai melemparkan "bersih" dan "dapat dibaca" ke dalam campuran, segalanya menjadi sangat sulit. Kode yang bersih dan mudah dibaca mengungkapkan arti dan maksud dari apa yang Anda tulis. Komputer terkenal buruk dalam menafsirkan & menciptakan makna. Anda lebih mungkin berakhir dengan variabel yang diberi nama
int_147
daripadainput_buffer_length
. Tentu, jika Anda benar - benar ingin membuat proyek ini berhasil, Anda dapat terlibat dalam proyek AI besar-besaran untuk menangani pengubahan Lisp Anda menjadi semacam C ++ yang dapat dibaca dengan baik, tetapi, jujur saja, kompilator Lisp umum sangat bagus dalam apa yang mereka lakukan. .Lebih penting daripada kesulitan menghasilkan C ++ dari Lisp adalah kegunaannya. Apa gunanya agar C ++ yang dihasilkan dapat dibaca? Jika Lisp adalah kode sumber Anda, representasi perantara seharusnya tidak relevan. Jika Anda ingin bisa menyerahkan C ++ ke programmer yang tidak mengerti Lisp asli Anda, Anda sekarang punya masalah lain . Apa yang terjadi ketika mereka ingin memodifikasi C ++ yang Anda hasilkan? Apa yang terjadi jika mereka menulis hal-hal dalam C ++ yang tidak diterjemahkan dengan rapi ke Lisp Anda?
Katakanlah kita telah menyelesaikannya. Ini satu dekade kemudian dan, setelah membakar ratusan juta dolar dari uang hibah DoD, kami telah membangun mesin terjemahan bahasa yang masif, kompleks (tapi tanpa cacat) ini yang dapat mengubah Lisp menjadi C ++ yang idiomatis dan sebaliknya. Apa yang benar-benar kita peroleh yang tidak akan lebih baik dicapai dengan mengajar orang lain bahasa pemrograman baru atau hanya mengembangkan kompiler baru yang memungkinkan kita menghubungkan kedua bahasa?
Oh benar Bos Anda ingin Anda menulis C ++ dan Anda lebih suka tidak melakukannya. Perbarui resume Anda & cari pekerjaan baru.
sumber
Jawaban singkat, tidak ada yang tersedia saat ini yang akan membantu Anda mengonversi Lisp menjadi READABLE C ++. Tentu Anda dapat mengonversi apa pun menjadi C ++ atau C tetapi kode yang dapat dibaca ditulis oleh manusia, bukan program. Tentu Anda dapat menampilkan kode C ++ dengan pemformatan yang tepat, indentasi, nama kelas yang bagus, dan mungkin bahkan mendapatkan terjemahan yang sempurna dari objek kelas Lisp ke kelas C ++. Mungkin Anda bisa membuat tautan dependensi perpustakaan Anda terhubung dengan benar, dan mungkin Anda bisa mengkompilasi binari yang sangat dekat dengan apa yang akan dihasilkan oleh bahasa C seandainya Anda menulis semuanya dalam C. Tapi pada akhirnya, kode yang dapat dibaca adalah keindahan yang tidak dipahami. oleh siapa pun, setidaknya belum, dan mungkin tidak pernah mempertimbangkan bahwa istilah itu dapat dibaca cukup subyektif untuk memulai dan apa yang dianggap dapat dibaca di antara satu kelompok pengembang dapat dianggap mengerikan oleh yang lain.
Agar C ++ dapat dibaca, Anda harus menulis dalam C ++, bukan di Lisp. Anda juga harus dapat mengubah gaya pengkodean Anda sesuai dengan apa yang orang-orang yang akan membaca kode Anda akan mengerti. Sama seperti buku, program ditulis dengan khalayak tertentu dalam pikiran dan dapat menjadi indah dan menyentuh jika ditulis dengan baik, dan dikaburkan dan membosankan jika tidak. Dan jika kita tidak dapat membuat program untuk menulis novel fiksi yang indah untuk kita, maka kita tidak akan dapat membuat sesuatu untuk dikonversi menjadi C ++ yang dapat dibaca.
sumber
ViM adalah IDE yang bagus untuk C ++. Ini memiliki penyelesaian terbaik yang pernah saya lihat sejauh ini, meskipun akan sedikit lambat jika Anda menarik banyak header, dentang lengkap . Dan untuk kompilasi saya menemukan semua IDE kurang; Anda akhirnya menulis membangun sistem di CMake atau apalah. Dan saya tidak melihat apa-apa untuk memberikan setiap bantuan untuk cadel, periode.
Benar, C ++ tidak memiliki makro gaya lisp, tetapi templat dapat melakukan semua makro yang higienis, dan sebagian lagi, karena Anda dapat mengimplementasikannya secara berbeda berdasarkan jenis dan berdasarkan kemampuannya. Benar, kurangnya pengumpul sampah membuat penutupan sedikit lebih membosankan, tetapi idiom RAII yang digunakan untuk pengelolaan sumber daya memiliki kelebihan dan sifat menarik.
Jika Anda seorang siswa, apakah Anda benar-benar tahu semua C ++ lanjutan? Dari pustaka algoritma atas penulisan templat dengan implementasi alternatif berdasarkan properti tipe argumen, kompilasi perhitungan waktu menggunakan templat meta-pemrograman (menggunakan Boost.MPL) hingga memahami bagaimana Boost bekerja di bawah tenda? Jika tidak, saya sarankan mengambil ini sebagai kesempatan untuk mempelajari beberapa C ++ lanjutan. Tugas sekolah tidak perlu dipertahankan, sehingga Anda dapat bermain dengan bahasa untuk melihat apa fitur yang layak di mana dalam kode produksi Anda harus berhati-hati tentang keterbacaan.
Dan untuk menjawab pertanyaan langsung terakhir: C ++ memiliki lebih banyak idiom di bawah ikat pinggangnya sehingga tidak ada cara untuk menghasilkan C ++ idiomatik dari apa pun. Hanya karena tidak akan ada cara untuk mengekspresikan sebagian besar idiom itu dalam hal lain. Mulai dari fakta bahwa apa pun yang akan pengumpulan sampah akan mengalokasikan semua yang ada di heap sementara di C ++ adalah idiomatis untuk mengambil keuntungan dari stack.
sumber