Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 29 мая 2012< ^ >
f[x] установил(а) тему: OCaml / ОКамл / Камль -- http://caml.inria.fr | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом
Конфигурация комнаты
Участники комнаты

GMT+4
[00:06:20] Savik вошёл(а) в комнату
[00:07:02] Savik вышел(а) из комнаты: QIP 2012: Спокойное общение
[00:13:09] Savik вошёл(а) в комнату
[00:21:39] Kakadu вышел(а) из комнаты
[00:27:38] tilarids вошёл(а) в комнату
[00:31:53] gds вышел(а) из комнаты
[00:35:17] ermine вышел(а) из комнаты
[00:48:05] Typhon вошёл(а) в комнату
[01:16:56] ftrvxmtrx вошёл(а) в комнату
[01:32:54] bobry вышел(а) из комнаты
[01:43:20] Savik вышел(а) из комнаты: Disconnected: connection closed
[02:30:23] Typhon вышел(а) из комнаты
[03:43:03] letrec вошёл(а) в комнату
[05:00:52] letrec вышел(а) из комнаты
[07:44:11] gds вошёл(а) в комнату
[10:00:55] bobry вошёл(а) в комнату
[10:07:31] tilarids вышел(а) из комнаты: Computer went to sleep
[10:11:52] bobry вышел(а) из комнаты
[10:58:17] ermine вошёл(а) в комнату
[10:59:28] ftrvxmtrx вышел(а) из комнаты
[12:02:16] Vinzent вошёл(а) в комнату
[12:05:25] Kakadu вошёл(а) в комнату
[12:24:12] ftrvxmtrx вошёл(а) в комнату
[12:37:49] <Vinzent> Добрый день. Решил вот поиграться с окмалом, посему возникла пара вопросов: во-первых, как настроить автодополнение?
[12:38:36] <f[x]> автодополнение где?
[12:38:44] <ftrvxmtrx> автодополнение чего?
[12:38:55] <gds> автодополнение зачем?
[12:39:08] <Vinzent> %) в туарег-моде
[12:39:50] <Vinzent> да, тут есть что-то вроде докстрингов? или нужно подключать внешние доки
[12:40:27] <ftrvxmtrx> man String работает
[12:40:34] <ftrvxmtrx> значит, наверное, есть что-то
[12:40:58] <ftrvxmtrx> а для автодополнения либо otags, либо typerex какой-нить
[12:41:31] <gds> докстринги -- как я понял, решается через ocamldoc-комментарии и typerex, который по C-o d (вроде) выдаёт тип и документацию по данному значению.
[12:42:22] <Vinzent> ага, спасибо
[12:42:37] <Vinzent> может заодно скинете свой конфиг?
[12:46:27] <gds> http://paste.in.ua/4291/ , но то, что после "; typerex:", лучше не копипастить, лучше взять свежий typerex, поставить его, и он скажет, что надо дописать в .emacs.  но привёл для полноты, и вдруг понравится отключение раскраски исходников.
[12:46:51] tilarids вошёл(а) в комнату
[12:47:13] <Vinzent> сенкс, гляну
[12:53:09] <gds> кстати, кто-нибудь свежий typerex смотрел?  в не самом свежем автодополнение не смог настроить.
[13:20:50] dzhon вошёл(а) в комнату
[13:33:39] Sun][ вошёл(а) в комнату
[13:36:04] dzhon вышел(а) из комнаты: Replaced by new connection
[13:36:08] dzhon вошёл(а) в комнату
[13:45:42] tilarids вышел(а) из комнаты: Replaced by new connection
[13:45:42] tilarids вошёл(а) в комнату
[13:48:04] <Vinzent> Еще пара вопросов:
1) Ни у кого случаем не завалялось костыля, вставляющего ;; в репле автоматом?
2) Считается ли постоянное использование let rec плохим стилем?
[13:51:21] <gds> 1 -- не нужно, так как бывают многострочные выражения.
2 -- дело не в стиле, а в семантике.  Если есть уверенность, что функция или значение name будет определяться так, что "name" внутри его определения должно ссылаться на себя же, то можно везде let rec.
[13:53:41] <Vinzent> 1 - помимо RET есть же и M-RET
2 - а на что еще оно может ссылаться?
[13:57:05] <f[x]> let x = 2
let x = x + x
let rec x = x + x
[13:57:08] <gds> 2 -- на уже определённую привязку name
[13:58:28] <Vinzent> это тоже понятно, но в топ-левеле такое использовать вроде бы незачем
[14:17:20] <klapaucius> У меня есть такой костыль. Но это windows-приложение, так что никому не пригодится.
[14:24:30] <Vinzent> кстати, а это так принято - писать if foo then bar на одной строке?
[14:28:12] <klapaucius> Если вы работаете в команде - у нее есть соглашение по оформлению кода, в котором написано как нужно оформлять if. Если же соглашения нет - можете писать как вам удобнее читать.
[14:31:26] <Vinzent> ок. Просто как-то бросилось в глаза
[14:44:19] <Kakadu> вброс: нужен ли окамль с бекэгдом LLVM? чтобы супер тредовость и мурсощик были хорошие
[14:44:29] <Kakadu> бэкэндом*
[14:46:23] Typhon вошёл(а) в комнату
[14:46:46] dzhon вышел(а) из комнаты: Replaced by new connection
[14:46:46] dzhon вошёл(а) в комнату
[14:50:03] <klapaucius> Kakadu: Чтоб супертредовость и мусорщик хороший - это надо нормальный рантайм писать. LLVM тут никак не поможет.
[14:51:01] komar вышел(а) из комнаты: Replaced by new connection
[14:51:01] <klapaucius> Это, правда не означает, что "окамль с бекэгдом LLVM" не нужен.
[14:51:02] komar вошёл(а) в комнату
[14:55:18] dzhon вышел(а) из комнаты
[14:56:03] <Kakadu> klapaucius: вроде в ллвм есть так называемые контексты, которые вроде для многопоточности нужны
[14:58:46] <klapaucius> Kakadu: Я же не говорю, что сделать нормальный рантайм при LLVM-бэкенде нельзя. Я говорю, что готового там ничего нет. ГЦ придется самому писать. А это серьезная задача. Именно поэтому у фя обычно проблемы с СМП, не смотря на всякие мифы о том, что у фя с смп наоборот все хорошо.
[15:05:10] <Kakadu> klapaucius: > LLVM's intermediate representation provides garbage collection intrinsics that offer support for a broad class of collector models.
    semi-space collectors
    mark-sweep collectors
    generational collectors
    reference counting
    incremental collectors
    concurrent collectors
    cooperative collectors
