Насколько я помню, был большой спор про UFCS — возможность вызывать свободные функции как методы классов, но передавая инстанс первым аргументом. Как с этим дела?
Мне, к примеру, пришёл в голову такой вариант:
a |> f(b, c)
// превращается в
f(a, b, c)
т.е. через отдельный оператор. Хотя их, наверное, и так хватает.
(1) Я тихонько надеялся, что хотя бы о необходимости прототипа начинают задумываться. Впорчем, это отдельная тема для разговора.
(2) Вопрос в том, что даже фулл-тайм я не смогу написать прототипы для всего, что может войти в стандарт, для одного компилятора.
(3) Ключевое словосочетание "поддерживающих концепты". Последний раз, когда я интересовался вопросом, такое было только в отдельной экспериментальной ветке GCC. Нв других "столпах индустрии", насколько я знаю, состояние на нуле.
С модулями, концептами, рейнджами 3 и другими вкусностями всё ясно — их не будет минимум до С++20, а то и дольше. Хотелось бы узнать что-нибудь по другим фундаментальным вопросам
Опакечивание. Какой-то более-менее стандартный формат описания пакета. Для начала пусть без центрального репозитория — хотя бы как в Go возможность просто стянуть репозиторий, который будет собран по своим правилам и подключен к сборке моего проекта. Без попыток вручную скрестить CMake, MSBuild, GNU Make, Autotools, BJam etc.
Chosen nightly compiler. GCC может концепты, MSVC может модули, CLang может что-то ещё нужное (не помню). Попробовать это всё в связке нельзя по понятным причинам.
Если такая большая проблема добавить ranges v3, есть ли шанс в обозримом будущем получить хотя бы набор iterator adaptors? Втащить Boost не всегда есть возможность.
Я понимаю что в (1) и (2) требую слишком многого. Хотя нет — С++ единственный из мейнстрима, где нет конкретно (1) и катастрофический разброд касательно (2).
Его не придётся читать как только добавят концепты в основные компиляторы.
Помню пытался выяснить почему в GCC STL unordered_map не желает принимать incomplete types при декларации. Так и не понял — адская смесь из разных наследующихся друг от друга и от соседского Шарика классов. И без единого комментария — что особо убивает.
Если бы только рефлексия. По которой пока нет единого мнения, есть ряд прототипов. Не вошла целая пачка практически готовых и очень нужных вещей. Зато вошла зета-функция Римана и её товарки, блин.
Проблема в том, что стандарт С++ не говорит о том, в какой кодировке однобайтовые строки. И не говорит, как нижележащее системное АПИ должно их интерпретировать. Современные линуксы используют UTF-8, там всё просто. А Windows использует однобайтовую системную локаль, с непредсказуемым результатом.
Окей, такие вещи, допустим, не везде есть. Но как в Ada с аналогами Iterable/Enumerable/Range для пользовательских типов? И что с передачей функций по ссылке в другие функции? Что с замыканиями и лямбдами?
std::expected<unit, SomeError> doComplexStuff()
{
auto result = doStuff();
if(result.isError())
return result.getError();
auto intResult = result.getResult();
... // use intResult
}
но не получится написать проверку на ошибку, распаковку результата и возврат значения-ошибки в одном выражении:
std::expected<unit, SomeError> doComplexStuff()
{
auto result = (auto result = doStuff()) ? result.getResult() : return result.getError();
... // result is int here, do smth with it
}
Увы, именно что "когда-нибудь". ranges-v3 зависят от concepts-lite. Которые не могут внести в стандарт уже лет 10. Между тем даже аналога boost.iterator_adaptors до сих пор нет в стандарте.
Немного не соглашусь.
Иметь базовые понятия чем vector отличается от hash_map или list — необходимо. Я встречал одного оригинала, хешировал 3-мерные точки методом превращения их координат в строку через to_string (который пишет 6 знаков после запятой). И так на каждый вызов хеш-функции. А потом ещё возмущался, когда ему говорили, что он не прав.
Но — требовать от человека знания алгоритма балансировки красно-чёрного дерева (если этого не предполагает вакансия) действительно глупо.
Насколько я помню, был большой спор про UFCS — возможность вызывать свободные функции как методы классов, но передавая инстанс первым аргументом. Как с этим дела?
Мне, к примеру, пришёл в голову такой вариант:
т.е. через отдельный оператор. Хотя их, наверное, и так хватает.
(1) Я тихонько надеялся, что хотя бы о необходимости прототипа начинают задумываться. Впорчем, это отдельная тема для разговора.
(2) Вопрос в том, что даже фулл-тайм я не смогу написать прототипы для всего, что может войти в стандарт, для одного компилятора.
(3) Ключевое словосочетание "поддерживающих концепты". Последний раз, когда я интересовался вопросом, такое было только в отдельной экспериментальной ветке GCC. Нв других "столпах индустрии", насколько я знаю, состояние на нуле.
С модулями, концептами, рейнджами 3 и другими вкусностями всё ясно — их не будет минимум до С++20, а то и дольше. Хотелось бы узнать что-нибудь по другим фундаментальным вопросам
Я понимаю что в (1) и (2) требую слишком многого. Хотя нет — С++ единственный из мейнстрима, где нет конкретно (1) и катастрофический разброд касательно (2).
Такими темпами скоро будет arbitrary operator definition.
a #$^ b >>= c ^&* d
.А можно ли оставлять вопросы на сайте?
Концепты с двусторонними последствиями (т.е. бьют по рукам и вызывающий код, и за непредусмотренный юз в теле ф-ции). Мечты, мечты...
А эта красота работает только для нескольких стандартных классов? Или пользовательские тоже смогут?
Его не придётся читать как только добавят концепты в основные компиляторы.
Помню пытался выяснить почему в GCC STL unordered_map не желает принимать incomplete types при декларации. Так и не понял — адская смесь из разных наследующихся друг от друга и от соседского Шарика классов. И без единого комментария — что особо убивает.
Для начала хотелось бы концепты. Причём не лайт, с ограничением только "наружу", но и с ограничением "внутрь".
Если бы только рефлексия. По которой пока нет единого мнения, есть ряд прототипов. Не вошла целая пачка практически готовых и очень нужных вещей. Зато вошла зета-функция Римана и её товарки, блин.
Проблема в том, что стандарт С++ не говорит о том, в какой кодировке однобайтовые строки. И не говорит, как нижележащее системное АПИ должно их интерпретировать. Современные линуксы используют UTF-8, там всё просто. А Windows использует однобайтовую системную локаль, с непредсказуемым результатом.
Это было нестандартное расширение в MS STL
MadSpace?
Ссылку нашёл сходу только здесь: http://www.ag.ru/games/madspace
Как раз она отличалась ЕМНИП шизоидной геометрией уровней.
EDIT: про наличие subprogram access уже нашёл. Вопрос по лямбдам пока остаётся.
Окей, такие вещи, допустим, не везде есть. Но как в Ada с аналогами Iterable/Enumerable/Range для пользовательских типов? И что с передачей функций по ссылке в другие функции? Что с замыканиями и лямбдами?
У меня к вам вопрос с подвохом. Позволяет ли Ada объявить пользовательский тип, который можно потом "ограничить"?
Пусть есть функция с сигнатурой
В С++ распаковку придётся писать так (псевдокод):
но не получится написать проверку на ошибку, распаковку результата и возврат значения-ошибки в одном выражении:
Это Swift и Rust умеют красоту вида
Спасибо, не знал.
Увы, именно что "когда-нибудь". ranges-v3 зависят от concepts-lite. Которые не могут внести в стандарт уже лет 10. Между тем даже аналога boost.iterator_adaptors до сих пор нет в стандарте.
Немного не соглашусь.
Иметь базовые понятия чем vector отличается от hash_map или list — необходимо. Я встречал одного оригинала, хешировал 3-мерные точки методом превращения их координат в строку через to_string (который пишет 6 знаков после запятой). И так на каждый вызов хеш-функции. А потом ещё возмущался, когда ему говорили, что он не прав.
Но — требовать от человека знания алгоритма балансировки красно-чёрного дерева (если этого не предполагает вакансия) действительно глупо.