Ситуация с API для внешних библиотек? (не MQL) - страница 3

 
Vasiliy Sokolov:

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

Разница в наличии или отсутствии конструктора.

 
Roman:
Алгебраические типы данных являются контейнерными типами, и имеют конструктор.
В моём понимании типизации Си, конструктор это лишнее звено в выполнении кода.
Любое лишнее звено, не есть гуд в скорости исполнения.
Скромное имхо ))

Они весьма удобны для работы с древесными структурами "на лету", но за это приходится платить скоростью исполнения. Если в Rust достигается некий компромисс, то это было бы неплохо.

 
Roman:

Разница в наличии или отсутствии конструктора.

Пустой конструктор в С++ может быть удален компилятором, потому что можно не вызывать функцию которая ничего не делает, а ООП в бинарном файле нет. Но как точно у Вас происходит впрочем я не знаю. Что касается моего имхо, то инициализация значений по умолчанию крайне важная штука. Иначе это порождает трудноотлавливаемые ошибки, вроде мусора в переменных, который интерпретируется как вилидное значение. В этом случае вызов даже пустого конструктора необходим. Пожертвовать ради этого парой микросекунд вполне можно.

 
Кто нить скажет с чего алгебраические типы стали контейнерами? 
 
Vasiliy Sokolov:

Пустой конструктор в С++ может быть удален компилятором, потому что можно не вызывать функцию которая ничего не делает, а ООП в бинарном файле нет. Но как точно у Вас происходит впрочем я не знаю. Что касается моего имхо, то инициализация значений по умолчанию крайне важная штука. Иначе это порождает трудноотлавливаемые ошибки, вроде мусора в переменных, который интерпретируется как вилидное значение. В этом случае вызов даже пустого конструктора необходим. Пожертвовать ради этого парой микросекунд вполне можно.

В том то и дело, что в алгебраическом типе конструктор не удаляется. 
Он всегда есть, в этом и разница.
По поводу обязательной инициализации, соглашусь.
Но лучше я сам буду контролировать этот момент, чем использовать скрытый конструктор.

 
Maxim Kuznetsov:
Кто нить скажет с чего алгебраические типы стали контейнерами? 

вики
https://ru.wikipedia.org/wiki/Алгебраический_тип_данных

 
Roman:

В том то и дело, что в алгебраическом типе конструктор не удаляется. 
Он всегда есть, в этом и разница.
По поводу обязательной инициализации, соглашусь.
Но лучше я сам буду контролировать этот момент, чем использовать скрытый конструктор.

Ну да, ну да. А Си самый быстрый, ну кроме ассемблера конечно...

Есть куча кода, в котором нужно проверить инициализированную переменную, типа: if(i == 0) а еще лучше if(i == default(int))Init(). Когда нет инициализации по-умолчанию, нет умолчального значения. Следовательно, если есть переменная, которая что-то содержит, то реально не существует достоверного способа понять, была она проинициализирована кем-то, или ее значение является мусором. Если мы не в конструкторе, а где-то в методе, и нужна ленивая инициализация по требованию, то дальше начинается игра в "верю не верю в стандартные умолчания и острую память разраба", зато две микросекунды сэкономили, красота!

 
Roman:

вики
https://ru.wikipedia.org/wiki/Алгебраический_тип_данных

Тот самый случай когда педия неправа. 

 
Yuriy Zymlex:

Приветствую.
Как сейчас обстоят дела с API MT5 для библиотек пользователей?
Не было ли изменения в лучшую сторону, за более чем 10 лет?

Вопрос возник, так как в 2020 году существуют не только MQL с внешними C++/.Net/Python.
Конечно, хотелось бы совсем избавиться от такой прослойки, как MQL.

Сейчас вроде нативные mql сокеты научились смотреть наружу. Большего и не надо для этих целей.

 
Vasiliy Sokolov:

Ну да, ну да. А Си самый быстрый, ну кроме ассемблера конечно...

Есть куча кода, в котором нужно проверить инициализированную переменную, типа: if(i == 0) а еще лучше if(i == default(int))Init(). Когда нет инициализации по-умолчанию, нет умолчального значения. Следовательно, если есть переменная, которая что-то содержит, то реально не существует достоверного способа понять, была она проинициализирована кем-то, или ее значение является мусором. Если мы не в конструкторе, а где-то в методе, и нужна ленивая инициализация по требованию, то дальше начинается игра в "верю не верю в стандартные умолчания и острую память разраба", зато две микросекунды сэкономили, красота!

Разница кто какую базу изучал.
У Си программистов инициализация переменной, как отче наш. Помнит всегда.
И он не парится лишними проверками, а инициализирована ли переменная?
Она у него всегда инициализирована на начальном этапе её объявления.
В больших проектах на тормозах кода, из микросекунд набираются миллисекунды, и возможно даже секунды, а это уже критические моменты.