Forth
http://fforum.winglion.ru/

Найти экономную заготовку для ключа.
http://fforum.winglion.ru/viewtopic.php?f=19&t=2378
Страница 3 из 3

Автор:  chess [ Вт сен 06, 2011 10:03 ]
Заголовок сообщения:  Re: Найти экономную заготовку для ключа.

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

1. Какую технологию? Наверное это технология локального именования. Любая технология может быть расширена или наоборот специфицирована взависимости от задач.
2. Времени на что? Наверное на реализацию и ее доводку и возможные затраты на расширение и специализацию. (два-три дня).
3. Выигрыш в чем? Наверное это выигрыш во времени программирования по сравнению с временем программирования без использования локального именования. Сильно зависит от сложности задач. Чем сложнее задачи, тем выигрыш больше.
Цель, по которой я ввел это расширение, это удаление оперативного контекста из объема внимания за счет исключения манипуляций на стеке, которые и создают этот самый контекст.
Серьезная\несерьезная, игра\не игра - это не существенно, это как рекламный ярлык к вещи.

Автор:  Hishnik [ Вт сен 06, 2011 13:25 ]
Заголовок сообщения:  Re: Найти экономную заготовку для ключа.

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

Автор:  chess [ Вт сен 06, 2011 14:33 ]
Заголовок сообщения:  Re: Найти экономную заготовку для ключа.

Хищник писал(а):
Я отвечал на вопрос "не сделать ли это частью оптимизатора".

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

Я беру мое суммарное время работы. Кроме того я выкладываю тексты реализации преследуя несколько целей:
1. Получить реакцию от форумчан на идею и скорректировать ее реализацию по их резонным замечаниям.
2. Показать как конкретную идею можно реализовать. Это может для начинающих быть полезным.
3. Показать работу реализованной идеи на примерах решения конкретных задач.
Хищник писал(а):
А от такого кода у меня попросту в глазах рябит.

Отнесем это к субъективным впечатлениям.
Хищник писал(а):
Выигрыш не в наборе кода, а во времени отладки.

Набор текста и время отладки тесно связанные понятия. От того какой текст напрямую зависит и время отладки.
При решении данной задачи время отладки было сведено к почти нулю.
Хищник писал(а):
А здесь читабельность и адаптация к предпочтениям конкретного разработчика существенно важнее возможности упихнуть в одну строчку побольше действий.

Читабельность фактор наименьшей важности. Важна не читабельность, а корректный результат решения, который опирается на прозрачность перехода от алгоритма к его выражению в тексте программы.
Вот как иллюстрация к последнему утверждению еще один вариант решения задачи о ключах, случай когда
разрешены операции одиночного наращивания и группового удаления(добавить к уже существующему тексту):
Код:
: optkey_g-o+ ( l dl nl bk ek tk ok tl sk 'gc 'wa 'nextkey 't=e '.locks '.ok -- ok dl )
  .ok! .locks! t=e! nextkey! wa! gc! sk! tl! ok! tk! ek! bk! nl! dl! l!
  e( EXECUTE )
  0 ng! 0 n1! 0 no! 0x7FFFFFFF nm! 0 n!
  gop( dl 0 DO I tk + @ I tl + @ - is n n 0 > IF n ng MAX is ng THEN CLOOP
       dl 0 DO I tl + @ I tk + @ - 0 > IF n1 1+ is n1 THEN CLOOP ng n1 + no + is no )
  BEGIN nl 0 DO l I dl * + tl wa e 0. is n1 is ng gop LOOP no nm < IF no is nm tk ok wa e THEN 0 is no nextkey e t=e e UNTIL
  CR .locks e nm . CR CR .ok e CR gc e ;

STARTLOG
8 8 6 gen-locks
tesaurus-optkey SPDUP
optkey_g+o-     SPDUP
optkey_o+o-
optkey_g-o+

ps. Отладка свелась к двум пускам программы.

Автор:  Hishnik [ Вт сен 06, 2011 14:54 ]
Заголовок сообщения:  Re: Найти экономную заготовку для ключа.

chess писал(а):
Хищник писал(а):
А от такого кода у меня попросту в глазах рябит.

Отнесем это к субъективным впечатлениям.

Естественно.
chess писал(а):
Читабельность фактор наименьшей важности. Важна не читабельность, а корректный результат решения, который опирается на прозрачность перехода от алгоритма к его выражению в тексте программы.

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

Автор:  chess [ Вт сен 06, 2011 15:09 ]
Заголовок сообщения:  Re: Найти экономную заготовку для ключа.

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

Так и я о том же. Есть ресурсы компьютера и есть ресурсы программиста. Эти ресурсы программиста надо использовать максимально. Идея локального именования позволяет эффективнее использовать такой ресурс программиста как объем оперативного внимания путем исключения оттуда всего, что непосредственно не относится к задаче. Лишним в данном случае является контекст стековых манипуляций, который присущ классическому форту.

Автор:  Hishnik [ Вт сен 06, 2011 15:44 ]
Заголовок сообщения:  Re: Найти экономную заготовку для ключа.

chess писал(а):
Так и я о том же. Есть ресурсы компьютера и есть ресурсы программиста. Эти ресурсы программиста надо использовать максимально. Идея локального именования позволяет эффективнее использовать такой ресурс программиста как объем оперативного внимания путем исключения оттуда всего, что непосредственно не относится к задаче. Лишним в данном случае является контекст стековых манипуляций, который присущ классическому форту.

Только вот ценой чего достигается второстепенное улучшение? Ценой синтаксиса вида:
Код:
I1l!|\l/|

Лекарство часом не тяжелее болезни получилось?

Автор:  chess [ Вт сен 06, 2011 16:20 ]
Заголовок сообщения:  Re: Найти экономную заготовку для ключа.

Хищник писал(а):
Только вот ценой чего достигается второстепенное улучшение? Ценой синтаксиса вида:

Код:
I1l!|\l/|

Лекарство часом не тяжелее болезни получилось?


Да нет. Стековые манипуляторы тут я не применял.
Стековые манипуляторы это технологический прием, который использует другой ресурс программиста - 'видеобуфер'. Идея видеобуфера 'взята' из языка J.
Общеизвестная статистика о том, что в среднем процедуры содержат 6 параметров. Ну я на всякий случай увеличил это число до 9.
Код:
: proc ( n1 n2 n3 n4 -- 0|1) 2swap + over * swap -  > ;   
эквивалентно
Код:
: proc ( n1 n2 n3 n4 -- 0|1)  4\412+4*3-> ;
66 10 20 30 40 proc   Ok ( 66 0 )
Здесь видеобуфер это строящаяся строчка 4\412+4*3->
Применять соответсвенно нужно по случаю. Ничего в этом сложного нет. Прямой доступ к параметрам на стеке, которые укладываются в 'видеобуфер' и процесс этот тоже не использует объем внимания.

Страница 3 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/