OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 22:32

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




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Среда, 20 Январь, 2010 23:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Насмотревшись на всякие старые книжки в связи со шрифтами, а также в виду пугала ЕГЭ, вот что придумалось.

Добавляем в DevDebug команду Reload (код ниже; она просто перегружает модуль; при этом, само собой, выполняется исполняемое тело модуля).
Втыкаем ее в меню Dev с привязкой на, скажем, Ctrl+R (или куда Анатолий Иванович посоветует; строка ниже).
После этого простейшие учебные программы пишем в таком виде:

Код:
MODULE  y;
   IMPORT  Log := StdLog,  In := i21sysIn,  Math;
   
BEGIN
   Log.String('Привет');  Log.Ln;
END y.

Компилируем -- Ctrl+K.
Выполняем -- Ctrl+R.

Плюсы:
-- максимально близко к старым программам.
-- не надо вообще командиров/коммандеров -- никаких объяснений, ничего.

Минус:
-- маленький барьер при переходе к полноценной работе с процедурами -- НО программ с процедурами в ЕГЭ и нет.

Процедура для вставки в DevDebug:
Код:
   PROCEDURE Reload*;
      VAR  t: TextModels.Model;  s: TextMappers.Scanner;  ok: BOOLEAN;
   BEGIN
      t := TextViews.FocusText();
      IF t # NIL THEN
         s.ConnectTo( t );  s.SetPos( 0 );
         REPEAT Scan( s ) UNTIL ( s.type = smodule ) OR s.rider.eot;
         IF  s.type = smodule  THEN
            Scan( s );
            IF ( s.type = TextMappers.string ) & IsIdent( s.string ) THEN
               ok := TRUE;
               UnloadMod( s.string, ok );
               IF  ok  THEN  Dialog.ShowStatus("#Dev:Ok")  END;
               Controls.Relink;
               Kernel.LoadMod( s.string )
            ELSE
               Dialog.ShowMsg("#Dev:NoModNameFound");
            END
         ELSE
            Dialog.ShowMsg("#Dev:NoModNameFound");
         END
      END
   END Reload;


Строка для меню Dev:
Код:
   "&Reload"   "R"   "DevDebug.Reload"   "TextCmds.FocusGuard"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 00:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Нужна еще поправка для русских ключевых слов, она есть, потом выложу.

Сейчас важно понять: это нужно или нет.

Вообще-то, даже с 5-клашками было удобно в модуле иметь несколько команд.
То есть тут мы несколько теряем в гибкости.

Зато барьер для перехода с Турбо Паскаля и проч. для учителей понижается еще сильнее.
Впечатление, что на этом этапе это полезно.
При том, что потерь никаких нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 08:23 

Зарегистрирован: Пятница, 02 Декабрь, 2005 14:35
Сообщения: 210
Откуда: Россия, Томск
Info21 писал(а):
Сейчас важно понять: это нужно или нет.

Вообще-то, даже с 5-клашками было удобно в модуле иметь несколько команд.
То есть тут мы несколько теряем в гибкости.

Зато барьер для перехода с Турбо Паскаля и проч. для учителей понижается еще сильнее.
Впечатление, что на этом этапе это полезно.
При том, что потерь никаких нет.

Хм... Неожиданный ход. Налицо существенное упрощение для новичков без потерь для более гибкого использования. Только я бы отдал под компиляции и перезагрузку практически свободные в учебном контексте функциональные клавиши F8 (компиляция англоязычного варианта), F9 (компиляция русскоязычного варианта), F10 (перезагрузка модуля). Но надо объяснить, что перед перезагрузкой надо обязательно выделять тот материал (входной поток), который будет считываться операторами ввода. При наличии коммандера и строки запуска этого не требуется, а ошибочно оставленное выделение произвольного фрагмента может даже помешать.

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

Попробовал, работает. Процедуры вполне можно строить и вызывать в исполняемом при загрузке разделе. Так что они "разрешены". После приобретения достаточных навыков можно начинать "звездить" процедуры, а позже и экспортируемые переменные - при освоении техники организации диалогов или построении собственных многомодульных решений.

Под эту новую возможность полезно переписать примеры начального уровня. Например, те, что предлагает Михалкович Станислав (http://pascalabc.net/ru/programmyi-i-al ... schih.html), только с полноценными русскими идентификаторами и без сишных "улучшений". Для удовлетворения требованиям ЕГЭ средствами с минимальной сложностью - самое то получится!

Так что полный "одобрямс" :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 09:14 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
А.П. писал(а):
Хм... Неожиданный ход.
Это всё Сергей Юрьевич. Когда-то он сообщал, как надо сравнивать КП с Шарпом, и у него простейшая программа на КП как раз была телом модуля.

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

А.П. писал(а):
F9 (компиляция русскоязычного варианта)
Не понял.
Вроде, одна команда компиляции работала на все варианты.

А.П. писал(а):
Но надо объяснить, что перед перезагрузкой надо обязательно выделять ... входной поток
Входной поток можно один раз зафиксировать (даже в другом окне) командой меню: Текст, Открыть поток ввода.
После этого повторные выполнения (перезагрузки) его не меняют.

А.П. писал(а):
Под эту новую возможность полезно переписать примеры начального уровня. Например, те ...
Кому флаг в руки? :)

А.П. писал(а):
Для удовлетворения требованиям ЕГЭ средствами с минимальной сложностью - самое то получится!

Так что полный "одобрямс" :D
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 09:39 

Зарегистрирован: Пятница, 02 Декабрь, 2005 14:35
Сообщения: 210
Откуда: Россия, Томск
Info21 писал(а):
А.П. писал(а):
F9 (компиляция русскоязычного варианта)
Не понял.
Вроде, одна команда компиляции работала на все варианты.

У меня почему-то не работает. Ваша прилада компилит только русскоязычные тексты. Кроме того, нельзя смешивать русские и английские ключ. слова. Это ограничение появилось в последней версии, раньше было можно. Я вроде ничего не портил, только горячие клавиши навесил свои.
Info21 писал(а):
Входной поток можно один раз зафиксировать (даже в другом окне) командой меню: Текст, Открыть поток ввода.
У меня этой команды никогда не было. В оригинальном ББ тоже не вижу.
Info21 писал(а):
Кому флаг в руки? :)

Кому-то вроде меня :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 09:59 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
А.П. писал(а):
F10 (перезагрузка модуля)
F10 бы не трогали. Это стандартная клавиша для выхода в главное меню, наряду с Alt. А Shift+F10 - вызов контекстного меню (ежели кто не знает).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 10:23 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
А.П. писал(а):
F10 (перезагрузка модуля)
F10 бы не трогали.
Не будем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 10:27 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
А.П. писал(а):
Info21 писал(а):
А.П. писал(а):
F9 (компиляция русскоязычного варианта)
Не понял.
Вроде, одна команда компиляции работала на все варианты.
У меня почему-то не работает. Ваша прилада компилит только русскоязычные тексты. Кроме того, нельзя смешивать русские и английские ключ. слова. Это ограничение появилось в последней версии, раньше было можно. Я вроде ничего не портил, только горячие клавиши навесил свои.
Проверил по школьной версии от i21 -- всё работает, смешивать можно. Нет такого ограничения -- и не помню, чтобы было.

А.П. писал(а):
Info21 писал(а):
Входной поток можно один раз зафиксировать (даже в другом окне) командой меню: Текст, Открыть поток ввода.
У меня этой команды никогда не было. В оригинальном ББ тоже не вижу.
А это очень хорошая, удобная команда. Есть во всех новых версиях от i21, которые доведены до некоторого ума в связи с книгами (я специально некоторое время пободался с ними, раз такой повод был удачный).

А.П. писал(а):
Info21 писал(а):
Кому флаг в руки? :)
Кому-то вроде меня :(
Ну, тогда флаг Вам в руки, Анатолий Иванович! :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 12:02 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
А вот вариант с одной кнопкой:
Код:
PROCEDURE CompileAndReload*;
BEGIN
   DevCompiler.CompileAndUnload;
   Kernel.LoadMod(DevCPT.SelfName$);
END CompileAndReload;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 13:21 

Зарегистрирован: Пятница, 02 Декабрь, 2005 14:35
Сообщения: 210
Откуда: Россия, Томск
Trurl писал(а):
А вот вариант с одной кнопкой:

Однако гениально! :)
Простейший пример, не оставляющий "мусора" в РЖ, только результаты программы:
Код:
MODULE Пример;
   IMPORT Log := StdLog;
BEGIN
   Log.Clear;
   Log.String('Привет')
END Пример.

На компиляцию и перезагрузку задействована всего одна ф.клавиша, спорить стало не о чем. В случае синт.ошибок РЖ не чистится.

Мне этот подход всё больше нравится своей исключительной внешней простотой. По сравнению с Турбопаскалем появляется только строка импорта. Оппонентам остается все меньше пространства для маневра. Окончательная наша победа уже близко :mrgreen:
Теперь у нас в арсенале два главных орудия для работы с новичками:
1) черепашка - для детей;
2) "всё после BEGIN" - для старших, кому с черепашкой возиться не к лицу по возрасту.
Вариант с русским языком - запасное орудие для полной и безоговорочной капитуляции противников.
В который уже раз удивляюсь гибкости и мощи КП/ББ.:D :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 13:45 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Info21 писал(а):
Нужна еще поправка для русских ключевых слов, она есть, потом выложу.

Сейчас важно понять: это нужно или нет.

Зато барьер для перехода с Турбо Паскаля и проч. для учителей понижается еще сильнее.
Впечатление, что на этом этапе это полезно.
При том, что потерь никаких нет.

Нужно, нужно!
От Паскаля проще переходить. Спасибо!
Я тут среди одного школьного учителя попытаюсь такое внедрить. Так будет проще.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 15:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Мегаполезно для интерактивной работы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 16:31 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Trurl писал(а):
А вот вариант с одной кнопкой:
Код:
PROCEDURE CompileAndReload*;
BEGIN
   DevCompiler.CompileAndUnload;
   Kernel.LoadMod(DevCPT.SelfName$);
END CompileAndReload;
Да понятно, что можно и в одну загнать.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Январь, 2010 19:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Созерцатель писал(а):
Сергей Губанов писал(а):
Мегаполезно для интерактивной работы.
Просто интересно... Наверное я просто ещё чего-то не понял. Все радуются. Объясните на пальцах - по поподу чего такие бурные возгласы одобрения? :)


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 22 Январь, 2010 16:06 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Капитальный аргумент против объединения компиляции и выполнения (перезагрузки модуля) в одной команде -- противоречие такого объединения правилу "Почаще нажимай Ctrl+K".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 22 Январь, 2010 16:27 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Так вроде предлагалось объединить перезагрузку с предварительной компиляцией, но не предлагалось повесить её на Ctrl+K и отказаться от обычной компиляции.

Я у себя поставил так:
Ctrl+K - просто скомпилировать,
F9 - скомпилировать и запустить на выполнение (так было в турбо паскале и в дельфи).

Кстати, просто скомпилировать в турбо паскале/дельфи вроде было Ctrl+F9.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 22 Январь, 2010 16:29 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Надо бы ещё только в кнопке "скомпилировать и запустить на выполнение" не запускать на выполнение если не скомпилировалось.


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Сергей Губанов писал(а):
Так вроде предлагалось объединить перезагрузку с предварительной компиляцией, но не предлагалось повесить её на Ctrl+K и отказаться от обычной компиляции.

Ctrl+K - просто скомпилировать,
F9 - скомпилировать и запустить на выполнение (так было в турбо паскале и в дельфи).
А если хочется N раз программку выполнить? Зачем её компилировать лишние N-1 раз?

Самый простой вариант про который уже говорилось --- две команды: компиляция и перезагрузка (влекущая выполнение). Кому надо всегда напишут в меню третью "компиляция; перезагрузка"

Кстати в делфи по F9 компиляция шла при условии изменения исходника и отсутсвтия exe, иначе --- только запуск. Зачем гнаться за лишними сложностями? (в ББ можно и фолд развернуть или селектор и т.п. ... Models.clean)


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Самый простой и четкий вариант: отдельно компиляция, отдельно выполнение/перезагрузка.

Разделение проверки(компиляции) и выполнения -- очень общая вещь.
Детям этот шаблон надо впечатывать.
В этом плане сваливать всё в одну кучу -- неразвивающе.

Тем более, что придется делать взаимодействие двух этапов по переменной СДЕЛАНО.
И возня, и бессмысленно.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Отделена тема "Стиль "Скульптор" и "Снова о методах"
viewtopic.php?f=73&t=2266


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

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


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

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


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

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