LINUX.ORG.RU

Haskell + Emacs - пишу дипломную работу

 ,


1

2

В процессе диплома пишется эмулятор ARM(на самом деле, не совсем эмулятор, но это не важно). Пишется на Haskell, с последующей генерацией в С. Главная цель работы - изучить возможности advanced type systems для программирования.

Конфигурация:

1. Emacs : haskell-mode + vimpulse(очень удобная штука) + org-mode(для literate описания). org-haskell-mode для интеграции всего в одном буфере - оказалось очень удобно для описания частей системы, проставления ссылок, хранения частей документации, и вобще всего что может понадобиться, в одном месте.
2. xmonad + xmobar - в качестве декстоп окружения. Очень удобно при наличии 2-х мониторов(сейчас он отключен). Обычно на втором открывается документация, и переводится в язык описания модели.

После черных тем перешел на менее контрастные, вроде даже для глаз стало приятней.

В общем : замечания, пожелания, вопросы приветствуются.

>>> Просмотр (1679x1049, 446 Kb)



Проверено: JB ()

Какой приятный emacs, надо будет посмотреть

sol_linux ★★ ()

мне понравилось.

SAA ★★★ ()

Голова разболелась, ШПГ, обоина намекает на суицид.

FiXer ★★☆☆☆ ()
Ответ на: комментарий от FiXer

первый нормальный коментарий:) Что не так с обоиной? И где вы её увидели? Обоину я вижу в течение 3 секунд, между входом в сеансом, и запуском емакса.

recon88 ()
Ответ на: комментарий от recon88

>первый нормальный коментарий:)

Фегасе...

И где вы её увидели?


Монотонный фон иногда приносит уныние (по крайней мере мне). Шрифты чуть замылены, но терпимы.

FiXer ★★☆☆☆ ()
Ответ на: комментарий от FiXer

предлагаете на фон редактора поставить веселую картинку? А на счет шрифтов, мне на плавные переходы смотреть намного приятней чем на резкие края. Странная тенденция сглаженные шрифты автоматически заносить в разряд плохих.

recon88 ()

как обычно - радуга
а так ничего

megabaks ★★★★ ()

нас таким на испуг не возьмешь :)

mutronix ★★★★ ()

vimpulse

Зачем он тебе?

org-mode(для literate описания)

Можно подробнее?

А в целом - такой Ъ что даже вин.

power ()
Ответ на: комментарий от power

1. vimpulse - затем, что vim подобное управление намного проще для пальцев(лучше нажать последовательно 3 клавишы dib - что бы удалить все что находится внурти скобок, чем несколько M-.. C-.. в емаксе). Ну а модальность, которую обычно все ругают, совершенно не мешает, у меня получается четко разделять процесс редактирования текста и его добавления. По ощущениям процесс редактирования текста стал более высокоуровневым, я думаю в терминах сбалансированных выражений, предложений, количества слов, что в емаксе мне не удавалось.

2. Literate haskell - возможность писать программу как обычный документ, при необходимости вставляя код как \begin{code} \end{code}. Правда обычно для текста используют latex, но путем простой модификации можно заставить его работать с org-mode.

http://www.loveshack.ukfsn.org/emacs/haskell-latex.el

recon88 ()
Ответ на: комментарий от recon88

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

А как потом компилириуешь этот документ? Что такое literate programming я примерно представляю, меня интересует сам процесс.

power ()
Ответ на: комментарий от power

ghc поддерживает literate стиль из коробки, надо лишь указать lhs расширение файла, и компилировать как обычно. Для других языков надо испольовать noweb, и перед компиляцией вытаскивать сорцы из noweb файлов.

recon88 ()
Ответ на: комментарий от recon88

> vimpulse - затем, что vim подобное управление намного проще

А почему бы тогда просто vim не использовать?

kda ★★★★★ ()
Ответ на: комментарий от kda

Emacs легче расширяемый, и количество дополнений намного больше чем в виме.

recon88 ()

Шрифты понравились, хоть в них и не шарю... В остальном не шарю тем более, так что промолчу )))

furs ()

Цветовая схема хороша.

Как сочетается Vim-подобное управление с org-mode и вообще дополнениями Emacs (привязки клавиш org-mode приходится самому переделывать в духе Vim)?

ipc ()
Ответ на: комментарий от ipc

Обычно для mode-specific операций, выделяется специальная клавиша(в моем случае - пробел), и затем на неё добавляются все нужные операции. Например для org-mode вместо C-c C-t для смены тега, я нажимаю SPC m. И в таком духе - для всех модов, благо пространство возможных комбинаций огромное. При использовании двух клавишных сочетаний, и только буквы - получится 32*32 комбинаций, поэтому для операций обычно стараюсь выделять по мнемоникам(разве что для часто используемых - клавиши которые поближе к home row). По своему опыту скажу - команды стало намного легче запоминать, и если раньше я многие не использовал из за сложностей придумывания нормальных комбинаций(например для работы с прямоугольным выделением, или регистрами) то теперь мой набор команд значительно расширился.

recon88 ()

Как организовал показ раскладки в xmobar?

panurg ()

Что показать то хотел? Смотреть то куда? В твою дипломную работу?

a_no_no ()

такая цветовая тема есть в gvim, я её выдернул в eclipse, emacs чёт выглядит не совсем удобным, хотя наверное если сесть долго изучать принципы его работы то будет удобно, но мне, как и многим другим, лень этим заниматься.

ioan ()

Ничего не понял, но понравилось :3

pevzi ★★★★★ ()

Что это у нас, интерпретатор виртуальной машины на хацкеле ? В зоопарке уродцев пополнение.

Burbaka ★★ ()

годная тема диплома.

x4DA ★★★★★ ()

И как, удобно на Haskell? Хочу тоже что-то на нем написать. Есть моменты, за которые его хочется ненавидеть?

vertexua ★★★☆☆ ()

За все + кроме vimpulse.

pi11 ★★★★★ ()

Судя по цветовой палитре, ты учишься на гробовщика.

Mojo ()

А в чём будет отличие Вашей прораммы от эмулятора? Если не секрет, то о чём диплом?

veprbl ()
Ответ на: комментарий от Mojo

Позвольте, просто не все люди настолько бело-голубые. А такая тема в емаксе на самом деле очень удобна, хотя бы для глаз.

DJAnto ()

>org-haskell-mode для интеграции всего в одном буфере - оказалось очень удобно для описания частей системы, проставления ссылок, хранения частей документации, и вобще всего что может понадобиться, в одном месте.

Как раз хочу сделать себе такое, чтобы по коду собирать в одном месте всякие TODO, XXX, FIXME, чтобы не забыть. А то обычно развесишь себе напоминалок в коде, а потом на них забьешь. А через год вообще забудешь, зачем их писал и что с этим всем делать. Хорошо бы еще из такой напоминалки сразу в нужное место в коде попадать. Это не нечто подобное?

Zubok ★★★★★ ()

Неплохо :) А дипломная работа для какого вуза?

russians ()
Ответ на: комментарий от Burbaka

ну вобще-то на хацкеле описание вм, из которого потом генерируется код на С(что оказалось очень удобно - можно оптимизировать низкоуровневое представление, не беспокоясь про высокоуровневое). Ну а на выскоком уровне команды описываются очень просто - практически дословное переписывание спецификации, причем можно некоторые инварианты проверять статически за счет типов(разрядкая сетка, контроль порядка байт - endianness). Еще на хаскеле написан простой эмулятор это машины - что бы было проще отлаживать, но ошибок нашлось очень мало, порядка десяти за все время разработки, и были они в неправильном интерпретации мною спецификации(хаскел все же не coq что бы все можно было доказать).

В планах изменение эвалюатора(название от функции eval) на абстрактную интерпретацию - для вычисления максимальной глубины стека. Спеки используем те же, но лишь меняем функцию вычисления - и получаем новую программу.

От эмулятора отличается требованиями к памяти и быстродействию - планируется запускать это на маленьких системах(сейчас размер результата = 3Кб, и будет снижаться). Ну а приложение - динамическое обновление кода, увеличение устойчивости - можно делать снапшоты состояний ВМ, и в случае сбоя - продолжить эту задачу на другом узле.

Вобще про применение еще думаю, если у вас есть интересные сценарии использования или замечания - пишите.

recon88 ()
Ответ на: комментарий от Zubok

можно использовать agenda-view - тогда будут показываться все выбраные теги, дедлайны, и куча другой информации(если надо конечно), но для меня в первую очередь это хорошо тем что можно записывать мысли прямо рядом с кодом, причем иметь таблицы, рисунки, ссылки и прочие радости хорошего текстового описания.

recon88 ()
Ответ на: комментарий от vertexua

зависит от задачи. Ненавидеть не за что, очень удобный язык, особенно если использовать расширения для работы с типами, но лучше перед этим иметь опыт в логике/Coq(хоть небольшой), а то не будет понятно что этими типами выражать. По моему мнению - хороший язык для построения eDSL, но ведь не все задачи на ДСЛ ложаться

recon88 ()
Ответ на: комментарий от pi11

чем vimpulse не устраивает? для меня это открытие года! стало очень удобно редактировать, даже в conkeror назначил vim подобные сочетания

recon88 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.