6 июня в 02:39

Haskell IDE от FP Complete

Приветствую всех Хабражителей!

Многие люди, интересующиеся языком Haskell, высказывают пожелание, что неплохо было бы иметь хорошую IDE. Но, как известно, с IDE для Haskell дела обстоят неважно. Да, есть Leksah, но, по мнению большинства, эта IDE откровенно сыровата. Признаюсь, лично мне она вообще не понравилась. Поэтому сегодня мы взглянем на IDE от компании FP Complete.

{- Будет много картинок -}

Что это за FP Complete?


Эта компания известна как популяризатор Haskell. Причём замахнулись они на эту популяризацию весьма серьёзно:

FP Complete is dedicated to bringing the Haskell programming language into the mainstream software market by being the leading developer of commercial Haskell software tools and services."

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

Сколько это стоит


Есть несколько вариантов использования их IDE:

  1. Совсем бесплатный.
  2. Недорогой.
  3. (Относительно) дорогой.

Как обычно, всё сводится к количеству пользователей и к уровню техподдержки. Совсем бесплатный вариант подразумевает, фактически, ознакомительный уровень использования (подробности чуть позже). Самый недорогой вариант из платных — индивидуальный, он значительно более полезный для реальной жизни. Цена вопроса — $99 в год. Остальные варианты мы рассматривать не будем, кому интересно — взгляните сами.

К счастью, у них есть пробный период, составляющий 4 недели бесплатного использования со всеми возможностями. Для этой заметки я пошёл именно этим путём.

Приступим


После регистрации (или же входа через ваш профиль Google+) создаём новый пустой проект:



Сразу после создания мы попадаем в IDE:



Перед нами — стандартная «Hello World»-заготовка. Обращаю ваше внимание на зелёный квадратик с весёлой рукой:



Это индикатор успешной компиляции проекта. Если этот индикатор желтоватого цвета — компилятор о чём-то вас предупреждает, если же красного — компилятор высказывает своё категорическое нежелание собирать ваш проект. Но в данный момент всё хорошо, поэтому жмём на стандартный значок «Play» синего цвета, рядом с зелёной рукой — и внизу получаем ожидаемый вывод на консоль:



Итак, начало положено.

Дружба с GitHub


Как обычно, начинаем с репозитория. К счастью, FP IDE крепко дружит с GitHub. В верхней части вы увидите значок со знакомым осьмикотом, нажатие на который открывает список привычных действий:



Помните, выше я сказал, что бесплатный режим использования является по сути ознакомительным? Вот первое ограничение: работать с GitHub вы сможете только в платной версии.

Обратите внимание, что операции Push и Pull пока недоступны. Дабы исправить это, жмём на кнопку «Unauthorized» и переносимся в GitHub:



После того, как связь с GitHub налажена, указываем наш пустой репозиторий (который у нас уже есть):



и теперь — долгожданный push:



Теперь откроем наш проект на GitHub:



и видим, что всё уже тут. Теперь дружбу FP IDE и GitHub водой не разлить. Кстати, к этому моменту вам уже придёт письмо о том, что в ваш GitHub-аккаунт был добавлен новый SSH-ключик.

Внешний вид


Здесь выбор небогат: вы можете только выбрать одну из предложенных цветовых тем, а также изменить размер шрифта. Умолчальную тему вы уже видели, а есть ещё такая:



и такая:



Чтобы изменить тему или шрифт, нажмите на значок с картиной справа:



А где же наш исполняемый файл?


Итак, наш проект работает. Можно вносить изменения, компилировать и смотреть результат. Для простых учебных целей этого уже достаточно. Но что если мы захотим получить наш исполняемый файл? Для этого жмём на значок с грузовичком и выбираем пункт «Download»:



Начнётся загрузка архива. Внутри вы найдёте исполняемый файл Main. Но не спешите запускать его, как это кинулся делать я. К сожалению, на моём Mac это хозяйство не заработало:

$ ./Main
-bash: ./Main: cannot execute binary file

Изучение документации открыло правду:



