MSElang : обсуждение фишек

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 10.11.2013 00:09:51

А нужны ли исключения?

Конечно ! Хотя бы ради "try..finally" :) Также в обработчиках исключений очень удобно откатывать изменения в БД.
Не просто же так С-ки так изворачиваются с добавлениями оных в разные диалекты С.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 10.11.2013 00:30:13

debi12345 писал(а):Конечно ! Хотя бы ради "try..finally" :) Также в обработчиках исключений очень удобно откатывать изменения в БД.
Не просто же так С-ки так изворачиваются с добавлениями оных в разные диалекты С.


С одной стороны справедливо: эффективная защита ресурса, централизованная обработка ошибок.
С другой стороны: довольно значительный оверхед, проблема стыковки с другими библиотеками (языками), значительные сложности с обеспечением кроссплатформенности решений.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 10.11.2013 00:54:21

С одной стороны справедливо: эффективная защита ресурса, централизованная обработка ошибок.
С другой стороны: довольно значительный оверхед,

Вывод - использовать полезно и удобно, кроме "молотильного" кода :)

проблема стыковки с другими библиотеками (языками),

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

значительные сложности с обеспечением кроссплатформенности решений.

Не разу с таковыми сложностями не сталкивался. Можно примеры где можно ожидать ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 10.11.2013 01:08:49

debi12345 писал(а):Не разу с таковыми сложностями не сталкивался. Можно примеры где можно ожидать ?


Неудачно выразился. Я имел в виду, что на некоторых платформах нельзя будет использовать исключения. Что вызовет проблемы при использовании библиотек которые их используют, с кодами ошибок такой проблемы не может возникнуть в принципе.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение alexey38 » 10.11.2013 05:40:41

debi12345 писал(а):Как что ? То,что обычно делают необработанные исключения - вышибить прогу с сообщением об ошибке,чтобы она не наделала проблем. Если отлавливаемое - фиксить ошибку в обработчике. Выносить код проверки и обработки в отдельное от рабочего кода место - очень удобно, во многом поэтому пипл обожает исключения

Я все же придерживаюсь мнения, что обработка исключений - это средство защиты от довольно серьезных ошибок в программе, когда произошло уже нечто непонятное и нужно уже аварийно завершить некоторую функцию, при необходимости откатив изменения сделанные ею, не теряя общую работоспособность программы. Использовать исключение вместо оператора IF - на мой взгляд неверно в принципе. В хорошо написанной программе исключения вообще никогда не должны генерироваться, а все опасные ситуации должны быть разрулены на уровне IF/ELSE, т.е. алгоритм должен предпринять защитные действия раньше, чем наступает крах алгоритма.

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

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

Добавлено спустя 2 минуты 21 секунду:
Mikhail писал(а):А нужны ли исключения?

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

Добавлено спустя 3 минуты 14 секунд:
Mikhail писал(а):Неудачно выразился. Я имел в виду, что на некоторых платформах нельзя будет использовать исключения. Что вызовет проблемы при использовании библиотек которые их используют, с кодами ошибок такой проблемы не может возникнуть в принципе.

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

А вот библиотеки, по хорошему не исключения должны генерировать, а коды ошибок. Тут я с Вами полностью согласен. То есть хорошая библиотека никогда не должна генерировать исключения для обработки в вызывающей ее процедуре, тут только коды ошибок. Они внутри все функции библиотеки должны обернуть в секции try except.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 10.11.2013 12:32:21

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

Единственный способ не иметь большого оверхэда на проверках диапазона - пользоваться сервисом CPU. Но CPU выставляет флаг переполнения и прочих арифмет.ошибок ПОСЛЕ операций.

Добавлено спустя 7 минут 35 секунд:
В тех случаях, где нет системной обработки исключений, нельзя гарантировать, что мы всегда попадем в FINALITY

Исключения - функция компилятора. Если архитектура и операционка не выставляют флагов переполнения и т.п., не генерят прерывания и т.п - то кроссплатформенный компилятор должен реализовать отсутствующий функционал другим способом - поллингом, эмуляцией и т.п. Иначе какая нафиг кроссплатформенность :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 15.11.2013 12:03:52

Какие будут мнения по упрошщению конструкций :
Hi,
Here examples of the planned compound statements. Additional ';' after
statements are possible, they are treated as empty statements.
"
begin
a:= 1;
b:= 2
end;

with rec1:r do
r.field1:= 123
end;

