LINUX.ORG.RU

Помогите господа маститые программеры


0

0

Понимаю, что такие темы вызывают флуд, флейм и холивар. Но все таки прошу сегодня помощи у больших программистов. Вот в чем дело - решил посвятить себя всегод функциональным языкам и соотвественно программироавнию на них. На глаза попались такие языки как Erlang и Haskell. Первый отмел по личным предпочтениям. Так же прочитал о LISP, в частности Scheme и Common LISP. Прошу вот ответить на что - что посоветуете изучать и какие книги при этом лучше брать (предпочтительно конечно русские, так как приятней, но инглиш понимю хорошо). Ну и конечно IDE для всего этого. Заранее благадарю.

Ответ на: комментарий от tailgunner

Чем же он у меня такой подозрительный?:(

lemoor88
() автор топика
Ответ на: комментарий от tailgunner

Ник у меня такой так как 88 мое счстливое число. А про ФЯ - так правда нужна помощь в начинании:) ВОт и решил спросить у знающего народа.

lemoor88
() автор топика

> Вот в чем дело - решил посвятить себя всегод функциональным языкам и соотвественно программироавнию на них.

Когда я слышу что кто-то говорит "я хочу программировать на языке X", я понимаю -- это πздец и не факт что лечится. ЯП -- это всего лишь инструмент для достижения целей, а не сама цель.

> Прошу вот ответить на что - что посоветуете изучать и какие книги при этом лучше брать

Для начала вот эту http://lib.rus.ec/b/32033

> предпочтительно конечно русские

"1C для профессионалов" -- твой потолок

a3
()

>решил посвятить себя всегод функциональным языкам

Лучше стихотворение посвяти, иль чего ещё.

>На глаза попались такие языки как Erlang и Haskell. Первый отмел по личным предпочтениям.

Название не понравилось?

>Прошу вот ответить на что - что посоветуете изучать и какие книги при этом лучше брать (предпочтительно конечно русские, так как приятней, но инглиш понимю хорошо).

Scheme и SICP (книга такая), чтобы понять что это вообще такое. Дальше должен сам понять.

>Ну и конечно IDE для всего этого.

Текстовый редактор.

И вообще учи Си.

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

> 1C

Кстати, это кирилическая "С" или латинская? :)

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

Оч помогло. Спасибо. Только вот, понимаете из-за таких как вы и сложно спрашивать советов. Про "1С" - очень остроумно. Где смеяться? Подскажите? А то как-то в зале тихо. Да и откуда вы знаете про умственные способности? Книги просто приятно читать на свое языке, чтобы не тратить лишнее время на перевод каких-то теренов, котроые не знаешь. А если серьездно - то язык это инструмент это "ясенхрен", но вот только какие-то инструменты изучаются проще, а какие-то сложнее. А вообще данный вопрос был адресован к тем, кто на ФЯ и "Лиспе" пишет, а явно не к императивщине.

lemoor88
() автор топика
Ответ на: комментарий от anonymous

И вообще учи Си. anonymous (*) (12.01.2009 4:19:02) Спасибо за советпо схеме. Си я знаю. Как и ЦеШарп. Потянуло так сказать на неизвестное.

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

Про "Эрланг" - нет, из-за прологоподобного синтаксиса и абсолютное мое хладнокровие к распределённым системам

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

> Где смеяться? Подскажите? А то как-то в зале тихо.

А на моих концертах и не смеются. Хочешь посмеяться -- сходи на концерт к Евгению Вагановичу, его зал хохочет, да.

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

>И вообще учи Си. anonymous (*) (12.01.2009 4:19:02) Спасибо за советпо схеме. Си я знаю. Как и ЦеШарп. Потянуло так сказать на неизвестное.

Ну тогда таки SICP почитай, пусть он и прост местами. Зато от лисповых скобочек страшно не будет. Русская версия есть в инете.

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

> И начался флуд и тролинг:(.

Чочо там про троллинг? :)

Дата регистрации: 12.01.2009 3:23:57

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

>И начался флуд и тролинг:(. Эх... Человек помощи попросил а вы:(

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

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

Да просто хотелось узнать сразу в каком направлении капать, а не набивать шишки самостоятельно

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

Haskell - идеальный инструмент для изучения ФП парадигмы. Приводит в порядок голову (либо выносит моск - по вкусу). Писать потом можно на чем угодно - хоть на F#.

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

(vote 'sicp + 1000000) Сам совсем недавно начал читать, пока дочитал до середины второй главы и книгой безумно доволен. Расширяет кругозор и приводит в порядок мозги.

anonymous
()

SICP, How to Design Programs - для начала

для Хаскеля - Real World Haskell - очень понятно написано, с массой практических примеров, без лишней теоретизации. Для теории можно почитать тот же Introduction to Functional Programming Харрисона

ott ★★★★★
()

SICP же.

>Ну и конечно IDE для всего этого


vi, emacs, Kate, етц

redgremlin ★★★★★
()

>решил посвятить себя всегод функциональным языкам и соотвественно программироавнию на них

Common Lisp не является функциональным языком. Scheme променяла многие фишки CL на ФП, не является чисто функциональным языком. Erlang - это такая библиотека под С для построения распределенных event-driven систем ;)). Haskell - чисто ФП язык, что с одной стороны дает много преимуществ, с другой стороны - готовься в уме считать комбинации нескольких монад (в реальных задачах). Ocaml похож на хаскель, но не является чисто функциональным языком.

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

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

После чего нужно понять, что функциональная композиция (.) и монадический bind (>>=) одно и то же, а все сложности, связанные с монадами - "расплата" за "контейнерный" тип. И как функция от многих аргументов сводится к "комбинаторам" тиа a 'op' b 'op' c ... == op a b c ...

Ну а после чего придет понимание, что ФП ради ФП не бывает.

Мой тебе совет, обрати внимание на разработку DSL (проблемно-ориентированнх языков), все что ты ищешь - там. Я тебе гарантирую.

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

Спасибо за советы. Может тогда еще объясните в чем приемущества Haskell перед Lisp или наоброт. Особенно было бы интересно спрактической точки зрения узнать.

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

>Спасибо за советы. Может тогда еще объясните в чем приемущества Haskell перед Lisp или наоброт. Особенно было бы интересно спрактической точки зрения узнать.

ответ читай тут:

http://www.amazon.co.uk/Haskell-Road-Logic-Maths-Programming/dp/0954300696/re...

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

>приемущества Haskell перед Lisp или наоброт.

Нет никаких преимуществ хаскеля перед лиспом. Их между собой сравнивать некорректно.

Хаскель - это максимальное приближение к математической нотации и обкатка инновационных вещей типа типизации Хиндли-Милнера и GADT.

Коммон Лисп - это метапрограммирование. Т.е. мы делаем программу, которая делает программу, которая ... На лиспе ты программируешь в терминах AST (абстрактного синтаксического дерева т.е. того, что получается когда выражение на языке проходят через парсер), грубо говря, любая лисп-форма принимает дерево символов и дерево символов же возвращает (по-другому дерево символов называется S-выражение или S-expression).

Это не значит что у лиспа нет синтаксиса. Он у него есть, притом программист может им очень гибко управлять через SET-MACRO-CHARACTER и SET-DISPATCH-MACRO-CHARACTER т.е. конструкции типа ' (quote) или #' (functional quote) не являются аттрибутами языка, как например операторные скобки в C, а просто стандартная настройка лисп-системы.

Что же скрывается за символом - дело третье. Т.е. выражение (foo bar baz) может значить вообще все что угодно и не обязательно каждый раз одинаково. Все определяется тем, как конкретный символ связан со своим "значением", это может быть переменная, функция, какой-то другой объект, плюс многое зависит от того в каком окружении это связывание произошло. Ну и мы можем скормить выражение самому лиспу c помощью EVAL, а можем сами разбирать, как в режиме интерпретации, так и в режиме компиляции, вообще хоть в машинный код.

В лиспе нет разницы между eDSL и DSL. Захотели - приделали "морду" к нашему eDSL'ю. Самый простой пример - скомпилировать регулярное выражение.

В лиспе нет разницы между режимом компиляции и исполнения. Готовая система обычно получает всю мощь языка, в т.ч. и REPL и встроенный дебаггер и т.д.

В принципе, CL, как язык общего назначения достаточно силен, один механизм condition'ов чего только стоит, не говоря уж про тот факт, что CL - "полностью объектно-ориентированный язык". Но использовать его таким образом все-равно что забивать гвозди микроскопом...

Дело в том, что для того, чтобы эффективно использовать лисп и хаскель, должны возникнуть задачи, для решений которых эти языки лучше всего подходят. Для хаскеля - это что-то вычислительное-параллельное. Для лиспа - это разработка DSL.

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

>Дело в том, что для того, чтобы эффективно использовать лисп и хаскель, должны возникнуть задачи, для решений которых эти языки лучше всего подходят. Для хаскеля - это что-то вычислительное-параллельное. Для лиспа - это разработка DSL.

писать DSL (и eDSL) на Haskell ненамного сложнее чем на CL. благо и Parsec есть, и квазиквотация с GHC > 6.9

это уж скорее вопрос стиля - кому-то ближе комбинаторы, кому-то всепоглощающее AST (так и хочется сказать "AST головного мозга")

ну и немножко сахарку (критика SICP):

http://kmmbvnr.livejournal.com/62197.html

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

>Отлично :) А есть учебник вроде SICP, но на чем-нибудь статически типизированном (Хаскель, *ML)?

есть The Craft Of Functional Programming, два варианта: Miranda и Haskell, но там скорее основы - т.е. первые две-три главы SICP'а

есть чудесная читаемая мною сейчас Haskell Road To Logic, Maths, And Programming (там выше давал ссылку на amazon) - там, судя по всему, уровень повыше SICP'овского

а такого чтобы один к одному - не встречал

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

Кузино и Мони примерно того же уровня, что и SICP, там Caml Light.

Лекции Харрисона - тоже caml light, уровень поглубже чем SICP, но охват тем сильно уже.

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

> это уж скорее вопрос стиля - кому-то ближе комбинаторы, кому-то всепоглощающее AST (так и хочется сказать "AST головного мозга")

Аллё! Ты какого сраёна?!? Это вопрос вовсе не только стиля, но и производительности. Правда, есть конечно же и Template Haskell, но это ровно то же самое "AST головного мозга".

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

>это уж скорее вопрос стиля - кому-то ближе комбинаторы, кому-то всепоглощающее AST

Комбинаторы хороши тем, что такую программу можно распараллеливать и результаты кешировать. Настоящие проблемы начинаются тогда, когда в стройную функциональную программу вторгается real^W world.

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

Как-то я попробовал в хаскеле написать обработчик ошибок и пришел к тому, что это нужно либо делать через монаду Error (она же Either), либо по эрланговскому принципу: при возникновении ошибки процесс обязан как можно быстрее сдохнуть. В принципе, можно еще через STM, но на осознание этой концепции меня не хватило.

Первый путь меня не вдохновил, т.к. приходится комбинировать Error, как минимум с IO, а второй путь пока неприемлем до тех пор пока виртуальную машину хаскеля не вылижут.

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

> Кузино и Мони примерно того же уровня, что и SICP

"The Functional Approach to Programming with Caml"?

> там Caml Light.

Caml снизу вверх совместим с Ocaml, так?

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

>Даже проще + есть еще и BNF Converter

Еще один DSL, а потом еще один DSL, чтобы разработать свой собственный DSL. Плавали, знаем :(

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

>Еще один DSL, а потом еще один DSL, чтобы разработать свой собственный DSL. Плавали, знаем :(

сначала хотел сказать, что всё намного проще

а потом вспомнил о том, что то, что ты написал - это и есть Ъ LISP-way. в чём же проблема-то с иерархией DSL'ей? :)

jtootf ★★★★★
()

>Прошу вот ответить на что - что посоветуете изучать и какие книги при этом лучше брать (предпочтительно конечно русские, так как приятней, но инглиш понимю хорошо).

Пистон. Python Essential Reference (3rd Edition)

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

> "The Functional Approach to Programming with Caml"?

Оно самое.

> Caml снизу вверх совместим с Ocaml, так?

Не совсем, синтаксис несколько отличается. Например, инфиксные функции по другому определяются, есть отличия в синтаксисе конструкторов ADT.

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

>Это вопрос вовсе не только стиля, но и производительности

производительности ЧЕГО? производительности ГДЕ? анонимус, ты какой-то очень невнятный сегодня

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

Ананимус, спасибо. Питон так же уже изучал в применении правда к вэбу. Язык хороший и очень удобный. Ничего против него не имею. Но не лежит к нему душа. Да и нет вокруг него такой культуры как вокруг Lisp, Haskell или того же (не к ночи будет упомянут, но заграницей очень даже живой) Smalltalк.

lemoor88
() автор топика
Ответ на: комментарий от jtootf

>проблема-то с иерархией DSL'ей? :)

Проблема в том, что это во-первых не "твой" DSL. Т.е. своя кривая обучения, свой кривой синтаксис и т.д. Во-вторых проблемы с расширяемостью. Понятно конечно, что это опен-сорс и все такое, но согласись, что eDSL расширяется намного проще и лучше, чем DSL. Причем в лиспе есть такая мега вещь как shadowing, как на уровне пакетов, так и на уровне лексического окружения... Баловство это все, конечно, но позволяет быть проще и гибче. И в третьих у eDSL _всегда_ одинаковый синтаксис (не нужно помнить, что DSL1 присваивание осуществляется с помощью := а в DSL2 с помощью = и т.п.)

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

>Да и нет вокруг него такой культуры как...

Тебе шашечки? Или ехать. Кстати, не знаю какая вокруг лиспа культура, а сообщество маленькое и неорганизованное, даже по сравнению с хаскелем. И документации мало. И реализаций нормальных (которые стоят килобаксы не в счет) мало.

Конечно, языки программирования нужно изучать... Но не основываясь на какой-то умозрительной "крутости".

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

>Питон так же уже изучал в применении правда к вэбу. Язык хороший и очень удобный. Ничего против него не имею. Но не лежит к нему душа. Да и нет вокруг него такой культуры как вокруг Lisp, Haskell или того же (не к ночи будет упомянут, но заграницей очень даже живой) Smalltalк.

>нет вокруг него такой культуры

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

Сам вот думаю схему попробовать, от осамл-а блевал, видимо, не осилил.

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

>схему попробовать

Не нужно, лучше CL. Не нужно гнаться за функциональщиной особенно если она в ущерб. Спецификация у схемы слишком тонкая: вот и городят зоопарки реализаций (благо не сложно). А уж про разлад в стане схемеров по поводу R6RS я вообще молчу.

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

> производительности ЧЕГО? производительности ГДЕ?

Производительность кода, написанного на этом твоём DSL.

На комбинаторах ты максимум тормозной интерпретатор сделаешь. На метапрограммировании над AST можешь хоть сразу машинный код из DSL генерить.

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

>Производительность кода, написанного на этом твоём DSL

бред. какая разница, какими методами я буду писать кодогенератор?

>На комбинаторах ты максимум тормозной интерпретатор сделаешь. На метапрограммировании над AST можешь хоть сразу машинный код из DSL генерить

ты не в теме. или, что тоже возможно, тролль

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

>Не нужно, лучше CL.

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

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

> бред. какая разница, какими методами я буду писать кодогенератор?

Разница такая, что с метапрограммированием никакого кодогенератора писать не надо вообще, оно само получится, бесплатно. Так же, как и с комбинаторами - но в последнем случае получается интерпретатор, а в первом - полноценный компилятор.

> ты не в теме

Возможно. Но тогда изволь показать пример, опровергающий мои утверждения.

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

Ну на счет писькамерчества среди лисперов не согласен. По крайней мере те, которых знаю я - заслуженно считаются оч хорошими программерами. А про надо или нет учить ФЯ- про это оч хорошо написано в сатье "Опасности обучения Java": http://local.joelonsoftware.com/wiki/Опасности_обучения_на_Java

lemoor88
() автор топика
Ответ на: комментарий от Macil

>Common Lisp не является функциональным языком
В каком месте?

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

>http://kmmbvnr.livejournal.com/62197.html
Херня какая, а.

Типа, в sicp нет паттерн матчинга, а заодно и ленивых вычислений(которые там есть по сути), поэтому sicp - говно, и схема заодно с ней, и сам лисп заодно со схемой.
Очередной тупоголовый фанатик хаскеля.

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