Apakah ada perbedaan arsitektur utama ketika merancang aplikasi yang akan dibangun pada bahasa statis (seperti C # atau Java) dan bahasa dinamis (seperti Ruby atau Python)?
Apa saja kemungkinan desain yang mungkin menjadi pilihan yang baik untuk satu jenis yang buruk untuk yang lain? Adakah fitur berguna yang dapat dicapai dengan satu jenis yang tidak sama dengan yang lain (dalam desain dan arsitektur, tentu saja)?
Juga, apakah ada pola desain khusus dinamis?
Jawaban:
Mari kita luruskan beberapa hal:
Selain semua kesamaan yang mengejutkan itu, ada beberapa perbedaan praktis yang mempengaruhi proses pengembangan:
Ada juga satu jenis program yang tidak akan pernah bisa dibuat tanpa pengetikan statis: Singularity , sebuah OS tanpa batas proses perangkat keras. Itu ditulis dalam sejumlah kecil C, beberapa C #, dan dialek dari C # disebut Spec #, yang mendukung kontrak kode.
Meskipun ditulis dalam bahasa yang dikumpulkan dari sampah, kinerja multitasking dan komunikasi antar proses pada OS ini sebenarnya lebih baik daripada yang lain di luar sana, karena semua proses berjalan dalam satu ruang memori, dan karena optimalisasi verifikasi formal, saya disebutkan di atas. Anda tidak dapat melakukan ini tanpa mengetik statis, karena agar program tidak dapat kompromi dengan sisa sistem, objek komunikasi perlu diverifikasi secara statis.
Namun, sebagian besar waktu, arsitektur harus terlihat sangat sama. Bahasa statis dapat membuat program lebih mudah untuk dipertimbangkan dalam banyak kasus karena jenisnya terdefinisi dengan baik, tetapi program bahasa dinamis yang ditulis dengan baik juga akan memiliki jenis yang, paling tidak, terdefinisi dengan baik dalam pikiran pengembang.
sumber
Ada perbedaan arsitektur yang signifikan. Performa.
Bergantung pada anggaran perangkat keras Anda, beban kerja yang diharapkan, dan perjanjian tingkat layanan, mungkin tidak mungkin memenuhi persyaratan dengan bahasa yang dinamis.
Paling sering kecepatan pengembangan dan fleksibilitas yang diberikan oleh bahasa dinamis mengimbangi waktu respons yang lebih lambat dengan konsumsi CPU dan memori yang lebih tinggi. Tetapi untuk sistem yang lebih besar dengan kendala anggaran atau kinerja, overhead bahasa yang dinamis dapat menjadi tinggi.
sumber
Saya tidak pernah berpikir seperti ini. Jadi ketika melakukan Google, blog Peter Norvig adalah salah satu hit teratas. Dikatakan beberapa pola desain lebih mudah diimplementasikan dalam bahasa dinamis daripada bahasa berorientasi objek tradisional seperti C ++. Saya pikir harus ada perbedaan pada desain / arsitektur juga karena ia mencatat bahwa implementasi lebih mudah dalam bahasa yang dinamis. Saya akan mencoba menambahkan lebih banyak ke jawabannya ketika saya belajar lebih lanjut.
sumber
Tidak.
Sedikit lebih mudah untuk menulis kerangka kerja mewah untuk bahasa dinamis. Tapi itu bukan hal aplikasi.
Tidak ada, sungguh.
Anda dapat menulis hal-hal baik dalam bahasa apa pun.
Tidak.
Perbedaannya adalah bahwa bahasa dinamis adalah "tulis, jalankan, perbaiki". Anda dapat bereksperimen dan memperbaiki dengan cepat.
Bahasa statis adalah "tulis, kompilasi, bangun, jalankan, perbaiki". Anda tidak dapat bereksperimen dengan mudah.
Selain itu, kemampuan mereka hampir identik.
Mungkin. Python
eval()
danexecfile()
fungsinya - dengan cara - menunjukkan fitur bahasa dinamis yang sulit (tapi jauh dari mustahil) untuk ditangani dalam bahasa statis. Akan lebih banyak baris kode untuk mengkompilasi dan mengeksekusi kode dalam ruang proses yang sama.Ini tidak spesifik bahasa dinamis. Itu lebih mudah.
sumber