Почему в MQL5 нет исключений?

 
  • 22% (18)
  • 35% (29)
  • 16% (13)
  • 27% (22)
Всего проголосовало: 82
 

Меня правда интересует, почему?

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

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

Знаю, знаю, сейчас старички МТ4-процедурнички заворчат, - иш чаво захотел окаянный, вот в наше время никаких таких сключений не было, а ужо писали программки-то, писали!!!

Неправда ваша, дедушки, исключения в С++ были изначально, просто вы, засев в MQL, ничего о них не знаете.

----- Очень хотелось бы услышать авторитетное мнение Рената. Планируется ли ввод в язык исключений? --------
 
Alexey Volchanskiy:

Меня правда интересует, почему?

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

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

Знаю, знаю, сейчас старички МТ4-процедурнички заворчат, - иш чаво захотел окаянный, вот в наше время никаких таких сключений не было, а ужо писали программки-то, писали!!!

Неправда ваша, дедушки, исключения в С++ были изначально, просто вы, засев в MQL, ничего о них не знаете.

----- Очень хотелось бы услышать авторитетное мнение Рената. Планируется ли ввод в язык исключений? --------
А вы прикажите вашему коду не делиться на 0. )
 

Так как некоторые не знают, я приведу пример исключений, как они реализованы в C#, там поизящнее сделано, на мой взгляд, чем в С++.

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

try
{
// потенциально небезопасный код
}

Если в блоке try возникает ошибка времени исполнения, например, деление на ноль, то вместо падения программы мы имеем вызов следующего за try блока catch

catch(Тип_Класса_ИСключения исключение)
{
// какие-то действия в случае ошибки
}
finally //выполняется в любом случае
{
    Console.WriteLine("Блок finally");
}

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

И теперь живой пример на C#, думаю, все будет понятно и чистым MQL-щикам.

void ReadFile(int index)
        {
            // To run this code, substitute a valid path from your local machine
            string path = @"c:\users\public\test.txt";
            System.IO.StreamReader file = new System.IO.StreamReader(path);
            char[] buffer = new char[10];
            try
            {
                file.ReadBlock(buffer, index, buffer.Length); // читаем из файла блок данных, может быть ошибка
            }
            catch (System.IO.IOException e) // словили ошибку, как-то обработали, тут просто печать
            {
                Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
            }
            
            finally // в любом случае закрываем файл
            {
                if (file != null)
                {
                    file.Close();
                }
            }
            // Do something with buffer...
        }

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

Гораздо комфортнее возложить обработку ошибок на механизм исключений.

Кстати, исключения есть не только в С++/C#, но даже в Matlab! (Привет Сан Санычу :) )

 

 
Ramiz Mavludov:
А вы прикажите вашему коду не делиться на 0. )
Деление на ноль - частный и самый простой пример.
 
По поводу надежности ПО. Exception handling = must have
По поводу надежности ПО. Exception handling = must have
  • www.mql5.com
Может быть имеет смысл проработать какой-нибудь иной принцип - типа грузить сторонние dll-и не в процесс терминала, а в пулы приложений - отдельные экзешники?
 

Спасибо за ссылку. 

Смысл ответов прост - раз у нас нет эксепшенов, значит они никому не нужны )) И почему-то все ответы уперлись в это деление на ноль, хотя это частный случай.

Ну-ну. Я редко ошибаюсь, если MQ все же сделают сервисы и межпроцессное взаимодействие, без эксепшенов предсказываю массовый падеж программ, их использующих. 

 
Alexey Volchanskiy:

Спасибо за ссылку. 

Смысл ответов прост - раз у нас нет эксепшенов, значит они никому не нужны )) И почему-то все ответы уперлись в это деление на ноль, хотя это частный случай.

Ну-ну. Я редко ошибаюсь, если MQ все же сделают сервисы и межпроцессное взаимодействие, без эксепшенов предсказываю массовый падеж программ, их использующих. 

Проголосовал - Нужны, почему нет - не знаю. Вообще-то еще многого нет и даже заранее известно, что много не будет. MQ сравнительно небольшая фирма. У них просто ресурсов не хватит. И еще, возможности совершенствования любого уже выпущенного ПО небезграничны и возможны только с изменением идеологии построения - а это уже следующее поколение.

Пример, та-же Виндовс Виста. Свежевыпущенная она еще более-менее работала. Но МС ее так замучил обновлениями, что она даже свежеустановленная и обновленная уже ползала с трудом.

 
Если ПО падает - значит это хреново написанное ПО, а не отсутствие исключений.

А Если ексепшинить, то заэксепшенить всю программу надо, чего уж тут, ведь мало ли чего случится то может. Заэксепшенить всю программу, распечатать код на А4 бумаге и положить в ящик стола - так надёжнее, ничего не случится ни с кодом ни с деньгами на счете...
 
Alexey Volchanskiy:

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

Гораздо комфортнее возложить обработку ошибок на механизм исключений.

Кстати, исключения есть не только в С++/C#, но даже в Matlab! (Привет Сан Санычу :) )

 

Это специфический прикладной язык, от которого зависит состояние баланса счета.

Что важнее?

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

 
Andrey Dik:
Если ПО падает - значит это хреново написанное ПО, а не отсутствие исключений.

А Если ексепшинить, то заэксепшенить всю программу надо, чего уж тут, ведь мало ли чего случится то может. Заэксепшенить всю программу, распечатать код на А4 бумаге и положить в ящик стола - так надёжнее, ничего не случится ни с кодом ни с деньгами на счете...
Забыл сказать, я голоснул за 2-й пункт, это ж не принудительно, кто то будет использовать а кто то нет, если будет такая фича в языке то не помешает. Но я лично никогда не стал бы использовать исключения в ПО для торговли.
Причина обращения: