IsDelimiter

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

IsDelimiter

Artem Kamburov
А не пора ли уже векторизировать IsDelimiter ? Для того, что-бы можно было
свободно выбирать пробельные символы (что и означает это слово), а не только
<= BL

                            ArtemKAD



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

ygrek-3
On Thu, 22 Nov 2007 14:50:45 +0200
[hidden email] wrote:

> А не пора ли уже векторизировать IsDelimiter ? Для того, что-бы можно было
> свободно выбирать пробельные символы (что и означает это слово), а не только
> <= BL

Кстати до кучи. Может TYPE USER-VECT'ом сделать? Раз TYPE уже вектор то
насколько логично что он относится ко всей системе, а не к каждому
потоку? Или есть какие-то грабли?

--

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
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: IsDelimiter

Andrey Cherezov
ygrek пишет:
А не пора ли уже векторизировать IsDelimiter ? Для того, что-бы можно было
свободно выбирать пробельные символы (что и означает это слово), а не только
<= BL
    
Кстати до кучи. Может TYPE USER-VECT'ом сделать? Раз TYPE уже вектор то
насколько логично что он относится ко всей системе, а не к каждому
потоку? Или есть какие-то грабли? 
Грабли будут, если уже кто-нибудь завязался на глобальность вектора. Если нет, то можно
переделать в USER-VECT или совместить - сделать, чтобы в начале потока локальный вектор
инициализировался из глобального.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

Andrey Cherezov
In reply to this post by Artem Kamburov
Добрый день, [hidden email]!

Ваше сообщение от 22.11.2007 14:50:
> А не пора ли уже векторизировать IsDelimiter ? Для того, что-бы можно было
> свободно выбирать пробельные символы (что и означает это слово), а не только
> <= BL
>  
Да, действительно, может пригодиться. В стародавние времена BL был
сделан QUAN-переменной
(VALUE по ANS94) как раз для простоты смены разделителя. А с заменой "BL
=" на "IsDelimiter",
который BL <=, эта старая функция BL незаметно отменилась, т.е. уже не
скажешь "CHAR ; TO BL",
т.к. это превращает в разделитель не заданный символ, а всю таблицу до
него.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

Ruvim Pinka
In reply to this post by Andrey Cherezov
Привет!

On Nov 23, 2007 8:07 AM, Andrey Cherezov <[hidden email]> wrote:
>  ygrek пишет:
>>  Кстати до кучи. Может TYPE USER-VECT'ом сделать?

>  Грабли будут, если уже кто-нибудь завязался на глобальность вектора.

Да. И глобальный вектор легко превратить в локальный для потока:
USER-VECT USER-TYPE  ' USER-TYPE TO TYPE
Наоборот же, локальный сделать глобальным, — трудней. Тоже касается и
других системных векторов.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

Andrey Cherezov
Добрый день, Ruvim Pinka!

