Sergey
andrey2008 по-моему проел плешь со своими статьями "мы нашли сто пиццот багов в очередной опен сорс поделке"
Matwey
Sergey
ep
Он же главный, как на него пофиг? :)
ep
:)
Доклады может и не очень (в научной среде вообще считается моветоном выступать с одинаковым/почти одинаковым докладом на разных конференциях), но продукт хороший. Вполне себе конкурент монстрам вроде Coverity
ep
Они почему-то резко против SaaS модели
Nik
Кто-то знает, есть чатик по mql/forex/подобному дерьму?
Anonymous
На хабре писать надоели :(
Nik
я ночью кодю, а не в чатик залипаю)
Nik
Мне по техническим вопросам, если что
Anonymous
Интересно же, что за баги в нотепаде и ue
Anonymous
Или что у них там было..
Anonymous
Да
Anonymous
То ли UE был, то ли что то другое
Но там с геймдева
Anonymous
Ну малеха промазал 🙈
Constantine
Мне особенно понравилась ошибка possible array index out of bound внутри decltype выражения
Constantine
да я все понимаю, но на тестах я отсмотрел примерно 100+ срабатываний и все были ложные
Constantine
а, еще они не подцепили настройку UNICODE поэтому сразу выдавали ошибку на сравнения TCHAR :)
Constantine
Constantine
а, я им тогда присылал, могу в личку накидать
Vladislav
Если ты следишь за Костиными вопросами здесь, должен уже осознавать размеры треша)
Ioann_
Не у Костяна нормас вопросы - Костян тащит, в общемто. Мне интересно по крайней мере почитать. Треш трешем, а потехе час.
Vladislav
Дмитрий
Это typedef
Дмитрий
Если не ошибаюсь
Dmitrii
Не opaque structure ли?
ep
Если мне надо ограничить шаблонную функцию/класс некоторым заданным набором типов, то нормально вот так делать вообще? Пример:
static_assert(
std::is_same<TPixel, signed char>::value ||
std::is_same<TPixel, signed short>::value ||
std::is_same<TPixel, unsigned char>::value ||
std::is_same<TPixel, unsigned short>::value,
"The pixel type must be int8, uint8, int16 or uint16");
Или это как-то криво и настоящие C++ программисты делают по-другому?
Constantine
Constantine
хотя typelist еще в локи под C++98 был
ep
а что, char нельзя? :)
В данном случае функция работает с изображениями, а тип пикселя обычно не хранится в char по крайней мере у нас.
Constantine
а почему не устраивает произвольный integral_type
ep
Вообще ещё есть concept checking, предоставляемый некоторой библиотекой, но там нет нужного концепта для таких случаев.
ep
Произвольный integer не устраивает, потому что в алгоритме создаётся lookup table примерно так:
typedef std::numeric_limits<TPixel> TLimits;
const size_t qx_range = (size_t)TLimits::max() - TLimits::min();
float range_table[qx_range + 1]
Для int32 это уже будет неподъёмно по памяти.
Constantine
Поставьте там static_assert на ширину
ep
Constantine
Потом если надо будет воткнете enable_if с двумя разными реализациями
ep
Да, пожалуй так и сделаю.
Arseny
Как выбрать между MIT и Apache 2.0 лицензиями?
Anonymous
берёшь и юзаешь MIT
Anonymous
всё)
Constantine
template <typename... Types>
struct typelist_type;
template <typename T, typename TList>
struct in_typelist : std::false_type
{
};
template <typename T, typename T2, typename... Types>
struct in_typelist<T, typelist_type<T2, Types...>>
: std::conditional_t<std::is_same<T, T2>::value, std::true_type, in_typelist<T, typelist_type<Types...>>>
{
};
Constantine
странно что нет в стандарте)
Evgenii
Constantine
версия 2 :)
namespace utils
{
namespace impl_
{
template <typename T, typename... Types>
struct typelist_has : std::false_type
{
};
template <typename T, typename T1, typename... Types>
struct typelist_has<T, T1, Types...>
: std::conditional_t<std::is_same<T, T1>::value, std::true_type, typelist_has<T, Types...>>
{
};
template <typename T, typename... Types>
struct typelist_has_duplicate : std::conditional_t<typelist_has<T, Types...>::value, std::true_type, typelist_has_duplicate<Types...>>
{
};
template <typename T>
struct typelist_has_duplicate<T> : std::false_type
{
};
template <typename... Types>
struct typelist_checked_type;
template <typename... Types>
using typelist_check_required_type = std::enable_if_t<!typelist_has_duplicate<Types...>::value, typelist_checked_type<Types...>>;
}
template <typename... Types>
using typelist_type = impl_::typelist_check_required_type<void, Types...>;
template <typename T, typename TList>
struct in_typelist;
template <typename T, typename... Types>
struct in_typelist<T, impl_::typelist_checked_type<Types...>>
: impl_::typelist_has<T, Types...>
{
};
}
Arseny
Мне показалось, что всякие личные и научные проекты, чаще используют MIT.
А Apache используют в основном компании.
Apache по идее защищает и пользователя, и автора от проблем с патентами в будущем.
Arseny
Аудиторию bsd лицензии я плохо представляю
Vladislav
а чего не boost?
Vladislav
"If you use a BSL licensed library, you'll need to write your own disclaimer stating that you aren't responsible if the software turns into a three-headed monster and does some bad stuff to your customers." лол
ep
версия 2 :)
namespace utils
{
namespace impl_
{
template <typename T, typename... Types>
struct typelist_has : std::false_type
{
};
template <typename T, typename T1, typename... Types>
struct typelist_has<T, T1, Types...>
: std::conditional_t<std::is_same<T, T1>::value, std::true_type, typelist_has<T, Types...>>
{
};
template <typename T, typename... Types>
struct typelist_has_duplicate : std::conditional_t<typelist_has<T, Types...>::value, std::true_type, typelist_has_duplicate<Types...>>
{
};
template <typename T>
struct typelist_has_duplicate<T> : std::false_type
{
};
template <typename... Types>
struct typelist_checked_type;
template <typename... Types>
using typelist_check_required_type = std::enable_if_t<!typelist_has_duplicate<Types...>::value, typelist_checked_type<Types...>>;
}
template <typename... Types>
using typelist_type = impl_::typelist_check_required_type<void, Types...>;
template <typename T, typename TList>
struct in_typelist;
template <typename T, typename... Types>
struct in_typelist<T, impl_::typelist_checked_type<Types...>>
: impl_::typelist_has<T, Types...>
{
};
}
Оставлю ка я это на понедельник :)
Berkus
а что это за хуйня вообще?
Berkus
Evgenii
Constantine
Хм... а ведь наверняка есть утилита, которая делает частичный макро препроцессинг бустовых библиотек под конкретные настройки
Constantine
Я имею в виду: аутпут утилиты модифицированные исходники с жестко подставленными определенными макросами
Constantine
Хех, XY. Я хочу чтобы в винде под 14 вижаком у меня в гите лежал набор исходников, который чихал на существование линуксов и компиляторов, поддерживающих стандарт C++17
Constantine
Это упростит понимание того, что и как реализовано в исходниках, что поменялось в последнем обновлении и что поменяется при переходе на новый вижак
Constantine
Т.е. мне по сути нужно частично выполнить инструкции препроцессора, да
Vladislav
проблема в том что препроцессор - path-dependent, поэтому в общем случае так сделать нельзя
Constantine
Vladislav
о каких путях речь?
в зависимости от того, кто и в каком порядке подключил данный конкретный .h файл, в нем может случиться всякое
Vladislav
и зная буст, это довольно часто происходит на практике
Constantine
ну то что там сверху надо навешать pragma error на попытку изменить конфигурацию факт.
Michael
Michael
Отлавливать
Vladislav
многие штуки тут (http://www.boost.org/doc/libs/1_63_0/libs/preprocessor/doc/index.html) спроектированы под такое использование
Vladislav
Это надо буст из транка сначала собрать?
Vladislav
Тоже норм стресс-тест
Anonymous
пахнет кривым евент лупом, если он busy waiting'ом занимается, когда нет евентов
Anonymous
покажи, как ты его юзаешь, не верю, что разрабы xlib достаточно тупы
Daniil
Могу в лс скинуть конфигурации компа
Daniil
Если нужно еще, на ночь оставлять без проблем
melvin
A simple implementation of "call by name" might substitute the code of an argument expression for each appearance of the corresponding parameter in the subroutine, but this can produce multiple versions of the subroutine and multiple copies of the expression code. As an improvement, the compiler can generate a helper subroutine, called a thunk, that calculates the value of the argument. The address of this helper subroutine is then passed to the original subroutine in place of the original argument, where it can be called as many times as needed.
я правильно понял что thunk это подпрограмма а не сопрограмма (которая при первом вызове выполнит вычисления аргумента, а при последующих просто будет возвращать значения)? тогда в чем заключается улучшение? в обоих случаях появление аргумента в подпрограмме каждый раз будет вызывать вычисления, верно?
melvin
сорри за оффтоп
Диджитал
сопрограммы здесь вообще не к месту
Диджитал
улучшение в том, что не генерируется отдельная версия кода для каждого набора параметров, а одна универсальная