Dlaczego Scala jest bardziej skalowalny niż inne języki?

12

Scala jest rozliczany jako język skalowalny, funkcja nawet zawarta w jego nazwie :

Nazwa Scala to skrót od „skalowalnego” i „języka”, co oznacza, że ​​ma on rosnąć wraz z wymaganiami użytkowników.

Co oznacza „skalowalny” w kontekście Scali? Co czyni Scalę bardziej skalowalnym niż, powiedzmy, Java?

prasonscala
źródło
5
Scala nie jest skalowalny w twoim myśleniu: naprawdę powinieneś przeczytać wywiad z twórcami Twittera na temat Scala / Java ... Zasadniczo za każdym razem, gdy mieli (prawdziwe) problemy ze skalowalnością, w końcu usuwali kod Scali i wstawiali poprawnie wielowątkowy Kod Java (który, jak już wspomniano, jest znacznie łatwiejszy do zrobienia w Javie niż w Scali). Scala jest świetny do prototypowania i pisania testów jednostkowych i wszystkiego, co nie dotyczy ilości „prawdziwego świata” [TM] danych.
Tristan St.
5
Łatwiej jest pisać poprawnie wielowątkowy kod w Javie niż w Scali? jak to?
Aaron Novstrup
@Webinator Czy masz link do wywiadu?
Aaron Novstrup
Zgadzam się z Tristan St na skalowalność. Erlang jest liderem pakietu w przypadku jednoczesnego programowania ze względu na jego zdolność do tworzenia procesów w minimalnym czasie. Po prostu nie możesz utworzyć ponad 10000 wątków i wchodzić w interakcje ze sobą w SCALA w sposób, w jaki myślisz.
Ubermensch
3
@TristanSt. Ładne rozpowszechnianie FUD, to absolutnie nie jest podstawowa sprawa, którą otrzymałem z tego wywiadu. - „Ale w przypadku innych części właśnie wróciliśmy do tradycyjnego modelu wątków Java. Inżynier pracujący nad tym, John Kalucki, stwierdził, że było to trochę łatwiejsze do przetestowania, trochę bardziej przewidywalne. Miłą rzeczą było to, że zajęło kilka minut, aby zmienić kod oparty na aktorach na coś opartego na wątku. To było kilka poszukiwań i zastąpienie. Więc nie jest tak źle, jeśli aktorzy zawiodą z jakiegokolwiek powodu. ” Niesamowita koncepcja - niektóre rzeczy pasują do modelu aktora, a niektóre nie!
Derek Litz,

Odpowiedzi:

14

Kiedy Martin Odersky mówi o scali jako skalowalnym wyborze języka, chodzi mu o to, że sam język jest odpowiedni dla:

  • skrypty
  • pisanie aplikacji
  • pisanie potwornych aplikacji „enterprise” (dla lepszego słowa)

Z pewnością nie odnosi się do skalowalności z punktu widzenia wydajności!

Fakt, że może on twierdzić, że Scala jest tak odpowiedni do szybkiego tworzenia skryptów jak i do wdrażania na dużą skalę w przedsiębiorstwie, jest mniej więcej następujący:

Skrypty

Scala doskonale nadaje się do tworzenia skryptów, ponieważ wnioskowanie o typach i funkcjonalny styl sprawiają, że jest ona zwięzła i świetnie nadaje się do krojenia i krojenia kolekcji itp.

Aplikacje

Scala doskonale nadaje się do pisania aplikacji, ponieważ jest to język sprawdzany statycznie z kilkoma świetnymi funkcjami do pracy zarówno w stylu funkcjonalnym, jak i imperatywnym. Scala jest kompatybilny z Javą, dzięki czemu możesz wykorzystać ogromny ekosystem bibliotek.

Wdrożenie w przedsiębiorstwie

Scala kompiluje się do kodu bajtowego i działa na wirtualnej maszynie Java, stabilnym systemie o dużej wydajności, w porównaniu do (tak zwanych) języków dynamicznie typowanych (tj. Nietypowych). Ponownie fakt, że jest on typowany statycznie, oznacza, że ​​refaktoryzacja jest znacznie łatwiejsza w przypadku dużych baz kodowych.

oxbow_lakes
źródło
Wszelkie dowody potwierdzające, że „statycznie wpisany typ oznacza, że ​​refaktoryzacja jest znacznie łatwiejsza w przypadku dużych baz kodowych”? Brzmi bardziej jak „zależna” sytuacja niż fakt. Jedyną rzeczą, jaką widziałem w definicjach języków pisanych jest to, że są łatwiejsze dla pisarzy kompilatorów.
Derek Litz,
21

Odersky mówi (Slajd 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

„Scala jest głęboka tam, gdzie inne języki są szerokie”.

Oznacza to, że skalowalne oznacza elastyczność i ekspresję. Możesz tworzyć własne struktury kontrolne. Np. Ramy aktorów to biblioteka, ale wygląda na to, że używa funkcji językowych.

Oznacza to, że Scala skaluje się zgodnie z potrzebną abstrakcją, niekoniecznie w kategoriach „odpowiadania na 1 000 000 żądań na sekundę” (ale Scala też jest tutaj silna).

michael.kebe
źródło
1
+1 to naprawdę pasuje do „SCAlable LAnguage”. Jest to język, który ma rosnąć wraz z potrzebami programisty.
Ben James
11

Ograniczeniem skalowalności Javy w praktyce nie jest JVM, ale trudność w pisaniu poprawnego kodu współbieżnego. Scala ułatwia to dzięki obsłudze programowania funkcjonalnego i modelu aktora.

Java może być bardzo skalowalna, gdy współbieżność jest łatwa, na przykład na serwerach WWW (każde żądanie jest prawie całkowicie niezależne). Ale jeśli chodzi o paralelizację pojedynczego, długofalowego zadania, może być prawdziwą walką o prawidłowe wykonanie zadania.

Michael Borgwardt
źródło
Chociaż Java nie obsługuje programowania funkcjonalnego, nie oznacza to, że nie można go używać w Javie. Takie postępowanie może zapewnić taką samą skalowalność, choć wymaga większego wysiłku. Biblioteka, która może pomóc code.google.com/p/lambdaj
Peter Lawrey
2
Skalowalność, do której należy nazwa Scala, dotyczy języka , a nie programów.
Daniel C. Sobral
6

Nie jest to konieczne, aby sam język był bardziej skalowalny niż Java, ponieważ mówisz, że oba języki mogą generować ten sam kod bajtowy.

Ale model aktora i styl programowania funkcjonalnego mogą zwiększyć skalowalność (w skrócie - upraszczając prawidłowe programowanie współbieżności i zmniejszając potrzeby synchronizacji).

Aby uzyskać lepszy wgląd, spójrz na model aktora i porównaj go z tradycyjną wielowątkową aplikacją Java:

Możesz nawet użyć frameworka Akka do stworzenia wysoce skalowalnej aplikacji Java bez kodowania w Scali:

Alois Cochard
źródło
Biblioteka aktorów jest dobrym przykładem skalowalności Scali, ale ten przykład nie dotyczy współbieżności: interfejs API aktorów wygląda jak natywna funkcja ze specjalnymi operatorami (takimi jak! Wysyłanie wiadomości!), Ale tak naprawdę wszystko jest po prostu regularne wywołania metod.
Ben James
Model aktora pomaga pisać skalowalne oprogramowanie bez nadmiernego bólu i bez zbytniego bólu głowy, prawda? więc nawet jeśli nie widzisz tego podczas korzystania z aktorów, współbieżność ma coś wspólnego z modelem aktora. Model aktora ma na celu uproszczenie obliczeń współbieżnych, więc dlaczego ten przykład nie ma nic wspólnego z współbieżnością ... Nie rozumiem o co ci chodzi?
Alois Cochard
Przepraszam, mój komentarz nie został wspaniale sformułowany. Odpowiedzi llemienga lub michaela.kebe wyjaśniają to lepiej.
Ben James
Nie ma problemu ! Teraz rozumiem twój punkt, mówiłem tylko o skalowalności bibliotek Scala, a nie o samych funkcjach skalowalności / współbieżności języka . Dzięki
Alois Cochard