Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 10:47

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: словари
СообщениеДобавлено: Пн июл 31, 2006 02:34 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.

Для начала расскажу, как выглядят дела на данный момент времени.

Во-превых, все, что знает форт находится в словарях. Словарь - это связанный список, каждый элемент которого состоит из четырех полей:
1 - link field - хранит информацию, необходимую при поиске как самого слова так и для нахождения других полей слова;
2 - name field - хранит имя слова ( в стандарте определена его максимальная длинна, если не ошибаюсь не меньше 32 символов)
3 - code field - по-нашему поле кода - тут сложнее, так как поле кода может отсутсвовать или присутсвовать неявно. Адрес поля кода обычно хранится в поле связи;
4 - parameter field - поле параметров - это поле в котором хранятся данные, очень тесно переплетено с полем кода и так же может отсутствовать в определении.

В простейшем случае слова связаны в односвязный список и каждое новое слово добавляется в конец списка, поиск тоже ведется с конца и таким образом наиболее быстро будут находиться последние определенные слова. То есть список слов, заполняется по принципу стека 8)

В принципе форт-система может не поддерживать словари (это бывает достаточно часто) но такая система не интересна, по крайней, мере неудобна.

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

В принципе это все. О том, как устроен поиск пользователь может не знать. Есть набор слов, которые позволяют создавать заголовки слов, связывать между собой поля слов, реорганизовывать поиск. Тем не менее словари позволяют разделять "зерна от плевел" скрывать что-то не нужное и вообще изолировать части системы друг от друга.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 31, 2006 02:48 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Надеюсь, что в первой части все понятно 8)

можно привести примеры:

ONLY \ оставить на стеке контекста всего лишь один самый нижний словарь.
FORTH \ сделать так, чтобы словарь, в котором находятся все главные слова форт-системы оказались доступны
DEFINITIONS \ сделать так, чтобы компиляция велась в верхний словарь ( то есть FORTH )
VOCABULARY my_programm \ создать именованый список слов с именем my_programm
\ словарь будет определен в словаре FORTH , так как словари - это тоже слова :)
ALSO \ продублировать верхнее значение на вершине стека словарей (аналог DUP для стека данных)
my_programm DEFINITIONS \ а вот теперь ищем в нашем словаре и компилируем туда же 8)

\ форт не умеет делать SWAP со стеком словарей.. поэтому
: reorder ONLY my_programm ALSO FORTH ; reorder \ а вот теперь поиск будет вестись сначала в словаре FORTH а лишь в случае, если слово там не будет найдено, будет вестись в нашем словаре.

: something .. ;

PREVIOUS \ а вот теперь мы остались только с теми понятиями, которые определили сами :) Это значит, что если вы не определили чего-то полезного к этому моменту, вам придется исхитряться, стараясь определить это на базе вами созданного лексикона. В принципе отсюда может начинаться уже не форт а что-то другое: тот же Си, например.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 31, 2006 03:44 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Выше приведены примеры того, что дают стандартные средства.
Однако же, если мы хотим чуточку поактивнее работать со словарями, начинают задалбывать часто повторяющиеся VOCABULARY vocname ALSO vocname DEFINITIONS .. PREVIOUS и тогда люди начинают улучшать ситуацию - кто-то начинает наворачивать поверх словарей собственный ООП, кто-то просто расширяет набор для работы со словарями, например словами: MODULE: vocname ;MODULE
Пример из СПФ-а.

MODULE: myVoc

: something ... ;
;MODULE

что по сути лишь заменяет приведенный мною выше порядок слов =
VOCABULARY vocname ALSO vocname DEFINITIONS .. PREVIOUS

А еще потом извращаются добавляя механизм NOTFOUND - который в случае, если слово не найдено, пытаются интерпретировать уже совсем не фортовую запись: myVoc::something для вызова слова из указанного словаря 8( Медленно и некрасиво...
Кстати, я не против механизма NOTFOUND а против записи aaa::bbb

свой собственный вариант я уже выкладывал здесь: http://fforum.winglion.ru/viewtopic.php?t=88&start=15

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 31, 2006 06:53 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
А вот теперь вопрос: у кого есть какие наработки в этом направлении?
То есть кто занимался расширением возможностей словарей и какие идеи есть по этому поводу?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 31, 2006 09:24 
Не в сети

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
oleg писал(а):
Изначально форт умел работать только с двумя словарями,
один словарь находился в переменной context другой в переменной current - в первом словаре велся поиск во второй производилась компиляция слов. Таким образом откомпилированные слова не всегда могли быть найдены.
Потом решили улучшить работу словарей и добавили к регистру context стек, в котором ведется поиск по такому принципу: ищем в словаре, который положен на стек контекста последним, если не нашли ищем в предыдущем и так до тех пор, пока контекст не исчерпается.
Таким образом стало можно компилировать в один словарь, исполнять слова сперва из другого словаря, потом из того, в который ведется компиляция слов.

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

Интересна реализация словарей в retroforth'е. Обычно в небольших программах они и не нужны, т.к. есть механизм локальной видимости имен (loc: ... ;loc).
Словарь создается и используется так:
Код:
voc: foo   ( создать словарь )
foo                   ( открыть его )   
  10 constant a  ( константы в словаре foo )         
  20 constant b
^                     ( закрыть словарь )   
: bar foo a b ^ * . cr ; 

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

Реализация:
Код:
self
: ^ vector ;
: voc: vector ;
: .vocab vector ; ' .class reclass

forth
loc:
  variable a
  variable b
  : x 0 a ! 0 b ! ;

  here is .vocab ] last @ swap dup @ last ! a ! b ! ;
  here is ^ ] b @ 0; a @ last @ swap ! last ! x ;
  here is voc: ] create  last @ , as .vocab ;
;loc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 31, 2006 11:29 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Вот вариант, с которым я сейчас работаю.
Есть только 2 словаря forth и macro
Код:
. работа начинается с интерпретации (при активном forth)
. forth и macro устанавливают current
. : добавляет слово в current, устанавливает компиляцию
. [ устанавливает интерпретацию (обратно)
. компиляция: слово ищется в macro и исполняется
   если не найдено, ищется в forth и компилится
. интерпретация: слово ищется в forth и исполняется
. если число в режиме интерпретации( после [ ), оно кладется на стек
   (выполнение кода)
. если число в режиме комипляции, компилится код для его появления на стеке
   (выполнение макроса компиляции)
. компилированные макросы - получаются при ',
* : должно быть в обоих словарях forth и macro

Словари вынесены в отдельную область памяти и ссылаются на адреса в коде. Код генерится на куче here.
При необходимости словари очищаются (не до конца, остается несколько слов, чтобы скомпилировать компилятор), а скомпилированный код остается. Но его тоже можно убрать отрицательным количеством в ALLOT

Это моя интерпретация Муровского colorForth-a. ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 31, 2006 13:06 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
а как применять словари в целевом компиляторе ?

у меня часть стандартных слов перекрываются словами, компилирующими байт-коды виртуальной машины, типа + - dup swap

и при необходимости написать макрос в середине программы приходится стандартные слова в целевом компиляторе переопределять с тильдой:

Код:
: ~@ @ ;
0x22 0op @
: ~! ! ;
0x23 0op !


для простых макросов этого хватает, но если Форт не различает регистры слов (все, которые я видел, кроме SPF), начинается геморрой с переопределением всех слов, особенно с IF ELSE THEN

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 31, 2006 13:51 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
forth@km.ru писал(а):
для простых макросов этого хватает, но если Форт не различает регистры слов (все, которые я видел, кроме SPF), начинается геморрой с переопределением всех слов, особенно с IF ELSE THEN

Можно сначала сделать синоним (ALIAS), а потом ввести новое. К старому можно будет обращаться по синониму.
А с именами - м. сделать префиксы, суффиксы, скобки разные вокруг, штрихи в разных количествах... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 01, 2006 02:16 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Icefall писал(а):
oleg писал(а):
Изначально форт умел работать только с двумя словарями,
один словарь находился в переменной context другой в переменной current - в первом словаре велся поиск во второй производилась компиляция слов. Таким образом откомпилированные слова не всегда могли быть найдены.
Потом решили улучшить работу словарей и добавили к регистру context стек, в котором ведется поиск по такому принципу: ищем в словаре, который положен на стек контекста последним, если не нашли ищем в предыдущем и так до тех пор, пока контекст не исчерпается.
Таким образом стало можно компилировать в один словарь, исполнять слова сперва из другого словаря, потом из того, в который ведется компиляция слов.

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


Ну, я так не скажу!
Очень даже удобно работать со стеком контекста - в любом случае тебе ничто не мешает использовать только один словарь к контексте 8) А вот та же целевая компиляция того же СПФ-а основана(можно так сказать) на работе именно стека контекста ;)
Icefall писал(а):
Интересна реализация словарей в retroforth'е. Обычно в небольших программах они и не нужны, т.к. есть механизм локальной видимости имен (loc: ... ;loc).
Словарь создается и используется так:
Код:
voc: foo ( создать словарь )
foo ( открыть его )
10 constant a ( константы в словаре foo )
20 constant b
^ ( закрыть словарь )
: bar foo a b ^ * . cr ;

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

Ну, у меня похожая вещь сделана 8) Правда у меня словари могут быть еще многократно вложенными:

Unit: base
Sub Unit: subbase
F: something ... ;F
EndUnit
EndUnit

и дальше вызываем слово так:
base subbase something

