-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80




Форум на Исходниках.RU


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://forum.sources.ru.
Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Были ли люди на Луне

Воскресенье, 27 Июня 2021 г. 15:09 + в цитатник
ya2500: Американский астронавт Олдрин опубликовал таможенную декларацию, которую пришлось заполнить экипажу «Аполлона-11» после возвращения с Луны:

user posted image

Декларацию подписали:

Командир экипажа Нил Армстронг
Пилот Эдвин Юджин Олдрин-младший
Пилот Майкл Коллинз

https://forum.sources.ru/index.php?showtopic=99379&view=findpost&p=3848442


Метки:  

Рекурсивный поиск файлов по маске + копирование файлов

Воскресенье, 27 Июня 2021 г. 13:59 + в цитатник
amk:
Цитата art_ @
Как это в коде записать ?
Ты пишешь
    fnames = ([file for root, dirs, files in os.walk(path)
    for file in files
    if file.endswith('.jpg') or file.endswith('.txt') #or file.endswith('.pdf')
    ])
(Зачем ты правую часть два раза в скобки взял?)
os.walk(path) пробегает по подкаталогам path и для каждого выдаёт полное имя папки, список вложенных в неё папок и список содержащихся в ней файлов.

Что нужно, чтобы получить вместо просто имён с расширениями полные имена? Ответ прост: приписать слева к именам файлов имена папок в которых они лежат.

Так что пишем
    fnames = (path + file for path, dirs, files in os.walk(root)
    for file in files
    if file.endswith(('.jpg', '.txt')) ) # '.pdf'
(возможно ещё разделитель надо добавить)

