Size: a a a

2021 April 04

О

Олександр in dlang.ru
всем привет, подскажите пожалуйста как заставить dlib линковаться на андроиде
источник

О

Олександр in dlang.ru
/data/data/com.termux/files/usr/bin/cc app.o -o app -L/data/data/com.termux/files/usr/bin/../lib -lphobos2-ldc -ldruntime-ldc -Wl,--gc-sections -ldl -lm
/data/data/com.termux/files/usr/bin/ld: app.o: in function _D4dlib4core6thread6Thread9terminateMFZv':
smoothstep.d:(.text._D4dlib4core6thread6Thread9terminateMFZv+0x18): undefined reference to
pthread_cancel'
clang-11: error: linker command failed with exit code 1 (use -v to see invocation)
Error: /data/data/com.termux/files/usr/bin/cc failed with status: 1
источник

⁣С

⁣Денис Сычев... in dlang.ru
Олександр
/data/data/com.termux/files/usr/bin/cc app.o -o app -L/data/data/com.termux/files/usr/bin/../lib -lphobos2-ldc -ldruntime-ldc -Wl,--gc-sections -ldl -lm
/data/data/com.termux/files/usr/bin/ld: app.o: in function _D4dlib4core6thread6Thread9terminateMFZv':
smoothstep.d:(.text._D4dlib4core6thread6Thread9terminateMFZv+0x18): undefined reference to
pthread_cancel'
clang-11: error: linker command failed with exit code 1 (use -v to see invocation)
Error: /data/data/com.termux/files/usr/bin/cc failed with status: 1
А если так и попробовать -lpthread добавить?
источник

e

e in dlang.ru
⁣Денис Сычев
Пожалуйста, не нужно. Торвальдс запретил С++ в ядре и был прав на 100%. Когда я открываю код стандартной библиотеки раста или гошки или код ядра линуха - я беру и читаю его просто как документацию, как книгу. Когда я открываю код stl и вообще стандартной библиотеки С++ - я не уверен на каком языке он написан. Да, можно сказать, что это я тупой - может быть. Но я лучше поразмышляю почему так вышло, что я не понимаю внутренностей С++, но считаю красивыми внутренности ядра и как такого избежать в будушем.
Код реализаций стандартных библиотек плюсовых такой уебищный из-за макросни в основном, плюс из-за поддержки нескольких платформ и версий стандарта. Им приходится обмазываться вот такими вот префиксами имен - __Ololo, а иначе пользовательские макросы запросто сломают код. Т.е. это тупо соглашение такое уебищное.

Пример функции из одной такой реализации:
template <class _InIt, class _Fn>
_CONSTEXPR20 _Fn for_each(_InIt _First, _InIt _Last, _Fn _Func) {
   _Adl_verify_range(_First, _Last);
   auto _UFirst      = _Get_unwrapped(_First);
   const auto _ULast = _Get_unwrapped(_Last);
   for (; _UFirst != _ULast; ++_UFirst) {
       _Func(*_UFirst);
   }

   return _Func;
}

Та же функция, но без обмазывания соглашениями:
template <class In, class F>
constexpr F for_each(In first, In last, F f) {
   adlVerifyRange(first, last);
   auto a       = unwrapped(first);
   const auto z = unwrapped(last);
   while (a != z) {
       f(*a);
       ++a
   }

   return f;
}
источник

⁣С

⁣Денис Сычев... in dlang.ru
e
Код реализаций стандартных библиотек плюсовых такой уебищный из-за макросни в основном, плюс из-за поддержки нескольких платформ и версий стандарта. Им приходится обмазываться вот такими вот префиксами имен - __Ololo, а иначе пользовательские макросы запросто сломают код. Т.е. это тупо соглашение такое уебищное.

Пример функции из одной такой реализации:
template <class _InIt, class _Fn>
_CONSTEXPR20 _Fn for_each(_InIt _First, _InIt _Last, _Fn _Func) {
   _Adl_verify_range(_First, _Last);
   auto _UFirst      = _Get_unwrapped(_First);
   const auto _ULast = _Get_unwrapped(_Last);
   for (; _UFirst != _ULast; ++_UFirst) {
       _Func(*_UFirst);
   }

   return _Func;
}

Та же функция, но без обмазывания соглашениями:
template <class In, class F>
constexpr F for_each(In first, In last, F f) {
   adlVerifyRange(first, last);
   auto a       = unwrapped(first);
   const auto z = unwrapped(last);
   while (a != z) {
       f(*a);
       ++a
   }

   return f;
}
Ну да, макросы (сишка себе такого не позволяет) и всякие шаблонные колдунства в духе std::enable_if<std::if_type_ololo<std::type_azaza<T>>>>
источник

КП

Константин Пунш... in dlang.ru
⁣Денис Сычев
Дженерики в гошке не вводились не потому что они "не нужны" или "и без них хорошо", а потому что не хотелось вводить фичу ради фичи абы как. Да, 10 лет обсуждали как бы это сделать лучше. Чтобы не закончить как С++ с очень крутыми и выразительными темплейтами. Которые правда уронили время компиляции в дно, сделали сообщения об ошибках в компиляторе и дебаг нечитаемыми и сам код превратили местами в дикое месиво. Вот всего этого хотелось бы избежать. Одновременно с этим делать как в D, превращая компилятор в космолет и ловить потом десятилетиями ошибки компилятора на миксине внутри шаблона внутри миксина - тоже так себе перспектива. В итоге спустя десятков экспериментов в стол, таки нащупали компромис и приняли пропоузал (до этого было отклонено в районе 10 пропоузалов, часть с реализациями даже).
Я где-то слышал, что у них компилятор так написан, что хер его перепишешь под них
источник

DH

Dark Hole in dlang.ru
Dmitry Popov
Тут мы можем порадоваться, что код стандартной библиотеки Ди читается довольно легко и приятно.
Сравнительно легко и понятно
источник

Е

Евгений in dlang.ru
Господи, речь о дженериках, а не о шаблонах. Что за странные речи: мы не воодили дженерики потому что боялись, что получится как в плюсах. 🤦‍♂️
источник

Е

Евгений in dlang.ru
⁣Денис Сычев
Ну да, макросы (сишка себе такого не позволяет) и всякие шаблонные колдунства в духе std::enable_if<std::if_type_ololo<std::type_azaza<T>>>>
Лишняя угловая скобка!
источник

И

Игорь in dlang.ru
Евгений
Господи, речь о дженериках, а не о шаблонах. Что за странные речи: мы не воодили дженерики потому что боялись, что получится как в плюсах. 🤦‍♂️
Значит боялись что получится как в яве
источник

Е

Евгений in dlang.ru
Игорь
Значит боялись что получится как в яве
А что в яве не так с дженериками?
источник

0

000Sanya in dlang.ru
Евгений
А что в яве не так с дженериками?
Псевдодженерики
источник

0

000Sanya in dlang.ru
вроде есть
источник

0

000Sanya in dlang.ru
а вроде и нет
источник

Е

Евгений in dlang.ru
000Sanya
Псевдодженерики
В чем это выражается?
источник

0

000Sanya in dlang.ru
Евгений
В чем это выражается?
в байткоде они не сохраняются
источник

0

000Sanya in dlang.ru
и получается что в коде вроде генерик, но чет нет
источник

Е

Евгений in dlang.ru
000Sanya
в байткоде они не сохраняются
Так это детали реализации, сделать статическое инстанцирование без боксинга что мешает?
источник

0

000Sanya in dlang.ru
Евгений
Так это детали реализации, сделать статическое инстанцирование без боксинга что мешает?
чего?
источник

DP

Dmitry Popov in dlang.ru
Да это как раз норм. Type erasure как она есть.
источник