Home
codingteam
codingteam@conference.jabber.ru
23.10.2016< ^ >

Тема: C, С++, D, Java, C#, Haskell, Ruby, Scheme, Common Lisp, Erlang, OCaml, JavaScript, TypeScript, Clojure, Scala, Nemerle, F#, Groovy, R, Rust, Kotlin.
Backup channel: codingteam@conference.codingteam.org.ru
HQ: https://codingteam.org.ru
Код постить сюда: http://lpaste.net/
Логи: http://tinyurl.com/ctcjr-logs
Юным погромцам сюда: http://e-maxx.ru/algo/ , а ещё читать Кнутца, Корменца, Седжвикца и др.
Morning Tsoding (вт, чт, вс, збс): https://twitter.com/tsoding
Let's Dev (когда Капитан на мостике): http://www.youtube.com/playlist?list=PLK6mcZkmN4QTusFvp_0GVtscQbCiIg81Y
http://i.imgur.com/slnyI6a.jpg
[00:03:10] <gsomix> Minoru, смотрю на твой код, и что-то меня в нем смущает.
[00:03:22] <gsomix> Видимо, из-за незнания хаскеля.
[00:03:40] <Minoru> gsomix: я могу на Python переписать
[00:03:47] <Minoru> там почти ничего не поменяется, конечно ._.
[00:03:52] <Minoru> или на C++ с std::vector
[00:03:58] <Minoru> или, в конце концов, словами объяснить
[00:04:00] <gsomix> Minoru, нет, я хочу понять именно код на хаскеле.
[00:04:04] <gsomix> Идею-то я понял.
[00:04:07] <Minoru> f
[00:04:20] <gsomix> Minoru, какой тип у eachindex будет?
[00:04:40] <Minoru> [Int] -> [[Int]]
[00:05:04] <Minoru> скорее даже Num a => [a] -> [[a]]
[00:05:22] <gsomix> Minoru, а с этим что "eachindex [x] = [0..x]"?
[00:05:42] <gsomix> Или 0..x -- это один список, а [] дает внешний?
[00:06:06] <Minoru> нет, это я плохо написал :) Должно быть eachindex [x] = [[0..x]]
[00:06:18] <gsomix> Ага, тогда ок.
[00:06:18] <Minoru> гм, стоп
[00:06:29] <Minoru> а, не стоп, всё хорошо
[00:06:39] <Minoru> я просто в ghci набрал «0..10», а оно мне ошибку :)
[00:08:08] <gsomix> Minoru, и еще, наверное, нужен кейс для пустого списка.
[00:08:44] <Minoru> если только ты собираешься вызывать эту функцию с пустым списком :)
[00:08:56] <Minoru> так-то база рекурсии — это список одного элемента
[00:09:51] <gsomix> Minoru, а как он будет примерно ругаться, если я запихну пустой список?
[00:14:04] <Minoru> в рантайме упадёт и скажет, что у него нет clause для этого случая
[00:14:11] <Minoru> ну, как tail []
[00:14:43] <Minoru> но я же так понял, что тебе эта функция для кодогенерации нужна, поэтому тотальной её делать не обязательно
[00:15:12] horta hell вышел из конференции
[00:15:18] horta hell зашёл в конференцию
[00:16:00] <gsomix> Minoru, не, не, это просто повод поспрашивать про хаскель.
[00:18:29] <gsomix> Minoru, гм, стой.
[00:19:18] <gsomix> Minoru, "eachindex [x] = [[0..x]]" -- это не список всех валидных индексов для одномерного массива.
[00:19:43] <Minoru> ._.
[00:20:21] <gsomix> Ожидается, что eachindex [3] возвратит [[0]; [1]; [2]].
[00:20:35] <Minoru> ну тогда map (\x -> [x]) [0..x] (да, у меня других имён переменных в коде не бывает ._.)
[00:20:55] <gsomix> Ага.
[00:21:29] <Minoru> или лучше даже [ [i] | i <- [0..x] ]
[00:21:33] <Minoru> думаю, это читабельней и понятней
[00:23:35] <gsomix> Да, так лучше.
[00:27:48] <gsomix> Так, надо бы понаписать вспомогательных функций.
[00:28:02] <gsomix> Как для списков, только для туплов.
[00:28:27] <gsomix> Ну, для туплов на момент кодогенерации.
[00:29:23] <Minoru> а у тебя там есть доступ к AST или какому-то промежуточному представлению, где по туплам можно ходить как по спискам?
[00:33:56] <gsomix> Minoru, угу.
[00:34:59] <gsomix> Ну, скорее как по массиву.
[00:35:49] <gsomix> Это позволило мне написать генерацию функции, которая переводит индексы многомерного массива в линейные индексы.
[00:36:11] <Minoru> «линейный индекс» — это смещение в памяти?
[00:37:04] <Minoru> блин, тесты падают, а я не понимаю, почему >_<
[00:37:05] <gsomix> Да.
[00:37:36] <Minoru> ладно, удачно попрограммировать, а я спать
[00:37:38] Minoru вышел из конференции
[00:38:35] portnov вышел из конференции
[00:42:41] ckorzhik зашёл в конференцию
[01:14:25] warava777@jabber.ru зашёл в конференцию
[01:50:16] dzhon зашёл в конференцию
[02:08:36] Lavir вышел из конференции
[02:17:04] dzhon вышел из конференции
[02:45:21] a1batross зашёл в конференцию
[02:46:06] grouzen зашёл в конференцию
[03:02:31] m4n71k0r вышел из конференции
[03:06:29] warava777@jabber.ru вышел из конференции
[03:23:48] Славный капитан вышел из конференции
[03:37:49] a1batross вышел из конференции
[03:37:51] a1batross зашёл в конференцию
[03:46:21] eaeee вышел из конференции
[04:07:11] a1batross вышел из конференции
[04:18:12] SolarRay вышел из конференции
[04:40:31] ɹǝɟılʍǝu вышел из конференции
[04:42:25] horta hell вышел из конференции
[04:42:31] horta hell зашёл в конференцию
[04:42:33] ForNeVeR вышел из конференции
[04:42:33] ForNeVeR зашёл в конференцию
[04:43:45] ForNeVeR вышел из конференции
[04:43:46] ForNeVeR зашёл в конференцию
[04:52:31] horta hell вышел из конференции
[04:52:36] horta hell зашёл в конференцию
[05:03:36] ckorzhik вышел из конференции
[05:09:41] grouzen вышел из конференции
[05:15:23] grouzen зашёл в конференцию
[07:07:15] grouzen вышел из конференции
[07:50:04] xmi зашёл в конференцию
[09:11:43] portnov зашёл в конференцию
[10:04:59] rexim зашёл в конференцию
[10:10:06] Akon32 зашёл в конференцию
[10:19:36] <rexim> ForNeVeR, УСТРОЙ ДЕПЛОЙ!11
[10:25:40] <ForNeVeR> rexim: а я это и делаю. Он тебе почту ещё не засрал?
[10:26:23] <ForNeVeR> Я скопипастил скрипты из логлиста и пытаюсь с их помощью задеплоить цтор :)
[10:26:34] gsomix вышел из конференции
[10:27:02] <ForNeVeR> А оно мне и говорит: "ЌҐ¤®бв в®з­® ¬Ґбв ­ ¤ЁбЄҐ".
[10:39:23] <portnov> человеческим голосом?
[10:41:25] gsomix зашёл в конференцию
[10:41:33] <gsomix> Утро.
[10:57:34] <rexim> ForNeVeR, да не сильно. Всего-то три письма
[10:57:40] ɹǝɟılʍǝu зашёл в конференцию
[10:57:50] <ForNeVeR> rexim: дак это я только начал!
[10:58:13] <rexim> ForNeVeR, хорошо, сейчас фильтр настрою тогда.
[10:59:08] <rexim> Давно пора, кстати. А то почему-то у меня дженкинсовые письма не сыпятся в соответствующий ярлык нотификаций, как все остальное.
[10:59:11] <ForNeVeR> rexim: если тебе мешает, я могу тебя просто убрать из рассылки.
[10:59:20] <rexim> ForNeVeR, нет, не мешает.
[10:59:23] <ForNeVeR> Ок.
[11:00:02] <rexim> ForNeVeR, создал ярлык Forneverenkins
[11:02:41] <ForNeVeR> :3
[11:02:46] <rexim> Во! http://i.imgur.com/6TTjKZ1.png
[11:02:50] <rexim> Удобненько!
[11:03:24] <gsomix> ForNeVeR, еще один. https://github.com/haf/expecto
[11:03:50] <ForNeVeR> gsomix: ну, это интересно
[11:09:49] SolarRay зашёл в конференцию
[11:24:11] Akon32 вышел из конференции
[11:28:11] <ɹǝɟılʍǝu> Ой
[11:28:13] <ɹǝɟılʍǝu> А у вас утро.
[11:29:52] * ForNeVeR вызывает повершелл из батника из cmd из groovy.
[11:30:06] <ForNeVeR> Экранирование вышло очень весёлым.
[11:35:28] xmi вышел из конференции
[11:47:52] <ɹǝɟılʍǝu> Любопытно http://www.codingstandard.com
[12:00:12] xmi зашёл в конференцию
[12:00:16] <ForNeVeR> Jenkins очень плохо сделали. У меня какой-то пайплайновый джоб умер и повис, и пытался после каждого ребута снова умереть и повиснуть!
[12:01:05] <rexim> Какие-то у вас джобу суицидальные.
[12:01:16] <rexim> джобы*
[12:04:31] Славный капитан зашёл в конференцию
[12:20:27] ckorzhik зашёл в конференцию
[12:21:38] <ForNeVeR> gsomix: видал? https://github.com/dotnet/netcorecli-fsc/issues/19
[12:25:58] a1batross зашёл в конференцию
[12:45:32] grouzen зашёл в конференцию
[12:52:05] a1batross вышел из конференции
[12:56:41] <gsomix> ForNeVeR, да, годно.
[12:56:58] <gsomix> Я надеюсь, что в Paket будет поддержка.
[12:57:50] <gsomix> ForNeVeR, а до этого меня порадовало, что Net Standard 2.0 будет совместим с 1.4
[12:58:43] <ForNeVeR> Ну а куда Paket денется? :)
[12:59:30] <ForNeVeR> Paket — это в принципе внешний инструмент по отношению к процессу билда. До тех пор, пока можно референсить DLL с диска, Paket никаких проблем не испытает с интеграцией куда угодно.
[13:01:16] kpecmuk вышел из конференции
[13:02:43] <gsomix> ForNeVeR, и славно!
[13:04:06] xmi вышел из конференции
[13:08:15] <gsomix> ForNeVeR, http://pastebin.com/wac9rVgK С последовательностями довольно компактно выглядит.
[13:08:48] <gsomix> Но это пока с размерами, которые в виде списка подаются.
[13:09:18] <gsomix> Как перенести в тайппровайдер пока не придумал до конца.
[13:09:50] <ForNeVeR> Ну, списки — это не очень перформансно. Надо будет рано или поздно от них избавляться.
[13:10:11] <gsomix> А я уже.
[13:10:22] <gsomix> То есть eachindex надо делать так, чтобы были туплы.
[13:12:11] <ForNeVeR> Значит, из тайп провайдера генерять как-то.
[13:12:21] <gsomix> ForNeVeR, по идее, мне нужно написать вспомогательные функции для работы с квотейшенами туплов, как со списками/массивами.
[13:12:30] <gsomix> И реализовать вот такую же логику.
[13:15:38] <gsomix> ForNeVeR, мне нравится, что в VSCode можно быстро накидывать прототипы кодогенерации и выполнять с помощью FSharp.Quotations.Evaluator.
[13:15:53] <gsomix> На большом тайппровайдере проверять не так удобно.
[13:19:33] kpecmuk зашёл в конференцию
[13:40:18] ɹǝɟılʍǝu вышел из конференции
[13:59:43] <rexim> > JavaScript
> Exponentiation operator (**)
> This is an experimental technology, part of the ECMAScript 2016 (ES7) proposal.
[13:59:46] <rexim> Экспериментальные технологии уровня JavaScript
[13:59:54] <ForNeVeR> :D
[14:00:19] <ForNeVeR> rexim: говорят, несколько яваскриптеров уже пострадало во время экспериментов! Это не шутки!
[14:00:28] <rexim> Да ваще!
[14:01:18] <ForNeVeR> Они пытались возвести отрицательное число в рациональную степень...
[14:02:18] <ForNeVeR> > Math.pow(-2, 2.000000000000001)
NaN
> Math.pow(-2, 2.0000000000000001)
4
[14:02:25] <ForNeVeR> Ну плохо же сделано.
[14:02:55] <rexim> щ_Щ
[14:09:15] eaeee зашёл в конференцию
[14:12:21] feteel зашёл в конференцию
[14:19:00] Minoru зашёл в конференцию
[14:21:51] xmi зашёл в конференцию
[14:21:54] feteel вышел из конференции
[14:23:49] <Minoru> https://i.imgur.com/BmHuXhs.jpg
[14:26:00] ckorzhik вышел из конференции
[14:26:20] <ForNeVeR> :3
[14:34:49] <rexim> http://i.imgur.com/OrulEzE.jpg
[14:37:19] rexim вышел из конференции
[14:37:32] <Minoru> ForNeVeR: а зачем меня в fcc, когда я про F# знаю только название (без шуток)?
[14:38:31] <ForNeVeR> Minoru: потому что ты был в naggum-developers, а я эту тиму упразднил.
[14:38:49] <Minoru> гм, а в naggum-developers я что делал? ._.
[14:38:58] <ForNeVeR> Как ты там оказался — другой вопрос, но наверняка древние знали, что делали, когда тебя туда добавляли!
[14:39:00] <Minoru> доки, небось, вычитывал
[14:40:11] rexim зашёл в конференцию
[14:40:24] dzhon зашёл в конференцию
[14:40:50] <rexim> Minoru, доки древних!
[14:41:35] <gsomix> ForNeVeR, знаешь, что немного раздражает? Что тупль из одного элемента и сам элемент -- неравнозначные вещи в F#/
[14:42:11] <ForNeVeR> gsomix: мне кажется, это нормально.
[14:42:16] <ForNeVeR> В моём мире так же.
[14:44:32] <Minoru> gsomix: а у вас там правда есть туплы из одного элемента?
[14:47:08] <Minoru> ну, просто в моём мире `(x, y) :: (a, b)`, но `(x) :: a` (потому что это просто выражение в скобках)
[14:47:22] <Minoru> и я не вижу смысла в туплах одного элемента вообще
[14:47:59] <Minoru> (хотя понимаю, что в твоём случае тебе хотелось бы их иметь, чтобы индексы всегда представлять туплами)
[14:49:57] <ForNeVeR> http://hackage.haskell.org/package/OneTuple-0.2.1/docs/Data-Tuple-OneTuple.html kek
[14:51:11] <ForNeVeR> Minoru: кстати, в пыхотоне есть тупли из одного элемента.
[14:51:40] <ForNeVeR> Да и в C++ наверняка есть.
[14:53:44] <ForNeVeR> Minoru: более того, в C++ есть тупли из нуля элементов!
[14:53:52] <gsomix> Minoru, ForNeVeR, наоборот, я не хочу туплы из одного элемента.
[14:54:08] <ForNeVeR> gsomix: зато я хочу. Отдай мне!
[14:54:14] <gsomix> Забирай.
[14:54:32] <gsomix> У меня тут их целое ведро!
[14:54:44] <ForNeVeR> Натуральное:
[14:54:47] <ForNeVeR> ?
[14:54:56] <gsomix> Нет, целое. .__.
[14:55:08] <ForNeVeR> о_О
[14:55:40] <gsomix> ForNeVeR, Minoru, кстати, совершенное непонятно, как в самом F# сделать тупль из одного элемента.
[14:56:01] <gsomix> Но при кодогенерации -- все ок.
[14:56:05] <gsomix> Тип-то есть.
[14:56:18] <gsomix> System.Tuple`1
[15:00:25] <ForNeVeR> gsomix: System.Tuple.Create "tities"
[15:01:30] <gsomix> Брр.
[15:01:32] <ForNeVeR> Зато вот тупля с нулём элементов в CLI нету.
[15:01:38] <gsomix> Нет, такого нам не надо. :)
[15:01:39] <ForNeVeR> А в плюсцах есть!
[15:02:46] <ForNeVeR> gsomix: в повершелле, кстати, объект и массив из одного объекта суть одно и то же.
[15:03:13] <ForNeVeR> Ну то есть в случае необходимости любой объект будет завёрнут в массив, а массив из одного объекта будет развёрнут.
[15:03:17] <ForNeVeR> И это иногда мешает!
[15:07:54] <Minoru> ForNeVeR: закончил ревью. Мне по нашим неписанным, непродуманным полиси нужно себя из Assign убрать?
[15:08:17] <ForNeVeR> Minoru: да.
[15:08:20] <gsomix> Minoru, ForNeVeR, упарился, но половину дела сделал. http://pastebin.com/dgsjVSma
[15:08:59] <gsomix> Пока генерирует список валидных индексов по размеру-туплу.
[15:09:03] <gsomix> Только индексы пока списки.
[15:09:05] <gsomix> Надо туплы.
[15:09:08] <gsomix> Но я доделаю.
[15:10:09] <ForNeVeR> Рекурсивный генератор рекурсивных функций? Прекрасно %)
[15:10:31] <gsomix> ForNeVeR, не функций, а последовательностей.
[15:10:33] <Minoru> ForNeVeR: про Python ты прав, но… зачем это им? О «C++ zero-element tuple» мне DDG ничего не нашёл.
[15:10:55] <ForNeVeR> Minoru: http://melpon.org/wandbox/permlink/Rsg11BdQTN6D5qtR
[15:11:22] <Minoru> а, лол
[15:14:01] <Minoru> gsomix: в целом совсем не страшно. Мне только синтаксис непривычен, а так вроде код как код
[15:16:17] Graf зашёл в конференцию
[15:18:31] Graf вышел из конференции
[15:21:15] <gsomix> Minoru, ну, мне показалось, что это довольно интересно.
[15:21:46] <gsomix> Кодогенерация и все такое.
[15:25:05] Graf зашёл в конференцию
[15:25:17] Graf вышел из конференции
[15:26:18] <Minoru> https://twitter.com/tomaspetricek/status/789220197903327232
[15:31:11] a1batross зашёл в конференцию
[15:32:35] xmi вышел из конференции
[15:43:59] xmi зашёл в конференцию
[15:45:47] <Minoru> ForNeVeR: а вот теперь вопрос на засыпку: я предыдущее ревью сабмитнул как «request some changes». Сейчас сабмитнул ещё одно, но уже как «comments». Если я нажму «Approve changes», какое ревью подтвердится — первое или второе? :) Кнопочка-то одна
[15:46:43] <ForNeVeR> Minoru: насколько я понимаю систему, у человека может быть только одно активное (т.е. submit / reject) ревью за раз.
[15:47:02] <ForNeVeR> То ревью, которое с комментами, подтвердиться не может.
[15:48:08] <ForNeVeR> Minoru: а как там без артикля, разве можно без артикля?
[15:50:17] <Minoru> ок, про ревью понятно. Нажму, потому что все предыдущие мои комментарии ты учёл. Что касается артикля — ну… Я же как всегда: мне не понравилось, как звучит, и я предложил, как сделать так, чтобы нравилось ._. Пойду погуглю.
[15:52:07] <ForNeVeR> Кажись, всё-таки нельзя. Разве что если мы считаем, что permission — это mass noun, типа tea.
[15:52:11] <Minoru> ну, начнём с того, что «have permission» в Google даёт 22,800,000 результатов, а «have a permission» — 344,000
[15:54:15] <ForNeVeR> Может, пойти и спросить на SO? :)
[15:55:13] <rexim> Спросить NASO?
[15:55:26] <Minoru> на English.SE, ты имеешь в виду?
[15:55:30] <ForNeVeR> Да.
[15:55:47] <Minoru> сейчас-сейчас, минутку, я ещё правила не нагуглил; у меня тут просто параллельно ещё одна беседа идёт
[15:57:09] <ForNeVeR> Я попробовал нагуглить, и мои источники не говорят о конкретном исключении для данного случая.
[16:04:28] <Minoru> ForNeVeR: в общем, я тоже никаких пруфов нагуглить не могу. Везде пишут, что «a» нельзя использовать с plural и uncount nouns, и вот мне кажется, что «permission» какое-то хитрое слово, которое можно применять во множественном числе, но нельзя посчитать. Но пруфов этому нет
[16:04:41] <Minoru> ForNeVeR: давай составлять вопрос на SE!
[16:04:46] <ForNeVeR> Minoru: но ведь легко можно сказать "permissions"
[16:04:50] <gsomix> ForNeVeR, и когда мне понадобилось создавать туплы, все стало намого хуже. :(
[16:04:58] <ForNeVeR> Minoru: а я уже составил :)
[16:05:17] <Minoru> ForNeVeR: ну, правило гласит, что ты не можешь сказать «a permissions»
[16:05:23] <Minoru> ForNeVeR: а где ссылка?
[16:05:26] <ForNeVeR> Minoru: да, это я знаю.
[16:05:34] <ForNeVeR> Щас, я только написал, пока ты думал. Ещё не запостил.
[16:05:44] <ForNeVeR> Minoru: наткнулся на такое вот: http://english.stackexchange.com/questions/118983/does-every-countable-noun-have-to-be-preceded-by-an-article
[16:06:30] <ForNeVeR> Minoru: http://english.stackexchange.com/questions/354911/have-permission-vs-have-a-permission
[16:07:51] <Minoru> ForNeVeR: > Отвечает Ботинок
[16:08:16] <ForNeVeR> Minoru: он же английский ботинок!
[16:08:27] <ForNeVeR> Алсо, на русском SE наверняка никнеймы ещё смешнее.
[16:08:43] <Minoru> первая ссылка интересная. Если «permission» действительно такой вот двуликий, и countable и uncountable, то ок
[16:08:54] <Minoru> ForNeVeR: если он английский, значит… с острым носом?
[16:09:16] <ForNeVeR> Minoru: мне вот не кажется, что в нашем случае он такой уж двуликий.
[16:09:24] <ForNeVeR> А в общем случае — да, может быть.
[16:10:19] <ForNeVeR> Хотя возможно, что нам стоит просто написать permissions (там же две команды — значит, и разрешения два).
[16:10:41] <ForNeVeR> Знаете, я так и сделаю.
[16:10:45] <ForNeVeR> Это все проблемы решит.
[16:11:03] <Minoru> нет, ну в каждом конкретном случае он действительно имеет одно лицо, и в нашем случае он действительно будет конкретным и потому countable
[16:13:26] <ForNeVeR> Minoru:
[16:13:34] <ForNeVeR> Minoru: вот ещё интересно: http://english.stackexchange.com/questions/52634/why-do-we-say-i-have-a-husband-wife?rq=1
[16:13:48] <ForNeVeR> > "She has husband" is not correct; any singular object of "has" requires an article.
[16:14:16] <ForNeVeR> Ну то есть да, мы можем там опустить артикль, только если решили, что permission в данном случае uncountable.
[16:14:51] xmi вышел из конференции
[16:18:15] <Minoru> > Отвечают Горячие Лизуньки
Где Нялайфер, когда у нас тут *такое* происходит?
[16:19:09] <ForNeVeR> Горячие Подлизы просто комментарий пишут, а отвечает Ж О Р А.
[16:25:27] dzhon вышел из конференции
[16:27:33] xmi зашёл в конференцию
[16:34:05] ckorzhik зашёл в конференцию
[16:53:59] eaeee вышел из конференции
[16:54:29] eaeee зашёл в конференцию
[17:11:09] <gsomix> ForNeVeR, ,__,
[17:11:15] <ForNeVeR> http://stackoverflow.com/questions/14456592/how-to-stop-an-unstoppable-zombie-job-on-jenkins-without-restarting-the-server
> How to stop an unstoppable zombie
Отличные вопросы!
[17:12:23] <gsomix> ForNeVeR, quotations в F# -- это боль.
[17:12:31] <rexim> ROW! ROW! FIGHT DA POWA!1
[17:12:31] <ForNeVeR> gsomix: это буль!
[17:13:11] <ForNeVeR> rexim: https://youtu.be/0V7aUT13qtM ♥
[17:13:30] <rexim> ForNeVeR, =3
[17:13:50] <gsomix> ForNeVeR, они меня постоянно подозревают, что мои переменные убегут из скоупа, и все запрещают.
[17:14:50] <ForNeVeR> Побег переменных! Установить содержание, обезопасить, удержать, сохранить!
[17:15:11] <ForNeVeR> К слову сказать, знаете отчего я начал читать на SO про неостановимых зомби?
[17:15:18] <ForNeVeR> У меня SCP сошёл с ума :)
[17:15:32] <rexim> o_O
[17:16:15] <ForNeVeR> SCP-████: неостановимый зомби
[17:16:38] <ForNeVeR> Не волнуйтесь, условия содержания было восстановлены.
[17:16:46] <ForNeVeR> s/ло/ли/
[17:16:48] <horta hell> ForNeVeR: Не волнуйтесь, усливия содержания были восстановлены.
[17:16:55] <ForNeVeR> Тьфу.
[17:19:48] <rexim> xD
[17:20:06] <rexim> Усливное содержание!
[17:20:08] <k0rg> бот на F# написан?
[17:20:44] <Minoru> k0rg: да ты что! В цодингтиме никакие две вещи не написаны на одном и том же языке. Бот на Scala.
[17:20:54] <k0rg> а
[17:21:05] <rexim> логлист
[17:21:07] <ForNeVeR> Смотря какой.
[17:21:12] <ForNeVeR> У нас есть и боты на F#.
[17:21:20] <ForNeVeR> Правда, они отдыхают. Ленивые очень.
[17:21:37] <ForNeVeR> k0rg: ультимативно планируется сюда загнать https://github.com/ForNeVeR/yog-sothoth
[17:21:43] <ForNeVeR> Но его надо ещё на дотнеткор портировать.
[17:21:50] <rexim> chpok-sothoth
[17:21:57] <Minoru> rexim: ути-пути, кто это у нас тут такой маленький и миленький *зануда*? :)
[17:22:03] <ForNeVeR> rexim: это ты на morganey напишешь :3
[17:22:07] <rexim> Minoru, кто бы говорил.
[17:22:13] <rexim> ForNeVeR, окей
[17:22:28] <rexim> Minoru, чпочайку?
[17:22:34] <Minoru> rexim: у меня было право, меня на тот PR заасайнили!
[17:22:39] <rexim> =3
[17:22:51] <Minoru> rexim: чуть почпозже, я ещё предыдущую чашку не переработал
[17:23:05] <rexim> Minoru, ну тогда го во вторник на цацкеле писать?
[17:23:24] <ForNeVeR> Что, где, какой зануда?
[17:23:29] <rexim> ForNeVeR, ты тут
[17:23:36] <Minoru> rexim: думаю, го. У меня пока конфликтующих планов вроде нет и постараюсь не делать
[17:23:40] <ForNeVeR> Технически это верно.
[17:24:07] <rexim> ForNeVeR, и ты го на цацкеле писать.
[17:24:10] <rexim> Все го!
[17:24:12] <rexim> \о/
[17:24:32] <ForNeVeR> Go на Haskell?
[17:24:35] <rexim> Да
[17:25:15] <rexim> ForNeVeR, ROW! ROW! ROWSPUTIN!
[17:25:17] <rexim> Lover of the Russian queen
[17:26:18] <ForNeVeR> ∀Go ∈Haskell?
[17:26:44] <ForNeVeR>
[17:27:08] <rexim> Так пренадлежит или не существует?
[17:27:12] <rexim> Ничо не понял
[17:27:49] <rexim> Для любого Go пренадлежит Haskell
[17:27:53] <rexim> Но не существует!
[17:28:01] <rexim> Какая интересная загадка от дядюшки Нёвера!
[17:29:53] <rexim> .status Kerrigаn
[17:29:54] <DeadBot> rexim: TEH DRILL POWAH [online]
[17:29:55] <rexim> =3
[17:30:11] <ForNeVeR> ,3
[17:30:34] <gsomix> ForNeVeR, все, у меня в голове тайпчекалка сломалась. Туплы-индексы какая-то замороченная штука.
[17:31:17] <ForNeVeR> Да, это так.
[17:31:28] <rexim> ꓾_꓾
[17:33:27] <gsomix> ForNeVeR, короче, оказалось, что квотейшены в F# -- довольно ограниченная штука.
[17:33:41] <gsomix> И чтобы собрать что-то вменяемое приходится писать руками дерево выражений.
[17:35:18] <ForNeVeR> gsomix: ну что ж поделать!
[17:35:39] <ForNeVeR> gsomix: посмотри ещё MasterOfFoo — может, форматные строки изобрести чем-то поможет?
[17:35:54] <gsomix> Например, я не могу написать так "<@@ Seq.init %%(n) (fun i -> %%(foobar(<@@ i @@>)) ) @@>"
[17:36:04] <gsomix> Ибо i может убежать из скоупа.
[17:36:17] <gsomix> Приходится вот эту лямбда-функцию выписывать руками.
[17:37:00] <ForNeVeR> gsomix: а там же ещё были какие-то <@ @>, они тут не помогут?
[17:37:11] <gsomix> Нет, это просто типизированный вариант.
[17:37:25] <ForNeVeR> Ок.
[17:37:59] Michle зашёл в конференцию
[17:40:30] <Minoru> Michle: привет! А ты пишешь код?
[17:41:01] rexim вышел из конференции
[17:42:27] Michle вышел из конференции
[17:42:47] <gsomix> ForNeVeR, ну, я кодца написал, конечно.
[17:42:51] <gsomix> Но там лажа с типами.
[17:42:56] <gsomix> Пытаюсь понять, где.
[17:43:08] <ForNeVeR> gsomix: можно сделать тайппровайдер, который будет по строке генерить выражения!
[17:43:24] <gsomix> ForNeVeR, MixinProvider?
[17:43:38] <gsomix> https://github.com/pezipink/MixinProvider
[17:45:07] <ForNeVeR> gsomix: дыа!
[17:45:19] <gsomix> Я бы хотел без такой магии.
[17:45:42] <ForNeVeR> :(
[17:49:17] <gsomix> ForNeVeR, ладно, сейчас разберусь с типами, и все будет хорошо.
[17:50:54] <ForNeVeR> Чёрч, наверное, тоже так говаривал.
[18:06:43] ckorzhik вышел из конференции
[18:22:05] SolarRay вышел из конференции
[18:24:24] xmi вышел из конференции
[18:29:27] ckorzhik зашёл в конференцию
[18:29:58] <gsomix> ForNeVeR, не разберусь.
[18:30:14] <ForNeVeR> А вот так Чёрч не говорил!
[18:31:39] <gsomix> ForNeVeR, http://hastebin.com/azapukocep.fs
[18:31:47] <gsomix> Не понимаю, почему он не может это скомпилировать.
[18:32:07] <gsomix> Хочет тайпаннотацию для foobar.
[18:32:44] <gsomix> А если я ее не знаю на момент компиляции кода с компиляцией? Неужели не может сам вывести? :(
[18:32:51] <ForNeVeR> А что такое id?
[18:33:05] <ForNeVeR> Или это то, что я подумал?
[18:33:43] <gsomix> 'a -> 'a
[18:34:35] <ForNeVeR> gsomix: у меня Assembly reference 'FSharp.Quotations.Evaluator.dll' was not found or is invalid
:(
[18:34:52] <ForNeVeR> Короче, это ещё маяться надо, чтоб твой код проверить.
[18:34:54] <gsomix> Сейчас.
[18:35:00] <ForNeVeR> Отчего б тебе его в отдельный бранч не заливать, к примеру?
[18:35:24] <gsomix> ForNeVeR, http://hastebin.com/zogopesefe.fs
[18:35:36] <gsomix> ForNeVeR, от того, что я пишу в отдельном fsx свои прототипы.
[18:36:16] <ForNeVeR> Я так и не научился толком разрабатывать в репле.
[18:36:54] <ForNeVeR> Ну ладно, у меня оно говорит вот такое:
Type mismatch when splicing expression into quotation literal. The type of the expression tree being inserted doesn't match the type expected by the splicing operation. Expected 'Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object]', but received type 'Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Object]'. Consider type-annotating with the expected expression type, e.g., (%% x : string) or (%x : string).
[18:37:00] <ForNeVeR> Это правильная ошибка?
[18:37:02] <gsomix> Да, так.
[18:37:46] <gsomix> Все это мне представляется очень странным.
[18:37:55] <gsomix> У меня уже есть аннотация для ex2.
[18:38:59] <gsomix> Почему бы ему просто не собрать дерево выражений с включенным foobar&
[18:39:17] <gsomix> Я бы, может быть, попробовал его руками написать.
[18:39:31] <gsomix> Но получить method info от Seq.init -- брр...
[18:42:06] <ForNeVeR> gsomix: там вообще хрень какая-то. У меня не получается указать тип для foobar.
[18:42:16] <gsomix> Ну, это просто.
[18:42:18] <gsomix> Секунду.
[18:43:48] m4n71k0r зашёл в конференцию
[18:44:46] <ForNeVeR> gsomix: у меня получилось только вот так:
let foobar = <@@ fun (i : int) -> 0 @@>;;
let (ex2:Expr<seq<int>>) = <@@ Seq.init 5 (%% foobar : int -> int) @@> |> Expr.Cast;;
[18:45:13] <gsomix> ForNeVeR, http://hastebin.com/oxuninukeg.pl
[18:45:16] <gsomix> Например, так.
[18:45:25] <ForNeVeR> Ну то есть, во-первых, генерик-функция id там ему чем-то совсем не нравится, а для int->int пришлось аннотировать тип.
[18:45:36] <gsomix> Короче, мне это все не очень нравится.
[18:45:39] <ForNeVeR> А, вот ты как.
[18:45:44] <gsomix> Потому что я не знаю, какие у меня там типы.
[18:45:58] <ForNeVeR> Это плохо тем, что у тебя в компил-тайме тип foobar неизвестен, да.
[18:46:03] <gsomix> У меня там туплы конструируются.
[18:46:12] <gsomix> Я просто не знаю, какого они типа. :(
[18:46:38] <gsomix> Все, что я знаю, последовательность каких туплов должна получиться.
[18:46:49] <gsomix> А в промежуточных вычислениях -- хз.
[18:46:56] <gsomix> Видимо, нужно придумать другой алгоритм.
[18:47:21] <horta hell> @tsoding твитит: Sтагтiиg Sooп
- YT: https://t.co/EQOtYALIG8
- LCTV: https://t.co/ohg14rrT11
- Twitch: https://t.co/i7Wp0qakuX
[18:47:31] <gsomix> Без динамического программирования и склейки туплов.
[18:47:53] <ForNeVeR> gsomix: ну вот такое у меня тоже не компиляется:
let foobar = <@@ id @@>;;
let (ex2:Expr<seq<int>>) = <@@ Seq.init 5 (%% foobar : int -> int) @@> |> Expr.Cast;;
[18:48:06] <ForNeVeR> То есть тип в самом выражении не выходит отчего-то указать. А почему?
[18:50:42] xmi зашёл в конференцию
[18:51:43] xmi вышел из конференции
[18:51:45] xmi зашёл в конференцию
[18:54:05] xmi вышел из конференции
[18:55:44] <gsomix> ForNeVeR, да, дело странное. Может при <@@ id @@> типы совсем теряются, а восстановить получается только obj -> obj?
[18:56:10] <ForNeVeR> gsomix: у меня получилось закомпилять только квотейшен <@@ (%% foobar : 'a -> 'a) @@>
[18:57:32] <gsomix> Уф.
[18:58:26] <ForNeVeR> gsomix: вопрос не выглядит сложно, давай спросим у посонов в чатике?
[19:00:26] <gsomix> ForNeVeR, там проблема с дженериками, наверное.
[19:00:44] <gsomix> Ибо если foobar по своей реализации int -> int, то аннотации внутри квотейшена работают ок.
[19:01:27] <ForNeVeR> gsomix: слушай, похоже на то.
[19:02:02] <ForNeVeR> Ведь получается, что <@@ id @@> уже ссылается не на id<'a>, а на id<obj>.
[19:02:31] grouzen вышел из конференции
[19:02:39] <ForNeVeR> gsomix: а как ты хотел это использовать?
[19:03:28] <gsomix> ForNeVeR, ох, держи целый сниппет. http://hastebin.com/meyuropaji.fs
[19:03:45] <gsomix> eachindex.
[19:03:59] <gsomix> В первом кейсе, когда n = 1 -- все просто.
[19:04:05] <gsomix> Там конкретная аннотация типа.
[19:04:11] <gsomix> А дальше все плохо.
[19:05:23] xmi зашёл в конференцию
[19:06:26] xmi вышел из конференции
[19:06:26] <ForNeVeR> gsomix: ок, судя по тексту ошибки, там какая-то функция обобщилась.
[19:06:27] xmi зашёл в конференцию
[19:08:22] <ForNeVeR> gsomix: вот давай научимся эту проблему побороть. Нам нужно получить @@-квотейшен для непривязанного генерика.
[19:08:34] <ForNeVeR> Смотри, пусть у меня есть let foo<'a> (x : 'a) : 'a = x
[19:08:52] <ForNeVeR> Я пишу <@@ foo @@>, и получаю хуиту: Type = Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object]
[19:09:02] <ForNeVeR> Надо как-то получить в результате генерик-символ
[19:09:09] <eaeee> @_@
[19:10:16] <eaeee> ForNeVeR: недавно я хотел написать статик дженерик метод, а у меня не получилось!
[19:10:30] <eaeee> и я приуныл
[19:10:58] <ForNeVeR> eaeee: э, чо ты
[19:11:06] <ForNeVeR> Я таких методов тыщу уже написал!
[19:11:13] <eaeee> как?
[19:11:33] <ForNeVeR> public static void foo<T>(T x) { return x; }
[19:11:38] <ForNeVeR> Ок?
[19:11:48] <eaeee> ForNeVeR: а, не так
[19:11:58] <eaeee> ForNeVeR: метод расширения хотел
[19:12:00] <eaeee> :)
[19:12:03] <ForNeVeR> Всё равно можно.
[19:12:22] <ForNeVeR> Но "this T x" не получится, я думаю, если ты об этом.
[19:12:29] <ForNeVeR> Или получится?
[19:12:37] <ForNeVeR> Я недавно хуйнул экстеншен для void.
[19:12:53] <ForNeVeR> Пришлось долго хекать ilasm для этого.
[19:13:03] <eaeee> не знаю, у меня не получилось. потому что получалось так, что я пишу дженерик в статик классе
[19:13:05] <ForNeVeR> И из C# всё равно не вышло вызвать :(
[19:13:16] <ForNeVeR> eaeee: да чо не получилось-то?
[19:13:21] <ForNeVeR> Ты толком можешь рассказать?
[19:13:41] <eaeee> ForNeVeR: эээ. ну не скомпилится же?
[19:13:48] <ForNeVeR> Чо не скомпилится?
[19:13:54] <ForNeVeR> Давай конкретно!
[19:14:24] <eaeee> дженерик метод в статик классе (метод расширения с this)
[19:14:45] <ForNeVeR> С хрена ли не скомпилится?
[19:15:01] <ForNeVeR> Вот просят его конкретно показать — не хочет.
[19:15:09] <ForNeVeR> eaeee: пока код не покажешь, не буду разговаривать.
[19:15:16] <eaeee> ¯ \ _ (ツ) _ / ¯ ладно :)
[19:15:33] <eaeee> кода в кармане нету
[19:15:39] <eaeee> потерял
[19:16:22] <ForNeVeR> gsomix: слушай, а не в Seq.init ли у нас там проблема, а?
[19:16:37] <gsomix> Гм.
[19:16:43] <gsomix> Давай посмотрим аннотацию.
[19:17:05] <gsomix> Ну, оно дженерик, да.
[19:17:21] <ForNeVeR> eaeee: в общем, статический класс с экстеншеном и генериком отлично компиляется.
[19:17:31] <ForNeVeR> eaeee: если ты не навешиваешь генерик на this, по крайней мере.
[19:17:55] <eaeee> ForNeVeR: а, я на this и хотел
[19:18:14] <eaeee> this с параметром типа там получался вроде
[19:18:28] <eaeee> !
[19:18:34] <ForNeVeR> Ок, и у меня получилось.
[19:18:50] <ForNeVeR> Всё отлично работает, а ты чего-то недоговариваешь.
[19:18:58] <eaeee> ForNeVeR: что получилось?
[19:19:00] <ForNeVeR> Зря ты начал этот разговор. Не стоило сюда приходить!
[19:19:07] <eaeee> Ну вот.
[19:19:15] <ForNeVeR> eaeee:
static class Extender { public static void Foobaz<T>(this T x) { return; } }
[19:19:20] <ForNeVeR> 1.Foobaz(); // ok
[19:19:49] <ForNeVeR> Прекрасно скомпилил и вызвал.
[19:20:21] * eaeee задумался
[19:20:29] <ForNeVeR> eaeee: я тебе больше скажу
[19:20:37] <ForNeVeR> Я щас таким макаром закомпилял GetAwaiter
[19:20:47] <ForNeVeR> И могу теперь авейтить всё что угодно!
[19:20:54] <eaeee> а что еще за товарищ?
[19:21:21] <ForNeVeR> eaeee: возможно, тебе известно, что выражение "await x" требует наличия x.GetAwaiter()
[19:21:42] <ForNeVeR> Но, возможно, тебе неизвестно, что при этом GetAwaiter может быть экстеншеном!
[19:22:32] <ForNeVeR> Соответственно, static TaskAwaiter GetAwaiter<T>(this T x) позволяет авейтить вообще что захочешь, для любого типа теперь доступен await x;
[19:22:56] <ForNeVeR> Для любого, кроме void :(
[19:23:42] <gsomix> ForNeVeR, ха!
[19:23:48] <gsomix> ForNeVeR, не убегай.
[19:23:59] <ForNeVeR> gsomix: а и у меня вышло
[19:24:28] <ForNeVeR> gsomix:
let foobar = <@@ fun (i : int) -> i @@>;;
<@@ Seq.init<int> 5 (%% foobar) @@>;;
[19:24:44] <ForNeVeR> Реально проблема в Seq.init
[19:24:57] <ForNeVeR> Потому что тип выражения строится до того, как подставляются типы в %%
[19:25:15] <ForNeVeR> Мы и твою ботву щас пофиксим как-нибудь.
[19:25:20] <gsomix> Гм.
[19:25:25] <gsomix> А я иначе решил.
[19:25:30] <gsomix> ForNeVeR, http://hastebin.com/ozacikanep.fs
[19:25:58] <gsomix> Не знаю, правда, как мне это поможет вообще.
[19:25:59] <gsomix> :)
[19:26:08] <ForNeVeR> gsomix: да, мне тоже встречалось описание ReflectedDefinition, но я пока не вчитывался. Мне кажется, тут не поможет.
[19:26:21] <ForNeVeR> gsomix: у тебя нету типа этого fakeId во время конпиляции, вот и проблема!
[19:26:25] <gsomix> Да.
[19:26:37] <ForNeVeR> gsomix: скажи мне, какого типа у тебя должен быть bar
[19:26:58] <gsomix> ForNeVeR, хех.
[19:27:25] <gsomix> Если бы я знал.
[19:27:39] <ForNeVeR> Ну примерно
[19:27:53] <ForNeVeR> Мы там вообще не знаем, какие аргументы подставить в Seq.init?
[19:27:59] <gsomix> Вообще.
[19:28:15] <ForNeVeR> Я просто не понимаю, что ты вообще этим кодом делаешь
[19:28:22] <ForNeVeR> Там должен быть тупль или что?
[19:28:30] <ForNeVeR> С каким количеством аргументов? n?
[19:29:03] <gsomix> ForNeVeR, http://hastebin.com/sururuyuxo.fs
[19:29:10] <gsomix> Я вот это переписываю на туплях.
[19:29:31] <gsomix> bar -- это примерно то, что в Seq.map отдается.
[19:29:50] <gsomix> Там к туплю меньшего размера прибавляется один элемент.
[19:30:06] <gsomix> Это все очень странно, да.
[19:31:42] <ForNeVeR> gsomix: а я придумал
[19:31:43] <ForNeVeR> gsomix: щя
[19:31:59] xmi вышел из конференции
[19:36:59] grouzen зашёл в конференцию
[19:37:02] xmi зашёл в конференцию
[19:39:31] <eaeee> ForNeVeR: теперь я сам не понимаю, что у меня не работало
[19:43:48] <ForNeVeR> gsomix: короче, план такой: взять Seq.init и скастить его внутри <@@ @@> к нужному типу.
[19:44:08] <gsomix> Через Expr.Coerce?
[19:44:18] <ForNeVeR> Возможно, его вообще можно чистым рефлекшеном получить — не там, через MakeGenericMEthod.
[19:44:24] <ForNeVeR> s/не/ну/
[19:44:26] <horta hell> ForNeVeR: Возможно, его вообще можно чистым рефлекшеном получить — ну там, через MakeGenericMEthod.
[19:45:02] <gsomix> Да, можно, я думаю.
[19:45:12] <gsomix> Но это, блин... =__=
[19:45:24] <ForNeVeR> Да это фигня!
[19:45:43] <gsomix> Код будет дико непонятный в итоге.
[19:48:13] <eaeee> ForNeVeR: проверил, такое работает http://pastebin.com/WAVGkzmn
[19:48:40] <ForNeVeR> gsomix: дак какой тип туда встроить?
[19:48:56] <ForNeVeR> NTuple.makeType (n - 1)?
[19:49:00] <ForNeVeR> Или чо?
[19:49:41] <eaeee> действительно, я что-то попутал похоже
[19:49:59] <gsomix> ForNeVeR, NTuple.makeType n
[19:50:08] <gsomix> Ибо xs' имеет типа n-1.
[19:50:14] <gsomix> И мы добавляем в начало новый элемент.
[19:50:39] <gsomix> ForNeVeR, я вот только думаю, а не фигню ли мы пишем.
[19:50:46] <gsomix> Может есть какой-нибудь более простой алгоритм?
[19:51:44] <m4n71k0r> gsomix: а вы вдвоём уже пишете?
[19:52:34] <ForNeVeR> gsomix: я щя как хуйну
[19:52:37] <ForNeVeR> ух!
[19:52:40] <ForNeVeR> Всё збс!
[19:52:51] <ForNeVeR> Я там уже визитора прикурочиваю, всё будет чики-пуки!
[19:52:57] <ForNeVeR> Куй железо, не отходя от кассы!
[19:53:05] <gsomix> .__.
[19:55:58] SolarRay зашёл в конференцию
[20:01:30] eaeee вышел из конференции
[20:03:16] eaeee зашёл в конференцию
[20:04:04] <ForNeVeR> gsomix: блин, у Seq.init тип немного дурацкий...
[20:04:22] <ForNeVeR> В общем, можно сделать, но мне неохота шибко хитрого визитора делать прямо сейчас.
[20:05:09] <ForNeVeR> gsomix: идея такая: https://gist.github.com/ForNeVeR/5d779936f975eaf46a5350b479e7ae2a
[20:05:27] <ForNeVeR> Сейчас оно валится на Expr.Call (def.MakeGenericMethod t, arguments), потому что типы аргументов нужно чуток подрегулировать.
[20:06:05] <ForNeVeR> А для этого по ним надо такую же матчилку нарисовать, которая в них покопается и поменяет типы.
[20:06:18] <ForNeVeR> К сожалению, у меня не получилось получить квотейшен из MethodInfo :(
[20:06:28] <eaeee> а расскажите, что вы делаете?
[20:06:42] <ForNeVeR> Ну то есть я могу получить Seq.init с правильными типами вот так:
> let init = (getMethodInfo <@@ Seq.init @@>).GetGenericMethodDefinition().MakeGenericMethod(NTuple.makeType n)
[20:06:44] <ForNeVeR> О!
[20:07:30] <gsomix> eaeee, просто ForNeVeR -- сотона, он творит бал темных сил.
[20:07:49] <eaeee> gsomix: это мне должно все объяснить? :)
[20:07:55] <gsomix> eaeee, да.
[20:08:01] <ForNeVeR> gsomix: щя, щя
[20:08:14] <ForNeVeR> Есть же Delegate.CreateDelegate!
[20:08:19] <ForNeVeR> Оно всё умеет в делегат превратить!
[20:08:28] <eaeee> даже меня?
[20:08:35] <gsomix> eaeee, ладно, мы пишем на F#. Еще информация нужна?
[20:08:37] <portnov> https://geektimes.ru/post/281754/ и вам тоже.
[20:08:59] <m4n71k0r> мне нужен ForNeVeR.CreateForNeVeR
[20:11:18] <ForNeVeR> Ок, теперь мне нужен тип для Seq.init, сгенерирую его рефлекшеном...
[20:11:54] <m4n71k0r> разве копролалия бывает в текстовой форме?
[20:12:42] <Minoru> > <ForNeVeR> Соответственно, static TaskAwaiter GetAwaiter<T>(this T x) позволяет авейтить вообще что захочешь, для любого типа теперь доступен await x;
> <ForNeVeR> Для любого, кроме void :(
Because in Soviet Russia void awaits you.
[20:14:19] <Minoru> > <eaeee> ForNeVeR: теперь я сам не понимаю, что у меня не работало
Форневерик своими объяснениями не только меняет настоящее и будущее, но даже редактирует прошлое!
[20:14:42] <ForNeVeR> Minoru: хорошая шутка!
[20:15:01] <Minoru> > <m4n71k0r> gsomix: а вы вдвоём уже пишете?
[20:15:20] <Minoru> у них XP over XMPP
[20:15:45] <Minoru> полконфы похайлайтил. Это я что-то не подумал, извините ._.
[20:15:53] <m4n71k0r> XP -- это смайлик висельника
[20:16:24] <Minoru> нет, ну у них там в проекте всё получше, m4n71k0r
[20:20:52] <m4n71k0r> да у него картинки в комментах к коду!
[20:20:56] <m4n71k0r> https://youtu.be/sm-W4Tzg9-o?t=441
[20:21:34] <m4n71k0r> и всё мигат, бегущие строки...
[20:21:44] <m4n71k0r> это Вавилон!
[20:22:31] <gsomix> m4n71k0r, это запись стрима миксера?
[20:22:41] <gsomix> Постарел!
[20:22:49] <eaeee> :)
[20:22:53] <ForNeVeR> gsomix: чёрт, я сконструировал нужный нам вариант Seq.init, но теперь не знаю, как его применить :(
[20:23:05] <gsomix> ForNeVeR, всмысле?
[20:23:10] <gsomix> Ты methodinfo получил?
[20:23:16] <gsomix> В Expr.Call его!
[20:23:34] <ForNeVeR> gsomix: у меня в руках Delegate нужного типа.
[20:23:40] <ForNeVeR> А Expr.Call там какой-то упоротый :(
[20:24:04] <ForNeVeR> Это ж на самом деле лямбда, которая принимает другую лямбду, которая делает Call.
[20:24:10] <ForNeVeR> Или есть простой способ это сделать?
[20:24:47] <gsomix> ForNeVeR, почему упоротый?
[20:24:57] <ForNeVeR> gsomix: потому что я не знаю, как его соорудить.
[20:24:59] <gsomix> https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/expr.call-method-%5Bfsharp%5D
[20:25:04] <gsomix> Мы же об этом?
[20:25:15] <ForNeVeR> Не совсем.
[20:25:37] <ForNeVeR> gsomix: <@@ Seq.init @@> это Lambda (count,
Lambda (initializer, Call (None, Initialize, [count, initializer])))
[20:25:46] <ForNeVeR> Сечёшь?
[20:25:56] <gsomix> А?
[20:26:02] <gsomix> Сек.
[20:26:10] <gsomix> Давай так.
[20:26:20] <m4n71k0r> а ему боженька не запрещает говорить про попоболь? https://youtu.be/sm-W4Tzg9-o?t=679
[20:26:28] <gsomix> > <@@ Seq.init 5 id @@>
> Call (None, Initialize, [Value (5), Lambda (x, Call (None, Identity, [x]))])
[20:26:31] <gsomix> ForNeVeR, ^
[20:26:41] <gsomix> Если у меня будет Initialize, то я легко напишу такое дерево сам.
[20:26:43] <ForNeVeR> Хм.
[20:27:21] <gsomix> И получу заветную последовательность.
[20:27:28] <ForNeVeR> Тьфу нахуй!
[20:27:39] <ForNeVeR> Это мы ща!
[20:27:55] <gsomix> Пойду в магазин прогуляюсь.
[20:28:15] <eaeee> :D
[20:30:06] <eaeee> ForNeVeR: https://2ch.hk/em/arch/2016-05-04/src/255790/14564211826420.jpg
[20:31:03] <gsomix> > 2ch.hk
[20:31:14] <m4n71k0r> блин, у чувака нет типа void, но есть V0 и ещё есть классы https://youtu.be/sm-W4Tzg9-o?t=770
[20:31:22] <ForNeVeR> gsomix: init получился, кажись
[20:31:31] <ForNeVeR> gsomix: но похоже, что дальше проблемы с map и concat!
[20:31:37] <eaeee> gsomix: первое что нагуглилось поиском)
[20:31:56] <gsomix> ForNeVeR, ну, напишу все дерево руками.
[20:32:06] <gsomix> ВСЕ ДЕРЕВО
[20:32:07] <ForNeVeR> gsomix: http://hastebin.com/kocirodezo.fs
[20:32:12] <gsomix> Спасибо!
[20:32:21] <ForNeVeR> См. со строки // some crazy shit
[20:32:42] <eaeee> а что означают @@ ?
[20:32:59] <ForNeVeR> eaeee: <@@ @@> это untyped quotation.
[20:33:05] <ForNeVeR> <@ @> это typed.
[20:33:44] <ForNeVeR> Соответственно, untyped нужен, если во время компиляции тип неизвестен (вот как у нас — мы динамически этот тип строим в рантайме).
[20:36:15] <ForNeVeR> gsomix: возможно, я там в определении bar потерял Expr.Lambda. Просто я не понял, что это такое вообще :)
[20:36:43] <ForNeVeR> Ну, тип-то ты мне так и не сказал :(
[20:37:22] <ForNeVeR> gsomix: короче, перво-наперво попытайся в комментариях аннотировать все типы хотя бы в виде // tuple -> int или // int -> tuple или что у нас там.
[20:37:32] <ForNeVeR> А то ни хрена не понятно.
[20:40:33] <ForNeVeR> gsomix: при этом я понимаю, что там типы цепные / рекурсивные, но давай аннотируем хотя бы для случая n = 2. Это заметно облегчит работу.
[20:42:38] <ForNeVeR> А вообще, эх, как бы просто эта задача решилась с зависимой типизацией... может, в этом разрезе на F* глянуть?
[20:43:01] <ForNeVeR> Но для того, чтоб видеть преимущества, надо сперва решить задачу на текущем инструментарии.
[21:17:40] <gsomix> send/ForNeVeR/Нет, не потерял. Знаешь, откуда первая лямбда в <@@ Seq.init @@>? Внутри должно быть значение выражения. Какое значение у Seq.init? Лямбда функция, которая вызывает метод модуля (который внутри класс же, да)./
[21:17:50] <horta hell> gsomix: Сообщение доставлено.
[21:18:36] dzhon зашёл в конференцию
[21:27:04] sss|zombie зашёл в конференцию
[21:29:54] xmi вышел из конференции
[21:37:23] <Minoru> > Сдал тест на максимальный балл.
> Coursera уведомляет, что до ближайшей пересдачи осталось 7 часов.
._.
[21:44:53] rexim зашёл в конференцию
[21:55:54] <rexim> Збс, на стриме посидели.
[21:56:04] <rexim> Нихрена не сделал толком, но зато весело было.
[21:56:18] <Minoru> ага, я зашёл — а вы там обсуждаете, отчего ты с работы ушёл. Веселей некуда!
[21:56:27] <rexim> Ну да.
[21:56:52] <rexim> Minoru, это самое веселое событие в моей жизни!
[21:57:19] <Minoru> нет, ну если с такой точки зрения смотреть…
[21:57:32] <rexim> https://github.com/beerjs
[21:57:47] <rexim> Minoru, а ты только мое нытье чтоли застал?
[21:58:39] <Minoru> ну я в этот момент примерно впервые зашёл, и потом ещё заглядывал. Я тебя за ужином смотрю :)
[21:59:01] <Minoru> а потом ушёл, потому что мне нужно-таки было сдать сегодня тест на Курсере
[21:59:13] <rexim> =3
[21:59:56] <Minoru> вот, кстати: два раза сегодня днём писал тест. Первый раз правильно решил 2 задачи из 7, второй — 3 из 7. А потом посмотрел стрим Миксера, пошёл и сдал тест на 7 из 7.
[22:03:01] <rexim> x3
[22:12:34] dzhon вышел из конференции
[22:21:06] Kumba_yo вышел из конференции
[22:24:01] <gsomix> Ура!
[22:24:04] <gsomix> Оно живое!
[22:24:27] <gsomix> Получил заветное.
[22:24:32] <gsomix> > val it : (int * int) list = [(0, 0); (1, 0); (0, 1); (1, 1)]
[22:25:24] <Minoru> gsomix: ты молодец!
[22:26:18] <rexim> .ping
[22:26:19] <DeadBot> rexim: понг от тебя 0.10 секунды
[22:26:44] <gsomix> Осталось весь этот ужас интегрировать в тайппровайдер.
[22:26:56] <rexim> gsomix, ты сможешь, мы верим в тебя!
[22:27:06] <gsomix> ^_^
[22:28:51] <m4n71k0r> миксер животворящий!
[22:28:59] <m4n71k0r> или как там правильно будет
[22:30:04] <rexim> m4n71k0r, чаяхлебущий! \о/
[22:30:17] * rexim *сёрп*
[22:30:24] <Kerrigаn> чорт, как я мог забыть про чай
[22:30:33] <m4n71k0r> rexim: ыыыы
[22:30:49] <Kerrigаn> inb4: он тоже умер пока я спал
[22:31:01] <rexim> Kerrigаn, :D
[22:31:19] <m4n71k0r> кардиган вошёл в роль
[22:31:30] <rexim> Ага.
[22:31:38] <m4n71k0r> дат деатх
[22:31:44] <rexim> Мне вообще этот локальный мемчик про "умер пока спал" жутко нравится.
[22:31:55] <rexim> Он применим к чему угодно.
[22:32:36] <gsomix> $send ForNeVeR http://hastebin.com/uzitumivul.fs
[22:32:39] <horta hell> gsomix: Сообщение доставлено.
[22:32:44] ForNeVeR вышел из конференции
[22:32:46] ForNeVeR зашёл в конференцию
[22:32:48] <gsomix> Бял.
[22:32:50] <rexim> Лол
[22:33:01] <rexim> Ловко увернулся от сообщения!
[22:33:23] <gsomix> send/ForNeVeR/shutdown -r/
[22:33:24] <horta hell> gsomix: Сообщение доставлено.
[22:33:31] <gsomix> Не взлетело? :(
[22:34:27] <gsomix> Надо бы причесать это все.
[22:34:48] <m4n71k0r> $send ForNeVeR gsomix:\ $send ForNeVeR\ http://hastebin.com/uzitumivul.fs
[22:34:48] <horta hell> m4n71k0r: Аргументы некорректны.
[22:34:51] <rexim> send/ForNeVeR/; DROP TABLE dotnet; --/
[22:34:52] <horta hell> rexim: Сообщение доставлено.
[22:35:20] Kumba_yo зашёл в конференцию
[22:35:24] <rexim> Little Boby Tables!
[22:35:24] <m4n71k0r> $send ForNeVeR gsomix:\ $send\ ForNeVeR\ http://hastebin.com/uzitumivul.fs
[22:35:27] <horta hell> m4n71k0r: Сообщение доставлено.
[22:35:35] <m4n71k0r> ннна!
[22:35:57] <m4n71k0r> экранируй это
[22:36:27] <m4n71k0r> надо будет как-нибудь raw-строки запилить
[22:37:09] <rexim> RAW! RAW! STRING DA POWA!11
[22:44:48] <rexim> Хуясе! Мужик Спираль Фибоначчи на постскрипте запрограммировал! https://www.youtube.com/watch?v=7t_pTlH9HwA
[22:44:54] <rexim> Такая наркомания по мне!
[22:45:16] <rexim> Только это ближе к концу.
[22:46:43] <gsomix> Олдскул.
[22:47:55] <Minoru> coveralls каким-то волшебным образом покрытие считает. У меня модуль покрыт уже на 105.93%, и у меня всё ещё есть что тестировать!
[22:49:40] <Minoru> извините, что я столько бубню про тесты, просто это единственный способ как-то развлечь себя в процессе их написания
[22:50:39] <m4n71k0r> Minoru: надо 146%
[22:51:18] <Minoru> :(
[23:10:11] m4n71k0r вышел из конференции
[23:23:53] portnov вышел из конференции
[23:29:38] portnov зашёл в конференцию
[23:34:25] portnov вышел из конференции
[23:34:57] ɹǝɟılʍǝu зашёл в конференцию
[23:36:01] ɹǝɟılʍǝu вышел из конференции
[23:36:08] ɹǝɟılʍǝu зашёл в конференцию
[23:36:42] <ɹǝɟılʍǝu> МОИ СЛУГИ НЕ УМИРАЮТ
[23:38:32] rexim вышел из конференции
[23:44:08] <Minoru> ɹǝɟılʍǝu: так вот ты где был! А у нас тут Горячие Лизуньки!
[23:44:18] <ɹǝɟılʍǝu> ._.
[23:51:50] <Minoru> я серьёзно. Можешь погрепать логи
Powered by freQ Powered by Python Valid XHTML 1.0 Transitional Valid CSS!