Alexander
я бы сказал в 1995+
Cheese
1995—2017
Cheese
теперь же есть Раст
Alexander
пока в компилятор раста не вольют сравнительное число человеколет это под вопросом
Alexander
хотя по мне Раст гораздо приятнее
Anton
в 2018 - да
Посмотри на Telegram. Он такой плавный, а почему? Потому что многие медленные задачи отрабатываются именно на C.
Cheese
мы на С много пишем — файловые системы, драйверы. ну то есть опять ядро. да
Alexander
хм.. очень странное утверждение про телеграм
Alexander
у нас тоже на сях файловые системы распределенные си и Haskell
Cheese
Посмотри на Telegram. Он такой плавный, а почему? Потому что многие медленные задачи отрабатываются именно на C.
но ведь на ассемблере было бы ещё быстрее! почему телеграм не на ассемблере?
Alexander
ну приложение в котором общение по сети, чутка криптографии и GUI на 2.5 элемента
Alexander
у меня Google spreadsheet работает на сравнимой скорости в браузере
Alexander
а он на js
Anton
но ведь на ассемблере было бы ещё быстрее! почему телеграм не на ассемблере?
Сложно поддерживать. Да и зачем усложнять, если пользователю и так все быстро на C?
Alexander
и элементов там в разы больше
Alexander
в общем Haskell разумный язык прикладного уровня, а для системного код удобно генерить
Cheese
в общем Haskell разумный язык прикладного уровня, а для системного код удобно генерить
ну не то чтобы очень удобно. лучше, чем CPP, конечно. но отлаживать сишный код всё равно приходится по-сишному
Alexander
там хотя бы gdb есть
Alexander
хотя граница веселой может быть
Alexander
особенно если с одной стороны хаскель, а с другой си, в кернел треде
Anton
а си легко что ли?
Хорошего Си-разработчика легче найти, чем assembly кодера
A64m
да, но тяжелее, чем разработчика на нормальном языке
Anatolii
хм, что-то у меня аесон сломался
Anatolii
есть тест - парсит файлик, проверяет с expected все работает отлично
Anatolii
хотя, кажется я понял
Anatolii
наверное я что-то в ToJSON которые руками писал поломал
Anatolii
Если убираю вот такой инстанс и дерайвлю ToJSON, то все ок Но вот если сделать такой инстанс то начинается беда какая-то, подвисает на encode, просто выжирает 1 ядро и висит toObject :: ToJSON a => a -> Object toObject a = case toJSON a of Object o -> o _ -> error "toObject: value isn't an Object" instance ToJSON X where toJSON x = Object $ toObject x
Anatolii
это я сократил до минимально воспроизводимого кейса
Anatolii
мне нужен toObject чтобы потом добавить поля дополнительные
Anatolii
я уже спать пойду - но если кто подкинет идею куда копать - буду очень благодарен
Anatolii
самое простое решение - это конечно сделать еще одну стрктуру которая будет с доп полями и там их заполнить
Anatolii
но хотелось бы понять что в этому случае пошло не так
Alexander
ты ж toJson вызываешь бесконечно
Alexander
toJson вызывает toObject который вызывает toJson
Alexander
в общем-то объект из-за ленивости оно сразу сделает, но если попробуешь его заматчить или значение достать, то будет печалька
Maxim
Ночные вопросы. Представим, что у меня есть список xs. Я могу делать xs ^? ix 5. А могу filter f xs ^? xs Как мне правильно сделать что-то типа xs ^? filtered f . ix 5 ? Вопрос скорее чисто из любопытства
Anatolii
ты ж toJson вызываешь бесконечно
Спасибо, точно пора спать идти, незнаю чем я думал когда писал это. Это мне чтобы доьавит полей надо делать обёртку? Чтобы вручную все старые поля не объявлять
Anatolii
Где-то когда юзал такой подход с toObject, так конечно наверняка был вложенная стрвктура
Cheese
что-то мне затея с линзами не очень нравится уже • Couldn't match type ‘Identity’ with ‘Const Time’ Expected type: Getting Time (Chains, Map k0 a0, Time, Map Time (Set Work)) Time Actual type: (Time -> Identity Time) -> (Chains, Map k0 a0, Time, Map Time (Set Work)) -> Identity (Chains, Map k0 a0, Time, Map Time (Set Work))
Cheese
просто если заменить _1 на time = _1
Алексей
Я б тупо 5 параметров сделал.
Cheese
десять раз их туда-сюда передавать... скучно
Cheese
захотел сделать красиво
Cheese
вот так сработало time :: Lens' _ Time time = _3
ЧH
а почему в хаскеле -23 div 10 == -2?
ЧH
деление вроде целочисленное...
ЧH
Как же так то ребята
ЧH
Я думал математика... все дела , по серъезному все...
Kirill
потому что это - (23 div 10)
Kirill
а вариантов больше чем 1, нечего тут про серьёзную математику задвигать: λ> (-23) `quot` 10 -2 λ> (-23) `div` 10 -3
ЧH
-23 div 10 ==- 3 -23 % 10 == 7
ЧH
у нормальных людей вощет
ЧH
ох лол это еще и унарные операторы имеют приоритет ниже функций
ЧH
Кирилл
-23 div 10 ==- 3 -23 % 10 == 7
и почему тут 3?
Кирилл
ох лол это еще и унарные операторы имеют приоритет ниже функций
нормальные люди не используют птичий сленг
ЧH
потому что так работает целочисленное деление на отрицательных числах
Alexander
-23+3=20 делится на 10
ЧH
проверяем 10*(-3)+7=-23
Oleg
У тебя ведь по паре операций для каждой семантики
Oleg
Иногда нужно сделать как раз с дистрибутивной инверсией, и приходится костылитт
Cheese
-23 div 10 ==- 3 -23 % 10 == 7
λ> (-23) `div` 10 -3 λ> (-23) `mod` 10 7 λ> :set -XNegativeLiterals λ> -23 `mod` 10 7
Cheese
потому что в Хаскеле по умолчанию нет отрицательных литералов и унарных операторов
Cheese
есть синтаксический сахар, превращающий - в negate, но, как видите, он не очевидно работает
ЧH
ок разобрался, знач нормально все реализовано. с делением.
Cheese
всё как доктор прописал
Cheese
div, mod, quot, rem
Timofey
Мене, текел, фарес
Anatolii
не понял вопроса
я этим кодом пытался добиться следующего - взять объект json текущего типа и к нему прибавить парочку полей. Вот я теперь думаю как мне это правильно сделать
Alexander
data QQ a = QQ a NewFields?
Alexander
и инстансы для них
A64m
или-паттерны таки немного продвинулись (снова попали на обсуждение комитета) https://mail.haskell.org/pipermail/ghc-steering-committee/2018-June/000601.html
A64m
а то автор был уже, похоже, на вышеупомянутой границе боли и унижения, которые он мог себе позволить https://github.com/ghc-proposals/ghc-proposals/pull/43#issuecomment-393777358
Anatolii
data QQ a = QQ a NewFields?
ну я так уже тоже подумал, проблема в том что там есть еще вложенные поля для которых мне тоже надо такое делать