Ну что ж, пусть будет Ubuntu. А поскольку мой рабочий Linux — это именно Ubuntu 12.04 LTS, я попробовал. Работает. И не тянет за собой никаких хитрых зависимостей, только стандартные:

$ ldd Main 
	linux-vdso.so.1 =>  (0x00007ffffaffe000)
	libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ff96e3b0000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff96e0b4000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff96deab000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff96dca7000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff96d8e7000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff96d6c9000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff96e636000)

Кстати, вот вам и второе ограничение бесплатной версии IDE: скачать исполняемый файл можно лишь в платной версии.

Клавиатурные сочетания


Вернёмся к коду. Для нашего удобства нам доступны некоторые клавиатурные сочетания:



Я попробовал — работают. Например, по нажатию на Ctrl-i, когда курсор стоял на функции putStrLn, внизу появляется мини-подсказка:



Настройка проекта


Если мы хотим писать нечто более сложное, чем «Hello World», нам понадобится настройка проекта. Нажатие на значок с тремя горизонтальными полосками (справа вверху) откроет нам список настроек:



Тут можно сделать весьма многое: выбрать среду сборки, указать расширения языка Haskell, дописать флаги компилятора, и так далее в том же духе. Очень важной является также возможность установки стороннего пакета. В качестве примера я выбрал пакет MissingH. Учитывая, что этот пакет живёт в Hackage, пишем так:



То есть указываем не только имя пакета, но и его полную версию. И как только вы это сделаете — пакет немедленно будет установлен и готов к использованию, никаких дополнительных действий с вашей стороны не понадобится.

Помощники


Внизу вас ожидают ещё четыре кнопки:



Слева направо: Reformat code, Info of identifier (Ctrl-i), Autocomplete identifier (Ctrl-space), Go to definition (Ctrl-B). Всё стандартно. Кстати, реформат откровенно слабый: кое-что выравнивает, но сильные форматные огрехи не правит. Жаль.

Чуть ниже этих кнопок мы видим пять вкладок, среди которых History, для просмотра истории изменений:



Обратите внимание, что имена авторов изменений разные. Это потому что последнее изменение я сделал в GitHub-репозитории, а потом запуллил сюда.

Вкладка Hoogle позволяет искать разные Haskell-штуки в одноимённом поисковом сервисе:



А последняя вкладка поможет нам искать внутри проекта:



Работа с модулями


Добавим дополнительный модуль в наш проект:



Готово. Разумеется, модуль можно не только добавить, но и удалить, и скачать.

Публикация проекта


Чтобы сделать проект публичным (то есть доступным даже для тех, у кого нет аккаунта FP Complete), следует воспользоваться кнопкой со стрелочкой, вверху:



Теперь наш проект открыт всему миру. Чтобы убедиться в этом, зайдём с другого, неавторизованного браузера:



Работает.

Заключение


Уфф, много получилось, но короче никак. В общем, штуку они сделали перспективную, на мой взгляд. Лично я вижу два основных применения этой IDE:

  1. обучение Haskell,
  2. возможность коллективной онлайн-работы над кодом.


Причём всё это — без привязки к компьютеру с установленной Haskell Platform. Ради прикола я даже зашёл туда с iPad и запустил код на выполнение:



Так что теперь разработку на Haskell можно вести и с планшета. :-)

Всё. Теперь хочу услышать ваше мнение об этой IDE, уважаемые Хабрахаскеллеры.
+33
6320
31

Комментарии (30)

+1
mixrin, #
Выглядит мило. Только не совсем понятно, в чём различия разных версий. Судя по анонсу бесплатной community версии, то она не может как либо работать с репозиториями. Что-либо ещё из важного упускаю?
+1
denisshevchenko, #
Кроме невозможности работы с GitHub, вы не сможете скачать скомпилированный бинарник.
+3
OnYourLips, #
Следовательно, код из проекта никак не получить.
Раньше такие версии называли не бесплатными, а демонстрационными.
+1
denisshevchenko, #
Код получить, не получить исполняемый файл. Каждый из модулей проекта доступен для скачивания.
+4
erthalion, #
Мое субъективное мнение — сфера использования этого инструмента очень мала. Это либо, как вы верно заметили, обучение, либо внесение интерактива в небольшие примеры кода (что-то вроде JSFiddle, в блоге FPComplete любят использовать именно с этой целью). Вобщем, я не вижу ничего, что побудило бы меня пользоваться этой IDE =)
+1
denisshevchenko, #
Согласен, это основные сферы применения этой IDE. Однако, на мой взгляд, даже этого достаточно для того, чтобы данный инструмент имел будущее.
+1
denisshevchenko, #
А вообще жаль, что пользователи Mac и Windows пролетают с бинарником. Можно было бы сделать так: смотреть на платформу браузера, и собирать исполняемый файл на соответствующем сервере. А то ведь далеко не у всех Ubuntu…
+1
IkaR49, #
Я ещё не хаскеллер, я только учусь, но вот вопрос: а нет никаких директив компилятора или ещё чего-нибудь, чтобы он под одной платформой собрал бинарники для другой? Или, чтобы получить пачку бинарников для разных ОС надо использовать пачку соответствующих систем и ничего больше? Просто, если делать что-то кроссплатформенное и выпускать в свет, то это же придётся намучиться с виртуалками.
+2
VoidEx, #
+1
tgz, #
Интересно на чем она написана.
+5
int_index, #
Haskell для сервера, Fay для клиента.
–1
Joshua5, #
похоже на онлайн-фотошоп. если не хочется ничего искать и устанавливать, а нужно по-быстрому сделать нехитрые манипуляции с фотками — да, пожалуйста, да и то не очень удобно/непривычно. так и тут.
+1
HaruAtari, #
А как у наго обстоят дела с большими проектами? Я понимаю, инкрементная компиляция и все такое. Как я понимаю, он постоянно отправляет на сервер код и компилит его нонстопом так сказать. Он не будет из-за этого тормозить?

А вообще, отсутсвие нормальной, полноценной ide, для Хаскель лично мне мешает писать на нем что-нибудь сложное. Без тольковой навигации тяжело. Я пробовал Leksah, но как то не пошла. Точно не могу сказать что мне не понравилось, но отталкивает.
+4
kosiakk, #
Есть несколько неплохих плагинов для IntelliJ IDEA
Например github.com/Atsky/haskell-idea-plugin

Если хотите что-нибудь улучшить — все будут только рады принять ваши патчи или хотя бы предложения =)

Ну и EclipseFP вроде как работает. Правда, лично у меня сам Eclipse вызывает странные чувства.
+1
HaruAtari, #
За плагин списибо — не встречал, хотя пользуюсь идеей.
Я бы улучшил. ЖЕлание есть, но вот нет знаний java. Так что пока только багрепорты )
Спасибо вам за ссылку.
+1
denisshevchenko, #
А как у наго обстоят дела с большими проектами? Я понимаю, инкрементная компиляция и все такое. Как я понимаю, он постоянно отправляет на сервер код и компилит его нонстопом так сказать. Он не будет из-за этого тормозить?

Не могу сказать, ибо для этого нужен опыт, которого у меня пока нет. Думаю, в будущем я изучу этот вопрос. Потому что, повторюсь, эта IDE показалась мне перспективной.

Я пробовал Leksah, но как то не пошла. Точно не могу сказать что мне не понравилось, но отталкивает.

Точно такие же чувства и у меня.
+1
VoidEx, #
А насколько объёмно сложное? Чем не нравится SublimeHaskell?
+2
jakobz, #
Надо бы еще упомянуть что к этой IDE еще веб-сервер облачный прикручен. Т.е. можно сайты лепить прям там, теоретически. Уж не знаю как там на практике — этот ихний Yesod — штука весьма специфическая.

Я думаю разработчики на эту фичу напирают — было бы как-то странно делать IDE, в которой можно только простейшие консольные приложения делать.
+1
denisshevchenko, #
Вы правы, у них есть возможность разворачивания приложения. Вот на этом скриншоте видна ссылка «Deploy»:

