powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / inline extern из библиотеки, как правильно декларировать-имплементировать?
25 сообщений из 276, страница 2 из 12
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281204
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaно такое дармовое контрактное условие выполняется/проверяется не всегда, потому у разработчика должен быть выбор.
Выбор == возможность облажаться
А так еще забавный момент - в С++ переполнение для signed - это неопределенное поведение (в отличие от unsigned). Причем эти грабли совершенно реальны . Так что даже проверить наличие знакового переполнения кроссплатформенно затруднительно.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281213
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaговоря проще - никто не собирается включать проверку целочисленного переполнения глобально, это глупо, да и в случае фунций хеширования и чексумм - еще и недопустимо, там алгоритмы на переполнении как раз и построены.
Если очень надо - можно вставками на асме писать вычисления и проверять флаг переполнения.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281216
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли очень надо - можно вставками на асме писать вычисления и проверять флаг переполнения.
далеко не везде их можно писать, не говоря уже об осмысленности
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281217
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlonenojavaно такое дармовое контрактное условие выполняется/проверяется не всегда, потому у разработчика должен быть выбор.
Выбор == возможность облажаться
А так еще забавный момент - в С++ переполнение для signed - это неопределенное поведение (в отличие от unsigned). Причем эти грабли совершенно реальны . Так что даже проверить наличие знакового переполнения кроссплатформенно затруднительно.

затруднительно, но не невозможно - см. выше про intsafe.h и gcc builtin-ы

возможность облажаться есть всегда - даже в Java с их хваленым "GC решает все проблемы" память точно так-же течет, как и везде, ну а вместо dangling pointer они отхватили свои классы системных проблем

тут скорее вопрос не в том, как бы вообще не облажаться, а как-бы сделать так, чтоб облажаться было сильно затруднительно, ну и проверок понаставить везде где только можно, начиная с уровня статического анализатора.

так-то в лужу можно сесть всегда вон на простейшем: http://blog.regehr.org/archives/1307, где даже -Wstrict-aliasing не помогает :(
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281243
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaзатруднительно, но не невозможно - см. выше про intsafe.h и gcc builtin-ы
В ссылке про intsafe.h - только про unsigned, по крайней мере я не увидел там signed типов... Про gcc - да, там есть
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281258
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaэто уже получилось, в gcc, mvcc, clang, sunpro. никакого секрета нет - везде используется link time optimization, ключи естественно разные, но cmake им вполне можно обучить.
форсирование инлайнинга везде делается по-разному, но чудные макросы INLINE решают и эту проблему.

в debug режиме (O0) это все, естественно, не работает
А вы уверены, что ваши __inline__ в исходнике как-то попадают объектный файл и влияют на решение линкера? Может, просто поставив ключи для link time optimization, вы получите то же самое?
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281266
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaа avg() это отдельная тема, и NULL во float/double вроде как принято представлять через NaN, нет?
Нет. Арифметика с Infinity/Nan - это все части стандарта IEE 754 и других (тысячи их). Я знаю что
JavaScript весьма лукавым образов вводит полиморфизм decimal-типов используя double но
и имеет артефакты. Точно не уверен (не специалист в JS) но кажется только индексы массивов
кастятся в целое а все остальные вычисления арифметики идут через double.

Реляционная алгебра - это другое. Выше кто-то предложил юзать std::ratio<1, 100> в качестве замены
NUMBER(m,n) на клиентской стороне. Я говорю - ОК я не против. Только давайте договримся как будем
представлять NULL и как с ним работать. Тривиально если мы получили SELECT NULL FROM DUAL; у нас должна быть
техническая возможность положить это значение в тип и работать с ним далее с сохранением семантики
Oracle - вычислений. Тоесть нам нужна биекция между доменом значений NUMBER и нашим типом данных
на стороне клиента.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281298
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlonenojavaэто уже получилось, в gcc, mvcc, clang, sunpro. никакого секрета нет - везде используется link time optimization, ключи естественно разные, но cmake им вполне можно обучить.
форсирование инлайнинга везде делается по-разному, но чудные макросы INLINE решают и эту проблему.

в debug режиме (O0) это все, естественно, не работает
А вы уверены, что ваши __inline__ в исходнике как-то попадают объектный файл и влияют на решение линкера? Может, просто поставив ключи для link time optimization, вы получите то же самое?

вот в этом не уверен на все 100%, что просто включение ltp без всяких хинтов не сделает то-же самое.
но зато уверен, что компилятор не возьмет и сам не примет решение не включать форсированный инлайн.

как говорится - оптимист всегда верит, что будет лучше. пессимист верит что в лучшем случае не станет хуже
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281312
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonnojavaа avg() это отдельная тема, и NULL во float/double вроде как принято представлять через NaN, нет?
Нет. Арифметика с Infinity/Nan - это все части стандарта IEE 754 и других (тысячи их). Я знаю что
JavaScript весьма лукавым образов вводит полиморфизм decimal-типов используя double но
и имеет артефакты. Точно не уверен (не специалист в JS) но кажется только индексы массивов
кастятся в целое а все остальные вычисления арифметики идут через double.


да, в JavaScript вообще все числа по-умолчанию double, там чтоб как-то подсказать JITу, что это integer - нужно делать еще те приседания.

maytonstd::ratio Тоесть нам нужна биекция между доменом значений NUMBER и нашим типом данных
на стороне клиента.

std::ratio это вообще не про это подсчет денег, это для теоретизированых математик, это вообще мимо кассы со страшным грохотом

http://en.cppreference.com/w/cpp/numeric/ratio/ratio_add
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281397
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaсо временем будет опубликовано на github, пока не время :)
Чувствую, когда придет время, Стебелек будет повержен
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281415
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavamaytonstd::ratio Тоесть нам нужна биекция между доменом значений NUMBER и нашим типом данных
на стороне клиента.

std::ratio это вообще не про это подсчет денег, это для теоретизированых математик, это вообще мимо кассы со страшным грохотом

http://en.cppreference.com/w/cpp/numeric/ratio/ratio_add
Для nested set может пригодится.
http://www.sql.ru/forum/1151532-1/tyapnichnyy-nested-set
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281449
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskynojavaсо временем будет опубликовано на github, пока не время :)
Чувствую, когда придет время, Стебелек будет повержен

стебелек никто не сможет повергнуть. а так - его давно уже купила hooli, если ты понял, о чем я.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281461
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonnojavaпропущено...


std::ratio это вообще не про это подсчет денег, это для теоретизированых математик, это вообще мимо кассы со страшным грохотом

http://en.cppreference.com/w/cpp/numeric/ratio/ratio_add
Для nested set может пригодится.
http://www.sql.ru/forum/1151532-1/tyapnichnyy-nested-set

листая подобное, понимаешь - насколько они далеки от народа (с)

а всего-то навсего хотелось вариацию на тему Pro*C
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281567
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojava
если в Oracle есть свой BCD подобный тип NUMBER, то в C++ есть только IEEE float с потерей точности, за использование которого в финансовых задачах нужно просто брать руки и зажимать их нежно в дверь.



как раз в финансовых задачах float очень даже можно использовать, в бухгалтерских нельзя.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281738
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivnojavaесли в Oracle есть свой BCD подобный тип NUMBER, то в C++ есть только IEEE float с потерей точности, за использование которого в финансовых задачах нужно просто брать руки и зажимать их нежно в дверь.



как раз в финансовых задачах float очень даже можно использовать, в бухгалтерских нельзя.

пример, название финансовой задачи, в которой допустимы искажения данных на округлении, приведешь?
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281759
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно MasterZiv имеет в виду аналитику и принятие решений?
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281900
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaсо временем будет опубликовано на github, пока не время :)
А я-то губу раскатал :) Три года ждать? :))
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281904
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaganojavaсо временем будет опубликовано на github, пока не время :)
А я-то губу раскатал :) Три года ждать? :))
к 2020 вроде обещвно
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281926
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проект Стебелек автор не развивает. Он щас переключился на JSON-подобную dbms.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39281976
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилBagaBagaпропущено...

А я-то губу раскатал :) Три года ждать? :))
к 2020 вроде обещвно

