Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 11:50

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Расширения Форта
Автор Сообщение
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
Выложил исходники: http://ifolder.ru/18045748
Лицензия LGPL, дабы не создавать проблемы основному проекту.
Сообщение Добавлено: Вс июн 06, 2010 16:49
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
rmammoth писал(а):
По сути задания -- не вижу особого смысла проверять наличие на стеке констант. Возможные наборы значений, типа -1/0/1 -- еще куда ни шло... Да и вводить нигде более не используемые идентификаторы тоже как-то нехорошо. Скорее, имело бы смысл задавать количество и типы параметров.Да, рассчитываю посмотреть на Вашу реализацию.
задача пока открыта...
а константы на стеке - да, лучше диапазоны, но и константы имеют смысл
Сообщение Добавлено: Сб июн 05, 2010 08:09
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
Я выспался :) И хочу прокомментировать свое первое впечатление. Сначала несколько издалека.

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

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

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

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

А в целом я тут увидел пример системы, сделанной под конкретный круг задач автора - то есть системы живой и развивающейся. Которая, в силу своей "живости", имеет большие шансы на выживание, нежели нечто оторванное от реальности. Вобщем, автору наилучшие пожелания и welcome в клуб слегка свихнувшихся на Форте :))
Сообщение Добавлено: Сб июн 05, 2010 02:13
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
вопрос писал(а):
Цитата:
Может для автора статьи Статья то, что он разработал и уместно, и работает, и облегчает ему создание программ.
Пожелаем ему успехов.

пусть автор покажет, как его нововведение может помочь решать нерешённые задачи из
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 -- еще куда ни шло... Да и вводить нигде более не используемые идентификаторы тоже как-то нехорошо. Скорее, имело бы смысл задавать количество и типы параметров.
Да, рассчитываю посмотреть на Вашу реализацию. :)
Сообщение Добавлено: Сб июн 05, 2010 01:04
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
Цитата:
Может для автора статьи Статья то, что он разработал и уместно, и работает, и облегчает ему создание программ.
Пожелаем ему успехов.

пусть автор покажет, как его нововведение может помочь решать нерешённые задачи из
viewforum.php?f=19 (конкурс задач)
да хоть эту viewtopic.php?f=19&t=2604
Сообщение Добавлено: Пт июн 04, 2010 19:53
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
М-да... почитал. Статья начинается за здраво, но видимо не окончена, так как не сделано никакого заключения по поводу тех целей, которые преследует автор.
Цитата:
Исключение из состава ядра машины избыточных и устаревших средств

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

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

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

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

Может для автора статьи Статья то, что он разработал и уместно, и работает, и облегчает ему создание программ.
Пожелаем ему успехов.
Сообщение Добавлено: Пт июн 04, 2010 10:02
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
rmammoth писал(а):
то я все же продолжаю сомневаться в том, что это все так уж неэффективно
можно устроить турнир фортов - быстро и азартно
Сообщение Добавлено: Чт июн 03, 2010 23:58
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
dynamic-wind писал(а):
rmammoth писал(а):
Во вторых, не думаю, что забавы с pick и roll при количестве параметров слова 4-5 и более, будут намного эффективнее. И уж точно не будут удобнее.

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


И все же. Выигрыш в экономии памяти для теневого стека обернется проигрышем в памяти, выделяемой на дополнительные команды манипуляций со стеком. Причем, если место в стеке используется неоднократно различными подпрограммами, то компилированная в память ссылка на слово занимает ее все время выполнения программы, и расход памяти на дополнительные команды примерно пропорционален количеству операций. Учитывая же, что реализация слов ($ и $) может быть перенесена на уровень встроенных команд форт машины (если честно, это уже сделано, в статье описана экспериментальная реализация этих слов :) ), то я все же продолжаю сомневаться в том, что это все так уж неэффективно.
Сообщение Добавлено: Чт июн 03, 2010 21:57
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
rmammoth писал(а):
Во вторых, не думаю, что забавы с pick и roll при количестве параметров слова 4-5 и более, будут намного эффективнее. И уж точно не будут удобнее.

Согласен насчет удобства, но не насчет эффективности.
Безусловно современное решение: есть масса памяти, чтобы изводить ее на стеки,
и масса циклов, чтобы изводить их на копирование аргументов.
Сообщение Добавлено: Чт июн 03, 2010 21:27
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
WingLion писал(а):
чтобы долго не рассусоливать: att/forth-ext.pdf


Огромное спасибо! Я так и не нашел, как выложить файл прямо сюда (если это вообще возможно), а терять форматирование текста и рисунки жутко не хотелось.
Сообщение Добавлено: Чт июн 03, 2010 19:14
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
VoidVolker писал(а):
rmammoth писал(а):
Конструктивная критика и обсуждение всячески приветствуются.

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


Хм-м... Так ведь и про переменные надо помнить, и про много чего еще... Вообще, я заметил, программы получаются гораздо лучше, если помнить о том, что пишешь ;) Если серьезно, насчет преимуществ: я пытался реализовать оператор switch, аналогичный описанному, без теневых стеков, получалось довольно жутко и запутанно, по крайней мере, у меня. Если у Вас получится лучше и без довесков над стандартом -- буду только рад перенять опыт.
Сообщение Добавлено: Чт июн 03, 2010 19:12
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
чтобы долго не рассусоливать: att/forth-ext.pdf
Сообщение Добавлено: Чт июн 03, 2010 17:30
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
mOleg писал(а):
вопрос писал(а):
Т.е. можно положить файл сюда?

в текстовом виде вообще просто как сообщение в раздел статей.
а pdf-ку может разместить администратор (WingLion).
Видимо, у нас не особо с пространством на сервере, иначе, можно было бы выкладывать сюда изображения, у меня вот несколько пропало с ipicture.ru при обвале сайта и копий не сохранилось
Сообщение Добавлено: Чт июн 03, 2010 17:17
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
вопрос писал(а):
Т.е. можно положить файл сюда?

в текстовом виде вообще просто как сообщение в раздел статей.
а pdf-ку может разместить администратор (WingLion).
Сообщение Добавлено: Чт июн 03, 2010 16:39
  Заголовок сообщения:  Re: Расширения Форта  Ответить с цитатой
mOleg писал(а):
а можно выложить этот текст в раздел "статьи",
кстати pdf-ник можно и на форуме разместить, потому как качать со всяких ifolder-ов не очень удобно
(впрочем, еще удобнее было бы, если бы содержимое было в html виде, но это уже хотелки 8) )
.
Т.е. можно положить файл сюда?
Сообщение Добавлено: Чт июн 03, 2010 16:08

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


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