Home
Objective Caml
ocaml@conference.jabber.ru
Воскресенье, 23 августа 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[00:00:41] <gds> в текущей реализации есть возможность получить значение (если оно не указатель) либо указатель, но это штука плохая, не стоит так делать, кроме как для отладки хитрожопого кода.
[00:03:56] <604> ну да, я помню, какую радость несет неправильный указатель. но в том же паскаде без них нельзя обойтись для постоения списков или деревьев, приходилось мириться
[00:05:46] <gds> тут проще: если используешь православные модули (все, кроме парочки адовых), компилируемость программы практически гарантирует отсутствие её вылетов из-за работы с указателями.
а списки и деревья -- это няя (простите).
[00:06:28] <604> в плохом смысле "няя"?
[00:08:31] <gds> дело в том, что я не смотрел онемэ никогда, но словечко прицепилось. Смысл -- хороший. Всё классно со списками, деревьями, и вообще всем, что есть в окамле, и вдобавок с тем, что известный господин Окасаки изложил в мануале по неизменяемым структурам данных.
[00:11:12] <604> а, я думал, сокращение от другого, нецензурного, из которого всю нецензурную часть вырезали
[00:34:18] <sevenov> ояебу о_О
[00:34:21] <sevenov> 604, ты страшный человек
[00:43:46] <gds> sevenov: ну не все же фапают на няшечек, если ты про это :]
[00:45:30] <sevenov> gds, весь лог не читал, но от пхп-кода чуть, грубо говоря, не проблевался.
[00:47:03] <gds> php is the serious business.
[00:47:26] <sevenov> пхп глобальный и надежный, ага.
[00:48:50] <604> я и сам не в восторге
[00:50:42] <604> > 604, ты страшный человек
конечно. моей первое осмысленное слово после "папа" и "мама" было проклятье (нет, не само слово "проклятье")
[00:52:14] <gds> между прочим, я слышал, что передовая отрасль математики -- так называемые ТКУ ( http://community.livejournal.com/ban_topology/6427.html ) -- таки были реализованы в пхп, и весомое достижение.
[00:53:18] <604> >gds: php is the serious business.
достаточно серьёзный, чтобы в Лондоне, например, з/п за него начинались от 18000 фунтов в год
[00:53:47] <gds> 604: я что, прикалываюсь, что ли?!
[00:53:56] <604> :)
[01:08:46] <sevenov> за пистон в вашингтоне платят ~$60к в год.
[01:12:16] <gds> а у нас хватает 200$/1месяц для средней жизни и 500$/1месяц для приличной.
[01:13:35] <sevenov> gds, мне $1800 в притык :( Надо и квартиру покупать, машину. И вообще, жизнь обустраивать.
[01:14:36] <gds> "как паагодка в мааскве?" :]
[01:15:10] <sevenov> я не в маааске =)
[01:16:17] <sevenov> уехал из татарстана, где все было, но низкая з/п. Приехал туда, где ничего нет, но достаточно высокая з/п, но все равно денег нет. Замкнутый круг.
[01:20:15] <gds> ага, централизационный уроборос.
в +-1год от текущего момента как-то не очень хорошо затеивать классические дела. тут или выкидывать коленца, или отсиживаться (сосуще-ствовать). умнее ничего нет.
[01:21:24] <sevenov> gds, я ничего не понял о_О
[01:23:58] <604> > почитай про индуктивные или алгебраические типы данных.
почитал то, что было в википедии, просветления не почувствовал...
[01:24:53] <gds> sevenov: уроборос -- http://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B1%D0%BE%D1%80%D0%BE%D1%81 , классические дела -- то, что можно было замутить пару лет назад из мелкого или софтверного бизнеса.
[01:25:37] <sevenov> gds, я про коленца и отжиживания не понял.
[01:26:15] <gds> или оригинальную идею найти, или просто продолжать зарабатывать хоть какие-нибудь деньги.]
[01:26:47] <604> зато в учебнике добрался до pattern matching :)
[01:28:32] <sevenov> gds, а. Самое обидное, что идею, которые были пару лет назад, были просто идеями. А сейчас люди зарабатывают на них и т.п.
[01:29:14] <sevenov> в любом случае, работать на толстого дядьку - хуитень.
[01:29:22] <604> а что за идеи?
[01:30:09] <sevenov> 604, да любые. Просто обычно идея есть, но она рано появилась. Через пару лет она становится нужной и кто-то успевает реализовать ее первым.
[01:30:54] <604> ну хоть одну такую
[01:31:17] <gds> 604: есть у нас числа, мы из них строим выражения. 1 + 2, 3 * 4. Каждое выражение -- тоже в конце концов число. например, (1 + 2) / (3 * 4). Так вот, есть понятие "алгебра" -- там определяется множество значений и некоторые операции с их взаимосвязями. Всё строится по индукции: число -- это либо простое число, либо сложение двух чисел, либо умножение, либо отрицание (unary minus) одного числа. Вот и вся фигня. Если алгебра состоит из +, -, *, /, а числа, например, действительные (\in R), то имеем классическую алгебру. Если алгебра для каждого типа 'a является списоком значений с типом 'a и состоит либо из пустого списка, либо из результата добавления значения с типом 'a к списку со значениями типа 'a, то имеем списки.
[01:31:19] <sevenov> Уверен, что, допустим, о мобильный ваймаксе кто-то уже задумывался и понимал, что стационарный не нужен. А вот у скартела есть деньги, они смогли это сделать.
[01:32:33] <gds> sevenov: идеи есть у многих. развить их -- вот это да. Лично мне мешает то, что я вижу очевидный гемор при их продвижении. По инстанциям бегать влом, а иначе -- тот же дядька, только рядом-сбоку.
[01:34:44] <sevenov> gds, и я о том же. Очень сложно что-то поднять самому в наше время. Во времена поднятия мелкософта, гугла, мне кажется, было проще в том плане, что не найдется еще 10 таких же умников, которые увидят, что кто-то сделал, и _скопируют_ идею. А один из 10 уже при нужных ресурсах, с помощью которых можно поднять проект на ноги.
[01:34:50] <sevenov> *поставить на ноги
[01:36:47] <gds> 10 умников не надо -- достаточно одного билла гейтса, который спёр бейсик (или мсдос? не помню), и в качестве старта было ок.
[01:36:47] <604> gds: а, ну я видел что-то подобное в common lisp'e
[01:37:07] <sevenov> gds, сейчас найдется 10.
[01:37:40] <604> не надо билла вспоминать
[01:37:50] <sevenov> Прошлой осеньу не намного позже stackoverflow открыл itquest.ru, так через некоторое время вышли askdev и throwcatch.me o_O
[01:38:01] <604> у него мамаша в правлении межделмаша сидела
[01:38:48] <gds> sevenov: можно быть одним из 10. да вообще, бизнес это или "принесите мне деньги за то, что я хороший?".
[01:38:57] <604> я думаю, она не последнее слово сказала в вопросе выбора операционки для их персоналок
[01:39:15] <sevenov> 604, ты это мог видеть не только в common lisp'e, а и в школе, в классе 8-9.
[01:41:07] <604> ладно, всем пока
[01:41:25] 604 вышел(а) из комнаты: I'm happy Miranda IM user. Get it at http://miranda-im.org/.
[07:17:20] sevenov вышел(а) из комнаты
[07:17:31] sevenov вошёл(а) в комнату
[07:52:03] <sevenov> Ггг. http://stronciy.habrahabr.ru/blog/67782/#comment_1917683 -- та жа тема, про идею.
[09:33:28] john вошёл(а) в комнату
[12:24:16] ermine вышел(а) из комнаты
[12:29:17] ermine вошёл(а) в комнату
[12:49:57] ygrek вошёл(а) в комнату
[12:55:04] 604 вошёл(а) в комнату
[13:57:27] <604> блин, ща мозги закипят, помогите, пожалуйста
let rec fold_left f a = function
[] -> a
| tete :: queue -> fold_left f (f a tete) queue ;;
fold_left (+) 0 [8;4;10];;
почему эта функция описана как функция с двумя переменными (функция, начальное значение), а используется (и работает!) как функция с тремя (функция, начальное значение, список)?
[13:59:14] <gds> pattern matching изучал?
somefunc args = function ... ->
равносильно
somefunc args last_arg = match last_arg with ...
[14:00:21] <604> вот как раз про него читаю
[14:00:41] <gds> ну вот такой вот pattern matching по последнему аргументу.
[14:01:13] <gds> кстати, гадкая штука. в том числе потому, что сразу не видны аргументы функции.
[14:02:26] <604> а чуть ранее ты мне советовал его изучить ;)
[14:03:50] <gds> function .. | .. | .. -- гадость. а в целом pattern matching клёви
[14:05:42] <604> т.е. лучше явно писать match expr with ...|...|...?
[14:06:48] ygrek против называния function гадостью
[14:06:50] <gds> ага, а аргумент -- в описание функции. Так очевиднее, надёжнее.
в большинстве случаев лучше, но есть и исключения.
[14:08:56] <gds> ygrek: всегда считал, что имена значений -- тоже документация. А тут мы это имя скрываем.
[14:09:49] <604> gds: +1
[14:15:27] <604> о, еще одну мину нащупал собственной ногой
fold_left (*) 0 [8;4;10];;
(* - это начало комментария, что ли?
[14:17:45] <gds> мина классическая. пробелами разорви конструкцию до оленьей жопы: ( * )
[14:18:09] <604> :)
[14:21:54] <gds> кстати, посмотрите, какой трэшак творят наши кагбэ коллеги: http://community.livejournal.com/ru_declarative/86764.html
В посте -- тупой вариант, но вполне рабочий/расширяемый/поддерживаемый. В каменте lj\some41 -- очевидный, "точно как в определении". Остальное -- перл (в смысле языка программирования, а не жемчуга).
[14:23:14] <gds> а вся разгадка -- в желании показать, как ловко они могут дрочить вприсядку. Конечно, забавно посмотреть, но пользы от этого на практике не густо, а вред часто бывает, когда подобное разгребаешь.
[14:23:23] <ygrek> если аргумент у меня список - то иначе как l я его не назову
и function [] -> ...
| x::xs ->
вполне компрехенбельно
[14:26:32] <gds> будет понятно хотя бы, сколько аргументов кушает функция. а вдруг у тебя там после function [] идёт случай | [some_int :: other_ints] -> .. ? я бы назвал аргумент int_list или названиесущности_list.
кроме того, иногда полезна возможность этот аргумент взять и передать куда-нибудь в другую функцию. в случае " = match l with .." это вполне просто переписывается, в function -- придётся обе ветки искать-менять.
или чего-то не заметил?
[14:32:13] gds away
[15:13:22] <ygrek> насчёт поддерживаемости вообще:
опр. поддерживаемый код -- это тот который понятен большинству
если принять аксиому - "я д'Артаньян, все остальные - земляные червяки"
то имеем две взаимоисключающие цели - понятный всем код против короткий/удобный/высокоабстрактный код.
Усли ты можешь позволить себе научить тех кто будет поддерживать твой код - то можно писать коротким стилем. А вообще надо поддерживать баланс.
Вдобавок на разных уровнях этот аргумент про поддерживаемость превращается в "мы не будем писать на камле - его никто не знает, пиши на с++"
Вообще говоря любая абстрактность требует каких-то дополнительных знаний от читающего.
Сходу понятен только код в котором всё подробно описано - много слов и все детали наружу. Читать такое просто, писать такое грустно.
Примерно как-то так.
[15:19:53] <604> а что мешает короткий/удобный/высокоабстрактный код щедро разбавить комментариями? их тоже "грустно писать"?
[15:21:58] <ygrek> ты ведь не будешь описывать комментарием "hello world"?
[15:22:09] <ygrek> также я не буду описывать fold_left
[15:22:39] <ygrek> если для меня это каждодневное обычное средство - зачем его описывать
[15:23:15] <ygrek> но для кого-то это будет непонятно и неподдерживаемо
[15:24:10] <ygrek> обычное явление - разница в уровнях. вариантов решения два - либо учиться, либо запрещать.
[15:26:41] <604> fold_left же в стандартной поставке идёт? зачем ее описывать? а для своих функций неплохо бы указать, что на входе, что функция делает, что на выходе
[15:26:54] <ygrek> конечно надо взвесить - стоит ли учиться, насколько полезно. А как это оценить пока не попробуешь. Зато запретить обычно проще.
[15:27:09] ygrek away
[15:47:55] sevenov вышел(а) из комнаты
[16:11:07] ermine опять страдает от убогости Set/Map?list: хочется условный фолд/итер, чтобы крутить цикл, пока условие позволяет
[16:56:09] <gds> ermine: некто dream.designer вроде делал что-то вроде лиспового loop, синтаксическое расширение. Однако, если ты extlib не хочешь брать, то и его не захочешь, и будешь мучаться.
[16:59:30] <ermine> gds: я решила тут все поменять нафиг на treap
[16:59:47] <ermine> бинатрный кустарник с рандомным приоритетом
[17:00:10] <ermine> и собственная кухня для апи
[17:18:48] <gds> ygrek: в контексте поддержки я даже имел ввиду себя и свой древний код (в этом случае брать плюсы или обучать кого-либо -- не проще). Бывает, смотришь на код, и подобно счётчику Гейгера в голове щёлкают "wtf?", "WTF??!!!" разной громкости. А бывает, что код можно написать так, чтобы вникнуть в него, поддерживать его, изменять его можно даже когда ты с жуткого бодуна, а на голове сидит самка бухгалтера со здоровым клювом.
[17:20:53] <gds> высокоуровневый код -- это реально круто. Весьма понятный код пишут на coq (но не на тактиках), agda, и там не скажешь, что он слишком низкоуровневый или слишком большой по отношению код/мысли.
[19:07:55] john вышел(а) из комнаты
[19:08:57] john вошёл(а) в комнату
[20:25:16] lelf вошёл(а) в комнату
[21:23:31] <ermine> а какие принципальные разницы между двумя способами создания функторов - со словом functor и без него?
[21:25:59] ermine потыкала спичкой gds
[21:49:34] ygrek изображая gds : никаких, это синтаксический сахар
[21:53:13] <ermine> ну и нафига он нужен-то
[21:53:28] <ermine> он - это не gds, а сахар
[21:54:10] <ygrek> с сахаром не надо писать слово functor
[21:55:01] <ygrek> а functor это наверное из SML?
[21:56:29] <ermine> м
[21:56:34] <ermine> хм
[21:57:26] ermine меняет functor обратно на старый код
[23:21:32] <gds> оно кстати не стесняется показывать недоприменённый к функтору аргумент в стиле "значение имеет тип functor (Arg : sig ... end), но использовано с типом kva -> kuku".
сахар, но малоинтересный: обычно пофиг, как именно, из-за малого количества этих функторов.
[23:22:02] gds спал, почти спит, и уж точно будет спать. почти как ленин.
[23:22:45] sceptic вышел(а) из комнаты
[23:44:54] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!