Bahasa dinamis yang diketik vs statis untuk situs web [ditutup]

13

Pernyataan ini menunjukkan bahwa bahasa yang diketik secara statis tidak ideal untuk situs web:

Saya akan kontras dengan membangun situs web. Saat merender halaman web, sering kali Anda memiliki banyak komponen yang berinteraksi di halaman web. Anda memiliki tombol di sini dan widget kecil di sana dan ada lusinan di halaman web, dan juga mungkin puluhan atau ratusan halaman web di situs web Anda yang semuanya dinamis. Dengan sistem dengan luas permukaan yang sangat besar seperti itu, menggunakan bahasa yang diketik secara statis sebenarnya cukup tidak fleksibel. Saya akan merasa sakit mungkin untuk memprogram di Scala dan membuat halaman web dengan itu, ketika saya ingin secara interaktif menekan tombol dan apa-tidak. Jika seluruh sistem harus koheren, seperti seluruh sistem harus mengetik centang hanya untuk dapat memindahkan tombol, saya pikir itu bisa sangat tidak fleksibel.

Sumber: http://www.infoq.com/interviews/kallen-scala-twitter

Apakah ini benar? Mengapa atau mengapa tidak?

Bradford
sumber
6
Bagi saya sepertinya mereka tidak mempertimbangkan bahasa / paket dengan hierarki objek yang tepat. Tidak perlu memeriksa apakah kontrol yang Anda pindahkan adalah Buttonkapan WebControlberisi semua info yang Anda butuhkan dan semua kontrol berasal darinya.
Matius Baca
5
Yup @Matthew - terdengar seperti seseorang yang tidak benar-benar tahu polimorfisme
Nicole
8
Juga - Twitter mungkin populer, tetapi itu bukan karena situs mereka adalah mahakarya rekayasa.
Nicole

Jawaban:

39

Saya sangat tidak setuju. Ketika sistem tumbuh lebih besar, bahasa yang diketik secara statis memastikan ketahanan pada tingkat komponen dan dengan demikian fleksibilitas pada tingkat sistem.

Juga, contoh yang diberikan oleh penulis tidak benar-benar masuk akal. Sepertinya orang ini tidak tahu bahwa polimorfisme dapat dicapai dengan cara lain selain mengetik bebek.

Ada sejumlah orang yang mengklaim bahasa dinamis lebih unggul, tetapi itu biasanya didasarkan pada kurangnya pengalaman mereka dengan sistem tipe ekspresif yang misalnya mendukung subtipe struktural, tipe data aljabar, dan fungsi urutan pertama.

back2dos
sumber
1
Bagaimana fungsi urutan pertama jatuh dalam kategori yang sama dengan subtipe struktural dan tipe data aljabar? Anda membuatnya terdengar seperti bahasa dinamis tidak memiliki fungsi urutan pertama, yang jelas tidak benar (Skema, Common Lisp, Erlang, Smalltalk, ...).
Frank Shearar
21
+1 untuk "Sepertinya orang ini tidak tahu bahwa polimorfisme dapat dicapai dengan cara lain selain mengetik bebek."
Nicole
1
@ Frank Shearer: Yang saya maksud adalah, bahwa mereka didukung dengan jenis keamanan yang sama dengan nilai lainnya. Ada sejumlah bahasa yang diketik ketat yang mendukung nilai fungsi, tetapi jangan membedakan antara tanda tangan.
back2dos
1
Saya juga tidak setuju, itulah sebabnya saya memilih ini sebagai jawabannya.
Bradford
8

Pertama-tama, ingatlah bahwa penulis pernyataan di atas berbicara tentang pengembangan situs web. Jadi dia khawatir tentang pengembangan presentasi , dan di situlah dia berpikir Scala tidak akan menjadi pilihan yang baik ...

Karena itu, saya memiliki pengalaman yang baik dengan pengembangan web. Saya telah bekerja selama setidaknya 8 tahun secara eksklusif dengannya, 5 di antaranya di agensi digital.

Dan, ya, dalam pengalaman saya, bahasa yang dikompilasi secara statis diketik pada lapisan presentasi bisa menjadi hambatan besar. Konten perlu diubah terus-menerus, jauh lebih sering daripada persyaratan bisnis. Dan biasanya ini perlu dilakukan oleh tim yang berbeda (pengembang "front-end"). Mereka biasanya tahu banyak tentang HTML, JavaScript, standar web, CSS, tetapi tidak banyak tentang bahasa sisi server seperti Java dan C #. Mereka juga berasumsi bahwa segala macam perubahan dalam suatu template segera tersedia; mereka tidak digunakan untuk kompilasi dan mengetik kesalahan. Dan mereka benar: bahasa yang diketik secara statis sangat baik untuk persyaratan yang sulit dan kompleks, seperti akses data dan aturan bisnis, tetapi tidak sebagus untuk pengembangan antarmuka.

Itu, pada kenyataannya, salah satu manfaat utama dari menggunakan bahasa template khusus dan ditafsirkan seperti Velocity . Mudah digunakan, daya, dan fleksibilitasnya memadai untuk pengembang lapisan presentasi. Dan kemudian orang-orang di sisi server bebas untuk menggunakan bahasa yang diketik secara statis di tempat lain ...

Namun, saya juga setuju bahwa Scala agak berbeda. Menjadi pada saat yang sama jauh lebih sedikit bertele-tele dan jauh lebih ekspresif daripada Jawa, saya percaya itu bisa digunakan untuk pengembangan presentasi - jadi mungkin itu bisa berhasil digunakan sebagai bahasa template. Dan jika itu juga dapat digabungkan ke kerangka kerja seperti Play (yang mengkompilasi situs web secara otomatis setelah setiap perubahan), itu bisa menjadi pemenang IMHO. Namun, bahkan Play telah memilih bahasa template (dinamis) seperti Groovy, yang bukan pertanda baik.

Singkatnya: masalah dengan Scala jauh lebih terkait dengan fakta bahwa itu dikompilasi. Bahkan jenis mekanisme inferensi membuat Anda hampir lupa itu juga diketik secara statis.

(Dan maaf tentang bahasa Inggris saya. Beri tahu saya jika ada sesuatu yang tidak jelas, saya akan mencoba memperbaikinya.)

rsenna
sumber
1
Saya akan yang kedua ini - lihat saja kekacauan JSP / STRUTS ketika mereka mencoba menjadikan Java bahasa web!
James Anderson
8

Saya pikir teks (dan sebagian besar jawaban) mencampur bahasa yang diketik secara statis dan bahasa yang terlalu banyak bertele-tele . Tentu saja, persimpangan sangat besar (khususnya ketika mempertimbangkan hanya bahasa yang paling utama); tetapi ada beberapa contoh menarik dari bahasa non-verbose, yang diketik secara statis: Go, Haskell, Scala, Rust ...

Javier
sumber
2
Definisikan "berlebihan". Ketika program menjadi lebih dan lebih kompleks, dan siklus hidup dan pemeliharaan meningkat, kemungkinan bahwa orang lain selain penulis asli perlu men-debug atau memodifikasi setiap potongan kode yang diberikan terus tumbuh. Ketika Anda berada dalam situasi itu, Anda biasanya berada di bawah kendali, dan semakin banyak informasi yang tersedia bagi Anda tentang data apa yang Anda hadapi dan apa yang bisa dilakukan dengan lebih baik. Saya telah men-debug Delphi orang lain dan JavaScript orang lain, dan Delphi adalah urutan besarnya lebih mudah, karena verbosity dan ketik info.
Mason Wheeler
1
Hanya catatan tambahan: Sesuatu seperti TypeScript (JavaScript, dengan informasi tipe statis) mungkin merupakan cara langsung untuk menguji teori OP. Paparan singkat saya untuk itu sudah cukup bagus - suatu saat ketika mengkonversi beberapa JavaScript ke TypeScript, itu benar-benar membantu saya menemukan bahwa tidak ada cara yang mungkin untuk metode tertentu untuk dipanggil, dan tidak menghasilkan kesalahan .
Katana314
5

