цфт Количество сотрудников: 1 038 (2008 г.)
2гис Число сотрудников 3 тыс. человек (вики)
parallels — 900 сотрудников
Plesk — вроде как просто подразделение Parallels, вы о чем?
Ой!)
Я думаю, люди все равно читают первые комментарии к статье, так что, пожалуй просто продолжу комментировать существующие, чтобы не плодить сущности =)
Когда мы его подключаем из реализации, считается, что мы делаем экспорт.
Когда включаем это объявление, и реализации нет — считаем что импортируем из библиотеки.
Теперь вопрос, а если у нас этот же хедер используется для статической библиотеки? тут уже без макроса не обойтись, верно? Иначе использующий API код не сможет определить, что ему там вставлять, обычную слабую ссылку или импорт (в MSVC там будут отличаться имена символов ж).
Это еще что. Там на проперти вообще ужас какой-то. (то что в целом метаклассы превращаются в эдакие функции, я не вижу плохого, но надеюсь синтаксис еще доработают. Саттер тоже не в восторге).
Простите, я Вашу статью нисколько не хотел принизить, просто хотел дополнить теми вещами, с которыми прежде всего (по моему опыту) сталкиваются новички.
Согласен, но может это хотя бы сделают на откуп вендорам, как было со стандартизацией больших интов и GC? просто например какой-нибудь вендор под embedded может и не захотеть реализовать стандарт под свою железку. (хотя чего я, как будто бы сегодня их заставляют реализовывать весь стандарт).
Да, я виноват, просмотрел, 13.9 раздел, если кому интересно.
В такой постановке, согласен, может быть полезно для минималистичного взаимодействия. Все равно меня немного напрягает «внешняя зависимость» в виде PNG кодеков в стандартной библиотеке, и как это все будет специфицировано (с учетом того что периодически всплывают уязвимости в libpng той же).
На самом деле, все переменные по умолчанию считаются глобальными (доступ к ним есть везде)
Есть одно исключение из этого правила — при вызове add_subdirectory — все включенное в дочернем CMakeLists.txt не просочится наружу (я о переменных). В то время как include() такой особенности не имеет.
Макросы аналогичны функциям за тем исключением, что они не имеют собственной области видимости
я бы СРАЗУ упомянул еще про одну особенности, что они буквально работают как макросы в препроцессоре C — т.е. если в макросе вставить return(), то произойдет выход из родительской функции, вызвавшей макрос.
В связи с тем, что родительские переменные можно выставлять через SET(… PARENT_SCOPE), я бы лично не советовал использовать макросы в большинстве случаев. Вызов функций в cmake достаточно дешевая операция, по сравнению со многими командами.
Для отладки я бы так же посоветовал упомянуть помимо message, замечательные флаги --trace и --trace-expand, они позволяют вывести каждую выполненную команду именно в том порядке, как они были выполнены интерпретатором. Так же они помогают понять «узкие места» в коде, которые тормозят выполнение, косвенно, конечно.
Первое что я говорю тем кто в команде начинается знакомиться с CMake — выучить правила для variable expansion.
1) Двойные кавычки позволяют превратить список в строку (разделенную символом ";")
2) Подстановку переменной любого типа не в контексте строковой константы — превращает ее автоматически в список всегда. символы ";" исчезают.
Второе, что следует запомнить, что практически все API — все эти if-ы, foreach и прочие add_target — работают со списком строк. т.е. как бы vector<string>
соответственно, можно делать штуки вроде if (${some_long_condition})
и отсюда приходит понимание почему иногда выдает ошибку код if (${foo} STREQUAL "bar")
— если foo неопределена (или пуста), условие превратится в список из двух строк «STREQUAL» и «bar».
Поэтому третье что следует понять при чтении документации, когда допустимо значение, когда строка, а когда и то, и то (и это в документации обычно явно отражено фразами вроде «string or variable»)
www.youtube.com/watch?v=hdRpCo94_C4 (да, это не автор TS)
вот это вроде, долго чет искал) Таймкод с пруфом про «надо ребейзить» не подскажу. Если я ошибся, то может и не это видео вовсе. Извините в случае чего.
Интересно было бы услышать тех, кто 2D графику в опросе выбрал — как вы будете это использовать, для чего? Использовать стандартную библиотеку без какого-либо графического фреймворка?
2гис Число сотрудников 3 тыс. человек (вики)
parallels — 900 сотрудников
Plesk — вроде как просто подразделение Parallels, вы о чем?
Я думаю, люди все равно читают первые комментарии к статье, так что, пожалуй просто продолжу комментировать существующие, чтобы не плодить сущности =)
www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0276r0.html
и
www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1283r0.html
Пусть у нас в хедер файле
Когда мы его подключаем из реализации, считается, что мы делаем экспорт.
Когда включаем это объявление, и реализации нет — считаем что импортируем из библиотеки.
Теперь вопрос, а если у нас этот же хедер используется для статической библиотеки? тут уже без макроса не обойтись, верно? Иначе использующий API код не сможет определить, что ему там вставлять, обычную слабую ссылку или импорт (в MSVC там будут отличаться имена символов ж).
Это не филиал. Это центр разработки.
www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0707r3.pdf
по рефлексии
www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0194r6.html
изменение с 8 по 9 ревизии посмотрите
В такой постановке, согласен, может быть полезно для минималистичного взаимодействия. Все равно меня немного напрягает «внешняя зависимость» в виде PNG кодеков в стандартной библиотеке, и как это все будет специфицировано (с учетом того что периодически всплывают уязвимости в libpng той же).
Ну пользователю-то картинку и пожать придется? я почитал
www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0267r7.pdf
там же рендеринг только.
Не будут же туда еще видео кодеки пихать)
Есть одно исключение из этого правила — при вызове add_subdirectory — все включенное в дочернем CMakeLists.txt не просочится наружу (я о переменных). В то время как include() такой особенности не имеет.
я бы СРАЗУ упомянул еще про одну особенности, что они буквально работают как макросы в препроцессоре C — т.е. если в макросе вставить return(), то произойдет выход из родительской функции, вызвавшей макрос.
В связи с тем, что родительские переменные можно выставлять через SET(… PARENT_SCOPE), я бы лично не советовал использовать макросы в большинстве случаев. Вызов функций в cmake достаточно дешевая операция, по сравнению со многими командами.
1) Двойные кавычки позволяют превратить список в строку (разделенную символом ";")
2) Подстановку переменной любого типа не в контексте строковой константы — превращает ее автоматически в список всегда. символы ";" исчезают.
Второе, что следует запомнить, что практически все API — все эти if-ы, foreach и прочие add_target — работают со списком строк. т.е. как бы vector<string>
соответственно, можно делать штуки вроде
if (${some_long_condition})и отсюда приходит понимание почему иногда выдает ошибку код
if (${foo} STREQUAL "bar")— если foo неопределена (или пуста), условие превратится в список из двух строк «STREQUAL» и «bar».
Поэтому третье что следует понять при чтении документации, когда допустимо значение, когда строка, а когда и то, и то (и это в документации обычно явно отражено фразами вроде «string or variable»)
вот это вроде, долго чет искал) Таймкод с пруфом про «надо ребейзить» не подскажу. Если я ошибся, то может и не это видео вовсе. Извините в случае чего.