Saya telah mendengar beberapa situasi orang yang menggunakan katakanlah, JavaScript atau Python (atau sesuatu), di dalam program yang ditulis dalam C #. Kapan menggunakan bahasa seperti JavaScript untuk melakukan sesuatu dalam program C # lebih baik daripada hanya melakukannya di C #?
70
Jawaban:
Ketika Anda memiliki perilaku yang Anda tidak ingin harus mengkompilasi ulang program untuk berubah. Inilah mengapa banyak game menggunakan Lua sebagai bahasa scripting / modding.
sumber
Teknik ini dapat digunakan untuk mengimplementasikan logika inti yang mudah dibawa-bawa antara lingkungan bahasa yang berbeda. Sebagai contoh, saya memiliki simulator kalkulator di mana semua logika kalkulator internal diterapkan dalam JavaScript 100%. Kode antarmuka pengguna tentu saja berbeda untuk setiap platform:
Dengan pengaturan ini, membuat versi program saya untuk lingkungan operasi yang berbeda, dan terutama menjaga mereka tetap up to date, jauh lebih sederhana.
sumber
Sangat luas ada dua situasi di mana Anda akan menerapkan pola ini:
Secara internal
Contoh di sini adalah Lua yang digunakan di Adobe Lightroom.
Secara eksternal
IBM menggunakan bahasa scripting dengan sangat sukses dalam sistem operasi mainframe mereka VM-CMS . EXEC , EXEC / 2 dan kemudian Rexx digunakan di seluruh sistem baik secara internal maupun eksternal. Aplikasi yang berbeda (misalnya XEDIT ) dapat skrip menggunakan bahasa yang sama dan aplikasi / utilitas internal (misalnya E-mail) ditulis dalam bahasa scripting dan meningkatkan integrasi yang erat dengan OS dan alat-alat lainnya. Pelanggan menciptakan dan berbagi banyak alat dan aplikasi yang dituliskan. DEC juga menyediakan DCL . Kemudian Microsoft mendukung VBscript sebagai bahasa scripting di sebagian besar aplikasi mereka dan PowerShell baru-baru ini(juga file batch MS / DOS ). Kerang Unix memiliki skrip juga.
Tren hari ini tampaknya mengekspos API dengan beberapa cara dan membiarkan pilihan bahasa scripting kepada pengguna yang dapat memanfaatkan binding yang berbeda atau cara lain untuk mengakses API.
sumber
Contoh dunia nyata meliputi: -
Sebagian besar browser web yang akan mendukung JavaScript tertanam.
Microsoft Office Suite - Excel Word dll. Semua mendukung skrip VBA tertanam.
Banyak router jaringan menyertakan API skrip, dalam berbagai bahasa TCL, Perl, Lua.
Banyak perangkat yang tertanam diimplementasikan menggunakan sekumpulan fungsi inti C yang sangat kecil yang direkatkan menggunakan bahasa skrip seperti Lua. Jadi Anda memiliki satu set kecil, fungsi C cepat yang berinteraksi dengan perangkat keras, dan, sebagian besar kontrol logika dalam fleksibel, mudah untuk mengubah bahasa scripting.
sumber
Kadang-kadang skrip tertanam dalam aplikasi karena itu merupakan sarana untuk memperpanjang aplikasi host oleh pengembang lain. Untuk menangkap sebanyak mungkin keterampilan bahasa pemrograman, beberapa bahasa skrip dapat didukung oleh tuan rumah. Misalnya, pada JVM, Anda dapat menyematkan seluruh bahasa yang sesuai dengan JSR-223 , termasuk Python, Ruby, JavaScript, dll.
Alasan lain yang belum disebutkan adalah bahwa bahasa yang disematkan memiliki satu atau lebih fitur menonjol yang tidak dapat ditiru oleh bahasa host. Contohnya adalah fungsionalitas Parse atau pembuatan DSL (domain spesifik bahasa / dialek) yang mudah yang dapat ditemukan dalam bahasa seperti Rebol.
sumber
Ada satu cara menarik menggunakan bahasa skrip di dalam aplikasi yang belum disebutkan oleh yang lain.
Jika bahasa host Anda memiliki runtime yang kaya dan reflektif, seringkali berguna untuk menanamkan bahasa sederhana dengan REPL di aplikasi Anda, kaitkan pada soket dan berikan akses ke seluruh sistem.
Ini dapat digunakan untuk debugging interaktif (dan itu secara alami jauh lebih kuat daripada debugger yang biasa Anda), patch kode panas, berbagai keperluan pemantauan, bahkan backdoors (jika Anda sampai tidak baik).
sumber
Situasi spesifik saya, ketika saya menggunakan bahasa scripting yang ditafsirkan dalam aplikasi utama:
Ada perangkat eksternal yang melakukan beberapa fungsi. Pengukuran, kontrol, pembacaan. Itu cukup "bodoh" itu sendiri dan membutuhkan kontrol yang tepat, langkah-demi-langkah, termasuk banyak status tunggu dan pengambilan keputusan ad-hoc di sisi mekanisme kontrol.
Berbagai fungsi perangkat diperlukan di berbagai titik aplikasi utama, pada waktu yang berbeda, seringkali sesuai permintaan. Aplikasi utama tidak memungkinkan untuk menunggu negara seperti itu, semuanya harus dilakukan dengan mesin negara yang terbatas.
Sekarang siapa pun yang menulis mesin keadaan terbatas tahu menerapkan keadaan tunggu secara efektif setidaknya dua, sering tiga atau empat keadaan internal mesin. Menerapkan dua puluh negara tunggu untuk berbagai fungsi (dan menunggu tanggapan mereka dan bereaksi sesuai) dari perangkat eksternal akan menjadi pengalaman yang sangat, sangat membuat frustrasi.
Jadi, alih-alih ada keadaan "jalankan fungsi tanpa menunggu", "jalankan fungsi pemblokiran", "jalankan fungsi percabangan / kondisional / lompati" dalam mesin keadaan terbatas, mungkin total enam negara. Dan ada skrip kontrol yang dijadwalkan untuk dieksekusi, kemudian dieksekusi oleh penerjemah yang mengendalikan perangkat eksternal, dan hasilnya ditempatkan di tempat yang diperlukan.
Kesimpulannya, aplikasi: dalam RTOS, menggunakan bahasa skrip yang diinterpretasikan secara internal dapat sangat mengurangi kerumitan dalam melakukan tugas-tugas yang berlimpah di keadaan menunggu (fungsi pemblokiran).
sumber
Dari pengalaman saya, kami pernah mengembangkan aplikasi besar yang menulis ulang kode sumber dari bahasa "kuno" agar kompatibel dengan unicode. Itu dilakukan dalam C #. Saya akhirnya hanya menulis mesin (yang menciptakan model data dan menyediakan cara untuk melakukan langkah-langkah yang diperlukan untuk proses penulisan ulang) di C # - "kode lem" untuk benar-benar menjalankan hal-hal yang dilakukan dalam IronPython.
Poin terbesar untuk IronPython terintegrasi: Mari kita asumsikan Anda memuat model data besar (sekitar satu jam waktu muat). Maka Anda ingin - secara manual - mengumpulkan informasi dan mencari hal-hal. Melakukan ini dengan skrip Python dari konsol interaktif jauh lebih baik daripada mengklik model data dengan debugger (plus, itu replayable).
sumber
Ada beberapa alasan.
sumber
Kapan? Antara 1948 dan 2008 - bahasa yang dikompilasi pada awalnya membutuhkan waktu yang signifikan untuk dikompilasi dan ditautkan, sehingga merupakan hal yang lumrah untuk membuat bahasa scripting untuk memungkinkan penyesuaian dan konfigurasi pengguna. Jika Anda melihat sejarah AutoLisp, maka jawabannya pada awalnya AutoCAD dikirimkan dengan bahasa scripting di dalamnya, tetapi ini dihapus karena mengekspos antarmuka skrip ke VBA lalu .net.
Dengan CLR, mengaktifkan program C # atau panggilan program Lua ke sistem yang ada tidak berbeda secara signifikan dalam biaya pengembangan, dan .net runtime dikirimkan dengan alat untuk menghasilkan dan mengkompilasi dengan cepat.
Anda tidak perlu lagi memiliki bahasa scripting di dalam program yang lebih besar, tetapi sebaliknya mengekspos program yang lebih besar ke fasilitas scripting dari runtime.
Di lingkungan yang tidak menawarkan pembuatan dan kompilasi kode terbang, dan dipandang sebagai hal yang diinginkan untuk menawarkan bahasa otomasi tujuan umum daripada bahasa khusus domain, Anda masih akan mendapatkan skrip Lua atau Python. Untuk alat yang menawarkan antarmuka COM, maka bahasa skrip tersebut adalah C # atau VB.net (MS Office, Sparx Enterprise Architect). Jadi memiliki bahasa scripting untuk program yang ditulis dalam bahasa yang cukup sederhana untuk menjadi bahasa scripting adalah tidak perlu.
sumber