Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
Kamikaze писал(а): Кстати, интересно, а лисповские скобки сильно мешают? ну, вобщем да. По крайней мере с непривычки достаточно легко ошибиться в их количестве. возможно, если при работе с лиспом пользоваться Форт-правилами по факторизации это не будет сильным напрягом, но мне пробел ближе. Kamikaze писал(а): А вот компактный способ отображения стековой нотации в имени, ПМСМ, может резко повысить скорость разработки (отладки) программ. я могу сказать, только то, что когда пишешь код надо не лениться делать коментарии. Точнее даже не так, сначала надо писать коментарий, а потом код! Именно коментарий часто помогает сформулировать мысль, или, даже, факторизовать код более эффективным образом. Потому что, если коментарий слишком сложный, или составной, сразу становится видно, что нужно код разбивать! Я лично делаю так: 1) пишу : Name ( стековая диаграмма ) (замечу, что стековая диаграмма иногда не известна, а иногда становится понятно, что данные на стеке не верно расположены и нужна правка в вызвающем коде) 2) пишу коментарий по типу: слово вполняет такую-то функцию ( то есть ответ на вопрос что делает) 3) начинаю писать код. Часто бывает ситуация, когда у меня есть много слов, не содержащих еще кода. То есть только имена и коментарии. Кстати, к скобкам, то есть стековым коментариям стоит относиться так, как будто это не коментарий, а обязательные параметры ф-ции, ну, как в тех же Сях. То есть стековая диаграмма должна быть всегда, должна быть по одному стандарту оформлена, даже если слово ничего не берет и ничего не возвращает стековый коментарий ( --> ) обязателен Kamikaze писал(а): Вопрос в том какие символы для этого использовать?
ну, загляни в форк, там есть список сокращений
[quote="Kamikaze"]Кстати, интересно, а лисповские скобки сильно мешают?[/quote] ну, вобщем да. По крайней мере с непривычки достаточно легко ошибиться в их количестве. возможно, если при работе с лиспом пользоваться Форт-правилами по факторизации это не будет сильным напрягом, но мне пробел ближе.
[quote="Kamikaze"]А вот компактный способ отображения стековой нотации в имени, ПМСМ, может резко повысить скорость разработки (отладки) программ.[/quote] я могу сказать, только то, что когда пишешь код надо не лениться делать коментарии. Точнее даже не так, сначала надо писать коментарий, а потом код! Именно коментарий часто помогает сформулировать мысль, или, даже, факторизовать код более эффективным образом. Потому что, если коментарий слишком сложный, или составной, сразу становится видно, что нужно код разбивать!
Я лично делаю так: 1) пишу : Name ( стековая диаграмма ) (замечу, что стековая диаграмма иногда не известна, а иногда становится понятно, что данные на стеке не верно расположены и нужна правка в вызвающем коде) 2) пишу коментарий по типу: слово вполняет такую-то функцию ( то есть ответ на вопрос что делает) 3) начинаю писать код. Часто бывает ситуация, когда у меня есть много слов, не содержащих еще кода. То есть только имена и коментарии.
Кстати, к скобкам, то есть стековым коментариям стоит относиться так, как будто это не коментарий, а обязательные параметры ф-ции, ну, как в тех же Сях. То есть стековая диаграмма должна быть всегда, должна быть по одному стандарту оформлена, даже если слово ничего не берет и ничего не возвращает стековый коментарий ( --> ) обязателен
[quote="Kamikaze"]Вопрос в том какие символы для этого использовать?[/quote]
ну, загляни в форк, там есть список сокращений :)
|
|
|
|
Добавлено: Сб июл 18, 2009 11:45 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Главное - наглядность
история знает 2 формальных и кучу неформальных способов обеспечения наглядности
формальные:
отображение в именах иерархии кода (объект-ориентированная нотация)
отображение в именах ( выражениях ) связей кода: явное указание аргументов передаваемых в функцию
С++ и подобные языки (много) выиграли за счёт этих двух пунктов
Главное - наглядность
история знает 2 формальных и кучу неформальных способов обеспечения наглядности
формальные:
отображение в именах иерархии кода (объект-ориентированная нотация)
отображение в именах ( выражениях ) связей кода: явное указание аргументов передаваемых в функцию
С++ и подобные языки (много) выиграли за счёт этих двух пунктов
|
|
|
|
Добавлено: Сб июл 18, 2009 11:44 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Олег прав с пунктами 1-3. Формула в имени - переизбыток информации, не повышающий, а наоборот снижающий читабельность исходника.
А вот компактный способ отображения стековой нотации в имени, ПМСМ, может резко повысить скорость разработки (отладки) программ. Вопрос в том какие символы для этого использовать? Причем так чтобы они были видны для "визуального контроля состояния стека", но, одновременно с этим, не мешали при чтении названий слов.
Кстати, интересно, а лисповские скобки сильно мешают?
Олег прав с пунктами 1-3. Формула в имени - переизбыток информации, не повышающий, а наоборот снижающий читабельность исходника.
А вот [b][size=150]компактный[/size][/b] способ отображения стековой нотации в имени, ПМСМ, может резко повысить скорость разработки (отладки) программ. [u]Вопрос в том какие символы для этого использовать[/u]? Причем так чтобы они были видны для "визуального контроля состояния стека", но, одновременно с этим, не мешали при чтении названий слов.
Кстати, интересно, а лисповские скобки сильно мешают? :D
|
|
|
|
Добавлено: Сб июл 18, 2009 11:32 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Прекраснейший способ опускания читабельности ниже плинтуса.
Прекраснейший способ опускания читабельности ниже плинтуса.
|
|
|
|
Добавлено: Сб июл 18, 2009 10:52 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
имена нужно выбирать удачные а уж что в имени будет, вопрос второй.
в любом случае понятно, что выбирать надо:
1) имена отражающие суть определения, желательно понятные всем
2) небольшого размера
3) с небольшим количеством сокращений
а насчет неких стековой нотации в именах, в некотором роде такое уже есть: +! к примеру
имена нужно выбирать удачные 8) а уж что в имени будет, вопрос второй.
в любом случае понятно, что выбирать надо:
1) имена отражающие суть определения, желательно понятные всем
2) небольшого размера
3) с небольшим количеством сокращений
а насчет неких стековой нотации в именах, в некотором роде такое уже есть: +! к примеру
|
|
|
|
Добавлено: Сб июл 18, 2009 09:47 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Цитата: >>берем_два_числа_и_кладем_одно>
неинформативно, если уж пользоваться предоставляемыми фортом правилами разбора входного потока, то формула - информативней всего и ближе к естественному языку
[quote]>>берем_два_числа_и_кладем_одно>[/quote]
неинформативно, если уж пользоваться предоставляемыми фортом правилами разбора входного потока, то формула - информативней всего и ближе к естественному языку
|
|
|
|
Добавлено: Сб июл 18, 2009 08:04 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Ничё так!
Еще вариант - "морзянка":
Код: _.xyz, ( addr u -- flag )
(чтобы "служебные" символы стековой нотации не загромождали запись их можно опустить вниз строчки)
Ничё так!
Еще вариант - "морзянка":
[code]_.xyz, ( addr u -- flag )[/code]
(чтобы "служебные" символы стековой нотации не загромождали запись их можно опустить вниз строчки)
|
|
|
|
Добавлено: Сб июл 18, 2009 02:02 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
/me разбегается и влетает прямо в середину
Код: >>берем_два_числа_и_кладем_одно>
/me разбегается и влетает прямо в середину :)
[code]>>берем_два_числа_и_кладем_одно>[/code]
|
|
|
|
Добавлено: Сб июл 18, 2009 00:58 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Хм... эх, вот если бы скобки вместо символов использовать!
Типа (([{word]}
где:
"(" и ")" аналогичны "#" из предыдущего примера, т.е. число
"[" и "]" аналогичны "@", т.е. адрес
а "{" и "}" аналогичны "?", т.е. флаг
и т.п.
Ой, наоборот:
))]}word[{
Хм... эх, вот если бы скобки вместо символов использовать!
Типа [b](([{word]}[/b]
где:
"(" и ")" аналогичны "#" из предыдущего примера, т.е. число
"[" и "]" аналогичны "@", т.е. адрес
а "{" и "}" аналогичны "?", т.е. флаг
и т.п.
Ой, наоборот:
[b]))]}word[{[/b]
: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 (# -- # ) ;
Да, но речь о том, чтобы [b]вообще все слова писать со стековой нотацией в имени[/b]!
Какой из трех вариантов слова:
[code]: XX aa bb cc dd eee ; [/code] [code]: ##XX# ##aa# #bb@# @#cc@ @dd# #eee### ; [/code] [code]: ##XX# ##aa# #bb@# @#cc@ @dd# #eee### ###fff# ; [/code] первый, второй или третий - будет (теоретически) работать и при этом не оставит после себя на стеке лишний мусор? Т.е., исполнит: 10 20 ##XX# . Первый вариант у нас в обычной записи, и, не зная остальных слов, судить о нем - темный лес... А вот во втором и третьем вариантах информация о состоянии стека [i]уже указана в их именах[/i] - что и дает нам мгновенный вывод о работоспособности третьего слова (вернее, о его корректной работе со стеком, естественно).
UPD: [code]: XX ( ## -- # ) (## -- ##) aa (# -- #) bb (@# -- @#) cc (@ -- @) dd (# -- #) eee (### -- ###) fff (# -- # ) ; [/code]
|
|
|
|
Добавлено: Сб июл 18, 2009 00:31 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
А чем плоха такая запись?
Код: : икс SWAP ; : квадрат DUP * ; : игрек ; : плюс + ; : нулю 0 ; : равно? = ;
\ x y икс квадрат игрек плюс нулю равно?
:lol:
А чем плоха такая запись?
[code]: икс SWAP ; : квадрат DUP * ; : игрек ; : плюс + ; : нулю 0 ; : равно? = ;
\ x y икс квадрат игрек плюс нулю равно?[/code]
|
|
|
|
Добавлено: Сб июл 18, 2009 00:28 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
можно даже чисто формулы
: (A,B,C)(A==C+B?)(FLAG)
+ = ;
можно даже чисто формулы
: (A,B,C)(A==C+B?)(FLAG)
+ = ;
|
|
|
|
Добавлено: Сб июл 18, 2009 00:05 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Цитата: А что если стековую нотацию использовать в самих именах слов?
Я так и делал - если взглянуть моё решение преобразования инфиксно-префиксной строки в постфиксную
[quote]А что если стековую нотацию использовать в самих именах слов?[/quote]
Я так и делал - если взглянуть моё решение преобразования инфиксно-префиксной строки в постфиксную
|
|
|
|
Добавлено: Сб июл 18, 2009 00:02 |
|
|
|
|
|
Заголовок сообщения: |
Стековая нотация в именах слов |
|
|
А что если стековую нотацию использовать в самих именах слов?
"Префикс" - то, что лежит на стеке до,
"Суффикс" - то что после:
Код: : ##_икс_квадрат_плюс_игрек_равно_нулю_? ( x y -- result ) SWAP DUP * + 0= ;
Т.е. здесь двойная решетка "##" "префикса" означает, что перед выполнением слова на стек должно ложиться 2 числа. Результат - знак вопроса "?" - флаг истина/ложь Код: : @#STR>NUM# ( a u -- n ) 0 0 2SWAP >NUMBER 2DROP D>S ;
А здесь на входе лежит строка типа au, обозначаемая "@#" ("@" - соответствует адресу, "#" - числу), а на выходе - число "#"
А что если стековую нотацию использовать в самих именах слов?
[i]"Префикс"[/i] - то, что лежит на стеке до,
[i]"Суффикс"[/i] - то что после:
[code]: ##_икс_квадрат_плюс_игрек_равно_нулю_? ( x y -- result ) SWAP DUP * + 0= ; [/code] Т.е. здесь двойная решетка "##" [i]"префикса"[/i] означает, что перед выполнением слова на стек должно ложиться 2 числа. Результат - знак вопроса "?" - флаг истина/ложь [code]: @#STR>NUM# ( a u -- n ) 0 0 2SWAP >NUMBER 2DROP D>S ; [/code]
А здесь на входе лежит строка типа au, обозначаемая "@#" ("@" - соответствует адресу, "#" - числу), а на выходе - число "#"
|
|
|
|
Добавлено: Пт июл 17, 2009 23:28 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mOleg писал(а): А в сторону strongforth смотрели? Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд
Проверку типов в Форте можно ввести, как одну из возможностей, но не более:)
Например в стековой нотации слов комментировать еще тип для парсинга,
а у слова перед его определением указывать тип возвращаемого значения.
P.S. В strongforth не заглядывал, может там что-то подобное:)
[quote="mOleg"]А в сторону strongforth смотрели? Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд[/quote]
Проверку типов в Форте можно ввести, как одну из возможностей, но не более:)
Например в стековой нотации слов комментировать еще тип для парсинга,
а у слова перед его определением указывать тип возвращаемого значения.
P.S. В strongforth не заглядывал, может там что-то подобное:)
|
|
|
|
Добавлено: Пн дек 11, 2006 08:16 |
|
|
|
|