Только все слова в base, а потом и в subbase окажутся в контексте.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 01, 2006 04:13 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Ну что ж. Никто не сказал о главном 8(
Попробую я обьяснить, что хотел бы от словарей.

Хочется, чтобы небыло, например слов для работы с файлами, а файловая система виделась как словарь форт-системы, хочется, чтобы работать с COM можно было, как с обычным словарем, хочется, чтобы та же динамическая память ( распределенные и свободные блоки) виделась как словарь. То есть хочется, чтобы словарь форта был подобен линуксевой VFS, но при этом был бы на много проще.
Для этого нужно как минимум, чтобы методы find execute были у каждого словаря свои... Вероятно нужно контекст переделать таким образом, чтобы лежали не идентификаторы словарей, а исполнимые адреса стандартного интефейса словаря, через которые можно было бы вызвать необходимые сервисы.
Вопрос даже не в том, как это сделать, а как это можно сделать просто. По-фортовому красиво.
А еще хочется иметь возможность добавлять собственные поля к стандартным( на уровне одного словаря и вложенных в него потомков). Еще нужно научиться забывать неиспользуемые слова не только с вершины словаря, а из произвольного места - если это возможно.
То есть хочется из статической структуры, которую имеем сейчас получить динамическую 8)
Воот

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 01, 2006 12:22 
Не в сети

Зарегистрирован: Чт май 04, 2006 22:43
Сообщения: 78
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
oleg писал(а):
А вот та же целевая компиляция того же СПФ-а основана(можно так сказать) на работе именно стека контекста ;)

Именно поэтому я так и не въехал до конца в целевую компиляцию СПФ :) Должен быть более простой способ.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 01, 2006 16:34 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
oleg писал(а):
...То есть хочется из статической структуры(словарей-in4), которую имеем сейчас получить динамическую

Ты, по сути уже о другой системе говоришь, проблемно-ориентированной, IDE для программиста.
На основе Форта (тут у тебя на основе Форт-словарей).
Я похожее описывал в "что хочу от редактора" в самом начале Форума и еще встречал такие же пожелания несколько раз.

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

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

Как тебе такой взгляд? ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 01, 2006 23:12 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
in4 писал(а):
Ты, по сути уже о другой системе говоришь, проблемно-ориентированной, IDE для программиста.
На основе Форта (тут у тебя на основе Форт-словарей).


Не совсем. Хочется векторизировать часть слов, которые обычно не векторизированы. Из словарей хочется сделать "хранилища" которые сами умели бы работать с данными внутри через стандартный набор интерфейсных средств. То есть хочется сделать что-то вроде COM для форта и на это завязать все внутренности языка.
in4 писал(а):
Можно, конечно, сделать сложную развесистую Среду для работы...

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

( --> msg ) Case
/escape of _exit endof
/enter of _enter endof
/redraw of _redraw endof
Drop Abort" invalid message"
EndCase
но это совсем не по-фортовому.
Я для себя сделал компонет, который скрывает выбор. Получил более простой интерфейс и более равномерное время поиска:

: invalid_key .. ;

20 resource: selection invalid_key
/escape make selection _exit
/enter make selection _enter
/redraw make selection _redraw

\ а это вместо длиинного слова выбирающего что же делать.
: msg_loop Begin Key selection Until ;

Соответственно таких selection-сов можно создавать сколько нужно и каскадировать их через invalid_key.

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

Вот и хочется придумать как расширить возможности форта на уровне словарей - сделать более сбалансированный набор слов.

in4 писал(а):
Простое ядро легче переносить.
Для простого ядра достаточно пары словарей, чтоб можно было определять понятия и строить в памяти нужные Сети Объектов(связи понятий, с которыми ты работаешь).
Определяешь способы работы с такими Сетями, правила переходов по узлам, правила пребразований, оптимизации, отображения внешних ресурсов как части Сети - и у тебя то, что ты описал. По идее, программы-способы получатся простые(ну, можно будет подобрать).... А если это "откомпилировать" - будет "крутая Форт-система". Но возможностей у подхода бОльше. И можно сразу сделать нужные упрощения, а не "рефакторинг" потом...

Ну вроде говорим об одном 8)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 01, 2006 23:21 
oleg писал(а):
Еще нужно научиться забывать неиспользуемые слова не только с вершины словаря, а из произвольного места - если это возможно.

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

oleg писал(а):
Для этого нужно как минимум, чтобы методы find execute были у каждого словаря свои...
Зачем? Создаешь в памяти (отдельном словаре) "зеркало" каталога или скажем ресурсов DLL-ки (всего, что можно представить односвязным списком). В "зеркале" находятся одноименные с объектами слова которые уже и будут делать всю возможную над отраженным объектом работу.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 01, 2006 23:32 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
ArtemKAD писал(а):
oleg писал(а):
Еще нужно научиться забывать неиспользуемые слова не только с вершины словаря, а из произвольного места - если это возможно.

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

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

ArtemKAD писал(а):
oleg писал(а):
Для этого нужно как минимум, чтобы методы find execute были у каждого словаря свои...
Зачем? Создаешь в памяти (отдельном словаре) "зеркало" каталога или скажем ресурсов DLL-ки (всего, что можно представить односвязным списком). В "зеркале" находятся одноименные с объектами слова которые уже и будут делать всю возможную над отраженным объектом работу.

Да об этом и речь. Но при текущем положении вещей создавать такие "зеркала" достаточно сложно, и в каждом случае придется все делать отдельно.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

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


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

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


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

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB