Интервью со Станиславом Стариковым: особенности нового MQL5 - страница 5

 
stringo:
elritmo:

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

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

То есть будут передаваться упакованные структуры как сейчас структуры для rates передаются

надо просто указывать директиву компилятора в средах программирования я так полагаю для структур переданных с мт4 в dll

 

MQL5 - хотелось бы увидеть хороший препроцессор

имеется ввиду условная компиляция



#define debug 1


#if debug = 1

a=1;

#else

a=3;

#endif


 

Это вряд ли. Условная компиляция - источник трудноопределяемых ошибок. Будет функция типа IsDebug()

 
stringo:

Это вряд ли. Условная компиляция - источник трудноопределяемых ошибок. Будет функция типа IsDebug()




Ну судя по всему нас ждет визуальный дебагер!

---



в классическом Си УСЛОВНАЯ компиляция конечно есть... и достаточно удобная штука!


много чего можно условно компилировать

любой инклудный файл серьезного проекта пестрит условной компиляцией

условная компиляция не только для дебуг применяется конечно, я условно написал

есть масса вариантов когда она хороша


еще один очень частный пример при определении версии чего либо переносимости к примеру


#define version 3


#if version = 2

// применяем приемы кода для версии WIN XP

#endif

#if version = 3

// применяем приемы кода для версии VISTA

// вызываем API VISTA

#endif

#if version = 4

// применяем приемы кода для версии WIN NT

#endif

#if version = 5

// применяем приемы кода для версии WIN 95 :-)))

#endif

---


--- еще как вариант создания сообщений на разных языках


#ifndef RUSSIAN

#pragma message("ВНИМАНИЕ!!!: ваш счет блокирован ")
#else

#pragma message("WARNING: Your account is lock")
#endif

 

В классическом Си условная компиляция была введена ради совместимости между разными платформами. Ради кучки теоритизирующих стандартизаторов.

#ifdef _DEBUG - это просто побочная возможность.

Условная компиляция - это огромный костыль, который можно поломать одним маленьким необнаружимым дефайном.


Все инклюды, содержащие ifdef _MAC_OS или ifdef _WINDOWS, нельзя считать серъёзными. Они только косят под серъёзность. По-настоящему, не должно быть ифдефов, должны быть разные исходники под разные платформы. Переносимость - это миф. Так называемые "переносимые коды" не являются эффективными. Поверьте моему 20-летнему опыту программирования на чистом Си.

 

stringo писал (а):

В классическом Си условная компиляция была введена ради совместимости между разными платформами. Ради кучки теоритизирующих стандартизаторов.

#ifdef _DEBUG - это просто побочная возможность.

Условная компиляция - это огромный костыль, который можно поломать одним маленькимнеобнаружимым дефайном.


Все инклюды, содержащие ifdef _MAC_OS или ifdef _WINDOWS, нельзя считать серъёзными. Они только косят под серъёзность. По-настоящему, не должно быть ифдефов, должны быть разные исходники под разные платформы. Переносимость - это миф. Так называемые "переносимые коды" не являются эффективными. Поверьте моему 20-летнему опыту программирования на чистом Си.


компилятор делает несколько проходов

самый первый проход ПРЕПРОЦЕССОРА

Вы имеете ввиду ситуацию когда проход препроцессора не найдет #define

#define mesg1 = 2

#if mesg1 = 2

блок

#else

блок

#endif

---

if {

блок

}

else

{

блок

}

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

- нет ожидаемого #define пропустили блок условной компиляции для условия #if mesg1 = 2

а как реально можно не найти конретно написанную команду... если конечно только компилятор сырой то да

c таким же успехом плохой компилятор может запутается в множесвенных скобках if { if { код if { if { if {if {кодif {кодif {кодif {if {кодif {код { код }}}код}}}код}}}}}}код}

впрочем вашему опыту я верю, да и переносимость MQL вряд ли нужна насколько я понимаю...

мне удавалось переносить с UNIX под PDP11 в RT11 и обратно, впрочем только машинно независимый код

 

Слава имел в виду "условная компиляция - зло, так как стимулирует написание некрасивого/кошмарного кода".


Портить язык директивами условной компиляции ни в коем случае не будем. Наша задача - сохранить простоту даже в ущерб функциональности.

 
Госпада! Я канечно тоже розделяю все немысслимые васторге по поводу "Питочка", НО! Было бы очень неприятно в конце концов увидеть, как радужная перспектива компактной 98-ой вместе со всеми иёными нерешонными косичками каннула в лету, и вместа ней вылизла на свет божый прожорлевая Осталависта, которой подавай гиг памяти для редакции файла 1К, иначе она тормозит и пиняит нарисурсы. :) Понятно, что результат - это смерть, а процессс - жысь, и потому никто не хотел умирать...но желание оставить о себе конкатенирующую память потомкам, в качестве иллюстрации ООП - НАСТОРАЖЕВАИТ!!! :) Фактичиски Матимат прав: возможности определения типов и структур - это уже выши крыши. Иначи проста нет смысла изобретать вилосапет, а просщи взять по-тихому готовый кампильлиркэш :) и создать КОНДУИТ для соприжжения с МТ. Или дажы во! идея на мелеон!!! на бази Линукса сделоть ФЕНАНСОВУЮ ОС в клеентцкой часте, и тогда можетбыть возникшие ЮРИДИЧЕСКИЕ аспекты избавят нас от постоянных закачек бильдов,:) а розработчеков - от рутины практимума программиста.
 
stringo писал (а):
Условная компиляция - это огромный костыль, который можно поломать одним маленьким необнаружимым дефайном.

Все инклюды, содержащие ifdef _MAC_OS или ifdef _WINDOWS, нельзя считать серъёзными. Они только косят под серъёзность. По-настоящему, не должно быть ифдефов, должны быть разные исходники под разные платформы. Переносимость - это миф. Так называемые "переносимые коды" не являются эффективными. Поверьте моему 20-летнему опыту программирования на чистом Си.

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

 
Renat писал (а):
Слава имел в виду "условная компиляция - зло, так как стимулирует написание некрасивого/кошмарного кода".

Ренат, этого не может быть. Зло существует только в человеческом сознании. Нож - это зло. Он стимулирует на совершение убийства. Деньги - это зло. Они стимулируют давать взятки. Продолжать можно бесконечно. Направление продолжения зависит от позиции, от отношения, от важности...