Очень страшное слово. :)

classic Classic list List threaded Threaded
15 messages Options
Reply | Threaded
Open this post in threaded view
|

Очень страшное слово. :)

Алексей Царегородцев
Доброго времени суток!

Написал вот это вот... Хотелось бы услышать конструктивную критику -
можно ли сделать это как-то
более "фортово"? Или просто более понятно?

\ Расширить макровыражение
\ c-addr1 u1 - Полная строка
\ c-addr2 u2 - Подстрока в пространстве c-addr1 u1,
\              которая является выражением
\ c-addr1 u3 - Результат работы
: expand ( c-addr1 u1 c-addr2 u2 -- c-addr1 u3 )
  { c1 u1 c2 u2 | ce ue diff }

  \ Вычисляем выражение
  c2 u2 EVALUATE TO ue TO ce

  \ Расширяем зону выражения, чтобы включала '$'
  c2 CHAR- TO c2
  u2 2 +   TO u2

  \ Разница длин новой строки и выражения
  ue u2 - TO diff

  \ Перенос правой подстроки
  c2 u2 CHARS +
  DUP diff CHARS +
  OVER c1 - 1 CHARS / u1 SWAP -
  diff 0< IF CMOVE ELSE CMOVE> THEN

  \ Перенос вычисленного выражения
  ce c2 ue CMOVE

  \ Конечный результат
  c1 u1 diff +
;

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Dmitry Yakimov-2
Привет,

конечно, для этого
1. Не нужно использовать локальные переменные
2. Разбить на несколько других слов
3. Если слова однострочные то комментарии не нужны

без локальных переменных прекрасно можно писать, я например считаю это
костылем.

Алексей Царегородцев wrote:

> Доброго времени суток!
>
> Написал вот это вот... Хотелось бы услышать конструктивную критику -
> можно ли сделать это как-то
> более "фортово"? Или просто более понятно?
>
> \ Расширить макровыражение
> \ c-addr1 u1 - Полная строка
> \ c-addr2 u2 - Подстрока в пространстве c-addr1 u1,
> \              которая является выражением
> \ c-addr1 u3 - Результат работы
> : expand ( c-addr1 u1 c-addr2 u2 -- c-addr1 u3 )
>   { c1 u1 c2 u2 | ce ue diff }
>
>   \ Вычисляем выражение
>   c2 u2 EVALUATE TO ue TO ce
>
>   \ Расширяем зону выражения, чтобы включала '$'
>   c2 CHAR- TO c2
>   u2 2 +   TO u2
>
>   \ Разница длин новой строки и выражения
>   ue u2 - TO diff
>
>   \ Перенос правой подстроки
>   c2 u2 CHARS +
>   DUP diff CHARS +
>   OVER c1 - 1 CHARS / u1 SWAP -
>   diff 0< IF CMOVE ELSE CMOVE> THEN
>
>   \ Перенос вычисленного выражения
>   ce c2 ue CMOVE
>
>   \ Конечный результат
>   c1 u1 diff +
> ;
>
> --
> Алексей Царегородцев.
>
>  
Дмитрий.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

azekeprofit
Administrator
In reply to this post by Алексей Царегородцев
Алексей Царегородцев wrote
Доброго времени суток!

Написал вот это вот... Хотелось бы услышать конструктивную критику -
можно ли сделать это как-то более "фортово"? Или просто более понятно?
Вообще "фортово" -- это довольно расплывчато. У каждого достаточно расплывчато. Не, понятно что есть методики проверенные временем (типа добрых советов от Броуди), но ведь и пишут всё это разные люди.

Алексей Царегородцев wrote
\ Расширить макровыражение
\ c-addr1 u1 - Полная строка
\ c-addr2 u2 - Подстрока в пространстве c-addr1 u1,
\              которая является выражением
\ c-addr1 u3 - Результат работы
Если хотелось по поводу того как сделать "более понятно"... Надо было объяснить что именно делает это слово и если всё таки видно что описание получается всё равно непонятно -- то пример "на пальцах", типа:

: hi S" hello" ;
S" abcd{hi}ef" OVER 5 + 2 expand TYPE
\ вывод: abcd{hello}ef

Если есть желание посмотреть, как были сделаны подобные вещи, см. ~nn/lib/subst.f (должен быть в старых дистрах SPF или в исходниках nnCron) и ~ac\lib\str5.f (насколько я понял мимолётным взглядом, расширение строк там делает внутреннее слово реализации (") )

По реализации конечно туча вопросов (типа: а кто строки снимать будет, а что если результат расширения окажется длинней шаблона) но едва про это их честно спрашивать -- ведь это ж так, почеркушки для вкуривания, как я понимаю.
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Алексей Царегородцев
In reply to this post by Dmitry Yakimov-2
Доброго времени суток!

> конечно, для этого
> 1. Не нужно использовать локальные переменные
> 2. Разбить на несколько других слов
> 3. Если слова однострочные то комментарии не нужны

Енто, наверное, действительно костыль, но тот же Броуди их
рекомендовал в некоторых случаях. Можно увидеть ваш вариант?

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Алексей Царегородцев
In reply to this post by azekeprofit
Доброго времени суток!

> Если есть желание посмотреть, как были сделаны подобные вещи, см.
> ~nn/lib/subst.f (должен быть в старых дистрах SPF или в исходниках
> nnCron) и
> ~ac\lib\str5.f (насколько я понял мимолётным взглядом, расширение
строк
> там
> делает внутреннее слово реализации (") )

Спасибо за наводку, попробую разобраться, хотя, имхо, в обоих с
комментариями проблемы...

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

ygrek-3
 
> Спасибо за наводку, попробую разобраться, хотя, имхо, в обоих с
> комментариями проблемы...

Я не совсем понял чего требуется в исходной задаче, но на всякий случай посмотрите
~pinka/samples/2005/lib/split.f и replace-str.f

PS http://spf.sf.net/docs/devel.ru.html#str

--

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev

attachment0 (196 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

1001
In reply to this post by Алексей Царегородцев
Алексей Царегородцев,

Алексей Царегородцев wrote
Написал вот это вот... Хотелось бы услышать конструктивную критику -
можно ли сделать это как-то
более "фортово"? Или просто более понятно?
чтобы сделать проще - начинай с постановки задачи.

она звучит не совсем "фортово".
например: зачем нужно слово с неизвестным именем?
наверно можно сделать как-то по-другому.


:my-word-$some$
      S" $test$"
      TYPE CR
    ;


Андрей Черезов в молодости написал "правила упрощения" -
очень рекомендую почитать. (Броуди нервно курит)

Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Алексей Царегородцев
Доброго времени суток!

> она звучит не совсем "фортово".
> например: зачем нужно слово с неизвестным именем?
> наверно можно сделать как-то по-другому.

Всё можно сделать через одно место, но меня сейчас волнует более
академический
вопрос - можно ли УДОБНО в Форте использовать вещи, к которым привык -
метапрограммирование, в частности.

>
> Андрей Черезов в молодости написал "правила упрощения" -
> очень рекомендую почитать. (Броуди нервно курит)

Э... урл?

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Алексей Царегородцев
In reply to this post by ygrek-3
> Я не совсем понял чего требуется в исходной задаче,

Гм... Написать слово с заданным поведением, ессно.

> но на всякий случай
> посмотрите
> ~pinka/samples/2005/lib/split.f и replace-str.f

Вот этого примерно я и старался избежать:

: REPLACE-TO ( a u a-k u-k a-new u-new a-dst u-dst-max -- a-dst u )


Фокус ведь не в том, чтобы покрутиться на стеке - я это и сам могу -
фокус в том,
чтобы этого делать не пришлось. Тот же Броуди говорил о трёх параметрах
на стеке,
как разумном пределе. Имхо - пары c-addr u и т.п. можно, конечно,
рассматривать
логически как один параметр - пока они не обрабатываются. ;) В интервью
Мура
(где-то, помнится, лежало переведённое) он говорил о том же. В т.ч. о
своём форт-процессоре,
у которого, помнится, глубина стека вообще 8 ячеек (если не путаю).

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

1001
In reply to this post by Алексей Царегородцев
Алексей Царегородцев,
> Доброго времени суток!
>
>  
>> Андрей Черезов в молодости написал "правила упрощения" -
>> очень рекомендую почитать. (Броуди нервно курит)
>>    
>
> Э... урл?
>  

урла не знаю, а лежит в spf315 в папке "статьи"

~1001

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

ygrek-3
In reply to this post by Алексей Царегородцев

> Вот этого примерно я и старался избежать:
>
> : REPLACE-TO ( a u a-k u-k a-new u-new a-dst u-dst-max -- a-dst u )

replace-str- ( s s-old s-new -- )

--

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev

attachment0 (196 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Andrey Cherezov
In reply to this post by 1001
Добрый день, 1001!

Ваше сообщение от 08.10.2007 19:38:
> урла не знаю, а лежит в spf315 в папке "статьи"
>  
http://www.forth.org.ru/~ac/spf-builds/SPF3.1x/spf315.zip


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Алексей Царегородцев
In reply to this post by 1001
Доброго времени суток!

> урла не знаю, а лежит в spf315 в папке "статьи"

Гм... туплю, наверное, но где его скачать можно-то?

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Алексей Царегородцев
In reply to this post by ygrek-3
Доброго времени суток!

Наверное, это же лучше. Но, имхо, это скорее разнесённая реализация -
использует,
например, слово SPLIT-, которое тоже из "страшных". :(

> replace-str- ( s s-old s-new -- )

Вообще, интересная задача - как сделать это КРАСИВО. Я тут прикинул пару
вариантов
аналогичных решений на C/C++ (там-то я не сомневаюсь, что есть правильно
:) ) - они
ещё корявее выглядят, как ни странно. :)

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: Очень страшное слово. :)

Алексей Царегородцев
In reply to this post by Andrey Cherezov
Доброго времени суток!

> http://www.forth.org.ru/~ac/spf-builds/SPF3.1x/spf315.zip

Спасибо!

--
Алексей Царегородцев.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev