F # keluar dari kotak dengan REPL interaktif. C # tidak memiliki hal semacam itu dan pada kenyataannya agak sulit untuk bermain-main tanpa mengatur proyek penuh (meskipun LINQpad bekerja dan juga mungkin dilakukan melalui PowerShell).
Apakah ada sesuatu yang berbeda secara mendasar tentang bahasa yang memungkinkan F # memiliki konsol interaktif tetapi membuatnya sulit untuk mengimplementasikannya untuk C #?
Karena bertahun-tahun kemudian orang masih datang ke pertanyaan ini saya harus perhatikan bahwa sekarang ada banyak pilihan. Anda dapat menggunakan PowerShell (pra-instal pada setiap mesin windows modern) untuk bermain dengan framework .Net. Atau Anda dapat menggunakan LINQpad untuk membuat prototipe kode c # sewenang-wenang . Atau Anda dapat menggunakan ScriptCs atau Anda dapat menggunakan lingkungan tipe jsfiddle online seperti Complify.net atau Jsil . Banyak pilihan.
Jawaban:
Iya nih.
F # adalah turunan dari bahasa pemrograman ML, yang pada gilirannya sangat dipengaruhi oleh bahasa seperti Lisp dan Skema. Bahasa-bahasa itu dirancang sejak hari pertama untuk memiliki tiga properti bagus.
Pertama, bahasa-bahasa itu tidak benar-benar memiliki pernyataan seperti yang Anda pikirkan dalam bahasa C #. Sebaliknya, hampir semuanya adalah ekspresi yang memiliki nilai , sehingga mekanisme evaluasi-dan-kemudian-cetak-nilai masuk akal di hampir setiap situasi.
Kedua, bahasa-bahasa itu menghambat pemrograman dengan efek samping, sehingga Anda dapat melakukan evaluasi tanpa khawatir Anda akan mengacaukan keadaan global.
Ketiga, sebagian besar pekerjaan yang Anda lakukan dalam bahasa-bahasa itu adalah "di tingkat atas"; biasanya tidak ada "class" atau "namespace" atau konteks lainnya.
Sebaliknya, C # menekankan aliran kontrol pemrograman dengan pernyataan yang menghasilkan efek samping, dan pernyataan itu selalu berada dalam beberapa wadah bersarang - namespace, kelas, metode, dan sebagainya.
Jadi ini semua hal yang membuat C # lebih sulit untuk memiliki REPL, tetapi tentu saja tidak mustahil . Kami hanya perlu mencari tahu apa arti semantik untuk pernyataan dan ekspresi yang muncul di luar konteks yang biasa, dan apa arti semantik dari mutasi yang mengubah binding nama, dan sebagainya.
Karena tim F # memutuskan bahwa memiliki loop REPL adalah skenario prioritas-satu untuk mereka. Tim C # secara historis belum. Fitur tidak dapat diimplementasikan kecuali mereka adalah fitur prioritas tertinggi yang sesuai dengan anggaran; sampai sekarang, C # REPL belum ada di daftar teratas kami.
Proyek Roslyn memiliki C # REPL (dan akhirnya akan memiliki VB REPL juga, tetapi belum siap.) Anda dapat mengunduh rilis pratinjau untuk melihat bagaimana Anda menyukainya di
http://www.microsoft.com/en-us/download/details.aspx?id=27746
sumber
Mono memiliki C # repl: http://www.mono-project.com/CsharpRepl
Bahkan memiliki versi GUI yang memungkinkan Anda untuk secara langsung memanipulasi objek grafis, atau membuat widget Gtk #:
sumber
Saya percaya itu sebagian besar merupakan hal bersejarah. Lingkungan REPL selalu dikaitkan dengan bahasa fungsional, termasuk bahasa keluarga ML, dan F # tetap setia pada tradisi itu. Perlu diingat bahwa lingkungan interaktif adalah sesuatu yang diterima oleh pengguna dari latar belakang fungsional, kurangnya fitur seperti itu akan menempatkan VS dan - dengan ekstensi - F #, pada posisi yang kurang menguntungkan.
Di sisi lain, tidak ada fitur seperti itu yang biasa di komunitas OOP.
Namun ada REPL tersedia untuk banyak bahasa non-fungsional, termasuk C, Java atau C #. Juga sementara itu jauh dari REPL yang lengkap, fitur Autos di VS menunjukkan bahwa itu pasti bisa dilakukan dengan C #.
sumber
Saya percaya C # terutama berorientasi objek. Untuk menulis kode yang paling sederhana, Anda harus membaginya menjadi beberapa kelas. Untuk menggunakan REPL, Anda harus menulis banyak kode.
F # menjadi fungsional utamanya tidak memiliki masalah ini dan Anda dapat dengan mudah menulis kode kompleks bahkan dalam fasshion langsung dan mengubahnya menjadi objek / s nanti.
Lebih mudah untuk menulis satu baris fungsi daripada menulis kelas, yang mencakup banyak baris.
sumber