Цитата art_ @
Установил. Это проблему не решило(.

Добавь куда-нибудь в начало программы строку
    import win_unicode_console; win_unicode_console.enable()

https://forum.sources.ru/index.php?showtopic=421532&view=findpost&p=3848440


Метки:  

Изменение типа переменной в конструкторе и деструкторе - это что за?

Воскресенье, 27 Июня 2021 г. 13:40 + в цитатник
amk:
Цитата OpenGL @
Почему именно 23? До 98 года не было деструкторов?
До 98 года в составе стандарта не было stl. Поэтому не было безопасных контейнеров и приходилось всё делать вручную.

https://forum.sources.ru/index.php?showtopic=421534&view=findpost&p=3848439


Метки:  

UB или нет

Суббота, 26 Июня 2021 г. 11:51 + в цитатник
Dushevny:
Цитата applegame @
Надо либо вообще запретить снимать модификатор const и тем самым исключить случаи модификации констант,
"Не пойдёть!". Яркий пример - константы во флеш-памяти микроконтроллера, которые простой записью в ячнйку изменить невозможно физически. Однако, во время обновления программы, после некоторых шаманских действий, она записывается именно записью в ячейку. Или код, который подготавливает окружение перед запуском main() и инциализирует те самые const-переменные, тоже может быть сам написан на сях или плюсах.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848432


Метки:  

UB или нет

Суббота, 26 Июня 2021 г. 10:47 + в цитатник
applegame:
Цитата Qraizer @
Дай-ка перефразирую: ты выступаешь за то, чтобы семантика языковых конструкций зависела от контекста?
Нет, я топлю за вредоносность UB и оптимизации на них опирающиеся. Число UB от версии к версии компилятора должно уменьшаться, а не расти.
Цитата Qraizer @
Как и желание модифицировать константу. Увидев подобный код, намерений его автора даже человек не поймёт, не то что бездушный компилятор. А спрашивать и не буду, завтра автора за соседним столом не окажется, уволят без пособия.
Так дело то не в качестве этого кода. А в отсутствии здравого смысла (с точки зрения программиста) в поведении компилятора. В данном случае он никак не помогает программисту, а только мешает. Надо либо вообще запретить снимать модификатор const и тем самым исключить случаи модификации констант, либо раз уж C++ такой свободный язык позволяющий все что угодно, то модифицировать константу как написал программист. В общем конкретизировать поведение или объявить его не UB, а IB.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848424


Метки:  

Поиск файлов и архивация

Суббота, 26 Июня 2021 г. 00:04 + в цитатник
art_: Друзья, приветствую!

нужна помощь:
Есть код, который ищет файлы с расширением .txt и упаковывает в архив archive.zip, помещая в папку C:\Files
В архив упаковывается файл и все дерево каталогов вверх до C:\Files.
Вопрос: как упаковать в архив найденные файлы тхт без учета дерева каталогов ?

    import os
    import zipfile
    fantasy_zip = zipfile.ZipFile('C:\Files\archive.zip', 'w')
    for folder, subfolders, files in os.walk('C:\Files'):
    for file in files:
    if file.endswith('.pdf'):
    fantasy_zip.write(os.path.join(folder, file), os.path.relpath(os.path.join(folder,file), 'C:\Files'), compress_type = zipfile.ZIP_DEFLATED)
    fantasy_zip.close()

https://forum.sources.ru/index.php?showtopic=421538&view=findpost&p=3848409


Метки:  

Веселые картинки

Пятница, 25 Июня 2021 г. 23:50 + в цитатник

Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 23:15 + в цитатник
Qraizer: Дай-ка перефразирую: ты выступаешь за то, чтобы семантика языковых конструкций зависела от контекста? :o Прости, но комментировать я это желание не буду. Как и желание модифицировать константу. Увидев подобный код, намерений его автора даже человек не поймёт, не то что бездушный компилятор. А спрашивать и не буду, завтра автора за соседним столом не окажется, уволят без пособия.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848406


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 21:44 + в цитатник
applegame: Пример со сверткой констант:
    static int foo(int m, int n) {
    if (m == 0) return n + 1;
    if (n == 0) return foo(m - 1, 1);
    return foo(m - 1, n - 1);
    }
    int main() {
    int n = 1;
    *const_cast(&n) = foo(10, 12);
    return n;
    }

Компилятор на -O3 отлично сворачивает константу и программа сводится к
    main:
    mov eax, 3
    ret

А теперь добавляем немножко UB:
    static int foo(int m, int n) {
    if (m == 0) return n + 1;
    if (n == 0) return foo(m - 1, 1);
    return foo(m - 1, n - 1);
    }
    int main() {
    const int n = 1;
    *const_cast(&n) = foo(10, 12);
    return n;
    }

И, конечно же, компилятор разрешая программисту модифицировать константу (а он отлично об этом знает, судя по первому примеру), игнорирует эту модификацию:
    main:
    mov eax, 1
    ret

Я конечно понимаю, что компилятор имеет право так делать. UB - что хочу то и возвращаю. Но я не понимаю в чем смысл этой оптимизации? Она не дает никакого прироста в скорости и с вероятностью 99.9999% делает не то, что ожидает программист. Какова цель разрешать программисту писать хаки, но при этом не выполнять их?

Добавлено
Цитата Qraizer @
И вообще, если б мы хотели более полной свободы в самовыражении своих идей, оставив всю заботу о технических аспектах компилятору, мы б просто взяли другой язык. Не так ли?
Так в том-то и дело, что компилятор своими бесполезными UB-оптимизациями режет нам эту свободу. Вот мне надо модифицировать константу, и все тут. А компилятор показывает нам кукиш. Причем делает это молча, без возражений.
А ведь мог бы нормально соптимизировать не опираясь на понятие UB, как в первом примере.
То есть отсутвие опоры на UB ни разу не мешает компилятору свернуть константу, просто вот так захотелось разработчикам компилятора. Экономят время компиляции что ли?

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848399


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 21:43 + в цитатник
Qraizer: P.S. Ладно, я домой. Позже буду. Когда ж на Холивары время-то будет...

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848398


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 21:30 + в цитатник
Qraizer:
Цитата applegame @
Если компилятор не в состоянии это доказать, то он обязан не делать эту оптимизацию.
А в целом, компиляторы и так не делают много из того, что могли бы, если б не их опасения о нас родимых. Скажем, ссылки позволяют компилятору куда больше, чем указатели на их месте.

Добавлено
Цитата applegame @
Так а если убрать UB из Стандарта, то насколько сильно это свяжет руки оптимизаторам? Действительно ли намертво свяжет и -O3 практически перестанет отличаться от -O0?
Сильно свяжет. Ещё раз: мы же хотим, чтобы компилятор всё сделал за нас. Нынче мы получаем от них объектный код, который в большинстве случаев идеален или недалёк от него для этого типа процессоров. За счёт чего, как думаешь? Риторический вопрос.

Добавлено
И вообще, если б мы хотели более полной свободы в самовыражении своих идей, оставив всю заботу о технических аспектах компилятору, мы б просто взяли другой язык. Не так ли?

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848397


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 21:28 + в цитатник
applegame:
Цитата Qraizer @
Возвращаясь к тезису, я даже больше скажу. UB в Стандарте и присутствует как раз для того, чтобы максимально развязать руки оптимизаторам.
Так а если убрать UB из Стандарта, то насколько сильно это свяжет руки оптимизаторам? Действительно ли намертво свяжет и -O3 практически перестанет отличаться от -O0?
Я склонен считать, что современные компиляторы и их бэкенды достаточно мощны, чтобы в среднестатистической программе в большинстве случаев распознавать отсутствие неопределенностей и включать оптимизацию на полную.
То бишь я считаю что введение UB было актуально много лет назад, когда компиляторы и компьютеры были относительно слабыми для таких фокусов.

Добавлено
Более того, я считаю, что большинство оптимизаций основанных на предположении отсутствия UB еще и совершенно бесполезны. Примеры сейчас приведу.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848396


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 21:19 + в цитатник
Qraizer: Возвращаясь к тезису, я даже больше скажу. UB в Стандарте и присутствует как раз для того, чтобы максимально развязать руки оптимизаторам. Всё, что может их поломать, отнесено к UB. Увы, мы хотим, чтобы компилятор, когда строит отображение виртуальной исполнительной C/C++ машины на реальный процессор, всё сделал за нас, исходя из его знаний о нём и его особенностях. К сожалению, компилятор видит лишь то, что мы ему написали, а не то, что мы имели в голове, когда писали, и ему категорически сложно бывает нас понять. Есть языки, которые позволяют многое рассказать компилятору о нашим намерениях, например Ада. Там заманаешься объяснять компилеру каждый свой чих, и нам это также не нравится, как и полная анархия. Плюсы давно уже идут по пути декларативности намерений, буквально с первого Стандарта. Найти золотую середину между чёткой формализацией своих идей и полнотой свободы компилятору бывает непросто.

Добавлено
Цитата applegame @
Это не перевод. Автор просто несколько косноязычный. Перефразирую то, о чем был спор.
Похоже, я заглянул в твой ещё не написанный пост.

Добавлено
Цитата applegame @
Автор тезиса утверждает, что такой компилятор C/C++ вообще почти ничего не сможет оптимизировать.
Он близок к истине. Не настолько категорично, но да, компиляторы вернутся в начало 90-ых.
В догонку, если вы там ещё спорите, то могу посоветовать в качестве контраргумента то, что понятие доказательства является довольно нечётким термином, и что те оптимизации, которые мы сейчас имеем на стороне фронт-энда, являются строго и математически выведенными и показаны их безопасность. (За бак-энд оптимизацию говорить, думаю, тут будет вне контекста, мы ж не ассемблер обсуждаем.) Так что пусть расслабится, уже "всё" доказано до нас. Но за это надо платить соблюдением формальных правил, которые требуют не впадать в UB, иначе вся математика летит к чертям.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848395


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 21:08 + в цитатник
applegame:
Цитата Qraizer @
Бессмысленный тезис. Если это перевод, то паршивый. Правильно, как я могу предположить, "все оптимизации имеют право положить на любые предположения, когда встречают UB".
Это не перевод. Автор просто несколько косноязычный. Перефразирую то, о чем был спор.
Что будет если мы изменим текущее поведение компилятора. И разрешим ему выполнять конкретную оптимизацию только в тех случаях когда компилятор способен доказать, что эта оптимизация никак не меняет результат работы программы по сравнению с неоптимизированной версией (ну кроме времени выполнения, конечно). Если компилятор не в состоянии это доказать, то он обязан не делать эту оптимизацию. Допустим если компилятор встретил чтение из неинициализированной переменной, то ему запрещено делать любые предположения, и предписывается реально читать результат из этой переменной.
Автор тезиса утверждает, что такой компилятор C/C++ вообще почти ничего не сможет оптимизировать.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848394


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 20:46 + в цитатник
Qraizer:
Цитата applegame @
Интересно, что скажет Qraizer на следующий тезис?
Бессмысленный тезис. Если это перевод, то паршивый. Правильно, как я могу предположить, "все оптимизации имеют право положить на любые предположения, когда встречают UB".

Добавлено
Как пример. Есть одно правило. В вольном "переводе" оно требует, чтобы в программе не было контекстов, где указатели (без учёта cv-квалификации) разных типов, кроме как один из них void*, ссылались бы на один и тот же объект или его подобъекты. Это даёт хорошие варианты оптимизатору, при которых программист маловероятно, что ненароком что-то сломает. Например:
    void f(int* ptr1, char* ptr2)
Тут оптимизатор имеет право считать, что ptr1 и ptr2 гарантировано указывают на разные объекты и оптимизировать подссыльные им объекты исходя из этого. Конечно, если программер вызовет такую функцию как
    extern unsigned char buffer[];
    f((int*)buffer, (char*)buffer);
пенять на оптимизатор будет неправильно. Но вот тут
    void f(int* ptr1, int* ptr2)
такого предположения оптимизатор делать уже не вправе, и поэтому оптимизация тех же объектов будет значительно консервативнее, и программер с проблемами столкнуться не должен.

Добавлено
P.S. В C99 ввели restricted для поинтеров как раз с целью упростить жизнь. Но практика показала, что это не работает. Лишь в малом количестве случаев компилятор способен обнаружить нарушения, а программеры часто всё равно ошибаются, предоставляя гарантии, которых на самом деле нет. Так что Плюсы остались без оного нововведения.

Добавлено
P.P.S. "Имеют право" не означает "обязательно будут", естественно.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848392


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 20:39 + в цитатник
OpenGL:
Цитата Qraizer @
Если откасуешь к указателю, то UB ещё в первой строке, т.к. адресная арифметика не определена на масштабах, выходящих за рамки одного массива объектов. (Отдельный объект равносилен массиву из одного элемента.)

А, понятно тогда.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848391


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 20:39 + в цитатник
applegame: Интересно, что скажет Qraizer на следующий тезис?
Цитата
Вообще-то, внезапно, все оптимизации (ну или почти все) опираются на UB. То есть буквально, я не могу, навскидку, придумать никакой оптимизации C кода, которая бы не ломала какую-либо программу с UB.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848390


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 20:38 + в цитатник
OpenGL:
Цитата Qraizer @
nullptr – это не указатель, это значение специального типа std::nullptr_t

Да, точно, я на коленке придумал пример. Предполагается, что nullptr кастуем к decltype(valid_ptr), valid_ptr - некий указатель на объект.

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848389


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 20:21 + в цитатник
Qraizer: Если быстро, т.к. некогда лезть в Стандарт, то не должно скомпилиться. nullptr – это не указатель, это значение специального типа std::nullptr_t, причём единственное в нём, других не существует. Адресная арифметика с ним, вроде бы, не определена, вот в этом не уверен, не помню. Скорее всего, т.к. его равнопредпочтительно можно привести и к указателю, и к целому, а это сильно разные операции в адресной арифметике.

Добавлено
  • Если откастуешь к целому, то auto diff будет указателем и не скомпилится вторая строка. Кроме как nullptr откастуешь там к целому.
  • Если откасуешь к указателю, то UB ещё в первой строке, т.к. адресная арифметика не определена на масштабах, выходящих за рамки одного массива объектов. (Отдельный объект равносилен массиву из одного элемента.)


Добавлено
Подозреваю, что в строках 1 и 2 предполагаются разные касты. Не?

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848387


Метки:  

UB или нет

Пятница, 25 Июня 2021 г. 20:08 + в цитатник
OpenGL: Навеяно одной дискуссией. Непонятно, есть ли UB в коде или нет.
    auto diff = valid_ptr - nullptr;
    auto x = nullptr + diff;
    std::cout << (x == valid_ptr); // гарантирует ли стандарт, что тут будет выведено true? Если нет, то почему?
    std::cout << *x; // Если ответ на прошлый вопрос "да", то есть ли тут UB?

https://forum.sources.ru/index.php?showtopic=421537&view=findpost&p=3848385


Метки:  

Поиск сообщений в rss_forum_sources_ru
Страницы: 2628 ... 2568 2567 [2566] 2565 2564 ..
.. 1 Календарь