Scala neden diğer dillerden daha ölçeklenebilir?


12

Scala, adına bile dahil olan bir özellik olan ölçeklenebilir bir dil olarak faturalandırılır :

Scala adı, kullanıcılarının ölçekleri ile büyümek için tasarlandığını gösteren "ölçeklenebilir" ve "dil" in bir portmantosudur.

Scala bağlamında "ölçeklenebilir" ne demektir? Scala'yı örneğin Java'dan daha ölçeklenebilir yapan nedir?


5
Scala sizin düşündüğünüz şekilde ölçeklenebilir değil: Scala / Java hakkında Twitter geliştiricileri röportajını gerçekten okumalısınız ... Temelde her (gerçek) ölçeklenebilirlik sorunu yaşadıklarında, Scala kodunu kaldırarak doğru şekilde çok iş parçacıklı hale getirdiler Java kodu (burada belirtildiği gibi, Java'da Scala'da olduğundan çok daha kolaydır). Scala proto-yazım ve yazma birimi testleri ve "Gerçek Dünya" [TM] miktarında veri içermeyen herhangi bir şey için havalı.
Tristan

5
Java'da çok iş parçacıklı kodları doğru yazmak Scala'dakinden daha mı kolay? nasıl yani?
Aaron Novstrup

@Webinator Röportajla bir bağlantınız var mı?
Aaron Novstrup

Ölçeklenebilirlik konusunda Tristan St ile anlaşın. Erlang, çok az sürede süreç oluşturma yeteneği nedeniyle eşzamanlı programlama durumunda paketin lideridir. 10000+ artı iş parçacığı oluşturamaz ve SCALA'da birbirinizle düşündüğünüz şekilde etkileşime giremezsiniz.
Ubermensch

3
@TristanSt. FUD'nin güzel yayılması, kesinlikle bu röportajdan aldığım temel götürme değil. - "Ama diğer kısımlar için geleneksel bir Java iş parçacığı modeline geri döndük. Bunun üzerinde çalışan mühendis John Kalucki, test etmenin biraz daha kolay, biraz daha tahmin edilebilir olduğunu gördü. aktör tabanlı bir iş parçacığına dayalı kod değiştirmek için birkaç dakika sürdü. Birkaç arama yapıldı ve yer değiştirdi. Bu nedenle, aktörler herhangi bir nedenle başarısız olursa o kadar da kötü değil. " İnanılmaz konsept - bazı şeyler aktör modeline uygun ve bazıları yok!
Derek Litz

Yanıtlar:


14

Martin Odersky ölçeklenebilir bir dil seçeneği olarak skala hakkında konuştuğunda , bunun anlamı, dilin kendisi için uygun olmasıdır:

  • komut dosyası
  • yazma uygulamaları
  • canavar "kurumsal" (daha iyi bir kelime istemek için) uygulamaları yazma

Kesinlikle performans açısından ölçeklenebilirliğe atıfta bulunmuyor!

Scala'nın büyük ölçekli kurumsal dağıtımda olduğu gibi quick'n'dirty komut dosyası oluşturmak için uygun olduğunu iddia edebilmesi gerçeği kabaca şu şekildedir:

Komut

Scala komut dosyası yazmak için mükemmeldir çünkü yazı tipi çıkarımı ve işlevsel stili, koleksiyonları dilimleme ve küp şeklinde kesme ve kesme için mükemmeldir.

Uygulamalar

Scala yazma uygulamaları için harikadır, çünkü hem işlevsel hem de zorunlu stilde çalışmak için bazı harika özelliklere sahip statik olarak kontrol edilen bir dildir. Scala Java ile uyumludur ve bu nedenle muazzam bir kütüphane ekosisteminden yararlanabilirsiniz.

Kurumsal Dağıtım

Scala, dinamik olarak yazılan (yani türlenmemiş) dillerle karşılaştırıldığında, dengesini derlemek ve mükemmel performansa sahip kararlı bir sistem olan Java Sanal Makinesi üzerinde çalışır. Yine, statik olarak yazılması, yeniden kodlamanın büyük kod tabanlarında çok daha kolay olduğu anlamına gelir.