а я что, виноват? в этом вашем C/C++ все блин как-то сделано через одно место (в сравнении с той-же Delphi или Java).

Хочется допустим в релиз тиснуть развертывание стрека (stacktrace функция, файл, номер строки) при exception, как это сделано в Java, и понеслась - stackwalker.cpp, backtrace() и прочие чудные костыли, 100500 опций компилятора, которые хрен пойми как тискать в эти ваши cmake конфиги, просто чтоб получить striped debug info (не показывать кастомеру излишнее).

Причем каждая платформа имеет свои, особо зверские костыли в вопросе, тот-же Mac OS X 10.9 и выше вообще backtrace() разучился понимать, OpenBSD его никогда и не понимал, а в Solaris как всегда свои косяки с addr2line, и... а всем до лампочки.
Скажано - stacktrace не нужен, сиди втыкай в coredump, ага (который у клиента не включен, ясен пончик).


Вон заставить заработать инлайнинг - тоже нужно блин целое исследование три дня делать, изучать всякую ерунду вроде golden блин linker для clang с плагинами и прочие приседания сделать. ABI несовместимости для .so - следующий квест, и т.д.

cmake библиотека уже перевалила вторую тысячу строк. на automake даже смотреть не хочется, не смешно ни разу (под виндой и солярой его никогда не будет).

Понаделают же недо решений. Каждый казалось бы простой вопрос - как привинтить ту или иную фичу кроссплатформенно - и нужно брать мачете и проламывать такие дебри, что иногда хочется взять и плюнуть, и перейти на Visual Basic.

Уже давно бы перешел, только он не кроссплатформенный :(

Как вы вообще умудряетесь работать с такой чудной средой - прямо загадка.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39282130
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojava, не переживай браток. Просто С++ это не твоё.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39282148
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaКаждый казалось бы простой вопрос - как привинтить ту или иную фичу кроссплатформенно
Нужда в кроссплатформенности сильно преувеличена.
Больше всего стоит разработка и поддержка софта.
А платформу можно подогнать под софт какую надо. Стоит это копейки по сравнению.
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39282191
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskynojavaКаждый казалось бы простой вопрос - как привинтить ту или иную фичу кроссплатформенно
Нужда в кроссплатформенности сильно преувеличена.
Больше всего стоит разработка и поддержка софта.
А платформу можно подогнать под софт какую надо. Стоит это копейки по сравнению.

сильно, не сильно - это до лампочки. есть понятие sanity check - если ты что-то можешь сделать только в MSVC или в GCC, то сто пудов ты это делаешь не так.

типичный пример - макросы TODO, которые через pragma message бросают сообщение при билде, которые потом засасывает jenkins и т.п.

попробуй сделать это так, чтоб понимало


Код: plaintext
1.
2.
3.
4.
TODO(let's do something here, and there)

int main(void) {
}



ну и чтоб работало во всех известных компиляторах. самоудовлетворение от секаса гарантировано.
зато есть и полезное на выходе - к примеру все доступные имплементации STRINGIFY(x) макроса выбрасываются в помойку, ибо там нужно STRINGIFY(...), гугл и стэковерфлов чуваки также смело идут в стан ламеров

просто потому что они ни разу не пытались свои "солющины" сделать именно кроссплатформенными
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39282196
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonnojava, не переживай браток. Просто С++ это не твоё.

конечно С++ это не мое, программировать на возведенной в абсолют копипасте (это я про темплейты), это пожалуйста пройдите к другому эскулапу.

С != С++
...
Рейтинг: 0 / 0
inline extern из библиотеки, как правильно декларировать-имплементировать?
    #39282244
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaMasterZivпропущено...


как раз в финансовых задачах float очень даже можно использовать, в бухгалтерских нельзя.

пример, название финансовой задачи, в которой допустимы искажения данных на округлении, приведешь?

Например, планирование бюджета предприятия на год...
...
Рейтинг: 0 / 0
25 сообщений из 276, страница 2 из 12
Форумы / C++ [игнор отключен] [закрыт для гостей] / inline extern из библиотеки, как правильно декларировать-имплементировать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]