вторник, 28 февраля 2017 г.

Изменение способа публикации кода

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

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

Язык MQL постоянно развивается, добавляются новые функции, синтаксис. До этого момента я "боролся" с этим, добавляя в свой сборщик дополнительную логику для учёта новых синтаксических особенностей, либо даже старых, которые до сих пор не использовал. Это пустая работа, которая мне надоела. И это вторая причина.

Особенности MQL таковы, что я не могу объявить глобальную переменную-экземпляр класса до объявления этого класса. При сборке кода в один файл это выливается в проблемы форматирования кода, глобальные переменные оказываются где-то посередине, среди объявлений функций и классов. Я это "обошёл", объявляя все глобальные переменные в самом конце основного файла. Этот костыль мне тоже надоел, и это третья причина.

Можно сделать предварительное объявление без реализации, совсем забыл, либо появилось это в последних билдах. Тем не менее, классы всё равно представляют здесь проблему, т.к. в индикатор приходится включать весь их код.

И всё это для того, чтобы кому-то было удобнее выклыдвать мой код у себя или просто на различных свалках. Популярные скрипты я обновляю, часто исправляя какие-то баги, улучшая код, добавляя новые функции, поэтому такой "снимок" моей работы портит впечатление от всей проделанной работы. Хотя мне это почти безразлично, производить все те манипуляции с кодом, о которых я писал выше, для достижения такой цели просто не имеет смысла.

Есть пользователи, которым нужно копаться в коде, что-то подправлять под себя, и я это даже приветствую. Но сейчас почти весь открытый код сидит в репозиториях, привыкайте работать с ними. Тем, кто уже привык, так работать будет даже удобнее.

Насколько я помню, скомпилированные версии индикаторов должны работать и в следующих подверсиях (билдах) терминала, поэтому проблем при публикации скомпилированных скриптов быть не должно.

Код будет публиковаться на BitBucket, система контроля версий Mercurial, в едином репозитории для всех моих публичных скриптов. Рекомендую клонировать его в отдельную папку, после чего создавать символьные ссылки на папки внутри папки вашего "профиля" терминала, так вы получите единый код во всех копиях терминала и его профилях, обновляемый из одного места.

Возможно, правильнее было бы публиковать каждый индикатор в отдельном хранилище, но пока попробую складывать все в одном. Это даёт небольшую проблемку - при обновлении одного из скриптов могут обновиться файлы, им используемые, но новые версии этих файлов могут быть несовместимы с другими индикаторами, обновлёнными в репозитории ранее. Вероятность таких коллизий невелика, и я буду стараться их избегать. Такие коллизии я исправляю в любом случае, т.к. со всем этим кодом мне всё равно дальше работать.

Код библиотеки mql.xlib также переедет в эти хранилища из своего. Так как библиотека работает в обеих версиях MT, она будет продублирована в репозиториях для MT4 и MT5.

Инструкцию по работе с репозиторием напишу после первой публикации по новой схеме.

3 комментария:

  1. Добрый день!

    Попробовал посмотреть код на BitBucket, но не увидел его там. Я так понимаю, что он не выкладывался?

    ОтветитьУдалить
  2. Не было обновлений, старый код в новом формате не публиковал.

    ОтветитьУдалить
  3. Почему не github? Я бы там подписался на обновления

    ОтветитьУдалить