Вопросы, касаемые нового билда... - страница 4

 
VladislavVG:

Как вариант - такой стандартный способ контроля однократного включения инклудов:

Имена переменных в директиве препроцессора должно быть уникальным для каждого инклуда


К сожалению это не решит проблему самоимпорта библиотек, инклюдники же итак обрабатываются компилятором строго по 1 разу.
 
alsu:

К сожалению это не решит проблему самоимпорта библиотек, инклюдники же итак обрабатываются компилятором строго по 1 разу.


Алексей, радует, что не ex4-библиотек:)

Просто и незамысловато - библиотек динамической загрузки:)

 
Примерно по этим причинам (всякие замысловатые накладки) давно бросил использование .ex4/5 библиотек, перешёл только на инклудники. Заодно получил некоторое ускорение кода - вызов из динамических библиотек всегда дороже статически залинкованного вызова.
 
tara:

2. Что делать:

Наведите порядок в своих библиотеках. Если в библиотеке размещены статистические функции, то в ней не должно быть геометрии; ну или сделайте свою единственную библиотеку на все случаи жизни.

На правах имхенько.

+
 
MetaDriver:
Примерно по этим причинам (всякие замысловатые накладки) давно бросил использование .ex4/5 библиотек, перешёл только на инклудники. Заодно получил некоторое ускорение кода - вызов из динамических библиотек всегда дороже статически залинкованного вызова.

Аналогично. И подозреваю в этом смысле МК вообще нечего предложить.

В итоге самая эффективная реализация без проблем это огромная портянка в которой иллюзия отсутствия хаоса связей достигается разносом по инклудникам.


 
alsu:

Могу ошибиться, но.

hoz_Base@Include.mqh включает hoz_Base@ListOfFunc.mqh, который импортирует функции из hoz_Base@Library.ex4, которая, в свою очередь, вновь включает hoz_Base@Include.mqh.

Ситуация с повторным включением файлов в старой версии терминала отрабатывалась корректно, но оно ведет себя не так, когда в кольцо входит ex4-библиотека. Ведь получается, что в ней уже есть импортированная из нее же посредством инклюдников такая же функция.

Компилятор воспринимает это как перегрузку и начинает ругаться.

Когда компилируется библиотека, она ещё "не знает" что (какие функции и include-библиотеки) будет содержать советник, которому в свою очередь предстоит тоже компиляция. Две идентичные include-библиотеки могут одновременно использоваться в обоих "песочницах" (в советнике и в ex-библиотеке) при условии, что при импорте функций из ex-библиотеки в советник, в заголовочном файле будут отсутствовать дублируемые функции.

P.S. А их дублирование бессмысленно. А если такое существует - это следствие не грамотной структуризации библиотек.

 
TheXpert:

Аналогично. И подозреваю в этом смысле МК вообще нечего предложить.

Используйте ex4 библиотеки - никаких проблем нет.

Если, конечно, не создавать себе конфликтующие имена функций. Но в этом виноват исключительно автор библиотеки.

 
Renat:

Используйте ex4 библиотеки - никаких проблем нет.

Вначале так и делал. Замаялся и плюнул. Кстати на MQL5 мне библиотеки использовать не нравится по еще одной очень простой причине -- их хрен подебажишь. И это огромная проблема.

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

Кроме того, импорт классов как в был в планах так и есть планах без каких-либо подвижек. Или я ошибаюсь?

Грубо говоря, ваши библиотеки не дают практически никаких ощутимых плюсов по сравнению с инклудниками.

 
TheXpert:

Вначале так и делал. Замаялся и плюнул. Кстати на MQL5 мне библиотеки использовать не нравится по еще одной очень простой причине -- их хрен подебажишь. И это огромная проблема.

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

Кроме того, импорт классов как в был в планах так и есть планах без каких-либо подвижек. Или я ошибаюсь?

Грубо говоря, ваши библиотеки не дают практически никаких ощутимых плюсов по сравнению с инклудниками.

Импорт классов из динамических библиотек (а .ex4/5 линкуются динамически) технически невозможен по объективным причинам (невозможна строгая проверка типов на этапе компиляции).

Вот уже третий год стесняюсь предложить: почему бы MQ не сделать статические библиотеки? Оттуда хоть чёрта лысого можно было бы линковать на этапе компиляции.

Могло бы быть, скажем, 3 новых типа файлов : *.lb4, *.lb5 и *.l45 (последний вариант кроссплатформенный). Фактически это могли бы быть просто самодостаточные (не требующие внешних заголовков для использования) шифрованные инклюдники.

Для Маркета и Работы вообще песня - код защищённый, авторские права на алгоритм соблюдены, а клиент пользуется без проблем. Предоставил набор тестов клиенту для доказательства соответствия техзаданию и спи спокойно.

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

Я, например, торговые программы в маркет не выкладываю по религиозным соображениям, а быстрые и эффективные алгоритмические решения иногда и попродавать непрочь, но... нету возможности торговать скрытыми реализациями.

Ренат, может подумаете на досуге? Такое решение всем будет выгодно.

 
Скорее мы сделаем импорт классов из ex4/ex5 библиотек.
Причина обращения: