Quantcast

(no subject)

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

(no subject)

витя ерыгин

Есть ли наработки по хранению локальных переменных в самом слове?
Вот безсмысленный пример
: test [ 10 LIT, ] DROP  LATEST NAME> 6 + !   LATEST NAME> 6 + @ ;

Хотелось бы услышать о перспективах этого
--
Виктор Ерыгин
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

Ruvim Pinka
2016-03-10 19:24 GMT+03:00 витя ерыгин <[hidden email]>:

Есть ли наработки по хранению локальных переменных в самом слове?
Вот безсмысленный пример
: test [ 10 LIT, ] DROP  LATEST NAME> 6 + !   LATEST NAME> 6 + @ ;

Хотелось бы услышать о перспективах этого

Это частный случай [само] модифицирующегося кода, со всеми его плюсами, минусами, и ограничениями.
См. хотя бы википедию.

--
Ruvim


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

shabronov
:  СЛОВО1 (  вариант сохранения данных локальных переменых
в литерале в теле слова )
||  VAR1 In  ||  (  локальные переменные In  var1  заняли
для VAR1 0x400 байт при первом обращении и работаем )
  S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0!
 0x100 4*  ALLOCATE THROW OVER !  THEN @ -> VAR1
  \  * * *
  VAR1 0x400 DUMP ( посмотреть )
\ минус решения - Не получиться использовавть циклы DO ..
LOOP т.к там используется стек
\ обходиться через begin ... until  а вмест I  используем
сделанную локальную In
  0x100 0  BEGIN  (  Nm Ni -- )   DUP -> In (  Nm Ni -- )
     In In *  DUP .  (  Nm Ni Mii --  выдается квадрат
числа - это пример )
      VAR1 In 4* + !  ( и сохраняем в памяти )
    1+ 2DUP = UNTIL 2DROP (  выход по счетчику +1  при = )
;

On Thu, 10 Mar 2016 19:52:59 +0300
  Ruvim Pinka <[hidden email]> wrote:

> 2016-03-10 19:24 GMT+03:00 витя ерыгин
><[hidden email]>:
>
>>
>> Есть ли наработки по хранению локальных переменных в
>>самом слове?
>> Вот безсмысленный пример
>> : test [ 10 LIT, ] DROP  LATEST NAME> 6 + !   LATEST
>>NAME> 6 + @ ;
>>
>> Хотелось бы услышать о перспективах этого
>>
>
> Это частный случай [само] модифицирующегося кода, со
>всеми его плюсами,
> минусами, и ограничениями.
> См. хотя бы википедию
> <https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F_%D0%BA%D0%BE%D0%B4>
> .
>
> --
> Ruvim

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

витя ерыгин
Можно сделать попроще, относительно

: (find_w-loc)  2DUP + >R
                14 R@ C!   \ для последующего поиска
                14 R@ 1+ C! \ вводим "уникальную"
                14 R@ 2+ C! \ последовательность
                14 R> 3 + C! ( 14 - символ ноты )
                 
;

: WORD-LOC \ требует число после себя
     
       ['] ] >R
       ['] SLIT, >R
       ['] CELL+ >R
       ['] (find_w-loc) >R
       ['] ?SLITERAL >R
       ['] PARSE-NAME >R
       ['] HERE >R   
       ['] [ >R
       
; IMMEDIATE

: <-SEA-ADR-SP 1000 0 DO HERE I - C@ 14 = IF \ поиск нашей "уникальности"
       HERE I - 1- C@ 14 = IF
         HERE I - 2- C@ 14 = IF
           HERE I - 3 - C@ 14 = IF
             HERE I - 3 - LEAVE THEN THEN THEN THEN
            LOOP   
;



: OBR!  <-SEA-ADR-SP   SWAP - C! ;
: OBR@  <-SEA-ADR-SP   SWAP - C@ ;


: TEST WORD-LOC 7 2DROP 30 40 <-SEA-ADR-SP  ;

 : TEST1  WORD-LOC 10 2DROP 2 OBR! 3 OBR!
  3 OBR@ 0 DO
  2 OBR@ I +  LOOP ;


Пятница, 11 марта 2016, 7:58 +04:00 от "shabronov" <[hidden email]>:

: СЛОВО1 ( вариант сохранения данных локальных переменых
в литерале в теле слова )
|| VAR1 In || ( локальные переменные In var1 заняли
для VAR1 0x400 байт при первом обращении и работаем )
  S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0!
 0x100 4* ALLOCATE THROW OVER ! THEN @ -> VAR1
  \ * * *
  VAR1 0x400 DUMP ( посмотреть )
\ минус решения - Не получиться использовавть циклы DO ..
LOOP т.к там используется стек
\ обходиться через begin ... until а вмест I используем
сделанную локальную In
  0x100 0 BEGIN ( Nm Ni -- ) DUP -> In ( Nm Ni -- )
     In In * DUP . ( Nm Ni Mii -- выдается квадрат
числа - это пример )
      VAR1 In 4* + ! ( и сохраняем в памяти )
    1+ 2DUP = UNTIL 2DROP ( выход по счетчику +1 при = )
;

On Thu, 10 Mar 2016 19:52:59 +0300
  Ruvim Pinka <ruvim.pinka@...> wrote:
> 2016-03-10 19:24 GMT+03:00 витя ерыгин
><vitai96@...>:
>
>>
>> Есть ли наработки по хранению локальных переменных в
>>самом слове?
>> Вот безсмысленный пример
>> : test [ 10 LIT, ] DROP LATEST NAME> 6 + ! LATEST
>>NAME> 6 + @ ;
>>
>> Хотелось бы услышать о перспективах этого
>>
>
> Это частный случай [само] модифицирующегося кода, со
>всеми его плюсами,
> минусами, и ограничениями.
> См. хотя бы википедию
> <https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F_%D0%BA%D0%BE%D0%B4>
> .
>
> --
> Ruvim

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

azekeprofit
Administrator
Такие вещи *уничтожают* производительность, из-за того что каждое
изменение такой "переменной" влечёт сброс кэша предсказаний переходов
процессора (т.к. слово в SPF = машинный код).

Это почти что кэш L1-2 в BIOS выключить.

On 3/14/16, витя ерыгин <[hidden email]> wrote:

>  Можно сделать попроще, относительно
>
> : (find_w-loc)  2DUP + >R
>                 14 R@ C!   \ для последующего поиска
>                 14 R@ 1+ C! \ вводим "уникальную"
>                 14 R@ 2+ C! \ последовательность
>                 14 R> 3 + C! ( 14 - символ ноты )
>
> ;
>
> : WORD-LOC \ требует число после себя
>
>        ['] ] >R
>        ['] SLIT, >R
>        ['] CELL+ >R
>        ['] (find_w-loc) >R
>        ['] ?SLITERAL >R
>        ['] PARSE-NAME >R
>        ['] HERE >R
>        ['] [ >R
>
> ; IMMEDIATE
>
> : <-SEA-ADR-SP 1000 0 DO HERE I - C@ 14 = IF \ поиск нашей "уникальности"
>        HERE I - 1- C@ 14 = IF
>          HERE I - 2- C@ 14 = IF
>            HERE I - 3 - C@ 14 = IF
>              HERE I - 3 - LEAVE THEN THEN THEN THEN
>             LOOP
> ;
>
>
>
> : OBR!  <-SEA-ADR-SP   SWAP - C! ;
> : OBR@  <-SEA-ADR-SP   SWAP - C@ ;
>
>
> : TEST WORD-LOC 7 2DROP 30 40 <-SEA-ADR-SP  ;
>
>  : TEST1  WORD-LOC 10 2DROP 2 OBR! 3 OBR!
>   3 OBR@ 0 DO
>   2 OBR@ I +  LOOP ;
>
>
>>Пятница, 11 марта 2016, 7:58 +04:00 от "shabronov" <[hidden email]>:
>>
>>:  СЛОВО1 (  вариант сохранения данных локальных переменых
>>в литерале в теле слова )
>>||  VAR1 In  ||  (  локальные переменные In  var1  заняли
>>для VAR1 0x400 байт при первом обращении и работаем )
>>  S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0!
>> 0x100 4*  ALLOCATE THROW OVER !  THEN @ -> VAR1
>>  \  * * *
>>  VAR1 0x400 DUMP ( посмотреть )
>>\ минус решения - Не получиться использовавть циклы DO ..
>>LOOP т.к там используется стек
>>\ обходиться через begin ... until  а вмест I  используем
>>сделанную локальную In
>>  0x100 0  BEGIN  (  Nm Ni -- )   DUP -> In (  Nm Ni -- )
>>     In In *  DUP .  (  Nm Ni Mii --  выдается квадрат
>>числа - это пример )
>>      VAR1 In 4* + !  ( и сохраняем в памяти )
>>    1+ 2DUP = UNTIL 2DROP (  выход по счетчику +1  при = )
>>;
>>
>>On Thu, 10 Mar 2016 19:52:59 +0300
>>  Ruvim Pinka < [hidden email] > wrote:
>>> 2016-03-10 19:24 GMT+03:00 витя ерыгин
>>>< [hidden email] >:
>>>
>>>>
>>>> Есть ли наработки по хранению локальных переменных в
>>>>самом слове?
>>>> Вот безсмысленный пример
>>>> : test [ 10 LIT, ] DROP  LATEST NAME> 6 + !   LATEST
>>>>NAME> 6 + @ ;
>>>>
>>>> Хотелось бы услышать о перспективах этого
>>>>
>>>
>>> Это частный случай [само] модифицирующегося кода, со
>>>всеми его плюсами,
>>> минусами, и ограничениями.
>>> См. хотя бы википедию
>>> <
>>> https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F_%D0%BA%D0%BE%D0%B4
>>> >
>>> .
>>>
>>> --
>>> Ruvim
>>
>>------------------------------------------------------------------------------
>>Transform Data into Opportunity.
>>Accelerate data analysis in your applications with
>>Intel Data Analytics Acceleration Library.
>>Click to learn more.
>>http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
>>_______________________________________________
>>Spf-dev mailing list
>>[hidden email]
>>https://lists.sourceforge.net/lists/listinfo/spf-dev
>
>
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

витя ерыгин
Ну, хотя бы буду знать, что так можно, но нельзя


Вторник, 15 марта 2016, 7:03 +04:00 от "azekeprofit ." <[hidden email]>:

Такие вещи *уничтожают* производительность, из-за того что каждое
изменение такой "переменной" влечёт сброс кэша предсказаний переходов
процессора (т.к. слово в SPF = машинный код).

Это почти что кэш L1-2 в BIOS выключить.

On 3/14/16, витя ерыгин <vitai96@...> wrote:
> Можно сделать попроще, относительно
>
> : (find_w-loc)  2DUP + >R
>                 14 R@ C!   \ для последующего поиска
>                 14 R@ 1+ C! \ вводим "уникальную"
>                 14 R@ 2+ C! \ последовательность
>                 14 R> 3 + C! ( 14 - символ ноты )
>
> ;
>
> : WORD-LOC \ требует число после себя
>
>        ['] ] >R
>        ['] SLIT, >R
>        ['] CELL+ >R
>        ['] (find_w-loc) >R
>        ['] ?SLITERAL >R
>        ['] PARSE-NAME >R
>        ['] HERE >R
>        ['] [ >R
>
> ; IMMEDIATE
>
> : <-SEA-ADR-SP 1000 0 DO HERE I - C@ 14 = IF \ поиск нашей "уникальности"
>        HERE I - 1- C@ 14 = IF
>          HERE I - 2- C@ 14 = IF
>            HERE I - 3 - C@ 14 = IF
>              HERE I - 3 - LEAVE THEN THEN THEN THEN
>             LOOP
> ;
>
>
>
> : OBR!  <-SEA-ADR-SP   SWAP - C! ;
> : OBR@  <-SEA-ADR-SP   SWAP - C@ ;
>
>
> : TEST WORD-LOC 7 2DROP 30 40 <-SEA-ADR-SP  ;
>
>  : TEST1  WORD-LOC 10 2DROP 2 OBR! 3 OBR!
>   3 OBR@ 0 DO
>   2 OBR@ I +  LOOP ;
>
>
>>Пятница, 11 марта 2016, 7:58 +04:00 от "shabronov" <shabronov@...>:
>>
>>: СЛОВО1 ( вариант сохранения данных локальных переменых
>>в литерале в теле слова )
>>|| VAR1 In || ( локальные переменные In var1 заняли
>>для VAR1 0x400 байт при первом обращении и работаем )
>>  S" 12345678" DROP ( A -- ) DUP 4+ @ 0<> IF DUP 4+ 0!
>> 0x100 4* ALLOCATE THROW OVER ! THEN @ -> VAR1
>>  \ * * *
>>  VAR1 0x400 DUMP ( посмотреть )
>>\ минус решения - Не получиться использовавть циклы DO ..
>>LOOP т.к там используется стек
>>\ обходиться через begin ... until а вмест I используем
>>сделанную локальную In
>>  0x100 0 BEGIN ( Nm Ni -- ) DUP -> In ( Nm Ni -- )
>>     In In * DUP . ( Nm Ni Mii -- выдается квадрат
>>числа - это пример )
>>      VAR1 In 4* + ! ( и сохраняем в памяти )
>>    1+ 2DUP = UNTIL 2DROP ( выход по счетчику +1 при = )
>>;
>>
>>On Thu, 10 Mar 2016 19:52:59 +0300
>>  Ruvim Pinka < ruvim.pinka@... > wrote:
>>> 2016-03-10 19:24 GMT+03:00 витя ерыгин
>>>< vitai96@... >:
>>>
>>>>
>>>> Есть ли наработки по хранению локальных переменных в
>>>>самом слове?
>>>> Вот безсмысленный пример
>>>> : test [ 10 LIT, ] DROP LATEST NAME> 6 + ! LATEST
>>>>NAME> 6 + @ ;
>>>>
>>>> Хотелось бы услышать о перспективах этого
>>>>
>>>
>>> Это частный случай [само] модифицирующегося кода, со
>>>всеми его плюсами,
>>> минусами, и ограничениями.
>>> См. хотя бы википедию
>>> <
>>> https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F_%D0%BA%D0%BE%D0%B4
>>> >
>>> .
>>>
>>> --
>>> Ruvim
>>
>>------------------------------------------------------------------------------
>>Transform Data into Opportunity.
>>Accelerate data analysis in your applications with
>>Intel Data Analytics Acceleration Library.
>>Click to learn more.
>>http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
>>_______________________________________________
>>Spf-dev mailing list
>>Spf-dev@...
>>https://lists.sourceforge.net/lists/listinfo/spf-dev
>
>


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

Ruvim Pinka
2016-03-15 18:44 GMT+03:00 витя ерыгин <[hidden email]>:
Ну, хотя бы буду знать, что так можно, но нельзя

Да, так возможно, но обычно не оправдано.

А еще, что выражать можно еще проще ;)
 
On 3/14/16, витя ерыгин <vitai96@...> wrote:
> Можно сделать попроще, относительно
>
> : (find_w-loc)  2DUP + >R
>                 14 R@ C!   \ для последующего поиска
>                 14 R@ 1+ C! \ вводим "уникальную"
>                 14 R@ 2+ C! \ последовательность
>                 14 R> 3 + C! ( 14 - символ ноты )
>
> ;
Это равносильно:

: (find_w-loc)  2DUP + 0x0E0E0E0E SWAP ! ; \ 14 в десятичной это 0E в шестнадцатеричной.

Но, использовать такой метод ("уникальную" последовательность) очень черевато.


> : WORD-LOC \ требует число после себя
>
>        ['] ] >R
>        ['] SLIT, >R
>        ['] CELL+ >R
>        ['] (find_w-loc) >R
>        ['] ?SLITERAL >R
>        ['] PARSE-NAME >R
>        ['] HERE >R
>        ['] [ >R
>
> ; IMMEDIATE

Выполнять таким образом цепочку слов неоправданно и непортабельно.

Равносильная запись:

: WORD-LOC ( -- ) \ требует число после себя
  POSTPONE [ HERE PARSE-NAME POSTPONE ?SLITERAL (find_w-loc) CELL+ SLIT, ]
; IMMEDIATE


Лучше будет:

: UNUMBER ( addr u -- x ) 0 0 2SWAP >NUMBER NIP IF -2001 THROW THEN D>S ;

: WORD-LOC, ( u -- ) HERE SWAP (find_w-loc) CELL+ SLIT, ;

: WORD-LOC: ( "u" -- ) PARSE-NAME UNUMBER WORD-LOC, ; IMMEDIATE


 
> : <-SEA-ADR-SP 1000 0 DO HERE I - C@ 14 = IF \ поиск нашей "уникальности"
>        HERE I - 1- C@ 14 = IF
>          HERE I - 2- C@ 14 = IF
>            HERE I - 3 - C@ 14 = IF
>              HERE I - 3 - LEAVE THEN THEN THEN THEN
>             LOOP
> ;

Тут проще искать сразу 0x0E0E0E0E, а не побайтно.



--
Ruvim

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

витя ерыгин
И ещё вопрос.
есть
:noname 55 40 всякая хрень ;
мы это слово переносим куда-нибудь как строку
А потом полученную "строку" вставляем в определение
: xaxa ... [ adr-otpr u slit, ] drop execute ...  ;
Чем черевато использовать эту лямбду?


Вторник, 15 марта 2016, 23:01 +04:00 от Ruvim Pinka <[hidden email]>:

2016-03-15 18:44 GMT+03:00 витя ерыгин <vitai96@...>:
Ну, хотя бы буду знать, что так можно, но нельзя

Да, так возможно, но обычно не оправдано.

А еще, что выражать можно еще проще ;)
 
On 3/14/16, витя ерыгин <vitai96@...> wrote:
> Можно сделать попроще, относительно
>
> : (find_w-loc)  2DUP + >R
>                 14 R@ C!   \ для последующего поиска
>                 14 R@ 1+ C! \ вводим "уникальную"
>                 14 R@ 2+ C! \ последовательность
>                 14 R> 3 + C! ( 14 - символ ноты )
>
> ;
Это равносильно:

: (find_w-loc)  2DUP + 0x0E0E0E0E SWAP ! ; \ 14 в десятичной это 0E в шестнадцатеричной.

Но, использовать такой метод ("уникальную" последовательность) очень черевато.


> : WORD-LOC \ требует число после себя
>
>        ['] ] >R
>        ['] SLIT, >R
>        ['] CELL+ >R
>        ['] (find_w-loc) >R
>        ['] ?SLITERAL >R
>        ['] PARSE-NAME >R
>        ['] HERE >R
>        ['] [ >R
>
> ; IMMEDIATE

Выполнять таким образом цепочку слов неоправданно и непортабельно.

Равносильная запись:

: WORD-LOC ( -- ) \ требует число после себя
  POSTPONE [ HERE PARSE-NAME POSTPONE ?SLITERAL (find_w-loc) CELL+ SLIT, ]
; IMMEDIATE


Лучше будет:

: UNUMBER ( addr u -- x ) 0 0 2SWAP >NUMBER NIP IF -2001 THROW THEN D>S ;

: WORD-LOC, ( u -- ) HERE SWAP (find_w-loc) CELL+ SLIT, ;

: WORD-LOC: ( "u" -- ) PARSE-NAME UNUMBER WORD-LOC, ; IMMEDIATE


 
> : <-SEA-ADR-SP 1000 0 DO HERE I - C@ 14 = IF \ поиск нашей "уникальности"
>        HERE I - 1- C@ 14 = IF
>          HERE I - 2- C@ 14 = IF
>            HERE I - 3 - C@ 14 = IF
>              HERE I - 3 - LEAVE THEN THEN THEN THEN
>             LOOP
> ;

Тут проще искать сразу 0x0E0E0E0E, а не побайтно.



--
Ruvim
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

витя ерыгин
In reply to this post by Ruvim Pinka

Но, использовать такой метод ("уникальную" последовательность) очень черевато.
См. на эту тему: Детективная история о нечитаемых компакт-дисках

 Поэтому слово "уникальность" в кавычках :)
Вторник, 15 марта 2016, 23:01 +04:00 от Ruvim Pinka <[hidden email]>:

2016-03-15 18:44 GMT+03:00 витя ерыгин <vitai96@...>:
Ну, хотя бы буду знать, что так можно, но нельзя

Да, так возможно, но обычно не оправдано.

А еще, что выражать можно еще проще ;)
 
On 3/14/16, витя ерыгин <vitai96@...> wrote:
> Можно сделать попроще, относительно
>
> : (find_w-loc)  2DUP + >R
>                 14 R@ C!   \ для последующего поиска
>                 14 R@ 1+ C! \ вводим "уникальную"
>                 14 R@ 2+ C! \ последовательность
>                 14 R> 3 + C! ( 14 - символ ноты )
>
> ;
Это равносильно:

: (find_w-loc)  2DUP + 0x0E0E0E0E SWAP ! ; \ 14 в десятичной это 0E в шестнадцатеричной.

Но, использовать такой метод ("уникальную" последовательность) очень черевато.


> : WORD-LOC \ требует число после себя
>
>        ['] ] >R
>        ['] SLIT, >R
>        ['] CELL+ >R
>        ['] (find_w-loc) >R
>        ['] ?SLITERAL >R
>        ['] PARSE-NAME >R
>        ['] HERE >R
>        ['] [ >R
>
> ; IMMEDIATE

Выполнять таким образом цепочку слов неоправданно и непортабельно.

Равносильная запись:

: WORD-LOC ( -- ) \ требует число после себя
  POSTPONE [ HERE PARSE-NAME POSTPONE ?SLITERAL (find_w-loc) CELL+ SLIT, ]
; IMMEDIATE


Лучше будет:

: UNUMBER ( addr u -- x ) 0 0 2SWAP >NUMBER NIP IF -2001 THROW THEN D>S ;

: WORD-LOC, ( u -- ) HERE SWAP (find_w-loc) CELL+ SLIT, ;

: WORD-LOC: ( "u" -- ) PARSE-NAME UNUMBER WORD-LOC, ; IMMEDIATE


 
> : <-SEA-ADR-SP 1000 0 DO HERE I - C@ 14 = IF \ поиск нашей "уникальности"
>        HERE I - 1- C@ 14 = IF
>          HERE I - 2- C@ 14 = IF
>            HERE I - 3 - C@ 14 = IF
>              HERE I - 3 - LEAVE THEN THEN THEN THEN
>             LOOP
> ;

Тут проще искать сразу 0x0E0E0E0E, а не побайтно.



--
Ruvim
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: (no subject)

Ruvim Pinka
In reply to this post by витя ерыгин
2016-03-16 19:29 GMT+03:00 витя ерыгин <[hidden email]>:
И ещё вопрос.
есть
:noname 55 40 всякая хрень ;
мы это слово переносим куда-нибудь как строку

Лучше сказать: "как [непрозрачный] блок данных". Т.к. под строкой обычно подразумевается текстовое содержание.
А слово "SLIT," на самом деле работает с блоком произвольных данных.

А потом полученную "строку" вставляем в определение
: xaxa ... [ adr-otpr u slit, ] drop execute ...  ;
Чем черевато использовать эту лямбду?

Тем, что если это работает — значит просто повезло.
Например, если фрагмент кода оказался перемещаемым (позиционно-независимым).

В SP-Forth/4 исполняемый код позиционно-зависим в общем случае.


--
Ruvim


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Loading...