пользоваться надо правильными инструментами. и да, в программировании много тонкостей
это случай «используйте правильные инструменты для ожидания», если я верно понимаю
либо «используйте правильные инструменты для ожидания», либо нет смысла.
либо «используйте правильные инструменты для ожидания», либо нет смысла.
либо «используйте правильные инструменты для ожидания», либо нет смысла.
Эти отмазки ни вам, ни языку который вы защищаете чести не делают. Просто скажите - язык плохо сдизайнен - это правда, вы в этом не виноваты и это не порождает споров. Все претензии тут валидны, все ваши ответы пустые, и так можно ответить вообще на любой баг.
Почему struct{} занимает 1 байт? Почему я могу сделать delete new int[10] и delete[] new int? Можно долго рассказывать про то у каждого объекта должно быть адрес, а зачем - а затем что такова модель памяти поскольку она должна поддерживать такие-то инварианты арифметики указателей и никак нельзя чтобы адреса разных объектов были одинаковые, и такова система типов, поскольку она должна быть совместима с тем-то и тем-то тянущимся уже из C и ну никак не может быть в ней выражено как именно аллоцировался указатель.
А вот дальше можно либо развести ручками и признать что, дескать, да - не подумали и/или нужно тянуть совместимость с сями, поэтому есть такие косяки, а никакой объективной необходимости в них конечно же нет. А можно топнуть ножкой и сказать что сделано правильно, потому что как же может быть иначе, а не нравится - значит неправильно используешь инструмент и вообще ничего не понимаешь.
Только во втором случае неминуемо приходит какой-нибудь сраный rust и внезапно проводит по губам тем что почему-то и size_of::<()>() == 0 может быть, и даже Box<T> != Box<[T]>, и программы от такого богохульства, о ужас, не разваливаются, а только логичнее и быстрее становятся. И, чсх, loop {} там работает просто как бесконечный цикл, без UB и исключений из UB, и даже оптимизациям это не мешает.
anonymous
()