Ваше сообщение от 23.11.2007 19:35:
> Да. И глобальный вектор легко превратить в локальный для потока:
> USER-VECT USER-TYPE  ' USER-TYPE TO TYPE
>  
В смысле, если TYPE был был определен глобально VECT TYPE, то приведенная
выше строка сделает его локальным для потока?
> Наоборот же, локальный сделать глобальным, — трудней. Тоже касается и
> других системных векторов.
>  
Поэтому я и предлагаю делать "глобально-локальными", т.е. USER-VECT TYPE,
инициализируемый в начале потока из глобального, какого-нибудь VECT GTYPE,
т.е. ['] GTYPE BEHAVIOR TO TYPE в POOL-INIT. Проблема будет только в том,
что TO GTYPE не заменит TYPE в потоках, созданных ранее, а повлияет
только на
вновь создаваемые. Но глобальных коней обычно на переправе и не меняют...

С другой стороны можно сделать (и вроде когда-то уже делали) особый вариант
USER-VECT, который при отсутствии локального значения берет глобальное,
таких
коней можно будет менять без ограничений. Правда остается проблема с
именами -
какой из переменных логичнее отдать имя TYPE.

Пример такой двойной переменной:

: UVECT
  >IN @ ' SWAP >IN ! CREATE

  USER-ALIGNED SWAP ,
  CELL+ USER-ALLOT

  ['] _TOUSER-VALUE-CODE COMPILE,
  ,
  DOES> DUP @ USER+ @ ?DUP
    IF NIP EXECUTE
    ELSE CELL+ >BODY @ EXECUTE THEN
;

: TYPE2 S" {" TYPE1 TYPE1 S" }" TYPE1 ;
: SET ['] TYPE2 TO TYPE ;

UVECT TYPE \ собственно [пере]определение переменной

:NONAME BEGIN SP@ . S" thread" TYPE CR 3000 PAUSE AGAIN ; TASK: TEST1
0 TEST1 START DROP 1000 PAUSE
0 TEST1 START DROP

: TYPE3 ." [" TYPE1 ." ]" ;

:NONAME ['] TYPE3 TO TYPE BEGIN SP@ . S" lthread" TYPE CR 3000 PAUSE
AGAIN ; TASK: TEST2
0 TEST2 START DROP

.( press Enter to set global TYPE vector) CR KEY DROP SET


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

Ruvim Pinka
On Nov 24, 2007 10:29 PM, Andrey Cherezov <[hidden email]> wrote:
> Ваше сообщение от 23.11.2007 19:35:
> > И глобальный вектор легко превратить в локальный для потока:
> > USER-VECT USER-TYPE  ' USER-TYPE TO TYPE
> >
> В смысле, если TYPE был был определен глобально VECT TYPE, то приведенная
> выше строка сделает его локальным для потока?

Да! (по-поточная инициализация вектора USER-TYPE на совести автора).

> > Наоборот же, локальный сделать глобальным, — трудней. Тоже касается и
> > других системных векторов.

> Поэтому я и предлагаю делать "глобально-локальными", т.е. USER-VECT TYPE,
> инициализируемый в начале потока из глобального, какого-нибудь VECT GTYPE,
> т.е. ['] GTYPE BEHAVIOR TO TYPE в POOL-INIT. Проблема будет только в том,
> что TO GTYPE не заменит TYPE в потоках, созданных ранее, а повлияет
> только на вновь создаваемые.

Лучше, чтобы в систему функциональность добавлялась по необходмости,
вместо того, чтобы находится там без надобности. То есть, и GTYPE и
USER-TYPE быть в ядре не нужно. Они легко добавляются внешим
расширением.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

Andrey Cherezov
Добрый день, Ruvim Pinka!

Ваше сообщение от 24.11.2007 21:45:
И глобальный вектор легко превратить в локальный для потока:
USER-VECT USER-TYPE  ' USER-TYPE TO TYPE
В смысле, если TYPE был был определен глобально VECT TYPE, то приведенная
выше строка сделает его локальным для потока?
    
Да! (по-поточная инициализация вектора USER-TYPE на совести автора).
  
Я исходную задачу (приведшую к нужности USER-VECT TYPE) понял так, что
хочется, чтобы в разных потоках ядерные слова, использующие ядерный TYPE,
работали по-разному (выводили в разные окна, разные файлы и т.п.). Как тут поможет
неядерный USER-VECT USER-TYPE?
Лучше, чтобы в систему функциональность добавлялась по необходмости,
вместо того, чтобы находится там без надобности.
  
С этим я, конечно, согласен. Но вот как описанную выше задачу решить без
USER-VECT TYPE в ядре не знаю - на ум приходят только грязные мысли
про JMP-хак...


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

ygrek-3
Привет,

> Я исходную задачу (приведшую к нужности USER-VECT TYPE) понял так, что
> хочется, чтобы в разных потоках ядерные слова, использующие ядерный TYPE,
> работали по-разному (выводили в разные окна, разные файлы и т.п.). Как
> тут поможет неядерный USER-VECT USER-TYPE?

А почему нет? Работает вроде.

~ac/lib/str5.f

: TYPE-1 S" 1" TYPE1 TYPE1 ;
: TYPE-2 S" 2" TYPE1 TYPE1 ;

: write { z } 10 0 DO z " hello people {n}{CRLF}" STYPE 10 PAUSE LOOP ;
USER-VECT USER-TYPE
' TYPE1 TO USER-TYPE
..: AT-THREAD-STARTING ['] USER-TYPE TO TYPE ;..

:NONAME   ['] TYPE-1 TO USER-TYPE   write ; TASK: t1
:NONAME   ['] TYPE-2 TO USER-TYPE   write ; TASK: t2

1 t1 START
2 t2 START

Только проблема в том что какая-то либа может внаглую поменять глобальный TYPE, не зная о том что кто-то использует USER-TYPE, поэтому наверное стоит вынести 3 строчки потоко-адаптации TYPE в отдельное расширение.

> > Лучше, чтобы в систему функциональность добавлялась по необходмости,
> > вместо того, чтобы находится там без надобности.
> >  
> С этим я, конечно, согласен. Но вот как описанную выше задачу решить без
> USER-VECT TYPE в ядре не знаю - на ум приходят только грязные мысли
> про JMP-хак...

Вообще мне такое решение - USER-VECT в обычный VECT - нравится.
Ядро остаётся простым (имхо условная инициализация таких векторов - слишком "сложно").

--

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
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: IsDelimiter

Andrey Cherezov
Добрый день, ygrek!

Ваше сообщение от 25.11.2007 9:27:
> А почему нет? Работает вроде.
>
> USER-VECT USER-TYPE
> ' TYPE1 TO USER-TYPE
> ..: AT-THREAD-STARTING ['] USER-TYPE TO TYPE ;..
>
> Только проблема в том что какая-то либа может внаглую поменять глобальный TYPE, не зная о том что кто-то использует USER-TYPE, поэтому наверное стоит вынести 3 строчки потоко-адаптации TYPE в отдельное расширение.
>  
В том-то и дело, что, ничего не зная (это не "в наглую", либы у нас
независимы в основном) о проделках одной либы, а зная только о VECT
TYPE, другая может все испортить.
Нет той независимости потока, которую нам дают USER*-штуки.
> Вообще мне такое решение - USER-VECT в обычный VECT - нравится.
> Ядро остаётся простым (имхо условная инициализация таких векторов - слишком "сложно").
>  
Не условная инициализация, а условное исполнение. Инициализация как раз
получается прозрачной.
ОК, значит оставим пока как есть.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

Ruvim Pinka
In reply to this post by ygrek-3
Привет!

On Nov 25, 2007 10:27 AM, ygrek <[hidden email]> wrote:
> > Как тут поможет неядерный USER-VECT USER-TYPE?

> USER-VECT USER-TYPE
> ' TYPE1 TO USER-TYPE
> ..: AT-THREAD-STARTING ['] USER-TYPE TO TYPE ;..
Тут достаточно сделать это в AT-PROCESS-STARTING (да и то из-за PROCESS-INIT).

Кстати, в чем смыл инициировать системные вектора в PROCESS-INIT?
Они ведь и так стоят как надо. А если их кто-то переставил на другое значение
перед SAVE, значит это так и нужно, зачем их скидывать на старое значение?

[...]
> Только проблема в том что какая-то либа может внаглую поменять глобальный TYPE, не зная о том что кто-то использует USER-TYPE,

Но ведь эта либа ожидает, что возьмет на себя TYPE из всех потоков.
Так и будет. В чем проблема?
Как вариант, можно подсунуть этой либе локальный TYPE, тогда она
возьмет только текущий поток.

S" TYPE-OLD" ' TYPE NAMING \ нужен синоним, т.к. нет постфиксного варианта TO
USER-VECT TYPE  ' TYPE TO TYPE-OLD
' TYPE1 TO TYPE ..: AT-THREAD-STARTING ['] TYPE1 TO TYPE ;.. \
по-поточная инициация на дефолтное значение.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

VECT TYPE

Andrey Cherezov
Привет!

Нет, у меня что-то все равно не сходится, не выходит из головы эта тема :)

Ruvim Pinka 24.11.2007 21:45:
И глобальный вектор легко превратить в локальный для потока:
USER-VECT USER-TYPE  ' USER-TYPE TO TYPE
      
В смысле, если TYPE был был определен глобально VECT TYPE, то приведенная
выше строка сделает его локальным для потока?
    
Да! (по-поточная инициализация вектора USER-TYPE на совести автора).
Но "TO TYPE" компилирует ссылку на второе поле кода TYPE. А это
второе поле кода жестко меняет ту глобальную переменную, после которой стоит.
И даже если мы глобальный TYPE инициализируем USER-TYPE'ом,
то все "TO TYPE" будут по-прежнему переопределять глобальный TYPE,
а не USER-TYPE. Т.е. остается возможность испортить нашу полулокальность
какой-то "однопоточной" либой, которая не в курсе USER-TYPE'ов
(при ядерном USER-VECT TYPE это было бы исключено).

Ruvim Pinka 25.11.2007 15:06:
Как вариант, можно подсунуть этой либе локальный TYPE, тогда она
возьмет только текущий поток.

S" TYPE-OLD" ' TYPE NAMING \ нужен синоним, т.к. нет постфиксного варианта TO
USER-VECT TYPE  ' TYPE TO TYPE-OLD
' TYPE1 TO TYPE ..: AT-THREAD-STARTING ['] TYPE1 TO TYPE ;.. \
по-поточная инициация на дефолтное значение.
  
Вот только этот вариант и остается, imho. Т.е. обман несовместимых либ введением
нормального USER-VECT TYPE. Ну ладно, коль такая возможность остается, а
"несовместимые либы" - пока что гипотетическое явление, то можно оставлять как есть :)


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: VECT TYPE

Ruvim Pinka
Привет!

On Nov 27, 2007 8:17 PM, Andrey Cherezov <[hidden email]> wrote:
>  И даже если мы глобальный TYPE инициализируем USER-TYPE'ом,
>  то все "TO TYPE" будут по-прежнему переопределять глобальный TYPE,
>  а не USER-TYPE. Т.е. остается возможность испортить нашу полулокальность
>  какой-то "однопоточной" либой, которая не в курсе USER-TYPE'ов
>  (при ядерном USER-VECT TYPE это было бы исключено).

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

Касательно TYPE,  если подсунуть расширению локальный вектор,
то оно может перестать работать как задуманно (например,
расширение типа STDLOG не поймает вывод из других потоков).

Когда появится необходимость, возможно, имеет смысл сделать отдельно
и метод глобального вывода на консоль (stdout), и метод локального вывода
вообще (на текущее "устройство" вывода в рамках потока). И, как ты и предложил,
сделать так, чтобы использовался глобальный метод если не установлен локальный.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: IsDelimiter

Andrey Cherezov
In reply to this post by Artem Kamburov
Добрый день, [hidden email]!

Ваше сообщение от 22.11.2007 14:50:
> А не пора ли уже векторизировать IsDelimiter ? Для того, что-бы можно было
> свободно выбирать пробельные символы (что и означает это слово), а не только
> <= BL
>  
Отправил на CVS.

-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev