OberonCore

Текущее время: Вторник, 07 Сентябрь, 2010 23:01

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: DevSelectors
СообщениеДобавлено: Вторник, 17 Апрель, 2007 15:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 19:39
Сообщения: 6235
Откуда: Россия, Орёл
На форуме Королевства Дельфи Trurl упомянул про такую штуку, как "селекторы", которые предназначены для управления версиями кода.
Они расположены в недокументированном модуле DevSelectors.
С чем их едят, непонятно :-)
Надеюсь, Trurl сейчас нам объяснит...


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 11:28
Сообщения: 677
Объясняю. :)
Добавляем в меню что-то вроде.
Код:
"Insert Left"   "*F5"   "DevSelectors.DepositLeft; StdCmds.PasteView"   "StdCmds.PasteViewGuard"
"Insert Middle"   "*F6"   "DevSelectors.DepositMiddle; StdCmds.PasteView"   "StdCmds.PasteViewGuard"
"Insert Right"   "*F7"   "DevSelectors.DepositRight; StdCmds.PasteView"   "StdCmds.PasteViewGuard"

Теперь можно вставлять в текст такие штучки, назовем их селекторами.
[имя|вариант1|вариант2|вариант3|... ]
Когда щелкаем на одном из вариантов, остальные прячутся, причем сразу во всех селекторах с тем же именем.
Удобно где-нибудь в начале модуля сделать комментарии вида
Код:
(* [feature|On|Off] *)

Тогда легко переключать варианты.
Кроме того компилятор понимает команды вида
Код:
DevCompiler.CompileThis MyModule(feature:On)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 17 Апрель, 2007 16:31 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 19:39
Сообщения: 6235
Откуда: Россия, Орёл
Круть!

А мы тут колдыбаемся с фолдами :-)

Надо в следующем сервис-паке добавить пункты меню и документацию на модуль...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 17 Апрель, 2007 16:52 
Администратор
Аватара пользователя

Зарегистрирован: Вторник, 15 Ноябрь, 2005 02:14
Сообщения: 2536
Откуда: Россия, Орёл
Сие похоже из классического Оберона идет...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 18 Апрель, 2007 09:59 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 19:38
Сообщения: 1874
Борис Рюмшин писал(а):
Сие похоже из классического Оберона идет...


Это, типа, вместо препроцессора? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 18 Апрель, 2007 11:04 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 19:39
Сообщения: 6235
Откуда: Россия, Орёл
Типа, да :-) :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 18 Апрель, 2007 15:16 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 01:53
Сообщения: 1986
Откуда: Россия, Орёл
Это не всместо препроцессора, а вместо условной компиляции, которая иногда бывает нужна. Целиком препроцессор в оберонах не был и не будет нужен.

Кстати, если касается только кода, вполне можно обойтись следующим:
Код:
CONST
  someOption = TRUE (*FALSE*);
...
PROCEDURE Proc;
BEGIN
  ...
  IF someOption THEN ... END
END Proc;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 18 Апрель, 2007 17:28 

Зарегистрирован: Среда, 28 Февраль, 2007 01:08
Сообщения: 141
Откуда: Нижний Новгород
Евгений Темиргалеев писал(а):
...Кстати, если касается только кода, вполне можно обойтись следующим:
Код:
CONST
  someOption = TRUE (*FALSE*);
...
PROCEDURE Proc;
BEGIN
  ...
  IF someOption THEN ... END
END Proc;

Не скажи, бывает требуется менять много где и сразу, например тестируешь какую-нить структуру из сложных объектов на работе с числами/строками, а потом на работе с нужным типом данных, который неудобно смотреть в отладчике или логе :)


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 19 Апрель, 2007 10:31 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 11:28
Сообщения: 677
Евгений Темиргалеев писал(а):
Это не всместо препроцессора, а вместо условной компиляции, которая иногда бывает нужна.

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

Кстати, еще одно возможное применение:
Код:
(*[comment|en|ru|fr] *)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 19 Апрель, 2007 11:00 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 22:54
Сообщения: 1403
Откуда: Россия, Томск
Условная компиляция позволяет задавать директивы, которые будут применены к нескольким файлам сразу, это главное отличие от селекторов. Зато селекторы не увеличивают время компиляции, в отличие, например, от препроцессоров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 19 Апрель, 2007 11:45 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 11:28
Сообщения: 677
Александр Ильин писал(а):
Условная компиляция позволяет задавать директивы, которые будут применены к нескольким файлам сразу, это главное отличие от селекторов.

А что мешает слелать то же с селекторами?
DevCompiler.CompileThis
Module1(dir:val)
Module2(dir:val)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 19 Апрель, 2007 12:41 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 22:54
Сообщения: 1403
Откуда: Россия, Томск
Trurl писал(а):
А что мешает слелать то же с селекторами?
DevCompiler.CompileThis
Module1(dir:val)
Module2(dir:val)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 20 Апрель, 2007 02:14 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 13:02
Сообщения: 4245
Откуда: Троицк, Московская обл.
Четто мне боязно: куда ж мы так заедем.
Классический случай "... и все бросились играть в новую комбинаторную игру".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 20 Апрель, 2007 15:35 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 01:53
Сообщения: 1986
Откуда: Россия, Орёл
Игра не игра :) , но условная компиляция нужна в отлаточных целях. Как верно подметил Trurl, на промежуточных стадиях. Например, проверка инварианта для сложной динамической структуры. Когда алгоритм обкатан, проверки убираются, т. к. они гарантируеются правильностью алгоритма. В правильности на 100%, конечно, нельзя быть увереным, но и польностью верифицировать весь код для 100% уверенности - далеко не всегда хватит времени...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 20 Апрель, 2007 18:27 

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


Дак отлаживали, понимаем...

Но что-то тут напоминает, идейно, пошаговый дежукер...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevSelectors
СообщениеДобавлено: Вторник, 04 Март, 2008 17:07 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 01:53
Сообщения: 1986
Откуда: Россия, Орёл
Илья Ермаков писал(а):
Надеюсь, Trurl сейчас нам объяснит...

Вот понадобилось в одном месте варианты навести. Думаю, дай прилеплю selectors. Ан не удалось - при сохранении документа трэпы идут. Вроде когда вбиваешь с нуля - нормально, а когда копируешь селекторы с вариантами - трэп при сохранении.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevSelectors
СообщениеДобавлено: Вторник, 04 Март, 2008 17:33 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 19:39
Сообщения: 6235
Откуда: Россия, Орёл
Да, есть у них там баг один. Селекторы неверно копируются. Я слал Оминкам репорт полгода назад. Что-то с Join, кажется.

Возьми DevSelectors из 1.6, там они уже исправлены должны быть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevSelectors
СообщениеДобавлено: Понедельник, 10 Март, 2008 13:20 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 19:39
Сообщения: 6235
Откуда: Россия, Орёл
Так, забыли Оминк включить этот патч. Тогда кладу здесь.

Цитата:
Now occasionally I found some bug in DevSelectors.
If we copy fragment of source with selectors, then later during saving will be trap at externalizing - problems with domains of internal fragments in copied selectors.

There are skipped Join call in DevSelectors.Selector.CopyFromSimpleView (as it called Selector.InitContext).

It is an important addition:

PROCEDURE (selector: Selector) CopyFromSimpleView- (source: Views.View);
BEGIN
(* selector.CopyFrom^(source); *)
WITH source: Selector DO
selector.position := source.position;
IF source.leftHidden # NIL THEN
selector.leftHidden := TextModels.CloneOf(source.leftHidden);
selector.leftHidden.InsertCopy(0, source.leftHidden, 0, source.leftHidden.Length())
>>>>>Stores.Join(selector, selector.leftHidden)<<<<<
END;
IF source.rightHidden # NIL THEN
selector.rightHidden := TextModels.CloneOf(source.rightHidden);
selector.rightHidden.InsertCopy(0, source.rightHidden, 0, source.rightHidden.Length());
>>>>>Stores.Join(selector, selector.rightHidden)<<<<<
END
END
END CopyFromSimpleView;


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB