Re[7]: Как в одну строку кода прочитать содержимое файла в м
От: rg45 СССР  
Дата: 08.01.24 11:06
Оценка:
Здравствуйте, Kluev, Вы писали:

R>>Что-то еще? Ты там про триллион багов говорил.


K>А тебе мало что ли? В с++ функцию из трех букв нельзя написать не сделав три ошибки. Что говорит о том что дизайн языка и библиотеки — мусор.


Ну ты обещал триллион багов, а сгенерировал лишь одну придирку. Практически невоспроизводимую, которая к тому же была пофикшена еще до того, как ты оформил эту придирку.

Ладно, мне все ясно, короче. Ты не ищешь решения какой-либо задачи, тебе просто захотелось похоливарить про мелкобуквы и комитет.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 08.01.2024 11:16 rg45 . Предыдущая версия . Еще …
Отредактировано 08.01.2024 11:12 rg45 . Предыдущая версия .
Отредактировано 08.01.2024 11:11 rg45 . Предыдущая версия .
Re[13]: Как в одну строку кода прочитать содержимое файла в м
От: B0FEE664  
Дата: 08.01.24 11:07
Оценка: 10 (1)
Здравствуйте, ·, Вы писали:

BFE>>Каким образом имплементация операционной системы может оказаться в стандарте языка?

·>Как и всё остальное. В стандарте же есть, например, std::thread, а ведь имплементация тредов в операционках везде очень разная.
Не согласен. std::thread не обязана опираться на систему. Теоретически компилятор может генерировать такой код, который сам занимается распараллеливанием без использования ресурсов системы.

·> Наиболее вменяемая имплементация есть в jdk, и в две строчки не укладывается, потому что не так уж это всё и тривиально.


По тем же причинам
Автор: B0FEE664
Дата: 04.01 17:23
я не могу согласится, что это вменяемая имплементация. Но есть и ещё причины. Например, если этой функцией читать из последовательного порта, то что будет? Исключение? А почему, собственно?

Ну и вы называете вот это:

buf = Arrays.copyOf(buf, capacity);

вменяемой имплементацией?

Далее:
       try (SeekableByteChannel sbc = Files.newByteChannel(path);

— я правильно понимаю, что файлы отличные от обычных, типа "/proc/self/status" прочитать нельзя?
            if (sbc instanceof FileChannelImpl)
                ((FileChannelImpl) sbc).setUninterruptible();

— я правильно понимаю, что это проверка типа и приведение типа? Если да, то это не может считаться нормальным.

long size = sbc.size();

И что будет, если другой процесс параллельно пишет в этот файл?

            if (size > (long) Integer.MAX_VALUE)
                throw new OutOfMemoryError("Required array size too large");

Почему Integer.MAX_VALUE ? Зачем "гвоздями прибили"?
И каждый день — без права на ошибку...
Re[14]: Как в одну строку кода прочитать содержимое файла в м
От: rg45 СССР  
Дата: 08.01.24 11:28
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Почему Integer.MAX_VALUE ? Зачем "гвоздями прибили"?


Ну, на этот вопрос они ответили
Автор: ·
Дата: 08.01 01:01
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[14]: Как в одну строку кода прочитать содержимое файла в м
От: · Великобритания  
Дата: 08.01.24 11:44
Оценка: :)
Здравствуйте, B0FEE664, Вы писали:

BFE>·>Как и всё остальное. В стандарте же есть, например, std::thread, а ведь имплементация тредов в операционках везде очень разная.

BFE>Не согласен. std::thread не обязана опираться на систему. Теоретически компилятор может генерировать такой код, который сам занимается распараллеливанием без использования ресурсов системы.
Ну господи, прикопался. Дохрена же других примеров. system_clock, std::fopen в конце концов.

BFE>·> Наиболее вменяемая имплементация есть в jdk, и в две строчки не укладывается, потому что не так уж это всё и тривиально.

BFE>По тем же причинам
Автор: B0FEE664
Дата: 04.01 17:23
я не могу согласится, что это вменяемая имплементация. Но есть и ещё причины. Например, если этой функцией читать из последовательного порта, то что будет? Исключение? А почему, собственно?

Будет читать до EOF, ну или до OOM если слишком дофига данных придёт, если я ничего не напутал.

BFE>Ну и вы называете вот это:

BFE>

BFE>buf = Arrays.copyOf(buf, capacity);

BFE>вменяемой имплементацией?
Конечно. В том случае, если capacity != nread. Это то, что было пропущено в предложенном выше двухстрочном решении, которое будет возвращать мусор.

BFE>Далее:

BFE>
BFE>       try (SeekableByteChannel sbc = Files.newByteChannel(path);
BFE>

BFE>- я правильно понимаю, что файлы отличные от обычных, типа "/proc/self/status" прочитать нельзя?
Не правильно понимаешь.

BFE>
BFE>            if (sbc instanceof FileChannelImpl)
BFE>                ((FileChannelImpl) sbc).setUninterruptible();
BFE>

BFE>- я правильно понимаю, что это проверка типа и приведение типа? Если да, то это не может считаться нормальным.
Это внутренняя для jdk оптимизация.

BFE>
BFE>long size = sbc.size();
BFE>

BFE>И что будет, если другой процесс параллельно пишет в этот файл?
Ничего интересного. Ещё раз повторяю — size это hint.

BFE>
BFE>            if (size > (long) Integer.MAX_VALUE)
BFE>                throw new OutOfMemoryError("Required array size too large");
BFE>

BFE>Почему Integer.MAX_VALUE ? Зачем "гвоздями прибили"?
Потому что это тип, ограничивающий допустимый размер массивов. Как size_t в плюсах. Что тоже в двухстрочнике было пропущено. Если файл не умещается в допустимый размер массивов надо не тупо UB как плюсовики любят, а явно проверять и кидать документированную ошибку.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[15]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 08.01.24 11:55
Оценка:
Здравствуйте, ·, Вы писали:

·>Как size_t в плюсах


Ну, не совсем как в плюсах — есть небольшое отличие — в четыре миллиарда раз (ну это если практически).

·>Что тоже в двухстрочнике было пропущено.


В двустрочнике, про который было сказано (несколько раз по ходу обсуждения), что он не претендует быть функцией общего применения, нужно было проверить, что размер файла не превышает 18 миллионов терабайт? Вы это серьезно?

·>Ну господи, прикопался.


Ну это еще вопрос, кто к кому прикопался.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 08.01.2024 11:59 rg45 . Предыдущая версия . Еще …
Отредактировано 08.01.2024 11:56 rg45 . Предыдущая версия .
Re[16]: Как в одну строку кода прочитать содержимое файла в
От: · Великобритания  
Дата: 08.01.24 12:08
Оценка:
Здравствуйте, rg45, Вы писали:

R>·>Как size_t в плюсах

R>Ну, не совсем как в плюсах — есть небольшое отличие — в четыре миллиарда раз (ну это если практически).
Насколько эта разница практична — я сомневаюсь. При наличии mmf в jdk — бессмысленно огорчаться по такому поводу. Кому может вообще понадобится читать гигабайты таким образом — я не знаю, но детерминированное поведение и обработка ошибок — полезна всегда.

R>·>Что тоже в двухстрочнике было пропущено.

R>В двустрочнике, про который было сказано (несколько раз по ходу обсуждения), что он не претендует быть функцией общего применения, нужно было проверить, что размер файла не превышает четыре миллиона терабайт? Вы это серьезно?
Что он не превышает SIZE_MAX. Хотя бы static assert нужен, т.е. ещё одна строчка в твой двухстрочник, если ты пытаешься написать вменяемый код, а не happy debugging.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[17]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 08.01.24 12:14
Оценка:
Здравствуйте, ·, Вы писали:

·>Насколько эта разница практична — я сомневаюсь. При наличии mmf в jdk — бессмысленно огорчаться по такому поводу. Кому может вообще понадобится читать гигабайты таким образом — я не знаю, но детерминированное поведение и обработка ошибок — полезна всегда.


А если нет, то что страшного произойдет? И при каких условиях это возможно? Вот это и есть "докопаться до столба".

·>Что он не превышает SIZE_MAX. Хотя бы static assert нужен, т.е. ещё одна строчка в твой двухстрочник, если ты пытаешься написать вменяемый код, а не happy debugging.


SIZE_MAX, assert, говоришь. Слушай, а мне пришла в голову отличная идея — а давай, ты подправишь тот пример, покажешь, как должно было быть, а я подо.бываюсь? Как тебе такая идея?
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 08.01.2024 12:21 rg45 . Предыдущая версия . Еще …
Отредактировано 08.01.2024 12:20 rg45 . Предыдущая версия .
Отредактировано 08.01.2024 12:15 rg45 . Предыдущая версия .
Отредактировано 08.01.2024 12:14 rg45 . Предыдущая версия .
Re[12]: Как в одну строку кода прочитать содержимое файла в м
От: Kluev  
Дата: 08.01.24 12:38
Оценка: +1 :)
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Kluev, Вы писали:


K>>хм. несуществующий велосипед "победил" стандартное решение. самому не смешно?


R>Я отвечал на вопрос, почему в std нет аналога ReadAllBytes, только и всего. Аналоги горбатых поделок в std не нужны.


Весь std это горбатая поделка от головы. iostream страуструп написал на спор, а stl диссертация степанова. От реальной жизни нет там ничего. Поэтому все кривое, до сих пор выпрямляется и будет выпрямляться до тех пор пока не вынесут из стандарта как мусор.
Re[8]: Как в одну строку кода прочитать содержимое файла в м
От: Kluev  
Дата: 08.01.24 12:48
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, Kluev, Вы писали:


K>>стандарт С++ не знает что такое библиотека, проект и другие "ненужные" вещи. в итоге чтобы собрать некоторые проекты нужно качать питон, какие-то левые скрипты и т.п. миллион костылей.

BFE>Это не проблемы языка, а наоборот преимущество: каждый может организовать работу так, как считает нужным.

А пупок у тебя не развяжется от организации работ?
Исходя из этой логики комитет вообще не нужен. Пусть каждый создает себе свой С++ так как считает нужным.
Re[13]: Как в одну строку кода прочитать содержимое файла в м
От: rg45 СССР  
Дата: 08.01.24 12:48
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Весь std это горбатая поделка от головы. iostream страуструп написал на спор, а stl диссертация степанова. От реальной жизни нет там ничего. Поэтому все кривое, до сих пор выпрямляется и будет выпрямляться до тех пор пока не вынесут из стандарта как мусор.


То есть, тебе нужно было в одной горбатой поделке найти аналог другой горбатой поделки и для этого ты создал тему
Автор: Kluev
Дата: 02.01 15:30
?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[15]: Как в одну строку кода прочитать содержимое файла в м
От: B0FEE664  
Дата: 08.01.24 13:23
Оценка:
Здравствуйте, ·, Вы писали:

BFE>>Не согласен. std::thread не обязана опираться на систему. Теоретически компилятор может генерировать такой код, который сам занимается распараллеливанием без использования ресурсов системы.

·>system_clock,
Бесполезный класс. Его можно использовать ровно для одной цели — обнаружения, что часы были переведены. Вообще std::chrono плохо годится для практического использования по крайней мере до С++20.

·>std::fopen в конце концов.

Работает с абстрактным типом std::FILE* и "The format of filename is implementation-defined". Не поддерживается на системах без файловой системы.

BFE>>Ну и вы называете вот это:

BFE>>

BFE>>buf = Arrays.copyOf(buf, capacity);

BFE>>вменяемой имплементацией?
·>Конечно. В том случае, если capacity != nread. Это то, что было пропущено в предложенном выше двухстрочном решении, которое будет возвращать мусор.
И сколько таких переаллокаций памяти будет?

