|
|
|
Scala
|
|||
|---|---|---|---|
|
#18+
privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу . в java8 такой фокус тоже сработает, но тем не менее, смотрите как изящно делаем HashMap Код: sql 1. 2. или вот, наглядная обработка условий с match. код читаемый, легко правится Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 10:17 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Буквально из вчерашнего: Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 11:42 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Щиче...Например, был такой язык PL/I. Вчистую проигравший С и Pascal... Спорное утверждение PL/I AFAIK был заточен на IBM 360 ее продолжение и клоны C и Pascal'у проиграть не мог, когда я в начале 90-х сидел на ЕС ЭВМ там ни C, ни Pascal не было. Как можно проиграть тому, кого нет? Ну и синтаксис был заточен под IBM 360. Последовательные файлы, индексно организованные и так далее. Фиг такой язык на другую ОС перенесешь. Где файл это файл и все ))) без всяких выпендрежей с прямым доступом к нужным цилиндрам диска ))) IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 12:09 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу . Мы не сможем определиться с критериями "значительной пользы". У нас нет возможности обсуждать серъезные SR в рамках sql.ru. Во первых никто их не будет читать и во вторых не секюрно и т.п. Но меня-бы вполне устроили обычные кейсы рефакторинга, когда есть какой-то ящик с входом и выходом, написанный на Java/C++/C#/Delphi. Желательно не более чем на 100 строк. И мы (все) внимательно на него смотрим. Думаем. И применяем к нему рефакторинги которые - сокращают его объем кода. - делают его более maintainable - делают его более Human-readable Далее мы пытаемся реализовать этот черный ящик на Scala и смотрим какой профит мы с этого получаем. Если ничего не получаем - то считаем что в данном кейсе язык X такой-же мощный как Scala или Scala не дает никаких преимуществ. P.S. В топике по трассировкой луча я сделал наивную попытку просто перевести С++ в Scala но получил (пока) ошибку рендеринга и к сожалению ее не исправил т.к не хватает времени разобраться. В топике где Atum играл с Stream-s и решал искусственные задачки я предложил решить те-же задачки на Scala но к сожалению не получил поддержки аудитории да и самому мне тогда не было времени их решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 13:18 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
авторА теперь прошу - то же самое на джаве.А я не говорил что приведу ответ на Java :), ниже пример на TypeScript (я использовал интерфейсы, но с классами тоже можно, и да, он тоже сделает автокастинг и проверку корректных значений в свитче и если мы забудем ретурн сделать тоже подскажет). Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 20:53 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
авторval profiles = profileService.findByParameters(Parameters(email = '%foo%')) val profilesById = profiles.map(p => p.id -> p).toMap Аналогично на тайпскрипте. Чуть длиннее, но в общем терпимо. Код: javascript 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 21:08 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
автор Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. Опять на тайп-скрипте (он перехватит все нулл поинтеры и заставит сдлать проверку на нул если ее например пропустить). На мой взгляд эта версия проще, короче и понятней. Код: javascript 1. 2. 3. 4. 5. Но, можно сделать еще лучше, так как это делается например в Рельсах, нужно прокетировать апи сервиса так чтобы он сам все проверял. В коде ниже `one()` выкинет ошибку если найдено 0 или > 1. Код: javascript 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 21:20 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
авторcase class JsResource(path: Path, dependencies: List[JsResource]) //файл и его зависимости, формируют дерево //получить множество всех зависимостей из дерева def flatDependencies(root: JsResource): Set[Path] = root.dependencies.flatMap(flatDependencies).toSet + root.path Хммм, а из-за циркулярных зависимостей в бесконечный цикл не войдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 21:40 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
private, тайпскрипт - вещь хорошая, но это надстройка над яваскриптом с необязательными типами. Так сказать, другая весовая категория, и до роли промышленного языка больших систем он еще не дорос. Войдет, но, по условию задачи, это дерево, а не граф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 21:57 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Версия на тайпскрипт. Немного нечитабельно, основная проблема - отсутствие метода `flatten` в жаваскрипте... Код: javascript 1. 2. 3. 4. 5. С флаттен было-бы читабельней. Код: javascript 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 22:19 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
И я забыл в Set обернуть... Последний пример подкачал..., уступает скале из-за отсутствия хорошей стандартной библиотеке в жаваскрипт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2017, 22:27 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Интересная позиция конечно:) по типу суровых русских дровосеков с японской бензопилой Ну например сделай на typescript такое - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. А теперь как им пользоваться - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Да, я не скажу что такое надо сплошь и рядом, и сама концепция path-dependent types трудна, но если использовать дозированно и к месту, то можно прилично помочь компилятору. Жду аналог на TS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2017, 00:50 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Как раз наоборот. Я продемонстрировал что "Японская Бензопила" (обычный язык, тайпскрипт) неплохо справиляется с предложенными выше практическими и часто встречающимися задачами. А ты предложил перепелить рельс - привел пример абстрактного, редко используемого кода. Я же явно упоминул что желательно рассматривать """"ример должен реально использоваться и использоватся часто и приностиь значительную пользу""". Какой смысл рассматривать фичу языка которая используется редко и приносит незначительную пользу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2017, 13:59 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
По приведенному коду - нужно определится - либо он частно используется в проектах на скале и приносит значимю пользу (и желательно продемонстрировать реальным кодом - как именно он эту пользу приносит, как в примерах выше, там явно видно что это обычный рабочий код, рендеринг обьектов, работа с базой данных и т.п.). Либо отбросить его как несущественный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2017, 14:04 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
maytonHettПодытожив все прочитанное вчера (а мыслей было на много больше чем я тут написал, что-то уж из головы все вылетело) - пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют. Что скажете? Кину 5 копеек. Языки программирования создают не боги и не небожители. А обычные инженеры (зачастую). Языки становятся на долгие десятилетия стандартом общения между программистом и имплементацией. Как следствие. Ошибки или недостатки которые заложил создатель мы тащим долгие годы. Почему Джеймс Гослинг не заложил в java парадигму беззнаковой арифметики. Ведь процессоры прекрасно это поддерживали? Почему в первых версиях не было типа enum, не было generics, и не было семантики строкового аргумента внутри switch? Почему API сразу не поддержал out.printf, а потребовалось несколько лет чтобы осознать что это реально практично и полезно? Почему строки нужно сравнивать только через equals() а не через более короткий binary operator? Почему нельзя перегрузить + для сложения матриц и векторов? В какой-такой концепции ООП записано что этого делать нельзя? И такой поток "почему" у меня - бесконечен. И с другой стороны. Мартин Одерский. Профессор. Да еще и специализируется на ЯЗЫКАХ. Этот человек знает всё о всех парадигмах. Он не стал размениваться на мелочи. Он заложил в Scala ВСЕ-ВСЕ языковые парадигмы которые только существуют. Серъезно! Там только чорта в ступе не хватает. И если вы однажды (с похмелья) вдруг решили создать свой язык или DSL или скриптик .. то замрите (!) на минуточку и вспомните что в Scala это уже есть! Натурально. Фундаментальные стратегии работы с коллекциями такие как map, flatMap, fold воплощены в scala в то время как в Java к ним только-только подходят и то без понимания сути а инструментально, как побочка от работы со Streams. В Scala можно постулировать не то что жалкое целое число или комплексное или вектор. Можно объявить "группы", "кольца" и прочие материи высокого порядка математики и далее унаследовать от них поведение. В Scala решена проблема ромбовидного наследования. Решена бротва! Вы всё спорите в топиках ООП? Так знайте! Она - формализована в Scala и результат детерминирован. Никакого UB! Scala - статически типизирована на уровне компиллятора. А это значит что мы получаем формальное доказательство правоты нашего алгоритма после компилляции целого леса шаблонов и функций. И это значит что никаких ошибок рантайма при кастинге не будет! Это - закон! А что может быть лучше для программиста чем закон который гарантирует что код - верный. И еще раз. В Scala есть всё! Если чего-то нет - то читайте внимательно. Я сейчас не говорю о практике или о статистике использования этого ЯП. Это отдельный вопрос. Но теоретический батл Java уже давно проиграла. Что может инженеришко Гослинг противопоставить профессору языковых наук Одерскому!? Это вам не хер собачий! Это академичский подход. Это - наука! А не дурацкие фреймворки с бинами. Мдя.... Я не имею ентерпрайзных проектов на Scala. И его пока не знаю так хорошо чтобы трабл-шутить ошибки. Но у меня достаточно сильно развито природное инженерное любопытство которое будет и будет двигать меня в сторону этого сложного и интересного языка. Вот такие вот 5 копеек. Спасибо за внимание. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2017, 09:09 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу . Вся научная разработка компании huawei идет на scala ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2017, 09:11 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Atum1privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу . Вся научная разработка компании huawei идет на scala Из того что уже написано и работает на Scala - можно отметить фреймвоки Akka и Kafka. Этот пример кода не очень короткий и я-бы даже сказал весьма длинный. Но можно брать из него фрагменты и думать чё там и как. Я его код не смотрел но думаю что он - весьма достоен своего выбора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2017, 13:29 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВзабыл никНу например сделай на typescript такое - https://github.com/Reactive-Extensions/RxJS Это совсем не о том.. Observables - лишь пример. Идея в том, что многие потенциальные ошибки в скале можно отличить уже на этапе компиляции (а не в логах на продуктиве, как это обычно бывает) Scala имеет более строгую типизацию, чем Java, C# или Typescript. Говорят, что есть ещё более строгие языки со странными названиями - Haskell, Idris, Agda... Но я вот с ними не сталкивался. Ну и работодатели, видимо, тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2017, 22:12 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Диез Scala имеет более строгую типизацию, чем Java, C# или Typescript. Scala имеет более мощную систему типов, чем Java, C#. Typescript - немного в стороне, хотя в C# есть dynamic... То, что показано в примере - примеси, на C# легко реализуются с помощью интерфейсов и методов расширения, которые там появились 100500 лет назад. В 7,0 появился pattern matching, но он сильно уступает scala и f#. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2017, 11:09 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
Коллеги, система типов Scala - это вещь хорошая, но не прикладная и уж точно не то, за все мы так любим этот язык для разработки. Вот еще немного моего любимого: Код: java 1. 2. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2017, 11:37 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
scf, Поправка ко второму примеру: Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2017, 11:39 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
scf, И еще одна поправка ко второму примеру Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2017, 12:05 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВДиезScala имеет более строгую типизацию, чем Java, C# или Typescript. Scala имеет более мощную систему типов, чем Java, C#. Typescript - немного в стороне, хотя в C# есть dynamic... Не вижу противоречий. Если вы дадите формальное определение понятий "сила типизации" и "мощность системы типов" - можно будет подискутировать. ЕвгенийВТо, что показано в примере - примеси, на C# легко реализуются с помощью интерфейсов и методов расширения, которые там появились 100500 лет назад. В 7,0 появился pattern matching, но он сильно уступает scala и f#. Примеси - это не так интересно. Автор поста специально сделал сделал акцент на концепции path-dependent types. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2017, 13:46 |
|
||
|
Scala
|
|||
|---|---|---|---|
|
#18+
авторВся научная разработка компании huawei идет на scala Из того что уже написано и работает на Scala - можно отметить фреймвоки Akka и Kafka. Все это классно, но можно привести много примеров где компания Х успешно использует технологию Y. Это хороший дополнительный бонус, но он не демонстрирует преимушества языка в наглядном виде. авторИдея в том, что многие потенциальные ошибки в скале можно отличить уже на этапе компиляции Опять абстрактные утверждения. Про тот код с обсервером - он относится не к категории "многие" а к "редкие". Сказать что скала позволяет отследить потенциальные ошибки в каких-то редких случаях - да, судя по тому примеру можно так сказать. Но вот что "многие ошибки" пока такого примера не было. авторScala имеет более строгую типизацию Опять абстрактные утверждения. авторScala имеет более мощную систему типов, чем Java, C#. Typescript - немного в стороне, хотя в C# есть dynamic... Опять абстрактные утверждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2017, 17:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39452688&tid=2122898]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 352ms |

| 0 / 0 |
