singalen: (nerd)
[personal profile] singalen
13-16 июля.
Днепровцы, кто отдаст три (четыре) дня жизни?
Ну или не-днепровцы?
Java? Groovy? Scala?

(no subject)

10/7/12 13:57 (UTC)
Posted by [identity profile] sorhed.livejournal.com
Моего уровня тяжёлой атлетики не хватает, чтобы понять эту сигнатуру. Хотя я понимаю, что там ну максимум 65 кило. Но видно, что там много низкоуровневых конструктов. И это для самого эффективного компилятора с наибольшим потенциалом для оптимизаций, коим безусловно является GHC (должна же быть какая-то польза от ленивости by default).

Что значит «какой размер будет у значения» — в смысле, в памяти? Вполне возможно, он будет астрономическим по сравнению с эффективной реализацией на C или на Haskell. Внутри JVM память устроена несколько специфически.

И — да, я вижу отличную функциональную структуру данных, который в хаскеле действительно больше, чем в скале. Это хорошо. Но это — весьма низкоуровневая библиотека, каковых энтузиасты немало понаписали и в скале. Я говорил скорее о библиотеках, позволяющих общаться с внешним миром и делать высокоуровневую работу.

Что касается того, как на хаскеле писать socket-код, то нужно посмотреть и попробовать. То, что я видел в real world haskell, напоминает IO-монаду, привинченную к юниксовому socket API. Может быть, этого достаточно. Было бы интересно сделать бенчмарк.

(no subject)

10/7/12 14:10 (UTC)
Posted by [identity profile] thesz.livejournal.com
>Но это — весьма низкоуровневая библиотека, каковых энтузиасты немало понаписали и в скале.

Это высокоуровневая библиотека, позволяющая делать весьма производительные структуры данных.

Кстати, не затруднит ли вас привести аналог сей библиотеки для Скалы?

>Я говорил скорее о библиотеках, позволяющих общаться с внешним миром и делать высокоуровневую работу.

По-моему, весь "высокий уровень" всегда находится в ядре программы, в алгоритмах. А это означает, что чем проще написание библиотек, тем лучше. В частности, если можно спуститься на совершенно низкий уровень, как в примере с IntMap, то это лучше, чем если спуститься нельзя. Меньше необходимости в пересмотре подходов, алгоритмов и наборов языков.

>(должна же быть какая-то польза от ленивости by default).

Вот сейчас используем для моделирования аппаратуры.

(no subject)

10/7/12 14:24 (UTC)
Posted by [identity profile] sorhed.livejournal.com
«Высокоуровневая библиотека, позволяющая делать весьма производительные структуры данных» в скале называется Scala Collections, часть стандартной библиотеки. Там даже есть подобный IntMap: http://www.scala-lang.org/api/current/scala/collection/immutable/IntMap.html . Давайте забенчмарким по скорости, для разнообразия.

«Высокий уровень» это не только алгоритмы, но и коммуникации с внешним миром и кодом, написанным другими программистами. Помните шутку про Nonfunctional programming (http://mirror.uncyc.org/wiki/Nonfunctional_programming)? На этом уровне джаве нет равных, она — универсальный интегратор, как раньше был Perl.

(no subject)

10/7/12 17:01 (UTC)
Posted by [identity profile] thesz.livejournal.com
>Там даже есть подобный IntMap: http://www.scala-lang.org/api/current/scala/collection/immutable/IntMap.html .

Там нет аналога adjust, update и alter, например. Зато в списке поддерживаемых функций есть композиция функций.

>Давайте забенчмарким по скорости, для разнообразия.

Давайте. Вариант http://Graph500.org с представлением на IntMap/IntSet устроит? Однопоточный вариант. На графах размера scale=16, edgeFactor=16. Это миллион ненаправленных дуг.

(no subject)

10/7/12 17:10 (UTC)
Posted by [identity profile] thesz.livejournal.com
>«Высокий уровень» это не только алгоритмы, но и коммуникации с внешним миром и кодом, написанным другими программистами.

Коммуникации - это границы. Для объектов размерности больше 1 они много меньше самих объектов.

Вот мой пример. На прошлой работе транслятор VHDL был написан на Java, при этом среда на C# и симулятор на Хаскеле. Взаимодействие со средой и симулятором - порядка 500 строк. Транслятор - порядка 50000 строк.

Я подозреваю, что вы просто привыкли к тому, что взаимодействие с внешним миром протягивается через всю программу, как это часто случается в Java (я попрограммировал на ней, имею некое представление). Может быть, это норма в мире Java, но это не лучший вариант.

>На этом уровне джаве нет равных, она — универсальный интегратор, как раньше был Perl.

На этом уровне нет равных также C, C++, C#, Tcl, Perl, Python. Да и Хаскелю тоже.

(no subject)

10/7/12 20:44 (UTC)
Posted by [identity profile] thesz.livejournal.com
Я привёл конкретный пример. Приведите, пожалуйста, конкретный пример общения с десятью системами.

Мой опыт говорит, что очень часто можно сделать формальную модель взаимодействия. Более того, Хаскель для этого не нужен.

Среди всего прочего, я участвовал в разработке ПО для банкоматов на Tcl. Так в этой разработке каждый участник проекта сочинил как минимум один встроенный проблемно-ориентированный язык.

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

Это хороший пример формализации подхода.

(no subject)

10/7/12 21:22 (UTC)
Posted by [identity profile] thesz.livejournal.com
Роли для Джавы, которая "всеобщий интегратор, как некогда Перл", я здесь не вижу. Соответственно, роль для Скалы здесь уменьшается значительно.

Проблемное место всего одно - GUI. При этом оно настолько проблемно, что я не смог бы рекомендовать Джава даже в клиники, где лечатся мои враги.

(no subject)

11/7/12 21:34 (UTC)
Posted by [identity profile] thesz.livejournal.com
О, для налаживания мостов между предметными областями Java ещё более худший выбор.