with rec2:r,r.field1:s do
r.field1.field1:= 123; //or
s.field1:= 123;
end;

if a = 1 then
b:= 1
end;

if a = 1 then
b:= 1;
c:= 3
else
b:= 2
end;

if a = 1 then
if b = 1 then
c:= 3
end
else
b:= 2
end;

case a of
1:
b:= 10
2:
b:= 15
else
b:= 0
end;

//break and continue can be used in loops
repeat
b:= b * 2;
a:= a + 1
until a > 4;

while a > 4 do
b:= b * 2;
a:= a + 1
end;

for a in 0..13 do
b:= b + ar[a]
end; //loop variable is readonly in loop and valid after loop

for a in 13..1 do
b:= b + ar[a]
end;

if c >= 0 then //I am not happy with that additional check
for a in 0..c do
b:= b + ar[a]
end
end;
"
Opinions?

Лично я вообще предоложил что-то вроде питоновского синтаксиса - вообще без BEGIN/DO/END. Ненавижу их! Только замусоривают исходники.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 12:29:20

Думаю нужно избавиться от составного оператора begin end.
Можно взять синтаксис Ada, Modula, Oberon.
Нужен ли вообще цикл for ?
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 13:09:06

Mikhail, вообще-то for иногда нужен.

debi12345
вот двоеточие после 'end', не представляется сильно необходимым. Да и польза точки от в самом конце программы, имхо, больше иллюзорна. Показанный тобой вариант очень нравится.

ЗЫ: интересно, а цикл дейкстры будет реализован?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение mse » 15.11.2013 13:41:24

Currently the state is
Код: Выделить всё
begin 
  a:= 1; 
  b:= 2 
end; 

with r: rec1 do 
  r.field1:= 123 
end; 

with r: rec2, s: r.field1 do 
  r.field1.field1:= 123; //or 
  s.field1:= 123; 
end; 

if a = 1 then 
  b:= 1 
end; 

if a = 1 then   
  b:= 1; 
  c:= 3 
else 
  b:= 2 
end; 

if a = 1 then 
  if b = 1 then 
    c:= 3 
  end 
else
  a:= 2;
  b:= 2 
end; 

case a of 
  1: 
    b:= 10; 
    c:= 15 
  2: 
    b:= 15 
  else 
    b:= 0; 
    c:= 18 
end; 

//break and continue can be used in loops 
repeat 
  b:= b * 2; 
  a:= a + 1 
until a > 4; 

while a > 4 do 
  b:= b * 2; 
  a:= a + 1 
end; 

for a in 0 to 13 do 
  b:= b + ar[a] 
end; //loop variable is readonly in loop and valid after loop 

for a in 13 downto 1 do 
  b:= b + ar[a] 
end; 

for a in 0 to c do 
  b:= b + ar[a] 
end

https://gitorious.org/mseide-msegui/pages/Mselang
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 14:17:31

mse писал(а):Currently the state is


Код: Выделить всё
if a>1 then
...
else
...
end;


Код: Выделить всё
if a>1 then
...
elsif a<10 then
...
elsif c>3 then
...
else
...
end;


Код: Выделить всё
if a>1 then
...
elsif a<10 then
...
elsif c>3 then
...
end;


Может лучше сделать счетчик в цикле "for" встроенным и необязательным?
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 15.11.2013 14:26:20

Some ideas :
1)
Код: Выделить всё
for i in <from>..<to> [BY <STEP>] ..
- possibly with float <from>, <to> and <step>
2) changing "do" to " :" & throwing away "end;" we'll come to Python-like syntax w/o any stuff (useless) keywords

elsif

"elif" or "elseif" :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 14:32:28

debi12345 писал(а):"elif" or "elseif" :)


можно и elif, не принципиально.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Лекс Айрин » 15.11.2013 15:20:48

Mikhail писал(а):Может лучше сделать счетчик в цикле "for" встроенным и необязательным?


одно из правил программирования, насколько я помню, гласит, что не стоит полагаться на умолчания. Встроенный счетчик это хорошо... но как же выкручиваться в ситуациях, когда номер итерации используется в теле цикла, для ситуации с вложенными циклами?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 15.11.2013 15:41:28

Лекс Айрин писал(а):
Mikhail писал(а):Может лучше сделать счетчик в цикле "for" встроенным и необязательным?


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


Тут нет никаких умолчаний. Если мне не нужен счетчик зачем его писать?
Опциональный счетчик есть, можно сделать счетчик из любой переменной.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Пред.След.

Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru