Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср дек 02, 2020 20:16

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Обзор темы - Новый стандарт или чего бы хотелось
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Kamikaze писал(а):
Кстати, интересно, а лисповские скобки сильно мешают?

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

Kamikaze писал(а):
А вот компактный способ отображения стековой нотации в имени, ПМСМ, может резко повысить скорость разработки (отладки) программ.

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

Я лично делаю так:
1) пишу : Name ( стековая диаграмма )
(замечу, что стековая диаграмма иногда не известна, а иногда становится понятно, что данные на стеке не верно расположены и нужна правка в вызвающем коде)
2) пишу коментарий по типу: слово вполняет такую-то функцию ( то есть ответ на вопрос что делает)
3) начинаю писать код.
Часто бывает ситуация, когда у меня есть много слов, не содержащих еще кода. То есть только имена и коментарии.

Кстати, к скобкам, то есть стековым коментариям стоит относиться так, как будто это не коментарий, а обязательные параметры ф-ции, ну, как в тех же Сях. То есть стековая диаграмма должна быть всегда, должна быть по одному стандарту оформлена, даже если слово ничего не берет и ничего не возвращает стековый коментарий ( --> ) обязателен

Kamikaze писал(а):
Вопрос в том какие символы для этого использовать?

ну, загляни в форк, там есть список сокращений :)
Сообщение Добавлено: Сб июл 18, 2009 11:45
  Заголовок сообщения:   Ответить с цитатой
Главное - наглядность
история знает 2 формальных и кучу неформальных способов обеспечения наглядности
формальные:
отображение в именах иерархии кода (объект-ориентированная нотация)
отображение в именах ( выражениях ) связей кода: явное указание аргументов передаваемых в функцию

С++ и подобные языки (много) выиграли за счёт этих двух пунктов
Сообщение Добавлено: Сб июл 18, 2009 11:44
  Заголовок сообщения:   Ответить с цитатой
Олег прав с пунктами 1-3. Формула в имени - переизбыток информации, не повышающий, а наоборот снижающий читабельность исходника.

А вот компактный способ отображения стековой нотации в имени, ПМСМ, может резко повысить скорость разработки (отладки) программ. Вопрос в том какие символы для этого использовать? Причем так чтобы они были видны для "визуального контроля состояния стека", но, одновременно с этим, не мешали при чтении названий слов.
Кстати, интересно, а лисповские скобки сильно мешают? :D
Сообщение Добавлено: Сб июл 18, 2009 11:32
  Заголовок сообщения:   Ответить с цитатой
Прекраснейший способ опускания читабельности ниже плинтуса.
Сообщение Добавлено: Сб июл 18, 2009 10:52
  Заголовок сообщения:   Ответить с цитатой
имена нужно выбирать удачные 8) а уж что в имени будет, вопрос второй.
в любом случае понятно, что выбирать надо:
1) имена отражающие суть определения, желательно понятные всем
2) небольшого размера
3) с небольшим количеством сокращений

а насчет неких стековой нотации в именах, в некотором роде такое уже есть: +! к примеру
Сообщение Добавлено: Сб июл 18, 2009 09:47
  Заголовок сообщения:   Ответить с цитатой
Цитата:
>>берем_два_числа_и_кладем_одно>

неинформативно, если уж пользоваться предоставляемыми фортом правилами разбора входного потока, то формула - информативней всего и ближе к естественному языку
Сообщение Добавлено: Сб июл 18, 2009 08:04
  Заголовок сообщения:   Ответить с цитатой
Ничё так!
Еще вариант - "морзянка":
Код:
_.xyz, ( addr u -- flag )

(чтобы "служебные" символы стековой нотации не загромождали запись их можно опустить вниз строчки)
Сообщение Добавлено: Сб июл 18, 2009 02:02
  Заголовок сообщения:   Ответить с цитатой
/me разбегается и влетает прямо в середину :)

Код:
>>берем_два_числа_и_кладем_одно>
Сообщение Добавлено: Сб июл 18, 2009 00:58
  Заголовок сообщения:   Ответить с цитатой
Хм... эх, вот если бы скобки вместо символов использовать!
Типа (([{word]}
где:
"(" и ")" аналогичны "#" из предыдущего примера, т.е. число
"[" и "]" аналогичны "@", т.е. адрес
а "{" и "}" аналогичны "?", т.е. флаг
и т.п.

Ой, наоборот:
))]}word[{
:D
Сообщение Добавлено: Сб июл 18, 2009 00:49
  Заголовок сообщения:   Ответить с цитатой
Да, но речь о том, чтобы вообще все слова писать со стековой нотацией в имени!
Какой из трех вариантов слова:
Код:
: XX
aa  bb  cc  dd  eee
;

Код:
: ##XX#
##aa#  #bb@#  @#cc@  @dd#  #eee###
;

Код:
: ##XX#
##aa#  #bb@#  @#cc@  @dd#  #eee###  ###fff#
;

первый, второй или третий - будет (теоретически) работать и при этом не оставит после себя на стеке лишний мусор?
Т.е., исполнит:
10 20 ##XX# .
Первый вариант у нас в обычной записи, и, не зная остальных слов, судить о нем - темный лес...
А вот во втором и третьем вариантах информация о состоянии стека уже указана в их именах - что и дает нам мгновенный вывод о работоспособности третьего слова (вернее, о его корректной работе со стеком, естественно).

UPD:
Код:
: XX ( ## -- # )
(## -- ##) aa (# -- #) bb (@# -- @#) cc (@ -- @) dd (# -- #) eee (### -- ###) fff (# -- # )
;
Сообщение Добавлено: Сб июл 18, 2009 00:31
  Заголовок сообщения:   Ответить с цитатой
:lol:
А чем плоха такая запись?
Код:
: икс   SWAP  ; 
: квадрат   DUP *  ;
: игрек    ;
: плюс   +  ;
: нулю   0  ;
: равно?   =  ;

\ x y
икс квадрат игрек плюс нулю равно?
Сообщение Добавлено: Сб июл 18, 2009 00:28
  Заголовок сообщения:   Ответить с цитатой
можно даже чисто формулы
: (A,B,C)(A==C+B?)(FLAG)
+ = ;
Сообщение Добавлено: Сб июл 18, 2009 00:05
  Заголовок сообщения:   Ответить с цитатой
Цитата:
А что если стековую нотацию использовать в самих именах слов?

Я так и делал - если взглянуть моё решение преобразования инфиксно-префиксной строки в постфиксную
Сообщение Добавлено: Сб июл 18, 2009 00:02
  Заголовок сообщения:  Стековая нотация в именах слов  Ответить с цитатой
А что если стековую нотацию использовать в самих именах слов?

"Префикс" - то, что лежит на стеке до,
"Суффикс" - то что после:
Код:
: ##_икс_квадрат_плюс_игрек_равно_нулю_? ( x y -- result )
      SWAP DUP * + 0=
;

Т.е. здесь двойная решетка "##" "префикса" означает, что перед выполнением слова на стек должно ложиться 2 числа.
Результат - знак вопроса "?" - флаг истина/ложь
Код:
: @#STR>NUM# ( a u -- n )
     0 0 2SWAP >NUMBER 2DROP D>S
;

А здесь на входе лежит строка типа au, обозначаемая "@#" ("@" - соответствует адресу, "#" - числу), а на выходе - число "#"
Сообщение Добавлено: Пт июл 17, 2009 23:28
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
А в сторону strongforth смотрели?
Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд

Проверку типов в Форте можно ввести, как одну из возможностей, но не более:)

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

P.S. В strongforth не заглядывал, может там что-то подобное:)
Сообщение Добавлено: Пн дек 11, 2006 08:16

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


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