[15:06:52] <klapaucius> И?
[15:21:22] <Kakadu> klapaucius: >  ГЦ придется самому писать.
[15:21:52] <Kakadu> Sun][: да, кстати, ты чтонить делаешь там или раздолбайничаешь?
[15:22:29] <klapaucius> Ну так самому и придется. ЛЛВМ предоставляет только минимальную инфраструктуру для этого.
[15:22:50] <Kakadu> klapaucius: лучше чем ничего
[15:22:58] <Sun][> Kakadu: я сейчас занимаюсь реализацией желания сходить в отпуск
[15:23:13] <Kakadu> вы, кстати, так рассуждаете, что складывается ощущение, что вы прошарены в ллвм
[15:23:26] <Kakadu> Sun][: устал от кути?
[15:23:50] <Kakadu> кстати, bobry таки написал то что хотел на js_of_ocaml?
[15:24:24] <Sun][> Kakadu: нет, просто хочу в отпуск =) а на работе куча дел, вот и с утра до вечера работаю, что бы до отпуска все сделать -_-
[15:24:28] <klapaucius> Это, конечно, иллюзия. Я ни в чем как следует не разбираюсь, зато имею суждение по любому вопросу.
[15:44:58] akovbovich вышел(а) из комнаты
[15:53:23] <Vinzent> Я что-то никак не могу понять, где логика в этих ; и ,
[15:56:47] <gds> потому что лучше revised syntax использовать.
а так -- "a ; b" для "вычислить a, проигнорировать, вычислить b".  "a, b" -- конструирование тупла.
[15:58:55] <Vinzent> revised syntax это что, форк?
[15:59:05] <f[x]> gds: я не могу закрывать глаза на такое неприкрытое совращение малолетних
[15:59:48] <gds> revised syntax -- это либо
#use "topfind";;
#camlp4r;;
либо тег camlp4r в _tags
[15:59:49] <Kakadu> Vinzent: в REPL надо ставить после фразы ;;
При компиляции стандартным сиснтаксисом пишется, например, print_endline "hello";; но лучще писать let () = print_endline "hallo" и ;; вообще не использовать
[16:00:30] <Kakadu> Vinzent: gds говорит про подключаемое расширения синтаксиса языка. Такого в обычных языках нет
[16:00:41] <gds> f[x]: ну а что ещё делать.  Хочешь, чтобы человек изучал на несколько грамматических правил больше и матерился при попытке скомпилировать что-то с match, списками, туплами?
[16:01:10] <f[x]> почему ему должно быть проще чем мне?!!!
[16:01:32] <Kakadu> Vinzent: если ты после х-я, то revised тебе сожет понравиться
[16:04:47] <gds> f[x]: ТОМУ ЩО!!1111
[16:04:57] <Vinzent> Kakadu: нет, я не после х-я :) let () = выглядит конечно странно, мягко говоря. В общем наверное пока не буду заморачиваться с этим revised syntax, только запутаюсь.
[16:05:35] <Vinzent> Такого в обычных языках нет -- а окамл что, какой-то особый язык? :)
[16:06:10] <Kakadu> Vinzent: я на втором курсе узнал про окамль и пообещал больше не писать код на яве, который не будет влезать в экран
[16:06:32] <Kakadu> Правда это несовсем напрямую свзяано, но это правда
[16:06:33] <Kakadu> )
[16:06:55] <Vinzent> Kakadu: и как, удалось сдержать обещание? :)
[16:07:10] <gds> про let () -- https://github.com/camlunity/kamlo_wiki/blob/master/OCamlFAQ.md , вопрос "В чём различие между let _ = .. и let () = ..?" почитать можно ещё на досуге, не особо важно, но пригодится.
[16:07:46] <f[x]> > а окамл что, какой-то особый язык?
правильно говорить - "илитный"
[16:08:16] <Vinzent> f[x]: да какой он илитный, у него даже макросов нет :)
[16:08:27] <Kakadu> я понял, он лиспер
[16:08:54] <f[x]> Vinzent: расскажи мне
[16:08:58] <ftrvxmtrx> ога, и smp нету
[16:09:24] <gds> а зачем макросы?  правильные пацаны берут metaocaml или coq для макросов.
[16:09:38] <gds> * для реализации того, что делают макросами.
[16:12:18] <gds> а, ну и camlp4, конечно.  цели/возможности разные у всех этих инструментов.
[16:12:55] <Vinzent> gds: вот видишь - целых 3 штуки, все разные, да еще и метачто-то
[16:13:19] <Vinzent> а тут - сидишь себе, списки обрабатываешь - и все!
[16:13:43] <gds> ну правильно, цели разные.  Нет задачи "сделать макросы" -- абстрактная хрень это, есть задача "решить определённую задачу".
[16:14:18] <Vinzent> А если сделать макросы, то все эти "определенные задачи" будут решаться проще и одним инструментом.
[16:16:09] <gds> нет.  Задачи, которые решаются с помощью coq, точно не решаются макросами.  Для решения задач, решаемых camlp4, нужны типизированные макросы, чото не видел особо таких.  Для решения задач, решаемых metaocaml, нужны типизированные макросы, компилирующиеся jit.
[16:17:13] <Vinzent> В немерле кажется типизированные макросы
[16:17:22] <Vinzent> Вот только зачем оно надо я честно говоря не понимаю
[16:17:22] <f[x]> неме-что?
[16:17:29] <Kakadu> f[x]: Туьукду
[16:17:36] <Kakadu> f[x]: Nemerle
[16:17:39] <Vinzent> f[x]: оно на рсдн кажись очень модно
[16:17:48] <gds> и где этот немерле.
ах да, на рсдн.
[16:18:09] <f[x]> судя по всему в пси тег irony поломался
[16:18:21] <gds> ну ок, немерле покрывает camlp4.
[16:18:51] <Vinzent> А зачем вообще нужны типизированные макросы?
[16:19:44] <gds> затем же, зачем и типизация в целом.
[16:20:14] <Vinzent> От следующего вопроса я, пожалуй, воздержусь. :)
[16:20:50] <gds> да ладно, отвечу.  Для получения и минимальных гарантий корректности кода, чо.
[16:22:25] <Kakadu> Vinzent: понимаешь, фраза "компилится --- значит работает как ожидалось" в камле ближе к правде чем во многих других языках
[16:22:42] <Vinzent> Kakadu: ближе, да не намного.
[16:23:47] <Kakadu> Vinzent: > ближе, да не намного.
Из этой фразы следует, что ты знаешь язык OCaml. а отсюда вопрос: нафига задавать дурацекие вопросы?
[16:24:44] <Vinzent> Kakadu: просто я никогда не видел вживую типизированных макросов, вот мне и интересно, что это за зверь такой. Там же типов - кот наплакал, чего их контролировать?
[16:26:01] <gds> у всех разные области кодинга.  У кого-то типов побольше, чем котовьих слёз.
[16:26:41] <f[x]> ну если говорить про убогие макросистемы оперирующие сырыми кусками текста - то да
[16:27:04] Vinzent не знает ни одной макросистемы, оперирующей кусками текста
[16:27:08] <gds> да даже лисповое atom/sexpr -- там тоже нечего контролировать.
[16:27:28] <gds> m4
[16:27:41] <gds> и cpp с некой натяжкой.
[16:28:00] <f[x]> всё так
[16:28:52] <Vinzent> Ну это макросистемой не назовешь.
[16:29:49] <gds> хз хз, у меня первые версии одной широко-известной в узких кругах библиотеки были написаны на cpp с лёгкими вкраплениями C.
[16:30:38] <f[x]> так огласите же имя наконец. самой великой и идеальной макросистемы, коя затмевает собой горизонты
[16:31:26] <Vinzent> Ну обычные лисповые макросы. Куда там типы всунуть?
[16:32:38] <gds> лисп не нужен, лисповые макросы как следствие.
[16:32:44] <f[x]> это убожество мы не рассматриваем
[16:33:33] f[x] думал интересно будет, ушёл работать
[16:35:35] <Vinzent> Ну, в общем-то это убожество мощнее окемла, например. Ну да не суть - я ведь просто спросил про типы в макрах, из любопытства :(
[16:36:17] <Kakadu> Vinzent: нифига не мощнее. Оба языка полны по Тьюрингу
[16:37:06] <gds> особенно мощь лиспа чувствуется при тестировании/отладке программ.
[16:37:28] <Vinzent> Kakadu: полны, и что?
[16:37:40] <Vinzent> gds: юнит-тесты.
[16:38:19] <gds> в окамле редко нужны.  и уж точно не в таких количествах.
[16:38:35] <Kakadu> Vinzent: полнота означает, что на нём можно написать что угодно
[16:39:10] <f[x]> мой ассемблер мощнее твоего лиспа
[16:39:36] <Kakadu> Vinzent: юнит-тесты почти не нужны. Мы со своими типами хотим это возложить на компилятор. gds даже умеет теоритически доказывать, что функции делают то, что от них хотят
[16:41:02] <gds> ну, теоретически доказывать -- это в coq, но из него экстрактится окамловский код.
[16:43:19] <Vinzent> Kakadu: мне надо было прибавить единицу, а я вычел. Как мне типы помогут отловить ошибку?
[16:43:49] <f[x]> и вообще оффтопик развели, понятно что камло лучше всех языков по любому из параметров в π раз
[16:43:59] <Vinzent> Kakadu: мощность - это, типа, количество фич. Чтобы написать что-то полезное на асме, ты сперва напишешь на нем высокоуровневый ЯП, поэтому последний мощнее асма.
[16:44:03] <gds> логические ошибки -- только доказательствами.  кроме них есть большая куча других ошибок.
[16:44:16] <Vinzent> gds: например?
[16:44:23] <gds> например -- что?
[16:44:24] <f[x]> вау, и что из этого аргумента следует?
[16:44:32] <klapaucius> Обычно лисперы обосновывают ненужность типов делением на ноль.
[16:44:48] <Vinzent> gds: пример приведи.
[16:44:54] <f[x]> раз я не видел зелёных человечков то их не существует что-ли??
[16:45:50] <gds> Vinzent: пример ошибки, которая не является логической, но от которой помогает типизация?  Любая ошибка типизации.
[16:46:07] <gds> klapaucius: Definition div (a b : nat) (_ : b <> 0) : nat.  -- примерно этим?
[16:46:11] <Vinzent> klapaucius: я ничего не говорил про ненужность и вообще стараюсь вести дискуссию в позитивном ключе, это вы тут троллите и кричите про ненужность :) Просто типы, очевидно, не панацея.
[16:46:41] <f[x]> Vinzent: ты вообще что хочешь в этой конфе услышать?
[16:46:44] <f[x]> что типы не нужны?
[16:46:47] <gds> типы -- не панацея, а хороший инструмент для протаскивания минимальных гарантий корректности по всему коду, централизованно и систематично.
[16:46:48] <Vinzent> gds: ну конкретный пример приведи, что за ошибка типизации, от которой в динамических языках боль и мучение, а тут - оп! и готово.
[16:46:51] <Kakadu> Vinzent: а ты попробуй кок, попробуй камло. Напиши на них программы. а потом будешь троллить нас
[16:46:55] <f[x]> задавай вопросы по топику
[16:47:10] <Kakadu> Vinzent: в динамических языках нет ошибок типизации))
[16:47:10] <gds> Vinzent: сложение строки и числа.  см. также "WAT".
[16:47:12] <f[x]> 0 + "0"
[16:47:28] <klapaucius> Например, когда измученный эмелем программист использует в списке разделитель , как в sml и haskell, а не ; - тайпчекер укажет на ошибку.
[16:47:29] <Vinzent> f[x]: я и задавал по топику. Это ты тут кричишь, что лисп убог :) Не надо с больной головы на здоровую перекладывать.
[16:47:49] <Vinzent> Kakadu: вот! Значит динамические языки лучше, так как в них меньше ощибок! :))
[16:48:08] <f[x]> Vinzent: мне можно
[16:48:12] <klapaucius> gds: Более слабые системы типов тоже не бесполезны.
[16:48:39] <Kakadu> Vinzent: если программист привык мыслить в терминах "ну давайте сложим быков с кошками и получим в результате число меньше трех" то может и норм
[16:48:45] <Vinzent> 0 + "0" выведет ошибку, так как нельзя складывать строку с числом. Где тут боль?
[16:48:55] <gds> klapaucius: я понимаю, но аргумент лисперов ломается о такой div.
[16:48:58] <f[x]> когда он эту ошибку выведет?
[16:49:40] <klapaucius> f[x]: у пользователя, очевидно же.
[16:49:41] <Vinzent> f[x]: при запуске тестов, которые запускаются после каждого изменения в программе. То есть можно считать, что при компиляции.
[16:50:05] f[x] уполз писать 100% тест-coverage
[16:50:10] <f[x]> вернусь через 100 лет
[16:50:18] <Vinzent> А он и не требуется.
[16:50:23] <gds> то есть, сначала писать код, а на каждый написанный кусок кода лепить тесты?  Не проще ли с тем же успехом писать код и лепить доказательство, как в coq.
[16:50:35] <gds> тоже примерно равные объёмы кода и {тестов,доказательств}.
[16:50:38] <Vinzent> gds: нет; сперва тесты, а потом код.
[16:50:52] <Vinzent> Зачем нужны доказательства в прикладном софте я не очень понимаю.
[16:50:57] <f[x]> Vinzent: а говорят можно дить и по другому. но врут наверное.
[16:50:58] <gds> а хеш-функцию сперва подразумеваем константой?
[16:51:01] <f[x]> * жить
[16:51:30] f[x] точно afk
[16:51:38] <Vinzent> f[x]: как? Чтобы не при компиляции ошибка выскакивала, а еще до того, как ты плохой код напишешь? :)
[16:51:53] <f[x]> сколько можно же. у лисперов какой-то повышенный флеймогенез
[16:52:11] <f[x]> Vinzent: в голове! мыслекомпилятор!!
[16:52:48] <Vinzent> Лучше бы взяли и по-человечески объяснили.
[16:55:33] <gds> описываем модуль, содержащий типы, достаточные для выражения предметной области, и соответствующие значения.  описываем требуемую от него функциональность.  опционально описываем интерфейс модуля.  используем в продакшоне.  в большой вероятностью сработает.  при желании и/или при обнаружении бага -- отладка (и уточнение типов при возможности) и опционально тесты.
[16:56:57] <f[x]> компилятор ограничивает множество программ которых ты пишешь. так сложилось что это множество имеет достаточное для практических применений пересечение с множеством полезных программ. борьба давно идёт не за мощность выразительных средств, а за разумность ограничений.
[16:58:18] <Kakadu> Vinzent: > Зачем нужны доказательства в прикладном софте я не очень понимаю.
Доказательсва нужны для проверки корректности. Очевидно, что доказательства можщнее юнит тестов.  Итого имеет меньше ошибок. ????? Профит
[16:59:28] <gds> кстати да, не обязательно же всё доказывать.  Но доказанное имеет, как бы сказать, доказанную корректность.  Тесты могут пропустить что-то.
[17:01:40] <Vinzent> gds: но в типах ведь всего не выразишь. Вот это число у меня должно быть меньше ста - тип для него создавать?
[17:02:04] letrec вошёл(а) в комнату
[17:02:06] <Vinzent> Kakadu: ты что, программы для ядерных реакторов пишешь?
[17:03:18] <Kakadu> Т.е. твоя логика такая: делаем отвратные языки программирования, делаем программистов идиотов. Ворганим кучу былдо кода. А за счет того что он всё время нихрена не работает требуем больше денег на новые программы и на этом делаем бизнес?
[17:03:23] <klapaucius> Да причем тут ядерные реакторы. Даже простая система типов выявляет массу мелких и глупых ошибок. При этом никакие тесты писать не надо (которые никто и не хочет писать)
[17:04:06] <Vinzent> Обычно же не требуется 100-процентная гарантия отсутствия ошибок. Нужно, чтобы код работал и легко поддерживался (да и если 100% нужны, то, как показывает практика, это достигается не типами, а менеджментом)
[17:04:18] <Vinzent> Kakadu: нет.
[17:04:19] <gds> Vinzent: если брать окамл -- можно и тип создать, с проверкой при внесении числа в него (для раннего обнаружения ошибок), чтобы потом, при использовании, была гарантия "меньше ста".  (для любого предиката это можно сделать, см. функторы).  Если брать coq -- { x : int | x < 100 }, вот и тип.
[17:04:44] <f[x]> klapaucius <- what he says
[17:05:31] <Vinzent> klapaucius: почему не хочет? Тесты - это, во-первых, спецификация, а во-вторых - средство разработки, оказывающее благотворное влияние на дизайн. А глупые ошибки и без типов ловятся за 2 минуты.
[17:05:57] <Vinzent> gds: дык все-таки "можно" или "да, так и надо делать"?
[17:06:11] <Kakadu> Vinzent: >  не типами, а менеджментом)
ну вот ты как мой препод из универа. Типа надо не языки развивать а быдло кодерами управлять.  Как сказал когда то gds: если компания может себе позволить 50 макак былокодеров и 100 бабуинов-тестеров, то пускай так и работает
[17:07:22] <klapaucius> Vinzent: в идеальном мире - возможно. В реальном мире - тесты это куча хрупкого говнокода рушащаяся при любом изменении изувеченного ради облегчения тестирования дизайна. А глупые ошибки обнаруживает счастливый пользователь на своей машине и через 2 года.
[17:07:22] <gds> Vinzent: зависит от того, что требуется на выходе.  Иногда "можно", иногда "не нужно", иногда "обязательно".  Какие гарантии нужны -- те и предоставляешь типами.
[17:07:28] <Vinzent> Kakadu: я вообще-то говорил не об этом, а о конторах, делающих софт для шаттлов (помните, была про них статья?) и подобных вещей. Вряд ли там сидят макаки и быдлокодеры. Языки конечно надо развивать.
[17:08:22] <Vinzent> klapaucius: ну тогда все понятно - ты не умеешь писать тесты :) Если вместо тестов у кого-то говнокод, то это его личные проблемы, согласись? На окемле вон тоже можно говнокод накидать, и никакие типы не помогут.
[17:08:45] <f[x]> failed
[17:09:22] <f[x]> мужики пишут на фортране. не умеешь писать на фортране - не мужик.
[17:09:26] <klapaucius> Софт для шатла написан быдлокодерами. во-первых, это самый дорогой софт на строчку кода по эту сторону млечного пути, а вовторы вся система шатла падает при смене года, поэтому шатл теряет целое окно запуска к мкс каждый год.
[17:09:51] <Vinzent> gds: понятно. При такой точке зрения разумнее всего выглядит опциональная типизация. Я наверное тут соглашусь с тобой.
[17:09:56] <klapaucius> Vinzent: в идеальном мире тесты не умеет писать ваш оппонент. в реальном - никто.
[17:10:29] <Vinzent> klapaucius: какой-то странный у тебя мир :)
[17:10:56] <f[x]> теперь понятно почему я софта на лиспе не вижу - ещё тесты не написаны
[17:11:19] <klapaucius> Vinzent: В идеальном мире странный мир у вашего оппонента. в реальном мире - вы оторваны от реальности.
[17:11:30] <Kakadu> Vinzent: http://ivan-gandhi.livejournal.com/1985413.html тесты в реальном мире
[17:11:40] <Vinzent> f[x]: твиттер видел?
[17:11:56] <f[x]> видел кита, да
[17:12:24] <Vinzent> Kakadu: что-то у меня не открывается...
[17:13:37] <Vinzent> Судя по урл, он хочет, чтобы я на нем зарегестрировался. О чем (вкратце) пост?
[17:14:49] <gds> подзамочное оно, не откроется.  Пост о том, что поменяли код, поменяли тесты (потому что тесты как-то не работали), и пустили в релиз.
[17:15:31] <Kakadu> Vinzent: тесты не работали. Пофиксили тесты в стиле return true. Потом недоумевают, почему тесты не тестируют
[17:15:38] <f[x]> Vinzent: так а при чём лисп к твиттеру?
[17:15:56] <Kakadu> f[x]: я тоже не понял
[17:16:30] <Vinzent> Kakadu: ну, всякое бывает, индусы вон вообще ужас что пишут... Что это доказывает-то?
[17:16:33] <f[x]> кто-нибудь перейдите за лисп, а то оппонент не успевает
[17:16:44] <Vinzent> f[x]: он на нем частично написан
[17:16:49] <f[x]> пруфлинк
[17:17:02] <f[x]> на каком именно лиспе?
[17:17:12] <f[x]> ruby это не лисп если что
[17:17:31] <Vinzent> загугли backtype. И у них в блоге что-то на эту тему было.
[17:17:40] <Vinzent> на clojure естественно, на каком же еще
[17:18:12] dzhon вошёл(а) в комнату
[17:19:15] <klapaucius> Где писать return true чтоб тайпчекер перестал типы проверять?
[17:20:38] <f[x]> http://tech.backtype.com/ лежит
[17:20:44] <f[x]> я виню в этом лисп :)
[17:21:06] <Kakadu> f[x]: > я виню в этом лисп
я знал что ты это скажешь)
[17:21:10] <f[x]> it's a loooooosing game
[17:22:07] <Vinzent> klapaucius: еще раз: это не проблема тестов. Если я криво объявлю типы в окемле, то у меня тоже получится говнокод (хоть и "корректный")
[17:22:19] <Vinzent> f[x]: хах :) Но твиттер-то работает
[17:22:44] <klapaucius> Типы окамл и без вас выведет. Как правило прямые, что характерно.
[17:23:06] <Vinzent> Что, и предметную область сам угадает?
[17:23:25] <Kakadu> вот это точно троллинг
[17:24:16] <gds> и ещё характерная особенность типизации -- систематичность.  для любого кода, проходящего тайпчекер, проверяются типы.  тесты такое не умеют, для каждого нового/изменённого кода необходимо новые/изменённые тесты.
[17:25:51] <Vinzent> gds: ну, для нового кода зачастую придется создавать новые типы, если уж проводить такую аналогию :) А проверка тогда - это запуск тестов
[17:27:02] <Kakadu> Vinzent: > для нового кода зачастую придется создавать новые типы
как пришл к этому?
[17:27:48] <Vinzent> Kakadu: а что, ты когда пишешь программы используешь только встроенные типы окамла?
[17:29:20] <klapaucius> Использовать только встроенные типы /= объявлять новые типы при каждом изменении кода.
[17:29:50] <Kakadu> Vinzent: пример, у тебя в код функция обработки сложной структуры, которая делает что-то дикое. потом ты написал другой модуль, который делает что-то совсем невъебенное с ней, при этом не похожее на предыдущее. Тесты надо будет писать заново, а компилятор как проверял типы, так и проверяет
[17:30:12] <Kakadu> s/с ней/с той же структурой/
[17:30:14] <Vinzent> klapaucius: а я ничего такого и не говорил.
[17:30:28] <klapaucius> Тогда в чем суть возражения?
[17:30:33] <gds> обычно типов немного, а кода много.
[17:31:08] akovbovich вошёл(а) в комнату
[17:31:15] <Vinzent> Kakadu: я в курсе, потому и написал "зачастую". Зачастую - это не всегда, зачастую - это достаточно часто. А тесты в твоем случае все равно придется писать - нужно же удостовериться, что эта дикая фигня работает?
[17:32:25] <Kakadu> Vinzent: она работает ибо компилятор и проверяльщик доказательств проверили. Компилится --- значит работает
[17:32:55] <Vinzent> Kakadu: она может работать неправильно. На практике это означает, что она не работает.
[17:34:04] <Kakadu> Vinzent: может. Но на практике  она работает правильно в большинстве случаев.скажите ему
[17:35:02] <gds> кстати, хочу итераты на лиспе.  Кто бы написал?..
[17:44:08] dzhon вышел(а) из комнаты
[17:50:24] komar вышел(а) из комнаты
[17:50:40] komar вошёл(а) в комнату
[17:55:49] <Vinzent> Kakadu: ну это настолько голословное утверждение, что я даже не знаю, что сказать :)
[17:56:15] <Kakadu> Vinzent: попрограммируй  и попробуй
[17:56:52] <Vinzent> Kakadu: у меня и в лиспе "работает правильно в большинстве случаев" как бы :)
[17:57:19] <Vinzent> Вообще, у любого программиста программа чаще работает правильно, чем неправильно, так как иначе он бы бросил это занятие и перестал быть программистом :)
[17:57:46] <Kakadu> работает правильно после скольки дней отладки?
[17:58:09] <Kakadu> ОК
[17:58:31] <Kakadu> Vinzent: может. Но на практике без применения отладки она работает правильно в большинстве случаев. Скажите ему
[18:00:18] <Vinzent> Kakadu: ты забыл добавить "у меня". Может дело вовсе не в типах, а в тебе? :)
[18:02:37] <Kakadu> Vinzent: Но на практике у более-менее опытных программистов на OCaml и Haskell программы работают как ожидалось и без применения отладки (в большинстве случаев). Скажите ему
[18:03:03] Kakadu начинает думать что в чатик вошел его научник
[18:03:32] <Vinzent> Kakadu: то же справедливо для опытных программистов на любых языках.
[18:03:57] <Vinzent> Собственно, именно этим опытный программист и отличается от неопытного :)
[18:05:48] <Kakadu> Именно в этом и польза системы типов: написать меньшими усилиями и быстрее нужный код
[18:06:46] <Vinzent> Очевидно, что это утверждение глубоко субъективно.
[18:07:25] <Kakadu> т.е.  "написать меньшими усилиями и быстрее нужный код" не суперцель для индустрии?
[18:08:22] <Vinzent> Это у тебя получается "написать меньшими усилиями и быстрее нужный код" с типами, именно так типы приносят тебе пользу (или, как минимум, ты так думаешь)
[18:09:04] komar вышел(а) из комнаты: Replaced by new connection
[18:09:05] komar вошёл(а) в комнату
[18:12:00] <Kakadu> Vinzent: Т.е. ты считаешь тезис , что "окамл позволяет написать надежный код меньшими усилиями чем, например, С++", неверным потому что на самом деле не язык хороший а кодер?
[18:13:22] <Vinzent> Очевидно, что этот тезис верен, т.к. С++ - говно :)
[18:13:58] <Vinzent> Однако все эти разговоры про "из-за типов у нас нет ошибок!" у меня вызывают разве что умиление :)
[18:14:18] <gds> так никто не говорил, что ошибок нет.  Их сильно меньше.
[18:14:26] <Vinzent> Не так уж и сильно.
[18:14:39] <Kakadu> >  Не так уж и сильно.
откуда инфа?
[18:14:52] <Vinzent> > Их сильно меньше.
откуда инфа?
[18:15:19] <Kakadu> опыт переписывания проектов на камло, сравнения затраченных усилий, замеров производительности
[18:15:22] <gds> из личной практики, из статистики.
[18:16:22] <Vinzent> Переписывания с чего? С с++? Ну-ну :)
[18:16:28] <f[x]> Vinzent: нет, они не писали на лиспе!
[18:16:33] <gds> но, конечно, это проявляется только на больших проектах.
[18:16:38] <Vinzent> f[x]: ;)
[18:16:47] <Kakadu> вроде JSC переписывали с явы...
[18:17:06] <f[x]> (сейчас будут авторитетом давить)
[18:17:28] <Kakadu> f[x]: а ты с чего перписывал?
[18:17:43] <Vinzent> Kakadu: дык ведь ява тоже статически типизирована.
[18:17:55] <f[x]> Kakadu: ничего не переписывал
[18:18:31] <Kakadu> Vinzent: ты не знаешь что такое статическая типизация
[18:19:01] <Vinzent> Kakadu: ты утверждаешь, что ява не является статически типизированным ЯП?
[18:19:11] <Kakadu> да
[18:19:25] <Kakadu> кстати, ты различаешь строгую типизацию и статическую?*
[18:20:07] <Vinzent> Я не поленился открыть википедию и скопипастить:
строгая полиморфная, статическая, безопасная, именованная (англ.), явная (англ.)
[18:20:27] <Kakadu> и да, С++ тоже не статически типизированный, хотя люди постоянно путают и пишут статическая
[18:20:47] <Vinzent> Либо википедия как всегда врет, либо кто-то тут не слишком компетентен в терминологии систем типов :)
[18:20:55] <Kakadu> я даже знаю кто
[18:21:13] <Vinzent> Кто же?
[18:21:21] <Kakadu> не буду показывать пальцем
[18:21:53] <Vinzent> То есть на википедии ошибка?
[18:22:45] <Kakadu> отчасти. В контексте С++ часто эти понятия заменяют по ошибке
[18:23:25] <Vinzent> Мы говорим о джаве. Исправь, пожалуйста, статью.
[18:23:57] <Kakadu> лично я когда пытаюсь объяснить что такое статическая, я оперирую фразой "ещё более строгая чем строгая"
[18:26:56] <Vinzent> лично ты можешь конечно вкладывать в эти слова любой смысл, но, тем не менее, это термины со вполне определенным значением. Так что прошу еще раз: если в статье есть ошибка, исправь ее, пожалуйста.
[18:29:20] <gds> об википидоту руки пачкать -- зачем.
[18:30:39] <gds> статическая -- та, в которой для любого значения можно вывести тип статически из исходников, без их запуска.  Динамическая -- та, в которой этот тип в общем случае неизвестен даже при статическом анализе.  В C++ (я жабу не знаю толком) типизация статическая, но не строгая.
[18:31:09] <Vinzent> gds: именно это и пытается опровергнуть Kakadu
[18:31:59] <Kakadu> всё больше не буду спорить с идиотами. Ибо даже идиот может найти где меня доловить :)
[18:33:04] <f[x]> fail
[18:33:20] <Kakadu> может я примерно такое же на защите сказал....
[18:33:58] <Vinzent> мде уж.
[19:04:59] Sun][ вышел(а) из комнаты
[19:08:29] bobry вошёл(а) в комнату
[19:08:39] <bobry> Kakadu: а расскажи чем F# лучше камло?
[19:09:23] <Kakadu> bobry: тем что там есть доступ к библиотеками дотнет. И, может быть, атрибутами.
[19:09:59] <Kakadu> атрибуты вообще очень даже торт
[19:10:28] <Kakadu> хотя может и нет
[19:10:43] <Kakadu> bobry: короче ответ "ничем" очень близок к правде
[19:11:16] <Kakadu> bobry: ты вроде планировал js_of_ocaml поковырять?
[19:12:09] <Kakadu> кстати, http://coherentpdf.com/blog/?p=4 Гуй на камле, питоне и wxWidgets без FFI а через сокеты
[19:27:06] ftrvxmtrx вышел(а) из комнаты
[19:36:18] Kakadu вышел(а) из комнаты
[19:39:20] Typhon вышел(а) из комнаты
[19:43:26] akovbovich вышел(а) из комнаты
[19:43:38] Typhon вошёл(а) в комнату
[20:07:42] <Vinzent> Из printf можно как-нибудь вывести в строку?
[20:11:00] bobry вышел(а) из комнаты
[20:11:41] komar вышел(а) из комнаты: Replaced by new connection
[20:11:42] komar вошёл(а) в комнату
[20:17:48] Kakadu вошёл(а) в комнату
[20:19:24] <Kakadu> Vinzent: printf "string = %s\n" "hello"
[20:21:59] <Vinzent> Kakadu: это печатает на вывод, а я хотел, чтобы оно возвращало строку, а не печатало. Впрочем уже не нужно
[20:22:41] Typhon вышел(а) из комнаты: Replaced by new connection
[20:23:01] Typhon вошёл(а) в комнату
[20:23:15] Typhon вышел(а) из комнаты: Replaced by new connection
[20:23:35] Typhon вошёл(а) в комнату
[20:24:25] <Kakadu> угу
[20:24:37] <Kakadu> что-то я затупил как-то
[20:39:38] letrec вышел(а) из комнаты
[21:05:32] komar вышел(а) из комнаты
[21:06:24] komar вошёл(а) в комнату
[21:25:13] f[x] вошёл(а) в комнату
[21:27:02] klapaucius вышел(а) из комнаты
[21:33:35] tilarids вышел(а) из комнаты: Computer went to sleep
[21:48:08] ftrvxmtrx вошёл(а) в комнату
[21:51:01] bobry вошёл(а) в комнату
[21:54:02] <bobry> Kakadu, да, хотел, но пока вот грызу clojurescript
[22:07:37] Vinzent вышел(а) из комнаты
[22:13:04] tilarids вошёл(а) в комнату
[22:14:28] tilarids вышел(а) из комнаты
[22:18:35] tilarids вошёл(а) в комнату
[22:45:48] komar вышел(а) из комнаты
[22:46:07] komar вошёл(а) в комнату
[22:46:22] Typhon вышел(а) из комнаты
[23:02:32] klapaucius вошёл(а) в комнату
[23:28:38] komar вышел(а) из комнаты
[23:29:11] komar вошёл(а) в комнату
[23:36:14] ftrvxmtrx вышел(а) из комнаты
[23:42:19] ftrvxmtrx вошёл(а) в комнату
[23:52:28] ermine вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!