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

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

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

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

Сообщение mse » 26.11.2013 18:04:56

'continue', 'break' and probably 'return' too exist in MSElang. Although 'return'/'exit' is dangerous because actually it is a hidden 'goto end' which bypasses possible cleanup code and 'return'/'exit' can easily been overlooked if deeply nested and seldom triggered. In this case it is better to use a clearly visible 'label' statement with goto.
I know that the programming experts think the opposite. :-)
In MSElang it is possible to program without 'return' because of the mandatory result assignment at function-end. 'return' is for convenience only.
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

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

Сообщение debi12345 » 26.11.2013 18:08:59

Я обычно работаю под виндой в FARе, примерно то же самое, и у меня открыто обычно 3-6 сеансов этого FAR

Тоже его открываю когда ПОЗАРЕЗ нужен копипаст. Но эти постоянные ФТП-перезаписи, опасения пропадания электричества (что сотрет локальную копию файла)... опасаюсь я их, "попадал" уже ..
FAR научился открывать удаленные фалы по SSH, без FTP ?

Добавлено спустя 5 минут 54 секунды:
У FAR-а появился SCP-режим(SSH) работы с файлами- но млын (!?) без SOCK5-прокси (возможности заходить прямо на адреса локальной сети, без редиректа портов).
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение Sergej_S » 26.11.2013 18:29:35

Даже неудобно вмешиваться в битву мастодонтов... Были времена, плотно сидел на Foxpro.Ей богу, его синтаксис нравится до сиз пор. Begin и End там вообще нет, т.к.:
Код: Выделить всё
IF lExpression [THEN]
      Commands
[ELSE
      Commands]
ENDIF

DO CASE
   CASE lExpression1
   [Commands]
   [CASE lExpression2
   [Commands]]
   ...
   [CASE lExpressionN
   [Commands]]
   [OTHERWISE
   [Commands]]
ENDCASE

FOR VarName = nInitialValue TO nFinalValue [STEP nIncrement]
      Commands
   [EXIT]
   [LOOP]
ENDFOR

DO WHILE n < 100
    n = n + n
ENDDO


Ну ";" там наоборот, ставится только для переноса. Вряд ли mse захочет это реализовывать, так что мое мнение непрофессионала - чем меньше расхождений с общепринятым паскалем, тем лучше.
Аватара пользователя
Sergej_S
новенький
 
Сообщения: 36
Зарегистрирован: 21.03.2012 15:08:39
Откуда: Latvia

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

Сообщение debi12345 » 26.11.2013 18:38:00

Код: Выделить всё
ENDFOR

Эти уточнители особо не нужны, потому что если уточнять - то какую вложенность конкретно, а для этого лучше подходят комменты :
Код: Выделить всё
END; // FOR i:=0 TO ..


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

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

Сообщение mse » 26.11.2013 18:49:03

'endif', 'endcase'... inconvenient because one must order the 'end* rows in case of insertion or deletion of a level
Код: Выделить всё
    endif;
   endwhile;
  endif;
endcase;

instead of
Код: Выделить всё
    end;
   end;
  end;
end;
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

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

Сообщение Mikhail » 26.11.2013 21:24:22

debi12345 писал(а):EXIT & RETURN будут заменены на GOTO - с целью ВСЕГДА ВИДЕТЬ откуда и куда (к какой конкретно метке) идет ветвление.

:shock:
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение debi12345 » 26.11.2013 22:43:07

У FAR-а появился SCP-режим(SSH) работы с файлами- но млын (!?) без SOCK5-прокси

Хмм, при исследовании новейших версий выяснилось,что FAR-ский NetBox оказываеся умеет крутые дела :
SOCK5 логин => non-root SSH login (по паре ключей) = >SSH-туннель => root SSH login (по паре ключей) = SFTP/SCP сессия с root-правами (при запрещенном прямом SSH-логине для рута ).
Именно то,что хочу :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение alexey38 » 27.11.2013 04:44:24

mse писал(а):Although 'return'/'exit' is dangerous because actually it is a hidden 'goto end' which bypasses possible cleanup code and 'return'/'exit' can easily been overlooked if deeply nested and seldom triggered.

Преимущество "exit", "break", "continue" в том, что глядя на эти операторы однозначно понимаешь, куда произойдет переход. А "goto" для своего понимания, нужно найти и увидеть метку, и сопоставить название метки и идентификатора после goto. В разноцветной RAD системе, еще можно наглядно изобразить метки, но на уровне блокнота они достаточно опасный инструмент. Собственно "goto" - это переход куда-то, непонятно куда. А "exit" - это явный и очевидный выход из функции/процедуры.

Чтобы в реальной практике избегать ситуаций с пропущенными после "exit" операциями по очистке, закрытию ресурсов и т.п., то используется структуризация программы. То есть большая процедура разбивается на ряд малых. И там, где используется "exit", там вообще ничего не открывается и не выделяться. Оператор "exit" позволяет избавится от многоэтажных IF, делая процедуру более наглядной, т.е. в начале функции/процедуры инициализируется возвращаемое значение по умолчанию, и далее идет ряд проверок, по которым мы завершаем выполнение функции не доходя до основного алгоритма. Вот это чуть ли не единственный разрешенный у нас способ применения "exit". Замена "exit" на "goto" в таких случаях снизит наглядность и однозначность программного кода.

Добавлено спустя 11 минут 35 секунд:
debi12345 писал(а):при исследовании новейших версий выяснилось,что FAR-ский NetBox оказываеся умеет крутые дела

3-й FAR умеет подкрашивать текст паскалевских программ, научился хорошо работать с UNICODE и др.

Но когда приходится удаленно компилировать проект, то я все файлы переношу на удаленную сторону не через FTP, а через SVN или GIT. Любые существенные исправления исключительно на компе, где сам сижу, опять же используя функционал систем контроля версий, для ветвления, слияния, фиксации ревизий и т.п. Поэтому работая с удаленным сервером (на удаленные рабочие места я уже переписываю исполняемые файлы без исходников), я сижу в RAD для редактирования текста программ. Причем использую дельфовскую RAD как редактор кода в т.ч. для работы с программами Lazarus (оболочка которого используется для составления форм и компиляции проекта) и MSEide+MSEgui. Каких-то особых проблем и неудобств я в этом не вижу. Сейчас меня все устраивает, но пока синтаксис текста программ на Delphi, Lazarus и MSEgui одинаков, что позволяет эффективно работать с любым вариантом.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

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

Сообщение debi12345 » 27.11.2013 08:16:50

Но когда приходится удаленно компилировать проект, то я все файлы переношу на удаленную сторону не через FTP, а через SVN или GIT

Да это понятно - сам вожусь с GIT-репозиториями (админить приходится через GITOSIS). Но например на рутер GIT ставить - рука не поднимается :) GCC и FPC - и то скрепя сердце.

Преимущество "exit", "break", "continue" в том, что глядя на эти операторы однозначно понимаешь, куда произойдет переход. А "goto" для своего понимания, нужно найти и увидеть метку,

В этом вся и фишка - НУЖНО НАЙТИ И УВИДЕТЬ метку. То есть если что-то глючит - знаешь что искать. Закомментил декларацию метки - компилятор тебе сразу "найдет" (с матюками) все ссылки на нее. Согласен,что непривычно, но здравое зерно есть - защита от "оверлукинга".
Мартин также предлагает использовать GOTO для перехода на заданный нестинг-левел в циклах - аналог BREAK (shit) & NEXT(shift).
Код: Выделить всё
for i:= 0 ..
  j_cycle:
  for j:= 0 ..
    for k:= 0 .. do
      if .. then
        goto j_cycle;
     else
       goto finish;
     end;
   end;
  end;
  finish:
end;

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

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

Сообщение alexey38 » 27.11.2013 09:40:09

debi12345 писал(а):Мартин также предлагает использовать GOTO для перехода на заданный нестинг-левел в циклах - аналог BREAK (shit) & NEXT(shift).

Очень плохое предложение, т.к. позволяет переходить куда угодно, перепрыгивая уровни и т.п.
Операторы BREAK и CONTINUE - это самое лучшее решение, т.к. ограничены варианты перехода, и сам оператор определяет куда будет осуществлен переход.
Если будут исключены BREAK и CONTINUE, то MSElang будет мертворожденным языком. Я у себя увольняю людей, использующие goto, кроме как в ассемблере, и буду так делать и в будущем.
debi12345 писал(а):В этом вся и фишка - НУЖНО НАЙТИ И УВИДЕТЬ метку. То есть если что-то глючит - знаешь что искать. Закомментил декларацию метки - компилятор тебе сразу "найдет" (с матюками) все ссылки на нее. Согласен,что непривычно, но здравое зерно есть - защита от "оверлукинга".

При чем здесь привычность? Тут методическая глючность, а не привычность. Чтобы читать (человеку) такие алгоритмы нужно будет просматривать код на несколько раз. Критика GOTO в дискуссиях 20-30 летней давности как раз и ставила акцент на то, что на правильное понимание оператора GOTO нужно очень много времени. Производительность труда падает в разы.
debi12345 писал(а):То есть оставить необходимый универсальный набор ключевых слов для ветвлений. Пусть даже ценой нескольких лишних линий кода.

Лишние строки в коде - это не проблема. Проблема в кривой методологии. За пример кода, написанный Вами - я лично сразу увольняю. Алгоритмы у нас так запрещено писать.

Мой опыт говорит, что хороший язык позволяет легко зарабатывать хорошие деньги в своей работе, т.к. твоя производительность труда в 2-3 раза (иногда и до 10-100 раз) выше производительности труда в среднем по рынку. Нужно писать задачи так, чтобы реализация некого нового функционала занимала минуты, а не недели. Если инструмент и язык программирования препятствуют БЫСТРОЙ разработке НАДЕЖНЫХ приложений, то такой инструмент выбрасывается из работы.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

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

Сообщение sign » 27.11.2013 09:40:41

debi12345 писал(а):
END проблемы бывают исключительно, если работать в блокноте, а не в RAD.

Вы хотите сказать никогда сами не впечатываете и не удаляете ENDы ? Не вписываете встроенные функции ?

Вот же умеют люди находить себе проблемы на ровном месте.
Я уже давным давно забыл, что такое писать руками begin-end.
И уж тем более следить за парностью их. Зачем, когда среда всё это делает замечательно.
А уж со встроенными функциями ли, с иными конструкциями...
Вы что, на самом деле никогда не работали ни в какой современной RAD?
:shock: :shock: :shock:
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

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

Сообщение debi12345 » 27.11.2013 09:57:06

что такое писать руками begin-end.
И уж тем более следить за парностью их. Зачем, когда среда всё это делает замечательно.

MSEide... MC через Telnet/SSH,.. :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение Mikhail » 27.11.2013 12:04:37

Что-то Остапа понесло. :mrgreen:
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение mse » 27.11.2013 12:05:29

MSElang has 'break' and 'continue' because this are safe and handy statements. They work for one loop level only. In order to break multiple loop levels one should use 'label' and 'goto' as debi12345 writes.
MSElang probably will have 'return' also, solely because of convenience.
I don't understand the fundamental opposition against 'label'-'goto'. I think use 'label'-'goto' where it improves readability and safety, don't use it where it does not. I don't want to be limited by a 20 years old rule and other "broadly accepted"-rules in general.
If a programming language needs colored identifiers and keywords and an IDE with automatic code generation in order to be productive then there is room for improvement IMO. Please remember MSElang design goal 2.:
Readable.
MSElang programs should read like a letter.

MSElang is optimized for people like me who are hindered in productivity by all the colors, lines, shades and whatnot modern IDEs provide. That the productivity of "letter-like-coding-style" is not so bad one probably can see by the MEide+MSEgui project, a single person makes a whole production ready cross platform GUI development environment including IDE, designer and accompanying tools. ;-)
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

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

Сообщение Mikhail » 27.11.2013 12:24:17

Мартин еще раз вношу предложение по циклам.
3 структурных цикла while, repeat, for, т.е. только один вход и один выход (запрещены break, continue, exit, и т.п.). И один бесструктурный loop end, это бесконечный цикл выход с помощью оператора break. Дополнительно для выхода из вложенных циклов можно сделать специальную метку, например

Код: Выделить всё
outer_loop: loop
...
loop
  ...
  if cond then break(outer_loop); end; //выход из обоих циклов
  ...
  if cond2 then break; end; //выход из текущего цикла
  ...
end;
...
end;


Можно расширить действие оператора "exit " и исключить оператор "break". То есть, exit будет служить и для выхода из цикла и для выхода из подпрограммы, в зависимости от контекста. Оператор "continue" предлагаю исключить как ненужный и потенциально опасный.

PS "goto" нужно оставить для каких-то нестандартных ситуаций, ограничив его действие текущим блоком, т.е. так сейчас сделано в Паскаль.

Критику вызвало не применение "goto", а контекст в котором он был применен.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Пред.След.

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

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

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

Рейтинг@Mail.ru
cron