Mengapa Scala lebih scalable daripada bahasa lain?

12

Scala ditagih sebagai bahasa yang dapat diskalakan, fitur yang bahkan termasuk dalam namanya :

Nama Scala adalah portmanteau "scalable" dan "bahasa", menandakan bahwa ia dirancang untuk tumbuh dengan tuntutan penggunanya.

Apa arti "scalable" dalam konteks Scala? Apa yang membuat Scala lebih scalable daripada, katakanlah, Java?

prasoncala
sumber
5
Scala bukan scalable dengan cara Anda berpikir: Anda benar-benar harus membaca wawancara pengembang Twitter tentang Scala / Java ... Pada dasarnya setiap kali mereka memiliki masalah skalabilitas (nyata), mereka akhirnya menghapus kode Scala dan memasukkan dengan benar multi-threaded Kode Java (yang, seperti telah ditunjukkan di sini, jauh lebih mudah dilakukan di Jawa daripada di Scala). Scala keren untuk tes unit pengetikan dan penulisan dan apa pun yang tidak melibatkan jumlah data "Dunia Nyata" [TM] yang mengatakan.
Tristan St.
5
Lebih mudah untuk menulis kode multi-threaded dengan benar di Java daripada di Scala? bagaimana?
Aaron Novstrup
@Webinator Apakah Anda memiliki tautan ke wawancara?
Aaron Novstrup
Setuju dengan Tristan St tentang skalabilitas. Erlang adalah pemimpin paket dalam hal pemrograman bersamaan karena kemampuannya untuk menciptakan proses dalam waktu minimal. Anda tidak dapat membuat 10.000+ utas dan berinteraksi satu sama lain dalam SCALA sesuai keinginan Anda.
Ubermensch
3
@ ChristianSt. Penyebaran FUD yang bagus, itu sama sekali bukan dasar pengambilan yang saya dapatkan dari wawancara itu. - "Tetapi untuk bagian lain kami baru saja kembali ke model threading tradisional Jawa. Teknisi yang mengerjakannya, John Kalucki, baru saja menemukan itu sedikit lebih mudah untuk diuji, sedikit lebih dapat diprediksi. Yang menyenangkan adalah, itu butuh beberapa menit untuk beralih kode yang didasarkan aktor ke sesuatu berdasarkan utas. Itu adalah beberapa pencarian dan penggantian. Jadi tidak begitu buruk jika aktor gagal Anda dengan alasan apa pun. " Konsep yang luar biasa - beberapa hal sesuai dengan model aktor dan beberapa tidak!
Derek Litz

Jawaban:

14

Ketika Martin Odersky berbicara tentang scala sebagai pilihan bahasa yang dapat diskalakan, maksudnya adalah bahwa bahasa itu sendiri sesuai untuk:

  • hal scripting
  • aplikasi menulis
  • menulis aplikasi monster "enterprise" (untuk menginginkan kata yang lebih baik)

Dia tentu saja tidak mengacu pada skalabilitas dari perspektif kinerja!

Fakta bahwa ia dapat mengklaim bahwa scala sesuai untuk skrip quick'n'dirty sebagaimana untuk penyebaran perusahaan skala besar kira-kira sebagai berikut:

Scripting

Scala sangat bagus untuk skrip karena jenis inferensi dan gaya fungsionalnya membuatnya ringkas dan bagus untuk mengiris dan mencelupkan koleksi dll.

Aplikasi

Scala sangat bagus untuk menulis aplikasi karena merupakan jenis bahasa yang diperiksa secara statis dengan beberapa fitur hebat untuk bekerja dalam gaya fungsional dan imperatif. Scala kompatibel dengan Java dan karenanya Anda dapat memanfaatkan ekosistem perpustakaan yang sangat besar.

Penerapan Perusahaan

Scala mengkompilasi untuk bytecode dan berjalan di Java Virtual Machine, sistem stabil dengan kinerja yang hebat, bila dibandingkan dengan (disebut) bahasa yang diketik secara dinamis (yaitu tidak diketik). Sekali lagi, fakta bahwa itu diketik secara statis berarti bahwa refactoring menjadi lebih mudah pada basis kode besar.

oxbow_lakes
sumber
Adakah bukti pendukung untuk "diketik secara statis berarti refactoring menjadi lebih mudah pada basis kode besar"? Kedengarannya lebih seperti, "itu tergantung", situasi kemudian fakta. Satu-satunya hal yang saya lihat menawarkan bahasa pengetikan secara definitif adalah mereka lebih mudah ditangani oleh penulis kompiler.
Derek Litz
21

Apa yang dikatakan Odersky adalah (Slide 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala jauh di mana bahasa lain luas."

Ini berarti, scalable dimaksudkan dalam hal fleksibilitas dan ekspresif. Anda dapat membuat struktur kontrol Anda sendiri. Misalnya kerangka aktor adalah perpustakaan, tetapi sepertinya menggunakan fitur bahasa.

Ini berarti bahwa Scala akan berkembang sesuai dengan abstraksi yang dibutuhkan, tidak harus dalam hal "menjawab 1.000.000 permintaan dalam satu detik" (tetapi Scala juga kuat di sini).

michael.kebe
sumber
1
+1 ini sangat cocok dengan "Bahasa SCAlable". Ini adalah bahasa yang dirancang untuk tumbuh dengan kebutuhan pengembang.
Ben James
11

Apa yang membatasi skalabilitas Java dalam praktiknya bukanlah JVM, melainkan kesulitan menulis kode konkuren yang benar. Scala membuat ini lebih mudah melalui dukungannya untuk pemrograman fungsional, dan model aktor.

Java bisa sangat scalable ketika konkurensi mudah, seperti di server web (setiap permintaan hampir sepenuhnya independen). Tetapi ketika datang untuk memparalelkan satu tugas yang sudah berjalan lama, itu bisa menjadi perjuangan nyata untuk mendapatkan yang benar.

Michael Borgwardt
sumber
Meskipun Java tidak memiliki dukungan untuk pemrograman fungsional, ini tidak berarti Anda tidak dapat menggunakannya di Jawa. Melakukan hal itu dapat memberi Anda skalabilitas yang sama, meskipun untuk lebih banyak usaha. Perpustakaan yang dapat membantu code.google.com/p/lambdaj
Peter Lawrey
2
Skalabilitas yang dimiliki Scala namanya adalah bahasa , bukan program.
Daniel C. Sobral
6

Itu tidak perlu bahasa itu sendiri yang lebih scalable daripada Java, seperti yang Anda katakan kedua bahasa dapat menghasilkan bytecode yang sama.

Tetapi model Aktor dan gaya pemrograman fungsional dapat meningkatkan skalabilitas (dengan cara singkat - menyederhanakan pemrograman konkurensi yang benar dan mengurangi kebutuhan sinkronisasi).

Untuk mendapatkan wawasan yang lebih baik, lihat model aktor dan bandingkan dengan aplikasi java multi-threaded tradisional:

Anda bahkan dapat menggunakan kerangka kerja Akka untuk membuat aplikasi Java yang sangat skalabel tanpa coding di Scala:

Alois Cochard
sumber
Pustaka aktor adalah contoh yang baik tentang bagaimana Scala dapat diskalakan, tetapi contoh ini tidak ada hubungannya dengan konkurensi: aktor API terlihat seperti fitur asli dengan operator khusus (seperti! Pesan-kirim), namun sebenarnya itu semua hanya panggilan metode biasa.
Ben James
Model aktor membantu Anda menulis perangkat lunak scalable tanpa terlalu banyak rasa sakit dan tanpa terlalu banyak sakit kepala concurrency, bukan? jadi bahkan jika Anda tidak melihatnya saat menggunakan Aktor, konkurensi sebagai sesuatu yang berkaitan dengan model aktor. Model aktor bertujuan untuk menyederhanakan perhitungan bersamaan, jadi mengapa contoh ini tidak ada hubungannya dengan konkurensi ... Saya tidak mengerti maksud Anda di sini?
Alois Cochard
Komentar saya tidak dengan kata-kata cemerlang, maaf. Jawaban llemieng atau michael.kebe menjelaskannya dengan lebih baik.
Ben James
Tidak masalah ! Saya sekarang mengerti maksud Anda, saya hanya berbicara tentang skalabilitas perpustakaan Scala dan bukan tentang skalabilitas bahasa / fitur konkurensi itu sendiri. Terima kasih
Alois Cochard