Herhangi bir destekleyici kanıt "statik olarak yazılmış, büyük kod tabanlarında yeniden düzenlemenin çok daha kolay olduğu anlamına mı geliyor?" Kulağa daha çok “o bağlıdır”, o zaman bir gerçek gibi geliyor. Yazılan dillerin kesin olarak sunduğunu gördüğüm tek şey, derleyici yazarlarının uğraşması daha kolay.
Derek Litz

21

Odersky'nin söyledikleri (Slayt 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala, diğer dillerin geniş olduğu derinliktedir."

Bu, ölçeklenebilirliğin esneklik ve ifade etme anlamında olduğu anlamına gelir. Kendi kontrol yapılarınızı oluşturabilirsiniz. Örneğin, aktörlerin çerçeveleri bir kütüphane, ancak dil özelliklerini kullanıyor gibi görünüyor.

Bu, Scala'nın mutlaka "saniyede 1.000.000 talebi cevaplamak" için gerekli olmayan soyutlamaya göre ölçeklendirileceği anlamına gelir (ancak Scala da burada güçlüdür).


1
+1 bu gerçekten "SCAlable LAnguage" ile uyumludur. Geliştiricinin ihtiyaçları ile birlikte büyümek için tasarlanmış bir dildir.
Ben James

11

Java'nın pratikte ölçeklenebilirliğini sınırlayan şey JVM değil, doğru eşzamanlı kod yazmanın zorluğu. Scala bunu fonksiyonel programlama desteği ve aktör modeli ile kolaylaştırıyor.

Web sunucularında olduğu gibi eşzamanlılık kolay olduğunda Java çok ölçeklenebilir olabilir (her istek neredeyse tamamen bağımsızdır). Ancak, uzun süren tek bir görevin paralelleştirilmesi söz konusu olduğunda, doğru olmak için gerçek bir mücadele olabilir.


Java'nın işlevsel programlama için desteği olmasa da, Java'da kullanamayacağınız anlamına gelmez. Bunu yapmak, daha fazla çaba için olsa da, aynı ölçeklenebilirliği sağlayabilir. Yardımcı olabilecek bir kütüphane code.google.com/p/lambdaj
Peter Lawrey

2
Scala'nın adına sahip olduğu Ölçeklenebilirlik , programların değil , dilin üzerindedir.
Daniel C. Sobral


6

Her iki dilin de aynı bayt kodu üretebileceğini söylediğiniz için, Java'dan daha ölçeklenebilir olan dilin kendisi gerekli değildir.

Ancak Actor modeli ve fonksiyonel programlama stili ölçeklenebilirliği artırabilir (kısaca söylemek gerekirse - doğru eşzamanlılık programlamasını basitleştiren ve senkronizasyon ihtiyaçlarını azaltan).

Daha iyi bir fikir edinmek için aktör modeline bir göz atın ve geleneksel çok iş parçacıklı java uygulamasıyla karşılaştırın:

Akka çerçevesini Scala'da kodlamadan yüksek düzeyde ölçeklenebilir Java uygulaması oluşturmak için bile kullanabilirsiniz:


Aktörler kütüphanesi, Scala'nın nasıl ölçeklenebilir olduğunun iyi bir örneğidir, ancak bu örnek eşzamanlılık ile ilgili değildir: aktörler API'sı özel operatörlerle (! Mesaj-gönderme gibi) yerel bir özellik gibi görünür , ancak gerçekten hepsi düzenli yöntem çağrıları.
Ben James

Aktör modeli, çok fazla acı çekmeden ve çok fazla eşzamanlılık baş ağrısı olmadan ölçeklenebilir yazılım yazmanıza yardımcı olur, değil mi? aktörleri kullanırken görmese bile, eşzamanlılık aktör modeli ile ilgili bir şey olarak. Aktör modeli, eşzamanlı hesaplamayı basitleştirmeyi amaçlıyor, bu yüzden bu örneğin neden eşzamanlılık ile ilgisi yok ... Burada ne anlama geliyor?
Alois Cochard

Yorumum zekice ifade edilmedi. llemieng veya michael.kebe'nin cevapları daha iyi açıklıyor.
Ben James

Sorun değil ! Şimdi anladığınızı anlıyorum, sadece Scala kütüphanelerinin ölçeklenebilirliği hakkında konuşuyordum, dil ölçeklenebilirliği / eşzamanlılık özelliklerinin kendisinden değil. Teşekkürler
Alois Cochard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.