Ну, для нас Haskell - довольно знакомая платформа, так что шансы только повышает.
Не, по части типизации он уже лет пять как отсталый язык - нонче рулят танковые клинья и ковровое бомбометание, в смысле, Coq и Agda 2. :))) На самом деле: последний писк в типизации языков программирования - зависимые типы. Вообще, и им в обед сто лет, но даже их пока не удалось сделать достаточно удобными для практического использования, поэтому о более навороченных изысках в _языках_ программирования говорить пока не приходится, AFAIK. Но и зависимые типы - штука весьма мощная и крутая! :)
Некоторые элементы зависимых типов есть и в Haskell (GADTs и Type Families), но ограниченные, поэтому не столь выразительные, зато несложные на практике. Так что Haskell уже потихоньку переходит в разряд стабильных, проверенных временем языков для промышленной разработки.
Посмотрел эти два, испугался математики %) Они же ещё не пригодны для широких масс и промышленности?
Брал вчера у коллеги книгу по теории типов, подумал - может, там что-нибудь популярно изложено, пригодится на ICFPC... хрен там! Там чистая, заформализованная математика, определения да теоремы. Хороший такой университетский курс на два семестра постоянного изучения.
Буду, как всегда, неучем %) Разве что вот Скалу подтягиваю.
Помнится, thesz ловил себя на мысли, что agda - довольно практичный язык, потому что компилируется в Haskell и может использовать его библиотеки. :)
Лично я думаю, что на текущий момент, Haskell - самый промышленный из развитых и самый развитый из промышленных языков.
Что-то охладел к Скале - неудобный (в плане синтаксиса, как минимум) и запутанный язык. Чтобы разобраться в Скале нужно выучить Java, выучить Haskell, а потом ещё понять как Одерски совместил один с другим. Одерски очень умный мужик, проделал большую и интересную работу, но совмещение ФП и ООП слишком сложно само по себе. При этом, благодаря синтаксису и интерференции с ООП, проще выучить Haskell, чем с ходу в Скале разбираться что такое монады, аппликативные функторы и т.д.
IMHO, разумеется. Например, sorhed может со мной не согласиться.
Точно так же Scala — очень практичный язык, потому что компилируется в Java и использует все его библиотеки. А библиотек для Java навалом, прекрасных, чего нельзя сказать о хаскеле.
Хаскел мне тоже нравится, конечно, и на нём можно писать, но он из другой культурной среды. Для меня Scala стала естественным выбором, потому что я до этого 12 лет писал на джаве, а также был Smalltalk-энтузиастом и ООП не воспринимаю как ненужное зло (чем грешат многие функциональщики).
Но, конечно, люди приходят в ФП и из других языков программирования.
Интересно, это ЖЖ рассылает уведомления об упоминаниях, или вы их сами находите? :)
> А библиотек для Java навалом, прекрасных, чего нельзя сказать о хаскеле. Я бы сказал, что это для Haskell очень много прекрасных библиотек, а для Java большинство библиотек ужасны, а наиболее популярные - просто нормальные. :)
Но с "практичностью" Scala как абстрактной характеристикой (средней по больнице) соглашусь - в своей нише у него конкурентов просто нет (пока что).
Я не считаю ООП злом само по себе - как и ФП не считаю панацеей. Но как по мне, так Scala наглядно демонстрирует порочность смешения одного со вторым. Одерски - повторюсь - очень умный мужик, и проделал огромную работу, но чтобы разобраться полностью в том как он соединяет в Scala ФП и ООП мне сильно нехватает знаний как первого, так и второго. При том что мне хватило знаний ФП чтобы в Haskell пользоваться existential types и делать инкапсуляцию с их помощью. При этом пользоваться такими продвинутыми ФП-приёмами в Scala сложнее, чем в Haskell уже из-за одного только более громоздкого синтаксиса, а если не пользоваться, то зачем он тогда вообще нужен?
Кстати, как-то раз на собственном опыте убедился, что Streams в Scala (ровно как и в Clojure и многих других) - "обман трудящихся", потому что когда ленивость по-настоящему нужна, она нужна и в хвосте, и в голове, и в самих значениях, там хранящихся. thesz совершенно правильно говорил, что ленивость должна быть правилом, а строгость - исключением, иначе она просто не работает.
Впрочем, наверное, если осилить полностью Scala, то потом никакие Agda 2 и ATS не страшны! :) А чем сильнее программисты напрягают мозг и чем таких больше - тем лучше для индустрии и человечества. ;) Так что я не против Scala - вполне таки за. :)
Пользой, т.е. диапазоном решаемых задач. Исчисление времени ставит уйму задач, и joda.time решает очень многие из них. И API её, для Джавы, почти идеально краток. Мой вкус, конечно, испорчен, почти как у тех, кто любит PHP.
Не вижу: * Итервалов дат. Арифметики над интервалами дат: сравнение/пересечение/дополнение; * Частичных дат (хотя что-то похожее я, кажется, увидел), и типа данных "поле даты" со значением "день/час/минута/секунда"; * Аналога йодовского "периода", как-то "2 дня 3 часа" (это не всегда 51 час).
Может быть, это всё делается средствами другой части стандартной библиотеки Хаскелля - буду рад просветиться.
Но вообще, я был излишне резок. Мне показалось, что в time нет операции "следующий вторник после 16го числа" или разных типов для даты с таймзоной и без. Присмотрелся - увидел.
>Арифметики над интервалами дат: сравнение/пересечение/дополнение;
Возможно сделать через пары дат. Не спорю, что этого нет, но это тривиально.
http://www.haskell.org/ghc/docs/6.10.4/html/libraries/time/Data-Time-LocalTime.html содержит "поля данных": см TimeOfDay и LocalTime. LocalTime содержит Day, который может быть спроецирован в год, месяц и день.
Follow the types!
Насчёт периода не знаю. Наверняка это тоже можно сделать и это опять же будет тривиально.
SOAP? Не надо вот этого вот. В крайнем случае SOAP-консьюмер, если некуда деваться, но если кто-то напишет SOAP-сервер на нормальном языке программирования, он будет неправ, потому что SOAP — это зло, и не надо его умножать.
Под «прекрасным» я понимаю в том числе и наличие приборов и материалов, позволяющих делать прекрасные вещи.
Например, в скале есть собственный фреймворк для гуёв, а можно и джавские использовать. Есть много средств для продуктивной работы с базами данных, с вебом, с сетью. Например, где в хаскеле аналог Netty и MINA? Хотя бы на уровне эрланговских инструменты для распарсивания протоколов, буферизации, комбинаторы для построения сообщений? Ничего нет, только сырые сокеты. А как красиво можно было бы сделать... Но никто не сделал.
В скале, если чего-то нет (например, хороших средств для работы с датами), можно взять джавовские, и всё будет работать прекрасно. А тут — либо есть, либо нет. Самому всё не напишешь.
Хочу пояснить: я не отрицаю сугубой юзабельности Java - напротив, очень уважаю её стабильность, качество и проработанность. С удовольствием пользуюсь в благоприятных случаях.
Но ничего прекрасного я в Java и окрестностях не вижу. В этом нет ничего плохого, это не мешает get things done.
В самой джаве как языке программирования я тоже ничего прекрасного не вижу. Но это прекрасная платформа.
И можно удачно сочетать стабильность и надёжность джавы с передним краем функционального программирования. Это Clojure (для скобочников) и Scala (для любителей типизации).
а нафіга тобі теорія? чим тобі поможе ( initial | finite ) object?? а щоб не лякався, на тобі комікси (комікси це ж весело і легко) GADT та dependent types
(no subject)
5/7/12 19:42 (UTC)Не, по части типизации он уже лет пять как отсталый язык - нонче рулят танковые клинья и ковровое бомбометание, в смысле, Coq и Agda 2. :))) На самом деле: последний писк в типизации языков программирования - зависимые типы. Вообще, и им в обед сто лет, но даже их пока не удалось сделать достаточно удобными для практического использования, поэтому о более навороченных изысках в _языках_ программирования говорить пока не приходится, AFAIK. Но и зависимые типы - штука весьма мощная и крутая! :)
Некоторые элементы зависимых типов есть и в Haskell (GADTs и Type Families), но ограниченные, поэтому не столь выразительные, зато несложные на практике. Так что Haskell уже потихоньку переходит в разряд стабильных, проверенных временем языков для промышленной разработки.
(no subject)
6/7/12 10:29 (UTC)Брал вчера у коллеги книгу по теории типов, подумал - может, там что-нибудь популярно изложено, пригодится на ICFPC... хрен там! Там чистая, заформализованная математика, определения да теоремы. Хороший такой университетский курс на два семестра постоянного изучения.
Буду, как всегда, неучем %) Разве что вот Скалу подтягиваю.
(no subject)
6/7/12 18:32 (UTC)Лично я думаю, что на текущий момент, Haskell - самый промышленный из развитых и самый развитый из промышленных языков.
Что-то охладел к Скале - неудобный (в плане синтаксиса, как минимум) и запутанный язык. Чтобы разобраться в Скале нужно выучить Java, выучить Haskell, а потом ещё понять как Одерски совместил один с другим. Одерски очень умный мужик, проделал большую и интересную работу, но совмещение ФП и ООП слишком сложно само по себе. При этом, благодаря синтаксису и интерференции с ООП, проще выучить Haskell, чем с ходу в Скале разбираться что такое монады, аппликативные функторы и т.д.
IMHO, разумеется. Например,
(no subject)
6/7/12 20:23 (UTC)(no subject)
7/7/12 23:15 (UTC)(no subject)
8/7/12 11:08 (UTC)Хаскел мне тоже нравится, конечно, и на нём можно писать, но он из другой культурной среды. Для меня Scala стала естественным выбором, потому что я до этого 12 лет писал на джаве, а также был Smalltalk-энтузиастом и ООП не воспринимаю как ненужное зло (чем грешат многие функциональщики).
Но, конечно, люди приходят в ФП и из других языков программирования.
(no subject)
8/7/12 14:54 (UTC)> А библиотек для Java навалом, прекрасных, чего нельзя сказать о хаскеле.
Я бы сказал, что это для Haskell очень много прекрасных библиотек, а для Java большинство библиотек ужасны, а наиболее популярные - просто нормальные. :)
Но с "практичностью" Scala как абстрактной характеристикой (средней по больнице) соглашусь - в своей нише у него конкурентов просто нет (пока что).
Я не считаю ООП злом само по себе - как и ФП не считаю панацеей. Но как по мне, так Scala наглядно демонстрирует порочность смешения одного со вторым. Одерски - повторюсь - очень умный мужик, и проделал огромную работу, но чтобы разобраться полностью в том как он соединяет в Scala ФП и ООП мне сильно нехватает знаний как первого, так и второго. При том что мне хватило знаний ФП чтобы в Haskell пользоваться existential types и делать инкапсуляцию с их помощью. При этом пользоваться такими продвинутыми ФП-приёмами в Scala сложнее, чем в Haskell уже из-за одного только более громоздкого синтаксиса, а если не пользоваться, то зачем он тогда вообще нужен?
Кстати, как-то раз на собственном опыте убедился, что Streams в Scala (ровно как и в Clojure и многих других) - "обман трудящихся", потому что когда ленивость по-настоящему нужна, она нужна и в хвосте, и в голове, и в самих значениях, там хранящихся.
Впрочем, наверное, если осилить полностью Scala, то потом никакие Agda 2 и ATS не страшны! :) А чем сильнее программисты напрягают мозг и чем таких больше - тем лучше для индустрии и человечества. ;) Так что я не против Scala - вполне таки за. :)
(no subject)
8/7/12 16:23 (UTC)(no subject)
9/7/12 07:45 (UTC)(no subject)
9/7/12 07:50 (UTC)И API её, для Джавы, почти идеально краток.
Мой вкус, конечно, испорчен, почти как у тех, кто любит PHP.
(no subject)
9/7/12 08:24 (UTC)Думаю, на Hackage найдётся библиотека для решения временных задач. :)
(no subject)
Posted by(no subject)
10/7/12 13:45 (UTC)(no subject)
10/7/12 19:57 (UTC)* Итервалов дат. Арифметики над интервалами дат: сравнение/пересечение/дополнение;
* Частичных дат (хотя что-то похожее я, кажется, увидел), и типа данных "поле даты" со значением "день/час/минута/секунда";
* Аналога йодовского "периода", как-то "2 дня 3 часа" (это не всегда 51 час).
Может быть, это всё делается средствами другой части стандартной библиотеки Хаскелля - буду рад просветиться.
Но вообще, я был излишне резок. Мне показалось, что в time нет операции "следующий вторник после 16го числа" или разных типов для даты с таймзоной и без. Присмотрелся - увидел.
(no subject)
10/7/12 20:29 (UTC)Возможно сделать через пары дат. Не спорю, что этого нет, но это тривиально.
http://www.haskell.org/ghc/docs/6.10.4/html/libraries/time/Data-Time-LocalTime.html содержит "поля данных": см TimeOfDay и LocalTime. LocalTime содержит Day, который может быть спроецирован в год, месяц и день.
Follow the types!
Насчёт периода не знаю. Наверняка это тоже можно сделать и это опять же будет тривиально.
(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
8/7/12 17:11 (UTC)(no subject)
9/7/12 07:36 (UTC)Batteries included я никому не обещал, правда же? :)
GUI всё ещё слабое место ФП, поскольку не найдено подходящего формализма, впрочем Fudgets в чём-то прекрасны, хотя и не юзабельны.
А какая нужна работа с сетью не через сырые сокеты?
(no subject)
9/7/12 07:39 (UTC)HTTP, REST/SOAP, SMTP со всеми прилежащими multipart-ами - для начала.
(no subject)
9/7/12 08:17 (UTC)Ну и там как минимум 3 годных веб-фреймворка...
Но я сильно в Hackage не закапывался.
(no subject)
9/7/12 09:44 (UTC)HTTP и SMTP нужны, увы.
(no subject)
Posted by(no subject)
9/7/12 09:41 (UTC)Например, в скале есть собственный фреймворк для гуёв, а можно и джавские использовать. Есть много средств для продуктивной работы с базами данных, с вебом, с сетью. Например, где в хаскеле аналог Netty и MINA? Хотя бы на уровне эрланговских инструменты для распарсивания протоколов, буферизации, комбинаторы для построения сообщений? Ничего нет, только сырые сокеты. А как красиво можно было бы сделать... Но никто не сделал.
В скале, если чего-то нет (например, хороших средств для работы с датами), можно взять джавовские, и всё будет работать прекрасно. А тут — либо есть, либо нет. Самому всё не напишешь.
(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
9/7/12 07:44 (UTC)Но ничего прекрасного я в Java и окрестностях не вижу. В этом нет ничего плохого, это не мешает get things done.
(no subject)
9/7/12 09:42 (UTC)И можно удачно сочетать стабильность и надёжность джавы с передним краем функционального программирования. Это Clojure (для скобочников) и Scala (для любителей типизации).
(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
Posted by(no subject)
9/7/12 08:40 (UTC)а щоб не лякався, на тобі комікси (комікси це ж весело і легко)
GADT та dependent types
(no subject)
9/7/12 08:42 (UTC)(no subject)
10/7/12 20:15 (UTC)