image

В результате, если речь идёт о веб-приложении, оно разворачивается где-то на Amazon. Но, поскольку веб-приложения на Yesod — это не моя специализация (по крайней мере, на данный момент), я не особо вникал в эту их фичу.
+1
Halt, #
Или я чего-то не понимаю, или IDE это не только редактор, и доступ к сборщику и репозиторию.

С моей точки зрения, IDE — это в первую очередь работа с кодом. Code assist, рефакторинг, семантический поиск, …
Таким образом, IDEA/Eclipse, VisualStudio/KDevelop, Pharo/Squeak — это IDE. Kate, Блокнот, эта штука — нет.

Набор сниппетов и правок текста, каким бы он ни был навороченным и скриптованным, но без семантики — это не IDE.

P.S.: Я понимаю, что строго говоря, упомянутый в топике продукт соответствует термину integrated development environment. Но он не соответствует современным ожиданиям от инструмента такого рода.
+1
denisshevchenko, #
Вы правы. Разумеется, сравнивать рассматриваемую IDE с той же VisualStudio совершенно неуместно, ибо инструменты совершенно разного уровня. Однако большое всегда начинается с малого. Я уверен, что FP Complete будут развивать своё творение, добавляя в него новые возможности. Но начало, на мой взгляд, прекрасное.
+1
Halt, #
Да, конечно. Любое развитие лучше стагнации. Правда, не совсем понятна модель монетизации всего этого дела. Взять не очень популярный ЯП, сделать не очень особенную IDE и продавать ее за деньги… Все это не очень бьется с громкими заявлениями касательно того, что они выведут язык в массы. Обычно это делается другими способами.

Та же IDEA даже в Community версии предоставляет огромные возможности, которые удовлетворяют разработчика в 80% случаев (за что им огромное спасибо). Покупают же ее те, кто действительно заинтересован в продвинутых функциях и поддержке.
+2
denisshevchenko, #
Правда, не совсем понятна модель монетизации всего этого дела. Взять не очень популярный ЯП, сделать не очень особенную IDE и продавать ее за деньги…

Ну, как говорится, раз продают — значит кто-то покупает. Впрочем, я не знаю круг их пользователей, насколько он широк…
+1
jakobz, #
Хаскель хорош для относительно больших, умных и надежных штук. А тут — вполне юзабельная IDE, сразу с возможностью в два клика задеплоить приложение в облако, и там же сделать для него веб-морду.

Я думаю их рынок — всякие нишевые умные штуки с веб-мордой. Ученые, финансисты, всякое моделирование, AI, инженерные расчеты, и т.п.

Обычные сайтики на хаскеле делать — наверное перебор.
–3
Cheater, #
Эталонное ненужно. Если цель — обучение, то обучаться лучше на реальной IDE, всё равно потом на неё переходить.
Возможности кастомизации / скриптования нулевые.
+1
denisshevchenko, #
Эталонное ненужно. Если цель — обучение, то обучаться лучше на реальной IDE, всё равно потом на неё переходить.

Не соглашусь. Для обучения, на мой взгляд — самое то.

Возможности кастомизации / скриптования нулевые.

Для обучения это не так важно. Я бы даже сказал, совсем неважно.
+3
jakobz, #
«Реальные» IDE для хаскеля на данный момент — это emacs+навороты, vim+навороты или sublime+навороты :)

Но хаскель вообще не сильно требует IDE, по крайней мере вполне нормально пишется и в текстовом редакторе. Там нет такого как в яве — что без автокомплита жить совсем нельзя.
0
Darkus, #
Очень хорошо!
+1
BSDaemon, #
А еще есть вот такая штука: Haskell IDE plugin for Atom editor — atom.io/packages/ide-haskell
Мой товарищ делает.
0
denisshevchenko, #
Спасибо, буду знать.

Только зарегистрированные пользователи могут оставлять комментарии.
Войдите, пожалуйста.