OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 14:44

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Пятница, 17 Апрель, 2009 17:41 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
igor писал(а):
Не знал, что sia пишет ядра для Линуксов :) (именно ему предназначалось моё сообщение).


Он может и goto не пишет (как и я). Дело не в этом, не надо навешивать ярлыки типа "крупная система не может существовать, если там есть goto".

igor писал(а):
А что, правда что ядро Линукс кишит операторами GOTO?


goto там рекомендовано к использованию для обработки ошибок. Чтобы не городить "структурный" огород в виде кучи вложенных if/else.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 17:55 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Vlad писал(а):
У принципиальных электрических схем, между прочим, тоже есть определенные эргономические правила, никак не связанные с сутью того, что там происходит с точки зрения электроники. Чего стоит один только значок заземления - чем не goto? ;)
Падла... падла... подловил! :D (С) "Дети лейтенанта Шмидта"

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

Так что Ваша аналогия "значок заземления -- оператор goto" совершенно неудачна!

PS. УГО -- условное графическое обозначение


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 18:02 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Vlad писал(а):
Дело не в этом, не надо навешивать ярлыки типа "крупная система не может существовать, если там есть goto".
Вы мне прямо льстите :) На самом деле умные люди разобрались с этим вопросом без моего участия, в то время, когда я без задержки проходил под столом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 18:13 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
igor писал(а):
Так что Ваша аналогия "значок заземления -- оператор goto" совершенно неудачна!


Как вам будет угодно :) Я его привел как пример несоответствия "практики" (на бумаге имеет место неструктурный разрыв) и "теории" (в железе никакого разрыва нет) в угоду эргономике (простоте восприятия).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 18:31 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Я надеюсь что вы сами понимаете, что сильно утрируете. Потому что принципиальные электрические схемы и структурное программирование - это всё равно что "в огороде бузина, а в Киеве дядька".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 18:34 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Madzi писал(а):
Я надеюсь что вы сами понимаете, что сильно утрируете. Потому что принципиальные электрические схемы и структурное программирование - это всё равно что "в огороде бузина, а в Киеве дядька".


Да, я понимаю. Возможно электрические схемы еще ждут своего Дейкстру (Паронджанова?) :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 19:05 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
igor писал(а):
2 sia:
Я мог бы поспорить с Вами по поводу WHILE и GOTO, но видя безрезультатные попытки своих более опытных коллег, решил зайти с другой стороны. Судя по Вашим сообщениям в этой ветке, я делаю осторожный вывод, что Вы новичок в программировании. Или, по крайней мере, не реализовали пока достаточно сложные проекты. Конечно, я могу ошибаться, но думаю, что в любом случае Вам интересно будет меня послушать. Ситуация может развиваться таким образом: ...

Igor, у меня не было желания спорить, я лишь высказал, какие средства хотел бы иметь в Обероне.
Мне "вежливо" дали понять, что я не математик, т.к. не умею вычислять инвариант, использовать
предикаты и доказывать сходимость. На что я ответил, что в общем случае этот аппарат не работает,
а в конкретном случае - когда доказывать нечего (из-за простоты) - это и не нужно...

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

Например - предлагали убрать FOR, Loop, Repeat. Наверно и это не предел - можно пойти ещё дальше,
убрать - Return, Case, While, Do, If, Объекты, подрезать типы, выкинуть встроенные функции, присвоить - тоже убрать...
Язык станет ещё меньше, но и желающих его использать, боюсь, станет тоже меньше.

1. Вы начинаете разрабатывать по настоящему крупные и сложные программные проекты,
ничем не ограничивая полёт своей алгоритмической мысли.
--- Это какие, в какой области? Пример можно? (участвовал в небольших проектах до ~3-5 человеко-лет)
--- Ну почему же ничем? Ограничения во всём, постоянный поиск компромиса. Нехватка ресурсов - времени,
--- производительности бортового компьютера, памяти, толковой документации, нужных библиотек (компонент)...

2. Постепенно Вы сталкиваетесь с "кризисом жанра", который выражается в том, что новые ошибки появляются
быстрее, чем обнаруживаются и исправляются старые.
--- не совсем так. Я привык использовать в работе набор отлаженных компонент. Для новой задачи сначала
--- прописываю набор базовых функций, которые с небольшим запасом перекрывают потребности задачи.
--- Потом делаю минимальный вариант главного модуля, и начинаю работать с ним как с тестом. Ошибки бывают, но не так много
--- (чаще если базовые функции слабо проверены). Постепенно дорабатываю первоначальный вариант.

3. Вы пытаетесь найти выход из кризиса и "открываете" для себя структурное программирование.
--- Я имею некоторый опыт программирования, как на "неструктурных" языках, так и "структурных".
--- Последние раздражают чаще и сильнее, т.к. требуют больше приседаний и действий через pop
--- там, где даже в фортране делалось без усилий.

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

--- Спасибо за пожелания. Эээ, пояснили бы что вы имеете здесь в виду?
--- К счастью я не математик, и мне не нужно придумывать доказательства там, где они мне не нужны.
--- Моя сегодняшняя задача - это попытаться перевести небольшие (готовые) программы на Оберон с
--- Клиппера, Фокса, Делфи, ТурбоПаскаля, MS Access, причесать кучку SQL запросов (к Оракле).
--- Если что-то не получится - это меня сильно не расстроит. Просто поднадоел этот зверинец.
--- Основная деятельность - инфраструктура, поддержка, ~10 серверов, небольшая организация.
--- Попробовал ББ, сейчас более склоняюсь к XDS, т.к. лучше приспособлен для утилит, и есть версия
--- для Линукса, можно попытаться использовать вместо некоторых дебильных скриптов.
--- Начал делать свою тонкую прослойку 0 уровня, после прочтения от Назад к основам Дж.Спольски.
--- Это - работа с файлами, строки, логи, кодировки, даты, ... что использовал раньше и к чему привык.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 19:09 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Илья Ермаков писал(а):
В этом смысле дейкстровское понимание программирования как-то гораздо ближе к "непрерывной", "естественнонаучной" математике, к матану тому же.
В анализе такого разделения не наблюдается. Точнее, в логическом отношении наблюдается единство. Дейкстровское же понимание мне кажется близким к пониманию программирования как педагогической задачи. Извиняюсь за сумбур.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 21:16 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
Algo писал(а):
Ох уж этот могучий и не убиваемый GOTO! (Он сказал "I'll be back")
Даже если смотреть с позиций чисто практического удобства (некоторые ставят его превыше всего), и малые и большие программы легко пишутся без goto, ЛЕГКО!!! Если совсем чуть чуть напрячься, или сразу изучать и использовать правильные шаблоны и даже не знать break и continue, то и без них можно легко обойтись.

ИМХО, пока учебники, построенныех по принципу "от конструкции яззыка к задаче" будут существовать в природе, будет воскресать и Goto :(.


GOTO я включил в список "пожеланий" для полноты, как вырожденный базовый примитив.
Я не ставлю его выше LOOP или REPEAT. Мне в некоторых случаях для упрощения и
большей выразительности - нравится его использовать.

Например - цикл в цикле. Хочу выйти раньше, делаю Break, попадаю снова в цикл, и там
нужно обработать преждевременный выход. Неудобно, некрасиво.
Код:
....
FOR j := ....
  FOR k := ....
       ....
       IF (условие_ошибки_2) THEN GOTO 102; END;
       ....
  END;
END;
///
100: RETURN  0;
101: RETURN -1;
102: RETURN -2;
END func;

Насчёт "правильности" и шаблонов - вы какой критерий правильности обычно используете?
- Вам понравилось, удобно, не напрягает, эффективно, повышает читабельность, проверен,
сказали в книжке что правильный, структурней, привычка, реже ошибки, ...?

Я стараюсь принимать во внимание - эффективность, меньше ошибок, гибкость, конкретику...
Обратил внимание, что редко использую REPEAT, понял, чем он мне не нравится - использует
условие для выхода, а не выполнения (как в WHILE), из-за этого чаще ошибки!

пример1:
j := 0;
REPEAT .... INC(j); UNTIL (j<10);
print j; //что выдаст ? И сомнения, напрягает. Выдаст 1, ошибка!

пример2:
j := 0;
REPEAT .... INC(j); UNTIL (j=10);
print j; //выдаст 10, т.к. по FALSE - повторяет, а по TRUE - выходит из цикла.

Если бы было так: (так мне больше нравится)

пример3:
j := 0;
REPEAT .... INC(j); NEXT (j<10);
print j; //что выдаст? сразу ясно, как в WHILE. Индекс пробегает 10 элементов [0..9], выйдет j=10.

или вот такой вариант расширения WHILE, с условием для входа и для выхода.
Пример3:
Код:
WHILE f.Get(s) DO //читаем строку
   ....               //что-то делаем
NEXT (s # "END"); //крутим, пока не конец
//                   или тот же WHILE(s # "END");


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 21:45 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
Valery Solovey писал(а):
Постоянно коллапсается. Я дома на своей машине не мог видео смотреть - после нескольких первых минут фильма ядро падало.


Разные причины могут быть. У меня дома под Виндой Pinnacle Studio частенько зависает.
Я не имею претензий к Винде, под большим подозрением Пиннакл.
А на работе Юниксы под нагрузкой иногда целый год без перезагрузки...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 22:58 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
sia писал(а):
На что я ответил, что в общем случае этот аппарат не работает,


У плохого танцора... не работает :)

Что такое "общий случай"?

Есть как раз обычные - процентов 80 и даже более в чисто технических задачах - случаи циклов, которые не требуют никакого изобретения велосипедов сводятся к базовым схемам прохода и линейного поиска (получаются из постановок "задачи" - для конкр. цикла - вида "выполнить для всех" и из "показать, что существует..." соответственно; задача "для всех ситуаций истинно A" также сводится к "не существует такого, что не ~A", т.е. к "опровергающему" линейному поиску). Достаточно просто знать эти схемы - и составление цикла оказывается шаблонной задачей.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 23:03 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
sia писал(а):
или вот такой вариант расширения WHILE, с условием для входа и для выхода.
Пример3:
Код:
WHILE f.Get(s) DO //читаем строку
   ....               //что-то делаем
NEXT (s # "END"); //крутим, пока не конец
//                   или тот же WHILE(s # "END");



Вы просто боитесь логики, видимо, и конъюнкцию поставить для Вас - это насилие над мозгом :) Отсюда все проблемы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 23:52 

Зарегистрирован: Вторник, 27 Ноябрь, 2007 20:40
Сообщения: 48
Madzi писал(а):
При чтении этого форума у меня сложилось чёткое убеждение что люди говорят об одном и том же с разных позиций в силу своего жизненного опыта (не уровня знаний) ...
--- Да, похоже что так, полностью согласен.

Madzi писал(а):
К сожалению я ни разу не встречал, чтобы на занятиях по информатике/программированию давали математических подход. И книжек таких тоже видел очень мало (хватит пальцев одной руки и то не всех).

--- Когда я учился (радиофизика), всё обучение программирование завершилось в 2 семестра - с десяток
--- лабораторных занятий, и курсовая - решение уравнения в частных производных на плоскости,
--- граничные условия, расчёт в единичном кубе. БЭСМ-6, АЛЬФА (русские идентификаторы),
--- перфокарты, коммерческое время ~1 сек! (на всё, включая компиляцию).

Madzi писал(а):
Это причины разногласий. И вы будете спорить до посинения, каждый отстаивая свою - верную точку зрения. "Здравомыслящий" человек (я не хочу никого обидеть, просто пользуюсь определённым выше термином) не может понять "математической конструкции алгоритма". Она ему чужда и неудобна, потому что, скорее всего, определённым разделам математики (например теории графов) не уделялось достаточно внимания и отсутствует умение "накинуть" граф на алгоритм и привести к простому (изоморфному) виду.

--- я бы высказал предположение - не востребована. Разработчику не требуется, математику - ни к чему, т.к. уже встроили
--- диалог-транслятор, заказчику - незачем, есть приёмо-сдаточные испытания, есть поддержка,
--- есть опытная эксплуатация, и всё равно не поймёт; для сопровожденцев - лишняя нагрузка,
--- т.к. код запутанней и больше; остаются специальные особые случаи (не сталкивался).

Madzi писал(а):
Я думаю что никто не будет спорить о том, что нужно повышать общий математических уровень программистов (путь и в далёкой перспективе) и стремиться прийти к "математическому" программированию. А математика не любит вольностей. Структурный подход это первый шаг навстречу математике, но к сожалению это почти всё, что у нас пока имеется.

--- Не густо. А функциональное программирование, численные методы, моделирование,
--- теория языков и компиляторы, задачи реального времени - сейчас преподают?

Madzi писал(а):
Я предлагаю участникам переосмыслить свое отношение к программированию в целом и к обсуждаемым здесь вопросам в частности и быть более лояльными друг к другу и попытаться понять друг друга попробывав мыслить как опонент. И тогда станет понятно почему вас не понимают, и где вы правы, а где и нет.

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

--- Дейкстра - это знамя, бастион, краеугольный камень, символ научности,
--- проторенный путь для тех, кто под него встал (или им прикрылся);

--- на выходе поплывут постусловия, GOTO трудно обставить условиями, ветвистость алгоритма
--- может значительно повыситься, не будут работать предположения о линейности участков и сведение к ней,

---"доказательство" - подгонка к результату (сходимость) - затруднится; "доказательный" код
--- станет больше основного;

--- нужно чему-то "теоретическому, алгоритмически правильному" учить студентов (компостировать
--- им мозги, отучать думать, приучать автоматически отвечать заученными фразами);

--- нужно на чём-то защищаться (не всегда же на 101 обучающей системе);

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 06 Июль, 2012 09:42 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
При обсуждении графпрограммирования на РСДН где-то с этого поста пошёл топик такой же. Причём, как видно, не обошлось без обсуждения Оберонов и их сторонников... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 14 Декабрь, 2012 01:40 

Зарегистрирован: Вторник, 05 Январь, 2010 21:31
Сообщения: 1101
Откуда: Харків, Данилівка
Опять эта галиматья...пока у процессора есть реальный режим - goto не умрет. :cry:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 14 Декабрь, 2012 17:41 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Рыжий писал(а):
пока у процессора есть реальный режим - goto не умрет. :cry:
А при чём тут процессор? ЯВУ абстрагирует программиста от целевой машины. По крайней мере, замысел был такой.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Декабрь, 2012 10:47 

Зарегистрирован: Вторник, 05 Январь, 2010 21:31
Сообщения: 1101
Откуда: Харків, Данилівка
goto позволяет абстрагироваться от ряда высокоуровневых конструкций и стека , это дает нам новый уровень качества кода. goto - универсальный инструмент реализации динамических структур данных. Но, для его использования в этом качестве, необходимо научится видоизменять сознание. :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Июль, 2016 10:54 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 470
Откуда: Москва
С интересом прочитал тему с начала до конца.

Мне кажется, дискуссия была бы более наглядной, если в каждый пост добавить эквивалентный графический алгоритм на языке ДРАКОН (картинку в формате .png).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB