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

(no subject)

9/7/12 07:36 (UTC)
Posted by [identity profile] gabriel-irk.livejournal.com
Вероятно, у нас разные представления о прекрасном. ;)
Batteries included я никому не обещал, правда же? :)

GUI всё ещё слабое место ФП, поскольку не найдено подходящего формализма, впрочем Fudgets в чём-то прекрасны, хотя и не юзабельны.

А какая нужна работа с сетью не через сырые сокеты?

(no subject)

9/7/12 08:17 (UTC)
Posted by [identity profile] gabriel-irk.livejournal.com
http://hackage.haskell.org/package/http-conduit , например?

Ну и там как минимум 3 годных веб-фреймворка...

Но я сильно в Hackage не закапывался.

(no subject)

9/7/12 09:44 (UTC)
Posted by [identity profile] sorhed.livejournal.com
SOAP? Не надо вот этого вот. В крайнем случае SOAP-консьюмер, если некуда деваться, но если кто-то напишет SOAP-сервер на нормальном языке программирования, он будет неправ, потому что SOAP — это зло, и не надо его умножать.

HTTP и SMTP нужны, увы.

(no subject)

9/7/12 09:41 (UTC)
Posted by [identity profile] sorhed.livejournal.com
Под «прекрасным» я понимаю в том числе и наличие приборов и материалов, позволяющих делать прекрасные вещи.

Например, в скале есть собственный фреймворк для гуёв, а можно и джавские использовать. Есть много средств для продуктивной работы с базами данных, с вебом, с сетью. Например, где в хаскеле аналог Netty и MINA? Хотя бы на уровне эрланговских инструменты для распарсивания протоколов, буферизации, комбинаторы для построения сообщений? Ничего нет, только сырые сокеты. А как красиво можно было бы сделать... Но никто не сделал.

В скале, если чего-то нет (например, хороших средств для работы с датами), можно взять джавовские, и всё будет работать прекрасно. А тут — либо есть, либо нет. Самому всё не напишешь.

(no subject)

9/7/12 10:53 (UTC)
Posted by [identity profile] thesz.livejournal.com
Я не знаю, что такое MINA, но я посмотрел, что такое Netty: "an asynchronous event-driven network application framework" (http://www.jboss.org/netty/)

Прошу прощения, но это натурально не имеет смысла в случае ghc. В GHC RTS весь ввод-вывод асинхронный, на событиях. В этом смысле сеть ничем не отличается от других действий по вводу-выводу.

>Хотя бы на уровне эрланговских инструменты для распарсивания протоколов, буферизации, комбинаторы для построения сообщений?

binary package: http://hackage.haskell.org/package/binary-0.5.0.1

Пожалуйста, ознакомьтесь с текущим положением дел в мире Хаскеля. Там всё не так плохо, как вы себе представляете. И коль уж зашла речь про понимание, то по-моему мнению, вы не представляете себе, насколько в мире Scala плохо.

Простой пример. Хочу попросить вас посмотреть вот на этот тип: http://hackage.haskell.org/packages/archive/containers/0.5.0.0/doc/html/src/Data-IntMap-Base.html#IntMap

Вот он, чтобы далеко не ходить:
-- See Note: Order of constructors
data IntMap a = Bin {-# UNPACK #-} !Prefix {-# UNPACK #-} !Mask !(IntMap a) !(IntMap a)
              | Tip {-# UNPACK #-} !Key a
              | Nil

type Prefix = Int
type Mask   = Int
type Key    = Int
Какой размер будет у значения конструктора Tip в случае реализации этого типа на Scala? Моя прикидка - 5 слов (3 слова на VMT, ключ и указатель на данные + два слова на заголовок объекта). В случае Хаскеля - три слова: тэг, ключ и указатель на значение.

Для IntSet, построенного по той же схеме, но без значений (два слова на конструктор Tip), лишних данных будет ещё больше, вроде, 100% лишнего.

Это я к тому, что большими объёмами символьных вычислений на 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 ещё более худший выбор.

(no subject)

10/7/12 13:46 (UTC)
Posted by [identity profile] thesz.livejournal.com
Тут мой комментарий вывели из под фильтра спама.

http://singalen.livejournal.com/249003.html?thread=1682603#t1682603

Надеюсь, вы с ним ознакомились и мне бы хотелось услышать ваш ответ.