Saya mendorong Anda untuk membaca Strong Typing vs. Strong Testing dari Bruce Eckel . Argumen utamanya adalah bahwa kualitas perangkat lunak semuanya bermuara pada pengujian. Anda dapat menguji dengan berbagai cara. Compiler menguji beberapa hal pada waktu kompilasi: cobalah untuk menyimpan string dalam variabel int dan kemungkinan akan menggonggong Anda. Dalam bahasa dinamis, banyak pengujian terjadi saat runtime. Pada akhirnya, itu tidak masalah ketika pengujian terjadi. Itu harus terjadi. Waktu yang Anda peroleh karena tidak mengkompilasi dalam bahasa dinamis hilang saat pengujian saat runtime. Anda dengan kuat menguji semuanya, bukan?

Karena itu, preferensi untuk bahasa yang dikompilasi dengan sistem tipe kaku versus bahasa dinamis adalah hanya itu - preferensi. Jenis seperti petinju versus celana atau sandal dibandingkan celana dalam Perancis. Tidak ada jawaban benar atau salah. Kenakan mereka dengan sikap yang benar dan hanya ada yang luar biasa.

Hanya sedikit Roger
sumber
1
"Compiler menguji beberapa hal pada waktu kompilasi: cobalah untuk menyimpan string dalam variabel int dan kemungkinan akan menggonggong Anda. Dalam bahasa dinamis, banyak pengujian terjadi saat runtime.": Benar, ketika menggunakan bahasa dinamis saya kebetulan untuk menulis banyak tes yang menggantikan pemeriksaan jenis. Menggunakan bahasa statis saya dapat membuat tes saya lebih fokus pada logika bisnis.
Giorgio
@Iorgio Menarik, saya jarang memiliki jenis logika pemeriksaan dalam tes saya.
mundur
@pllee: Kadang-kadang itu bukan logika ketik-langsung, tetapi tes memeriksa beberapa perilaku bahwa sistem tipe statis akan ditegakkan pula.
Giorgio
Bruce Eckel tampaknya hanyalah orang lain yang telah menghabiskan bertahun-tahun berurusan dengan bahasa yang terlalu bertele-tele (Java, C ++, ...) dan kemudian melompat kereta berbeda (Python) pertama yang ia temui. Dia menghabiskan setengah dari artikel memuji betapa hebatnya sintaksis Python. Dia tidak memiliki kontribusi untuk debat ini karena kurangnya pengetahuan.
ziggystar
Tetapi jika Anda mencoba untuk menyimpan string dalam variabel int dalam bahasa yang dinamis - pasti Anda tidak akan melihat sampai Anda menjalankan / menguji aplikasi dan melihatnya dalam tindakan. Tetapi dalam praktik dunia nyata (lebih dari 17 tahun pembangunan) saya sangat jarang melihat ini sebagai penyebab utama bug! Pernah! Tetapi bahkan jika itu IS - Anda perhatikan dan Anda memperbaikinya? Apa masalahnya? Seolah-olah seluruh argumen didasarkan pada kasus tepi langka yang sangat teknis. Itu bukan masalah besar! Di sisi lain, manfaat pengetikan dinamis adalah pengembangan secara dramatis lebih cepat.
Manachi
2

Saya setuju dengan itu di sebagian besar jika, karena mari kita hadapi itu, ketika Anda berurusan dengan klien di web-plataform, fleksibilitas adalah suatu keharusan.

Bahasa yang diketik secara statis lebih kuat dan aman daripada yang diketik secara dinamis, tetapi ketika Anda mulai mengadaptasi kode untuk bertindak dengan cara yang tidak dimaksudkan dan Anda membutuhkannya dengan cepat, solusi terlihat agak rumit dan kaku.

Jadi jika Anda memiliki perubahan untuk menggabungkan teknologi saya akan merekomendasikan untuk membuat inti dalam bahasa yang diketik secara statis (inti tidak banyak berubah) dan menggunakan secara dinamis untuk interaksi pengguna.

guiman
sumber
Kopling longgar bagus. Tetapi bahasa dinamis tidak diperlukan untuk mencapainya. Lihat, Web adalah tentang kopling longgar yang dilakukan melalui HTTP, dan sebagian besar server web dan browser ditulis dalam bahasa statis. Bahasa dinamis bersinar dalam aplikasi skrip ketika Anda membutuhkan sepotong kode yang mudah dimodifikasi saat runtime, tanpa menggunakan toolchain besar.
9000
2

Saya pikir penulis posting ini belum melihat ke Scala sendiri. Sementara saya setuju bahwa Java dan C # memiliki keterbatasan dan sedikit tidak fleksibel untuk pengembangan web, Scala adalah bahasa yang diketik secara statis yang sangat berbeda dengan apa yang biasanya Anda pikirkan ketika Anda mendengarnya. Scala memungkinkan untuk mengetik bebek dan juga versi yang aman dari patching monyet (Melalui konversi implisit). Itu membuat pustaka pemrograman sedikit lebih rumit karena Anda harus memikirkan tipe, tetapi jika Anda hanya menggunakan pustaka seperti Lift, rasanya sangat mirip dengan bahasa yang dinamis kecuali bahwa kompiler akan memberi tahu Anda tentang bug yang jelas di mana Anda tidak menggunakannya. Baik. Saya pribadi berpikir kerangka kerja lift tidak harus bersembunyi dari ruby ​​di rel atau sejenisnya. Lihat contoh kode di sini atau di sinidan putuskan sendiri. Saya berkembang dalam lift untuk sementara waktu sekarang dan tidak pernah memiliki situasi di mana saya memiliki kesalahan ketik dan meskipun "Ah man, jika ini dinamis itu akan bekerja" ... karena jika itu dinamis itu tidak akan mengatakan kepada saya bahwa ada bug sampai crash saat runtime.

Martin Ring
sumber
1

Secara pribadi saya pikir apa yang mereka katakan adalah benar untuk sistem apa pun, bukan hanya situs web. Anda akan memerlukan pengetikan statis ketika Anda berbicara dengan perangkat keras, karena segala sesuatu pengetikan dinamis memiliki kelemahan dan manfaat yang sama tidak peduli apa yang Anda lakukan, sungguh, dan apa yang terbaik tergantung pada selera dan masalah spesifik untuk setiap proyek.

Lennart Regebro
sumber
Saya pikir perlu dicatat bahwa Scala agak istimewa karena menggunakan inferensi tipe dan dengan demikian tidak termasuk kategori pengetikan statis yang sama dengan Java.
Winston Ewert
1

Praktis Jawaban cepat: Tergantung pada ukuran dan kompleksitas ukuran web. Situs web kecil, program dinamis. lang., Situs web besar dan kompleks, program statis. lang.

Jawaban membosankan yang diperpanjang: Banyak pengembang bersikeras bahwa situs web harus dilakukan dengan program dinamis. lr. tetapi kenyataannya adalah bahwa, pada akhirnya, alat pengembangan web cenderung menggunakan atau meniru bahasa yang diketik statis.

Saya telah bekerja dengan PHP beberapa kali, dan cepat atau lambat, kami harus menambahkan banyak kode yang memverifikasi jenis data yang diberikan, yang tersirat dalam program yang diketik secara statis. lang.

Lagn diketik. juga membantu penggunaan IDE, yang membutuhkan banyak jenis verifikasi.

(dibawa oleh tetanggamu, pembuat & pembuat kompilasi ;-))

umlcat
sumber
0

Saya agak setuju. Ketika saya melihat sebagian besar kode C # web-end, ada banyak casting dari string dan serialisasi data ke string. Pada dasarnya, HTTP sebagai protokol sangat cocok untuk bahasa dinamis.

Nemanja Trifunovic
sumber