@ProCxx

Страница 2377 из 2477
Roman
25.09.2018
20:17:23
Не, не путаю. Как я понмаю дженерики не позволяют делать то же самое что шаблоны. Как напирмер в расте сделать класс для моделирования числа произвольной ширины?
Что-то такое как я понмаю в rust сделать нельзя: template <int WIDTH> class ap_int { ino64_t val; public: template <int OTHER_WIDTH> auto operator* (ap_int<OTHER_WIDTH> other) { ap_int<OTHER_WIDTH+WIDTH> res; res.val = val + other.val; } };

Igor
25.09.2018
20:18:07
Что-то такое как я понмаю в rust сделать нельзя: template <int WIDTH> class ap_int { ino64_t val; public: template <int OTHER_WIDTH> auto operator* (ap_int<OTHER_WIDTH> other) { ap_int<OTHER_WIDTH+WIDTH> res; res.val = val + other.val; } };
Non-type template arguments там действительно нет, но говорить из-за этого что там нет шаблонов как минимум странно.

Отсутствие variadic генериков намного более сильное ограничение как по мне :)

Roman
25.09.2018
20:18:45
Ну т.е. в плане compile-time вычислений C++ пока что сильнее

Google
Roman
25.09.2018
20:19:28
В расте мне пришлось бы сделать отдельное поле для хранения ширины

Т.е. в данном случае C++ в два раза эффективнее по памяти

Igor
25.09.2018
20:21:23
Ну т.е. в плане compile-time вычислений C++ пока что сильнее
Минусы тоже есть - архаичная модель компиляции с инклюдами, отсутствие строгой проверки шаблонных аргументов на соответствие требованиям.

Anton
25.09.2018
20:23:36
1. Модули

2. Концепты

Roman
25.09.2018
20:23:52
Основной минус C++ это арахичный синтаксис из Си. Но с другой стороны совместимость с Си это и плюс

Igor
25.09.2018
20:24:06
Второе как я понмаю попытаются пофиксить частично в c++20
Частично, но будет все равно не совсем то. Раст гарантирует что если подстановка удовлетворяет требованиям то все скомпилируется, в C++ такой гарантии не будет. Страуструп говорил на кейноуте CppCon что эксперименты ставились по строгой гарантии, но для обратной совместимости ее не будет.

Roman
25.09.2018
20:26:34
Но навыки чтения ошибок о подстановке шаблонов развиваются с опытом. Сейчас меня это вообще не беспокоит. Концепты нужны скорее для документации

В общем больше всего в C++ бесит легаси и UB, остальное не так больно

Надеюсь статические lifetime и bounds чекеры со временем снизят боль от UB

Непонятно почему в концептах нет "implements" или чего-то похожего

Google
Constantine
25.09.2018
20:32:14
Roman
25.09.2018
20:32:19
хотя наверное получилось бы монструозно: class MyType implements Hashable, Swappable...

ну чтобы при создании класса сразу указать какие концепты он реализовывает

Constantine
25.09.2018
20:32:49
Igor
25.09.2018
20:32:57
В общем больше всего в C++ бесит легаси и UB, остальное не так больно
Ну вот, в расте нет ни того ни другого :) UB надо санитайзерами лечить, остальное полумеры.

Roman
25.09.2018
20:33:45
это пишется статик ассертом
да, можно. Но тогда нужно IDE научить генерить методы по static ассертам

Constantine
25.09.2018
20:35:07
да, можно. Но тогда нужно IDE научить генерить методы по static ассертам
непонятно, концепты же не связаны с методами класса

Roman
25.09.2018
20:35:28
ну в смысле функции

члены класса и свободные

т.е. если написано static_assert(Hashable) IDE должна автоматически генерить специализацию

наверное можно сделать

Igor
25.09.2018
20:36:56
Не получится, там произвольные выражения могут быть в требованиях.

Roman
25.09.2018
20:37:32
т.е. проверить можно, а удовлетворить нельзя?

NP полная проблема

Constantine
25.09.2018
20:38:19
т.е. проверить можно, а удовлетворить нельзя?
инклуды находить научиться надобно

Anton
25.09.2018
20:38:43
Гугл кодстайл полное говно
использовал его тогда, когда это ещё не стало мейнстримом )

сейчас чот посмотрел и там всё поменяли

Aidar
25.09.2018
20:39:07
использовал его тогда, когда это ещё не стало мейнстримом )
В 90-х даже в стд говнл пихали, смотреть на стек ввода вывода

Roman
25.09.2018
20:39:21
Ну гугл кодстайл убил эксепшоны в C++, за это спасибо

Google
Anton
25.09.2018
20:39:27
в 90-х по-моему не было его

Ну гугл кодстайл убил эксепшоны в C++, за это спасибо
ну это многие понимали что не надо их юзать

Roman
25.09.2018
20:40:14
Но там было явно написано что нельзя. Плюс авторитет Гугла

Aidar
25.09.2018
20:40:38
У гугла есть какойто авторитет в сообществе си++ чтоль?

Они же го изобрели ваще

Anton
25.09.2018
20:40:49
вообще как бэ в мире

Они же го изобрели ваще
это недоразумение уже после получилось

у себя кстати они его используют вместо bash / perl / python

Roman
25.09.2018
20:41:26
Хотя Саттер сейчас вроде пытается починить эксепшоны : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r1.pdf

Aidar
25.09.2018
20:41:28
это недоразумение уже после получилось
Это продолжение идеологии отупления программистов ака гугл кодстайл

Anton
25.09.2018
20:41:51
с другой стороны хорошо когда твой код тупой

приятно читать )

Aidar
25.09.2018
20:43:20
В чем проблема? Опять кто-то решил что выброс это легитимный результат?

Roman
25.09.2018
20:43:24
Исключения починить нельзя
Ты читал доку по ссылке? Там очень толковый дизайн предложен

Aidar
25.09.2018
20:43:29
Зачем их чинить

Roman
25.09.2018
20:44:12
Зачем их чинить
Чтобы можно их было юзать. Сейчас по Гугл стайлу все компилируют с -fno-exceptions

Aidar
25.09.2018
20:44:59
Чтобы можно их было юзать. Сейчас по Гугл стайлу все компилируют с -fno-exceptions
Класс, чиним чтобы работало после того как специально отключили

Аутизм

Саттер не для этого делает это есличто

Google
Constantine
25.09.2018
20:45:35
Anton
25.09.2018
20:46:41
On platforms that use the [Itanium ABI], exceptions are required to be allocated on the heap (modulo potential optimizations that are not actually implemented today, such as the proposed LLVM optimization in [Glisse 2013]). Heap allocation requires unpredictable time, even on allocators that avoid global synchronization in the memory allocator

кто-то ещё использует Itanium?

Matwey
25.09.2018
20:47:15
кто-то ещё использует Itanium?
У меня на работе есть один живой вроде

Anton
25.09.2018
20:47:47
а какой плюс, если его можно заменить рандом компом из магазина бытовой электроники?

core i5 какой-нибудь будет быстрее

Matwey
25.09.2018
20:48:57
Это же надо мигрировать бережно настроенную 15 лет назад систему со всеми самопальными сервисами, и всеми БД.

Roman
25.09.2018
20:49:17
кто-то ещё использует Itanium?
Это просто историческое название abi. Сейчас оно используется на всех архитектурах

Anton
25.09.2018
20:49:38
да ладно?

Itanium очень отличался же архитектурно от x86 и всяких там RISC

Roman
25.09.2018
20:50:19
Ну да, и clang и gcc используют itanium abi под x86

Alex Фэils?︙
25.09.2018
20:50:21
Минусы тоже есть - архаичная модель компиляции с инклюдами, отсутствие строгой проверки шаблонных аргументов на соответствие требованиям.
ну, будут концепты и модули, ведь уже вмержили первые и будут мержить два варианта модулей и мержить их в стд

Roman
25.09.2018
20:59:11
Не важно, какой дизайн, expected
Expected такой же ресурсоемкий как эксепшон. Если я правильно понимаю.

Alex Фэils?︙
25.09.2018
21:02:11
у себя кстати они его используют вместо bash / perl / python
про питон это сильно сказано) см. Gyp, GN и прочие го-вна

Roman
25.09.2018
21:03:03
Я думал они все на bazel переводят

Anton
25.09.2018
21:03:27
gyp и gn - это же build systems

Alex Фэils?︙
25.09.2018
21:03:44
а все равно питоноскриптов по кодбазам навалом

Evgeniy
25.09.2018
21:03:50
Google
Anton
25.09.2018
21:04:00
cmake говно )

Roman
25.09.2018
21:04:05
Anton
25.09.2018
21:04:09
почти всё что угодно лучше чем cmake

Evgeniy
25.09.2018
21:04:35
Cmake говно
так и bazel говно, только еще и на жабе

Anton
25.09.2018
21:04:51
Constantine
25.09.2018
21:05:39
Expected такой же ресурсоемкий как эксепшон. Если я правильно понимаю.
Дело не в ресурсоемкости, дело в том, что идеи expected со строгими спецификациями позволяют писать адекватно код

"Функция может вернуть что угодно" просто грубо нарушает всю типизацию возвращаемого значения

Roman
25.09.2018
21:06:28
Дело не в ресурсоемкости, дело в том, что идеи expected со строгими спецификациями позволяют писать адекватно код
Ну если почитать саттера то получится что в 90% случаев эксепшн это не то что вам нужно

Roman
25.09.2018
21:07:52
Т.е. фактически большинство эксепшонов в легаси коде на самом деле являются ошибками а не эксепшонами.

А в тех случаях где они полезные они являются control flow конструкцией, а не способом работы с исключительными ситуациями

Constantine
25.09.2018
21:08:39
Вот смотрите, у меня есть функция, возвращает string, называется "load_string", читает весь файл целиком

Anton
25.09.2018
21:09:29
у меня есть файл 1Tb

ты проиграл

Roman
25.09.2018
21:09:44
Constantine
25.09.2018
21:09:52
Дело не в bad_alloc

Roman
25.09.2018
21:10:02
Команда MS Office это решает именно с помощью эксепшона

Constantine
25.09.2018
21:10:12
Да памяти хватит

Раз в жизни загрузчик ресурсов не найдет файл

Как я должен описать ошибку чтения?

Страница 2377 из 2477