tag:blogger.com,1999:blog-29561155.post5487306067355744840..comments2022-03-27T13:12:25.926+03:00Comments on Веб-дневник Владимира Шабанова: Немного по OCaml и HaskellVladimir Shabanovhttp://www.blogger.com/profile/14322574042735481057noreply@blogger.comBlogger30125tag:blogger.com,1999:blog-29561155.post-7688395098878723332009-08-07T13:13:53.874+04:002009-08-07T13:13:53.874+04:00Кстати сейчас уже нетрудно. Отладчик -- вещь дейст...Кстати сейчас уже нетрудно. Отладчик -- вещь действительно не очень нужная. Показывает только текущую точку программы, и все, что в ней есть, а надо видеть развитие во времени и только того, что нужно. Текущая точка интересна тогда, когда что-то падает, но тут stack trace & valgrind помогают сильнее отладчика.<br /><br />Так что действительно, разные метОды.<br /><br />Однако пункт про то, что в кемле/хаскеле в принципе получается сильно меньше ошибок остается.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-56757066583278076302009-08-07T06:00:15.963+04:002009-08-07T06:00:15.963+04:00Трудно наверное также представить, что можно годам...Трудно наверное также представить, что можно годами писать на С, Java без отладчика?<br />Этот факт ну никак, даже если за уши тянуть, не связан с Haskell, Ocaml, ФП в целом. Нет в Ocaml ничегошеньки, чтобы этот факт имел место быть в большем степени, чем в ЛЮБОМ другом языке. Это просто OldSchool, и все. Метода работы, если хотитеAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-29561155.post-4618146906457703532009-03-03T22:30:00.000+03:002009-03-03T22:30:00.000+03:00Я толковый студент =)Программированием начал заним...Я толковый студент =)<BR/><BR/>Программированием начал заниматься до универа, поэтому мой опыт берётся не из универа.<BR/><BR/>Haskell пробую, интересно, пока много чёрных пятен.Ruĝa Sunetohttps://www.blogger.com/profile/14441159348321319415noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-24981818335440867932009-02-09T17:13:00.000+03:002009-02-09T17:13:00.000+03:00А студенты вообще толковыми бывают?..Сидя в вузе у...А студенты вообще толковыми бывают?..<BR/><BR/>Сидя в вузе учишь обычно, что дают. А так, самой - сложно. Лично я - бестолковый студент. Хотя Хаскель поверхностно учить пыталась (и хотя бы ещё один студент пытался местами).<BR/>Но толковее как-то не становишься. Я разве что разучилась писать лабы на сиAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-29561155.post-37069741182544407382008-11-26T16:17:00.000+03:002008-11-26T16:17:00.000+03:00Думаю что через пару лет Ocaml будет активно попул...Думаю что через пару лет Ocaml будет активно популяризован Микрософтом. F# будет включен в комлект поставки с VS2010 а это значит что он будет mainstream...Yevgenyhttps://www.blogger.com/profile/12599700793953697307noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-8417844958931159462008-04-15T14:21:00.000+04:002008-04-15T14:21:00.000+04:00Там и не должно быть cmx, там должен получиться об...Там и не должно быть cmx, там должен получиться обычный сишный объектный файл.<BR/><BR/>см. <A HREF="http://caml.inria.fr/pub/docs/manual-ocaml/manual032.html" REL="nofollow">Interfacing C with Objective Caml</A>, 18.7.5 Embedding the Caml code in the C code.<BR/><BR/>Там все компилится с опцией -output-obj, а дальше пишешь обычную dll-ку из которой инициализируешь окемловскую прогу и вызываешь окемловские ф-ии.<BR/><BR/>Только вот геморрой все это. Гораздо удобнее наоборот, писать программу на более высокоуровневом языке, а из него вызывать менее высокоуровневый.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-32523808658928025022008-04-15T02:08:00.000+04:002008-04-15T02:08:00.000+04:00Спасибо. Присмотрюсь к Emacs (я пробовал использов...Спасибо. Присмотрюсь к Emacs (я пробовал использовать Eclipse).<BR/>Руководствуясь принципом Practice makes perfect пытаюсь использовать Ocaml в учебных проектах. Возник вопрос: как интегрировать его в проект, который пишется на нескольких языках? (Пока что я нашел только одну утилиту для генерации dll, но не успел еще проэксперементировать)<BR/>P.S. На самом деле, я уже экспериментировал, но у меня ничего не получилось: я не смог получить cmx (или cmxa) файл.Tramshttps://www.blogger.com/profile/15046075900703299209noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-30274773288836331982008-04-10T22:38:00.000+04:002008-04-10T22:38:00.000+04:00А про научиться думать функционально -- первая гла...А про научиться думать функционально -- первая глава SICP.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-6147519162533570432008-04-10T22:35:00.000+04:002008-04-10T22:35:00.000+04:00Я (да и многие другие) пользуюсь емаксом для всего...Я (да и многие другие) пользуюсь емаксом для всего (даже для проектов, которые потом компилятся или отлаживаются в VS).<BR/><BR/>Так что ничего кроме emacs + tuareg mode + ocamlbrowser посоветовать не могу.<BR/><BR/>Ну и всякие tuareg-овские shortcut-ы в емаксе:<BR/>C-c C-s -- запуск интерпретатора.<BR/>C-A-x -- пуляние выражения в интерпретатор.<BR/>C-c C-c -- компиляция.<BR/><BR/>Если компилить с опцией -dtypes, то в емаксе потом можно жать C-c C-t для получения информации о типе текущего выражения. Бывает полезно.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-31074949187951573802008-04-10T22:09:00.000+04:002008-04-10T22:09:00.000+04:00Здравствуйте. Уже пару месяцев присматриваюсь к фу...Здравствуйте. Уже пару месяцев присматриваюсь к функциональным языкам. В свободное от учебы и работы время задачки на Хаскеле решал. Хочу изучить Ocaml (собственно пост Ваш нашел таким образом), но меня смущает только одно.<BR/>Как у Ocalm обстоит дело с удобным developer enviroment? (Да, признаюсь, привык я к Visual Studio)<BR/>Я нашел только плагин к Eclipse, но он очень свеженький.... Посоветуейте-подскажите. Буду благодарен.<BR/><BR/>P.S. За ссылки о том, как научится думать функционально буду тоже благодарен. (Один рецепт я знаю: practice makes perfect)Tramshttps://www.blogger.com/profile/15046075900703299209noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-55356931157450038682008-03-24T06:14:00.000+03:002008-03-24T06:14:00.000+03:00Спасибо за консультацию. Может быть когда-нибудь и...Спасибо за консультацию. Может быть когда-нибудь и воспользуюсь Хаскелом (сам активно работаю со Смолтоком и SML). Хотя не очень понятно, зачем в языке программирования по умолчанию делать ленивые вычисления. Мне больше нравится подход SML, где ленивость включается только тогда, когда мне это действительно нужно (хотя, лично мне это ни разу не пригодилось).Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-29561155.post-18190491616787703602008-03-12T15:49:00.000+03:002008-03-12T15:49:00.000+03:00Мда. Вот они, ленивые вычисления. Stack overflow з...Мда. Вот они, ленивые вычисления. Stack overflow здесь возникает из-за большого невычисленного ленивого thunk-а.<BR/><BR/>Если написать sum (t+h) $! (s+(f t)*h), т.е. добавить $! -- форсированное вычисление аргумента, то все работает.<BR/><BR/>Стек в Хаскеле используется не совсем так как в обычных языках. Насколько я понимаю, всякие ленивые вычисления тоже его используют.<BR/><A HREF="http://thread.gmane.org/gmane.comp.lang.haskell.cafe/35755" REL="nofollow">тут</A> чуть подробнее.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-15353608610714459362008-03-12T05:44:00.000+03:002008-03-12T05:44:00.000+03:00Пример программы:module Main where f x = x*x + 2*x...Пример программы:<BR/><BR/>module Main where<BR/><BR/> f x = x*x + 2*x - 3<BR/><BR/> int f a b =<BR/> let<BR/> eps=0.00001<BR/> h=(b-a)*eps<BR/> sum t s =<BR/> if t<=b then<BR/> sum (t+h) (s+(f t)*h)<BR/> else<BR/> s<BR/> in sum a 0<BR/><BR/> main =<BR/> let<BR/> s=int f 1 4<BR/> in print s<BR/>Мне кажется, что замыкание sum написано по правилам хвостовой рекурсии.<BR/>На WinHugs появляется сообщение<BR/><B>ERROR - C stack overflow</B><BR/>На GHCi (про компилятор и говорить нечего) в Линуксе перестаёт работать сразу, стоит только число eps сделать ещё меньше (например, 0.000001). Сообщение об ошибке подобное.<BR/>Странно, о каком стеке в функциональном языке идёт речь? По-моему, сама виртуальная машина сделана неправильно.<BR/>Этот пример замечательно работает на Scheme, Erlang и SML (естественно, после переделок под правила синтаксиса соответсвующего языка)<BR/><BR/>RomanAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-29561155.post-22704170394291135312008-03-10T21:53:00.000+03:002008-03-10T21:53:00.000+03:00У хаскела есть tail-recursion. Может быть как-то н...У хаскела есть tail-recursion. Может быть как-то не так была записана ф-ия?<BR/><BR/>В хаскеле даже нет циклов. Любой рекурсивный алгоритм кодируется рекурсивными ф-иями и без tail-recursion тут никак.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-32206226186512783782008-03-10T08:12:00.000+03:002008-03-10T08:12:00.000+03:00В первые дни изучения Хаскела очень огорчило отсут...В первые дни изучения Хаскела очень огорчило отсутствие оптимизации хвостовой рекурсии. Ведь даже у недо-функционального Scheme она есть, а у такого гранда - нет!<BR/><BR/>RomanAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-29561155.post-1309615651346634772008-01-31T12:52:00.000+03:002008-01-31T12:52:00.000+03:00Для таких ситуация есть опциональные типы.В ocaml:...Для таких ситуация есть опциональные типы.<BR/>В ocaml:<BR/> type 'a option = Some 'a | None<BR/>В haskell:<BR/> data Maybe a = Just a | Nothing<BR/><BR/>Т.е. напрямую к a обратиться не получится, его надо извлекать (pattern-matching-ом).<BR/><BR/>А во всех остальных случаях (например открытие файла возвращает сразу файл, не завернутый в опциональный тип), т.к. NULL-а нет ф-я должна или вернуть нормальный ответ или бросить exception.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-4523294145829039902008-01-31T11:07:00.000+03:002008-01-31T11:07:00.000+03:00Вы меня заинтриговали и заинтересовали. Ознакомлюс...Вы меня заинтриговали и заинтересовали. Ознакомлюсь, пожалуй — никогда не знаешь, что может пригодиться. Когда-то вот на C# перешел успешно.<BR/>И всё же, не понял одну вещь — а каким же это образом они обходятся без null? Бывают же ситуации, когда объект может быть, а может его и не быть (да взять хотя бы nullable fields в базах данных). Дополнительный бульбулевский флажок что ли вводить?!Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-29561155.post-4319431813637710042007-05-09T15:12:00.000+04:002007-05-09T15:12:00.000+04:00Про риски — это хорошо. Всегда знал, чт...Про риски — это хорошо. Всегда знал, что самый большой риск в проекте на плюсах — это сами плюсы. Но тут в более общей форме.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-84834339822353535852007-05-09T12:11:00.000+04:002007-05-09T12:11:00.000+04:00lrrr> Будь я менеджером, я б лично по пальцам бил ...lrrr> <I>Будь я менеджером, я б лично по пальцам бил кувалдой тем кто хочет интенсивно использовать haskell в проекте</I><BR/><BR/>Не использовать новые технологии - тоже риски. Какие из них большие - это еще надо посмотреть.Alexhttps://www.blogger.com/profile/07484231209489648802noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-52498176368678290842007-04-23T16:24:00.000+04:002007-04-23T16:24:00.000+04:00Ммда, думал что хотя бы с .Net дела получше. Он же...Ммда, думал что хотя бы с .Net дела получше. Он же, вроде как, теперь моден.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-5683998448637135762007-04-23T09:53:00.000+04:002007-04-23T09:53:00.000+04:00Эх. Тоже посмотрел вчера резюме на dtf & job.ru, б...<I>Эх. Тоже посмотрел вчера резюме на dtf & job.ru, был в ужасе: все еще хуже чем год назад. Видимо придется поискать толкового студента и пущай учит окемл (или хаскелл). Хотя... где искать толкового студента?</I><BR/><BR/>Это тема отдельного разговора. Мы уже три месяца как ищем человека на .NET - полная засада. Такое ощущение, что много программистов уехало за рубеж (только у меня за последний год два знакомых уехали, один в Нью-Йорк, другой на ПМЖ в Австралию). Кроме того, профессия программиста стала менее привлекательна для стедентов. Из программистов многие уходят в менеджеры. Искать очень трудно! А студенты тоже молодцы, каждое третье резюме - готов управлять командой разработкиков и зарплата от $2500 нетто, и смех и грех ;)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-29561155.post-11894672513144136492007-04-22T17:11:00.000+04:002007-04-22T17:11:00.000+04:00Кстати, еще по поводу поиска специалиста. Вспомнил...Кстати, еще по поводу поиска специалиста. Вспомнилась статейка Джоэля Спольски, где он говорил, что хорошие специалисты очень редко меняют работу и по-этому их резюме крайне редко попадает вам на глаза. <BR/><BR/>:( грустноVladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-53500634911268875112007-04-22T17:07:00.000+04:002007-04-22T17:07:00.000+04:00На моих глазах тут уже полтора года ищут не то что...<I>На моих глазах тут уже полтора года ищут не то что хаскельщика -- просто нормального C++ девелопера, безрезультатно. Может, конечно, ищут плохо..</I><BR/><BR/>Эх. Тоже посмотрел вчера резюме на dtf & job.ru, был в ужасе: все еще хуже чем год назад. Видимо придется поискать толкового студента и пущай учит окемл (или хаскелл). Хотя... где искать толкового студента?<BR/><BR/>Короче, на днях, буду придумывать вакансию. Посмотрим, кто найдется.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-39083221063521178272007-04-22T14:11:00.000+04:002007-04-22T14:11:00.000+04:00>Кстати, поскольку программа будет написана быстре...><I>Кстати, поскольку программа будет написана быстрее, шансы того, что программиста переедет каток уменьшаются.</I><BR/>Хех это в геймдеве, где процесс разработки выглядит как "написал и забыл"(ну кроме MMOG),<BR/>во многих других областях глагол "писать программу" не имеет совершенной формы :)<BR/><BR/>><I>Мне кажется, что имеется достаточное количество людей, которые хотят писать на хаскеле. </I><BR/>На моих глазах тут уже полтора года ищут не то что хаскельщика -- просто нормального C++ девелопера, безрезультатно. Может, конечно, ищут плохо..lrrrhttps://www.blogger.com/profile/12742106367384624657noreply@blogger.comtag:blogger.com,1999:blog-29561155.post-31545816806424000652007-04-20T15:23:00.000+04:002007-04-20T15:23:00.000+04:00Еще по поводу замены. Мне иногда думается, что быс...Еще по поводу замены. Мне иногда думается, что быстрее человека научить писать на ocaml или haskell (или, на крайняк, python), чем ждать пока он что-то напишет на C++.Vladimir Shabanovhttps://www.blogger.com/profile/14322574042735481057noreply@blogger.com