BFE>>Далее:

BFE>>
BFE>>       try (SeekableByteChannel sbc = Files.newByteChannel(path);
BFE>>

BFE>>- я правильно понимаю, что файлы отличные от обычных, типа "/proc/self/status" прочитать нельзя?
·>Не правильно понимаешь.
Разве "/proc/self/status" Seekable? Кстати, последовательный порт точно не Seekable...

  Скрытый текст
BFE>>
BFE>>            if (sbc instanceof FileChannelImpl)
BFE>>                ((FileChannelImpl) sbc).setUninterruptible();
BFE>>

BFE>>- я правильно понимаю, что это проверка типа и приведение типа? Если да, то это не может считаться нормальным.

·>Это внутренняя для jdk оптимизация.
Что с того? Код некрасивый.

BFE>>
BFE>>            if (size > (long) Integer.MAX_VALUE)
BFE>>                throw new OutOfMemoryError("Required array size too large");
BFE>>

BFE>>Почему Integer.MAX_VALUE ? Зачем "гвоздями прибили"?
·>Потому что это тип, ограничивающий допустимый размер массивов. Как size_t в плюсах.
В C++ у size_t нет ограничений по максимуму. Он может быть 1024-х битным, например. В Java так же?
И каждый день — без права на ошибку...
Re[9]: Как в одну строку кода прочитать содержимое файла в м
От: B0FEE664  
Дата: 08.01.24 13:26
Оценка:
Здравствуйте, Kluev, Вы писали:

K>А пупок у тебя не развяжется от организации работ?

У меня — нет. С++ не для слабаков. Настоящие программисты не используют Паскаль.

K>Исходя из этой логики комитет вообще не нужен. Пусть каждый создает себе свой С++ так как считает нужным.

Стандарт нужен для унификации кода для разных платформ.
И каждый день — без права на ошибку...
Re[15]: Как в одну строку кода прочитать содержимое файла в м
От: B0FEE664  
Дата: 08.01.24 13:28
Оценка:
Здравствуйте, rg45, Вы писали:

R>Ну, на этот вопрос они ответили
Автор: ·
Дата: 08.01 01:01

Не, это про другой язык.
И каждый день — без права на ошибку...
Re[13]: Как в одну строку кода прочитать содержимое файла в м
От: B0FEE664  
Дата: 08.01.24 13:31
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Весь std это горбатая поделка от головы. iostream страуструп написал на спор, а stl диссертация степанова. От реальной жизни нет там ничего. Поэтому все кривое, до сих пор выпрямляется и будет выпрямляться до тех пор пока не вынесут из стандарта как мусор.


А слабо показать на нормальный международный стандарт?
И каждый день — без права на ошибку...
Re[18]: Как в одну строку кода прочитать содержимое файла в
От: Kluev  
Дата: 08.01.24 13:32
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ·, Вы писали:


R>·>Насколько эта разница практична — я сомневаюсь. При наличии mmf в jdk — бессмысленно огорчаться по такому поводу. Кому может вообще понадобится читать гигабайты таким образом — я не знаю, но детерминированное поведение и обработка ошибок — полезна всегда.


R>А если нет, то что страшного произойдет? И при каких условиях это возможно? Вот это и есть "докопаться до столба".


R>·>Что он не превышает SIZE_MAX. Хотя бы static assert нужен, т.е. ещё одна строчка в твой двухстрочник, если ты пытаешься написать вменяемый код, а не happy debugging.


R>SIZE_MAX, assert, говоришь. Слушай, а мне пришла в голову отличная идея — а давай, ты подправишь тот пример, покажешь, как должно было быть, а я подо.бываюсь? Как тебе такая идея?


Зачем править твой пример если ему место только на помойке?
Функция здорового человека должна открывать файл в небуферизированном режиме и читать сразу в выделенную область памяти.
Твоя поделка открывает файл в буфферизированном режиме, читает сначала во внутренний буффер ifstream, предварительно его аллоцируя, а из буффера перекидывает в целевой массив.
Можно конечно возразить, что это в микрософте херновая имплементация гениальных высокопроизводительных комитетских идей, но в действительности какие идеи, такая и имплементация.
Re[14]: Как в одну строку кода прочитать содержимое файла в м
От: Kluev  
Дата: 08.01.24 13:33
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Kluev, Вы писали:


K>>Весь std это горбатая поделка от головы. iostream страуструп написал на спор, а stl диссертация степанова. От реальной жизни нет там ничего. Поэтому все кривое, до сих пор выпрямляется и будет выпрямляться до тех пор пока не вынесут из стандарта как мусор.


R>То есть, тебе нужно было в одной горбатой поделке найти аналог другой горбатой поделки и для этого ты создал тему
Автор: Kluev
Дата: 02.01 15:30
?


Мне нужно было стандартное детерминированное решение как в шарпе. Оказалось что в цпп по прежнему ничего нет кроме бесполезных косоруких полуфабрикатов из которых ничего кроме говнокода состряпать нельзя.
Re[19]: Как в одну строку кода прочитать содержимое файла в
От: rg45 СССР  
Дата: 08.01.24 13:35
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Зачем править твой пример если ему место только на помойке?

K>Функция здорового человека должна открывать файл в небуферизированном режиме и читать сразу в выделенную область памяти.
K>Твоя поделка открывает файл в буфферизированном режиме, читает сначала во внутренний буффер ifstream, предварительно его аллоцируя, а из буффера перекидывает в целевой массив.
K>Можно конечно возразить, что это в микрософте херновая имплементация гениальных высокопроизводительных комитетских идей, но в действительности какие идеи, такая и имплементация.

Моя поделка в две строчки имеет твою "функцию здорового человека", вместе с расчудесной "платформой" во все дырки.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 08.01.2024 13:39 rg45 . Предыдущая версия .
Re[15]: Как в одну строку кода прочитать содержимое файла в м
От: rg45 СССР  
Дата: 08.01.24 13:38
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Мне нужно было стандартное детерминированное решение как в шарпе. Оказалось что в цпп по прежнему ничего нет кроме бесполезных косоруких полуфабрикатов из которых ничего кроме говнокода состряпать нельзя.


По сравнению с возможностями, которые предоставляет тебе твое "решение в шарпе", мой "полуфабрикат" в две строчки дает возможности значительно расширенные.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[16]: Как в одну строку кода прочитать содержимое файла в м
От: Kluev  
Дата: 08.01.24 13:41
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Kluev, Вы писали:


K>>Мне нужно было стандартное детерминированное решение как в шарпе. Оказалось что в цпп по прежнему ничего нет кроме бесполезных косоруких полуфабрикатов из которых ничего кроме говнокода состряпать нельзя.


R>По сравнению с возможностями, которые предоставляет тебе твое "решение в шарпе", мой "полуфабрикат" в две строчки дает возможности значительно расширенные.


Расширены они только твоими фантазиями.
Re[17]: Как в одну строку кода прочитать содержимое файла в м
От: rg45 СССР  
Дата: 08.01.24 13:43
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Расширены они только твоими фантазиями.


Не только: http://rsdn.org/forum/cpp/8663625.1
Автор: rg45
Дата: 07.01 21:59


Unhandled exception. System.IO.IOException: The file is too long. This operation is currently limited to supporting files less than 2 gigabytes in size.
   at System.IO.File.ReadAllBytes(String path)
   at ConsoleApp1.Program.Main(String[] args) in E:\Development\VS2022\ConsoleApp1\Program.cs:line 8

E:\Development\VS2022\ConsoleApp1\bin\Release\net8.0\ConsoleApp1.exe (process 644) exited with code -532462766.
Press any key to close this window . . .
--
Не можешь достичь желаемого — пожелай достигнутого.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.