Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет superhuman ([info]superhuman)
@ 2014-06-12 10:07:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
В высокоуровневых ЯП обычно есть функции, чтобы прочесть файл в байт-массив (байт-строку) и, наоборот, сбросить массив в файл. Идея в том, чтобы не париться со всякими буферами хуюферами, и в одну строчку такую задачу решать.

Понадобилось мне нонче iso-шки читать как блобы и переколбашивать их. Выясняется, что на больших файлах эти самые функции не работают! (в трёх ЯП, как минимум) В racket-е (с чего я начал), читается не более 380 мб, записывается не более 700 мб, - причём без всяких эксепшенов.

Потом позырил дотнет - там до .net-4.5 вообще никакие объекты не могли быть больше 2 гб в памяти. Нахуйя мне 32 гб рамы, спрашивается? Ну ладно, в 4.5 они типа поддерживают больше, но индексы в массивах всё равно 32-битного типа, т.е. байт-массив всё равно не может быть больше 2 гб. Ебанись.

Посмотрел байт-строки haskell-а, но там тоже индекс типа 32-битного integer-а. Хотел посмотреть ещё в J, но в онлайне не нашёл соответствующей документации. Хотя и пишут, что эта система "true 64 bit", но доверия уже никому нет. Надо будет попробовать всё же, J и сам по себе интересен.

Короче, вернулся к схеме и хуярю этими самыми чанками / буферами. Так-то работает, и не так много онанизма, в схеме всё-же индексы могут быть большие. Но всё равно, ощущение от этого кодостиля, блядь, что это 70-й год примерно.


(Читать комментарии) - (Добавить комментарий)


[info]ketmar
2014-06-14 23:23 (ссылка)
и это тоже фигня, на самом деле. да ещё и неправильная, потому что printf() возвращает или отрицательное число, или количество выведеных символов, а main() при успехе должен возвращать 0. поэтому для полной корректности надо делать return (printf("hello world\n") == 12 ? EXIT_SUCCESS : EXIT_FAILURE). не забывая о том, что волшебное число 12 следует держать в синхронизации с количеством символов, которые должны быть напечатаны.

да-да, EXIT_FAILURE — это единственный переносимый способ вернуть правильный код "пиздец" из main().

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2014-06-15 00:12 (ссылка)
Ну, такой ебанизм, наверное, только в языках без исключений.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2014-06-15 00:17 (ссылка)
тем не менее, оно есть. и, как оказывается, приветмир — программа вовсе не такая тривиальная. поэтому никогда не надо приводить её в качестве примера «простейшей программы», гыг.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2014-06-15 01:18 (ссылка)
Ну, можно на ассемблере ещё написать её. Тогда ебаться ещё больше надо будет, и что? Я не получаю удовольствия от низкоуровневой ебли.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2014-06-15 01:29 (ссылка)
а тебя никто не спрашивает, низкий уровень всё равно вылезет, хочешь ты того или нет. вот закончится у тебя память — и всё, твоя чудесная программа трапнется, проебав результаты многодневных вычислений, например.

ну да, «я могу повесить обработчик трапа и сохранить промежуточные результаты». или «я могу добыть их из кородампа, который… блядь, я забыл включить». но это уже низкий уровень, презренные материи, до которых чистой математике дела быть не должно.

я, собственно, к тому, что привычка забивать на такие штуки однажды вылезет боком. а если ты думаешь о таком на уровне рефлексов, то, например, ставишь assert()'ы после вызова read(), хотя документация и обещает, что read() отработает нормально.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2014-06-15 04:07 (ссылка)
Ну и хуй с ним. Вылезет - починим. И сколько б ты ни тужился, пытаясь написать bulletproof код с первого захода, всё равно уйдут годы, чтобы он стал зрелым.

Это и в жизни проявляется. Некоторые накупят страховок, например, на скалолазание не ходят или ещё чего. Жизнь в страхе, не жизнь даже, а так, существование. Годы унылой жизни, а потом всё равно в могилу.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2014-06-15 10:40 (ссылка)
ну, я тут где-то писал про настоящих сварщиков. у настоящих код, который забивает на ошибки, результатом считать не принято. профдеформация. забавно сказывается даже на throwaway utilities, где совершенно автоматически пишешь проверки даже на облажавшийся malloc(), хотя точно знаешь, что утилита одноразовая, и что больше пары килобайт она не выделяет.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2014-06-15 15:24 (ссылка)
Если ты понимаешь, что это психическое отклонение, то ты можешь попытаться его подлечить.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2014-06-15 15:28 (ссылка)
зачем? чтобы стать сварщиком похуже? написания этих проверок автоматические, они не отнимают ресурсов и не требуют почти никакого дополнительного времени. вот ещё, ломать с трудом наработаные рефлексы.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2014-06-15 15:37 (ссылка)
- Вы страдаете от мании величия?
- Что вы, доктор, я ею наслаждаюсь!

(Ответить) (Уровень выше)


(Читать комментарии) -