Чому Scala є більш масштабованою, ніж інші мови?


12

На Scala виставляється рахунок як масштабована мова, функція, яка навіть включена в її назву :

Назва Scala - портманто "масштабованого" та "мови", що означає, що воно покликане зростати з потребами своїх користувачів.

Що означає "масштабований" у контексті Scala? Що робить Scala більш масштабованою, ніж, скажімо, Java?


5
Scala не масштабується так, як ви думаєте: ви дійсно повинні прочитати інтерв'ю розробників Twitter про Scala / Java ... В основному кожен раз, коли у них виникали (справжні) проблеми зі масштабуванням, вони в кінцевому підсумку видаляли код Scala і вводили правильно багатопотокові. Код Java (який, як уже вказувалося тут, набагато простіше зробити на Java, ніж у Scala). Scala чудово підходить для тестування протоколів та запису одиничних тестів і всього, що не включає кількість даних, що стосуються "Реального світу"
Тристан Св.

5
Простіше правильно написати багатопотоковий код на Java, ніж у Scala? як так?
Аарон Новструп

@Webinator У вас є посилання на інтерв'ю?
Аарон Новструп

Погодьтеся з Tristan St щодо масштабованості. Ерланг є лідером пакету у випадку одночасного програмування завдяки здатності створювати процеси за мінімальний час. Ви просто не можете створити 10000+ плюс ниток і взаємодіяти між собою в SCALA так, як думаєте.
Ubermensch

3
@TristanSt. Приємне розповсюдження FUD, це абсолютно не основний процес, який я отримав з цього інтерв'ю. - "Але для інших частин ми просто повернулися до традиційної моделі різьблення Java. Інженер, що працював над цим, Джон Калуцький, щойно виявив, що це трохи легше протестувати, трохи більш передбачувано. пішло кілька хвилин, щоб переключити код, який базувався на акторі, на щось, що базується на потоці. Це було кілька пошуку та заміни. Тож не так вже й погано, якщо актори з будь-якої причини відмовлять вас ". Дивовижна концепція - деякі речі підходять для акторської моделі, а деякі ні!
Дерек Ліц

Відповіді:


14

Коли Мартін Одерський говорить про шкалу як про масштабований вибір мови, він має на увазі те, що сама мова підходить для:

  • матеріали сценаріїв
  • написання заявок
  • написання монстрових «підприємств» (для бажання кращого слова) додатків

Він, звичайно, не посилається на масштабованість з точки зору продуктивності!

Той факт, що він може стверджувати, що масштаб настільки ж підходить для швидкого тридцяти сценаріїв, як і для масштабного розгортання підприємств, приблизно такий:

Сценарій

Scala чудово підходить для написання сценаріїв, тому що його тип виводу та функціональний стиль роблять його одночасно лаконічним та чудовим для нарізки та набору колекцій тощо.

Програми

Scala чудово підходить для написання програм, оскільки це статична перевірена мова з деякими чудовими можливостями для роботи як у функціональному, так і в імперативному стилях. Scala сумісна з Java, отже, ви можете використовувати величезну екосистему бібліотек.

Розгортання підприємства

Scala компілюється в байт-код і працює на віртуальній машині Java, стабільній системі з великою продуктивністю, порівняно з (так званими) динамічно набраними (тобто нетиповими) мовами. Знову ж таки, той факт, що він набраний статично, означає, що рефакторинг значно полегшується на великих кодових базах.


Будь-які підтверджуючі докази для "статично типового типу" означають, що рефакторинг значно полегшується на великих базах коду "? Звучить більше як, "це залежить", ситуація, а потім факт. Єдине, що я бачив набрані мови остаточно пропонують, це те, що їм легше мати справу з авторами-компіляторами.
Дерек Ліц

21

Що говорить Одерський (слайд 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala глибока, де інші мови широкі".

Це означає, що масштабованість розуміється з точки зору гнучкості та виразності. Ви можете створити власні структури управління. Наприклад, фреймворки акторів - це бібліотека, але схоже, що вона використовує мовні функції.

Це означає, що Scala буде масштабувати відповідно до необхідної абстракції, не обов'язково з точки зору "відповіді на 1.000.000 запитів за секунду" (але і Scala тут сильна).


1
+1 це дійсно відповідає "SCAlable LAnguage". Це мова, покликана розростатися з потребами розробника.
Бен Джеймс

11

Те, що обмежує масштабованість Java на практиці, не є JVM, це складність написання правильного одночасного коду. Scala полегшує це завдяки підтримці функціонального програмування та акторській моделі.

Java може бути дуже масштабованою, коли сумісність проста, наприклад, на веб-серверах (кожен запит майже повністю незалежний). Але якщо мова йде про паралелізацію одного довгого завдання, то це може бути справжньою боротьбою за те, щоб вийти правильно.


Хоча Java не підтримує функціональне програмування, це не означає, що ви не можете використовувати її в Java. Це може забезпечити вам таку ж масштабність, хоча і докласти більше зусиль. Бібліотека, яка може допомогти code.google.com/p/lambdaj
Пітер Лорі

2
Масштабованість, якою володіє назва Scala, - це мова , а не програми.
Даніель К. Собрал


6

Це не обов'язково, щоб сама мова була більш масштабованою, ніж Java, оскільки, як ви кажете, обидві мови можуть створювати однаковий байт-код.

Але модель Actor та функціональний стиль програмування можуть підвищити масштабованість (на двох словах - спрощення правильного програмування одночасності та зменшення потреб у синхронізації).

Для кращого розуміння подивіться на модель актора та порівняйте її з традиційною багатопотоковою програмою java:

Ви навіть можете використовувати рамку Akka для створення високомасштабної програми Java без кодування в Scala:


Бібліотека акторів - хороший приклад того, як масштабувати масштаб Scala, але цей приклад не пов'язаний з одночасністю: API для акторів виглядає як рідна функція зі спеціальними операторами (такими як! Message-send), але насправді все просто регулярні дзвінки методу.
Бен Джеймс

Модель актора допоможе вам писати масштабоване програмне забезпечення без надто великого болю та без занадто великої головної болі, чи не так? тож навіть якщо ви цього не бачите під час використання "Акторів", паралельність як щось спільне з акторською моделлю. Акторська модель має на меті спростити паралельні обчислення, то чому цей приклад не має нічого спільного з одночасністю ... Я не розумію тут?
Alois Cochard

Мій коментар не був блискуче сформульований, вибачте. Відповіді llemieng чи michael.kebe пояснюють це краще.
Бен Джеймс

Нема проблем ! Зараз я розумію вашу думку, я говорив лише про масштабованість бібліотек Scala, а не про особливості масштабованості / паралельності мови . Спасибі
Alois Cochard
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.