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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 16:08 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mOleg писал(а):
а можно выложить этот текст в раздел "статьи",
кстати pdf-ник можно и на форуме разместить, потому как качать со всяких ifolder-ов не очень удобно
(впрочем, еще удобнее было бы, если бы содержимое было в html виде, но это уже хотелки 8) )
.
Т.е. можно положить файл сюда?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 16:39 
Не в сети
Moderator
Moderator
Аватара пользователя

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

в текстовом виде вообще просто как сообщение в раздел статей.
а pdf-ку может разместить администратор (WingLion).

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 17:17 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mOleg писал(а):
вопрос писал(а):
Т.е. можно положить файл сюда?

в текстовом виде вообще просто как сообщение в раздел статей.
а pdf-ку может разместить администратор (WingLion).
Видимо, у нас не особо с пространством на сервере, иначе, можно было бы выкладывать сюда изображения, у меня вот несколько пропало с ipicture.ru при обвале сайта и копий не сохранилось


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 17:30 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
чтобы долго не рассусоливать: att/forth-ext.pdf

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 19:12 
Не в сети

Зарегистрирован: Вс май 30, 2010 21:28
Сообщения: 17
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
VoidVolker писал(а):
rmammoth писал(а):
Конструктивная критика и обсуждение всячески приветствуются.

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


Хм-м... Так ведь и про переменные надо помнить, и про много чего еще... Вообще, я заметил, программы получаются гораздо лучше, если помнить о том, что пишешь ;) Если серьезно, насчет преимуществ: я пытался реализовать оператор switch, аналогичный описанному, без теневых стеков, получалось довольно жутко и запутанно, по крайней мере, у меня. Если у Вас получится лучше и без довесков над стандартом -- буду только рад перенять опыт.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 19:14 
Не в сети

Зарегистрирован: Вс май 30, 2010 21:28
Сообщения: 17
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
WingLion писал(а):
чтобы долго не рассусоливать: att/forth-ext.pdf


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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 21:27 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
rmammoth писал(а):
Во вторых, не думаю, что забавы с pick и roll при количестве параметров слова 4-5 и более, будут намного эффективнее. И уж точно не будут удобнее.

Согласен насчет удобства, но не насчет эффективности.
Безусловно современное решение: есть масса памяти, чтобы изводить ее на стеки,
и масса циклов, чтобы изводить их на копирование аргументов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 21:57 
Не в сети

Зарегистрирован: Вс май 30, 2010 21:28
Сообщения: 17
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
dynamic-wind писал(а):
rmammoth писал(а):
Во вторых, не думаю, что забавы с pick и roll при количестве параметров слова 4-5 и более, будут намного эффективнее. И уж точно не будут удобнее.

Согласен насчет удобства, но не насчет эффективности.
Безусловно современное решение: есть масса памяти, чтобы изводить ее на стеки,
и масса циклов, чтобы изводить их на копирование аргументов.


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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Чт июн 03, 2010 23:58 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
rmammoth писал(а):
то я все же продолжаю сомневаться в том, что это все так уж неэффективно
можно устроить турнир фортов - быстро и азартно


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Пт июн 04, 2010 10:02 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
М-да... почитал. Статья начинается за здраво, но видимо не окончена, так как не сделано никакого заключения по поводу тех целей, которые преследует автор.
Цитата:
Исключение из состава ядра машины избыточных и устаревших средств

Так из чтения статьи и непонятно, что же считать устаревшим
Цитата:
marker

к сожалению, в других системах употребляется с иной смысловой нагрузкой, а не в той что описывется, хотя...
Цитата:
Теневые стеки

идея хорошая, но всегда ли её стоит применять? только если нам лень контролировать глубину основного стека или в программах с квазипараллельно исполняемым кодом.
Цитата:
Введение расширений, упрощающих написание программ

так я и не понял, что позволяет упростить написание программ.

Может для автора статьи Статья то, что он разработал и уместно, и работает, и облегчает ему создание программ.
Пожелаем ему успехов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Пт июн 04, 2010 19:53 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
Может для автора статьи Статья то, что он разработал и уместно, и работает, и облегчает ему создание программ.
Пожелаем ему успехов.

пусть автор покажет, как его нововведение может помочь решать нерешённые задачи из
viewforum.php?f=19 (конкурс задач)
да хоть эту viewtopic.php?f=19&t=2604


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Сб июн 05, 2010 01:04 
Не в сети

Зарегистрирован: Вс май 30, 2010 21:28
Сообщения: 17
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
вопрос писал(а):
Цитата:
Может для автора статьи Статья то, что он разработал и уместно, и работает, и облегчает ему создание программ.
Пожелаем ему успехов.

пусть автор покажет, как его нововведение может помочь решать нерешённые задачи из
viewforum.php?f=19 (конкурс задач)
да хоть эту viewtopic.php?f=19&t=2604


Пожалуйста

Код:
$: ps
:: (stack-checker)

: (presently:
    ?comp
    [$ps $!
         begin
             token
             dup ")" = if drop true
             else
                 token-type switch
                     case <symbol> drop $marker break
                     case <string> unquote >$ break
                     case <integer> 'int >$ break
                     case <float> 'float >$ break
                     other "Wrong token" error
                 endswitch
                 false
             endif
         until

         compile (stack-checker) $? ,
         begin $? not while $> , repeat $] ; immediate

: (stack-checker)
    r> dup @ swap 1+
    2 ($
        depth @0 < if "Stack size is less than expected" error endif
        @0 0 do
            @1 i + @ typeof switch
                other "Hmm... Wrong value in (stack-checker) inner table. Shit!" error
                case <marker> drop break
                case <integer>
                case <string>
                case <float> i 1+ pick != if "Unexpected value on stack" error endif
            endswitch
        loop
       
        @1 @0 + >r
    $) ;


Слово token извлекает очередной токен из входного потока. Слово token-type определяет тип токена (напомню, типизация динамическая). Слово unquote удаляет обрамляющие кавычки у токена-строки. Слово :: вводит предварительную декларацию слова. Слово != учитывает тип сравниваемых значений, в отличие от <>. Индексирование памяти не побайтное, а поячеечное, поэтому в операциях с указателями размер ячейки не фигурирует. Если сомнений в правильности компиляции (presently: не возникает, (stack-checker) можно реализовать короче:

Код:
: (stack-checker)
    r> dup @ swap 1+
    2 ($
        depth @0 < if "Stack size is less than expected" error endif
        @0 0 do
            @1 i + @ marker? not if
                i 1+ pick != if "Unexpected value on stack" error endif
            endif
        loop
       
        @1 @0 + >r
    $) ;

Суть происходящего проста: на этапе компиляции слова, в определение которого входит (presently: в него компилируется ссылка на слово (stack-checker) и таблица значений, в которой явно заданные значения представлены самими собой, а произвольным идентификаторам соответствует маркер. При выполнении (stack-checker) проверяется глубина стека и проводится сравнение с явно заданными значениями; при несовпадении генерируется ошибка.

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

По сути задания -- не вижу особого смысла проверять наличие на стеке констант. Возможные наборы значений, типа -1/0/1 -- еще куда ни шло... Да и вводить нигде более не используемые идентификаторы тоже как-то нехорошо. Скорее, имело бы смысл задавать количество и типы параметров.
Да, рассчитываю посмотреть на Вашу реализацию. :)



За это сообщение автора rmammoth поблагодарил: вопрос
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Сб июн 05, 2010 02:13 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Я выспался :) И хочу прокомментировать свое первое впечатление. Сначала несколько издалека.

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

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

Теперь по основным пунктам, которые я заметил.

1. Динамическая типизация.
Вещь, собственно, несколько ортогональная Форту. В том смысле, что почему бы и нет. CTTI, RTTI, и вообще отсутствие типизации слабо соотносятся с возможностью использовать в языке оператор if. Вид типизации, конечно же, влечет за собой какие-то последствия, но в целом он проходит по разряду "ну раз надо, то чего бы и не сделать". Здесь предложен специальный тип под названием marker. Это накладывает определенный отпечаток на стиль программирования, в основном потому, что есть возможность обрабатывать неизвестное заранее количество аргументов. Если это делается только ради маркера, то я бы первым делом спросил "зачем"? Потому что лишние операции по проверке типов требуют времени, в итоге производительность может падать в разы. Но если это компенсируется другими свойствами получаемого продукта, то такое решение имеет право на жизнь.
2. Теневые стеки.
Я тут увидел разновидность способа привязаться к состоянию стека в момент вызова слова. Да, действительно, держать состояние стека в голове сложновато. Соответственно, это и решается по-разному - игнорированием проблемы (ххе, ведь тоже вариант), PICK/ROLL, локальными переменными, стековыми фреймами (это я так делаю).... ну вот еще решение. Опять-таки, отталкиваться нужно от "зачем оно сделано", и через эту призму рассматривать характеристики и результаты.
3. switch
По сути, это таблица переходов. Разумная и эффективная конструкция управления. Я вот посмотрел, и решил себе такое добавить, возможно, в чуть модифицированном варианте. Не то чтобы я такого себе и не представлял никогда... а просто вот, удачно обнаружил напоминалку :) Что бы я модифицировал, так это ввел интервальный вариант - чтобы можно было сначала указать, что в таблице переходов содержатся варианты на диапазон, к примеру, от -10 до 20, и потом уже дать саму таблицу.

А в целом я тут увидел пример системы, сделанной под конкретный круг задач автора - то есть системы живой и развивающейся. Которая, в силу своей "живости", имеет большие шансы на выживание, нежели нечто оторванное от реальности. Вобщем, автору наилучшие пожелания и welcome в клуб слегка свихнувшихся на Форте :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Сб июн 05, 2010 08:09 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
rmammoth писал(а):
По сути задания -- не вижу особого смысла проверять наличие на стеке констант. Возможные наборы значений, типа -1/0/1 -- еще куда ни шло... Да и вводить нигде более не используемые идентификаторы тоже как-то нехорошо. Скорее, имело бы смысл задавать количество и типы параметров.Да, рассчитываю посмотреть на Вашу реализацию.
задача пока открыта...
а константы на стеке - да, лучше диапазоны, но и константы имеют смысл


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Расширения Форта
СообщениеДобавлено: Вс июн 06, 2010 16:49 
Не в сети

Зарегистрирован: Вс май 30, 2010 21:28
Сообщения: 17
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Выложил исходники: http://ifolder.ru/18045748
Лицензия LGPL, дабы не создавать проблемы основному проекту.


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

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


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

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


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

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