wide-char

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

wide-char

ygrek-3
Привет,

 На cvs ветка wide-char в src. Буду пытаться там сделать
2-байтные символы. На сейчас оно ещё даже не компилируется корректно.
Вываливается на этапе подключения src\done.f

PS
Переключиться на ветку - cvs up -r wide-char
Переключиться на trunk - cvs up -A

--
 ~ygrek

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

Dmitry Yakimov-2
ygrek wrote:

> Привет,
>
>  На cvs ветка wide-char в src. Буду пытаться там сделать
> 2-байтные символы. На сейчас оно ещё даже не компилируется корректно.
> Вываливается на этапе подключения src\done.f
>
> PS
> Переключиться на ветку - cvs up -r wide-char
> Переключиться на trunk - cvs up -A
>
>  
Хорошая мысль, проще будет сделать порт на арм.

Дмитрий.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

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

По wide-char у Кости Тарасова большой опыт (т.е. на WinCE всё только в
юникоде).

Ваше сообщение от 27.01.2008 17:39:
>  На cvs ветка wide-char в src. Буду пытаться там сделать
> 2-байтные символы. На сейчас оно ещё даже не компилируется корректно.
>  


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

Dmitry Yakimov-2
Andrey Cherezov wrote:

> Добрый день, ygrek!
>
> По wide-char у Кости Тарасова большой опыт (т.е. на WinCE всё только в
> юникоде).
>
> Ваше сообщение от 27.01.2008 17:39:
>  
>>  На cvs ветка wide-char в src. Буду пытаться там сделать
>> 2-байтные символы. На сейчас оно ещё даже не компилируется корректно.
>>  

В принципе сложного там ничего быть не должно.
Добавить L" и вызов апи на W в конце переделать. CHARS будет умножать на
два. Ну и напильником это все :)

Дмитрий.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

ygrek-3
On Mon, 28 Jan 2008 14:01:46 +0300
Dmitry Yakimov <[hidden email]> wrote:

> Andrey Cherezov wrote:
> > Добрый день, ygrek!
> >
> > По wide-char у Кости Тарасова большой опыт (т.е. на WinCE всё только в
> > юникоде).
> >
> > Ваше сообщение от 27.01.2008 17:39:
> >  
> >>  На cvs ветка wide-char в src. Буду пытаться там сделать
> >> 2-байтные символы. На сейчас оно ещё даже не компилируется корректно.
> >>  
>
> В принципе сложного там ничего быть не должно.
> Добавить L" и вызов апи на W в конце переделать. CHARS будет умножать на
> два. Ну и напильником это все :)
Состояние на сейчас
-------------------------

Система работает, понимает ввод из консоли и подгружает файлы.
Некоторые либы работают сразу, многие надо CHAR-корректировать.
tester.f не проходится, потому что я ошибочно реализовал в counted
строках один _байт_ под длину, а там один символ таки должен быть -
исправлю. Макрооптимизатор работает (заменил все C слова на B).

Почему это было не так просто сделать.
- Во время сборки используются словари инструментальной и целевой
системы вперемешку. Словарная статья меняется - байт NFA (кстати может
тоже сделать два байта, как в counted строках?). Я это обошёл (с третей
попытки) расширением SEARCH-WORDLIST инструментальной системы, так что
в TC-WL списке слов используется свой поисковик который знает про эту
особенность. Из-за этого компилируется сейчас только с помощью spf4,
где SEARCH-WORDLIST - вектор.
- Много ассемблерных примитивов работающих со строками, как результат
пришлось их все условно компилировать WIDE-CHAR'ами. Некоторые
временно (?) представлены форт-эквивалентами.
- Напильником тоже хорошо поработать пришлось, но в многих местах были
уже расставлены CHARS что было очень замечательно :)

Общая картина
-------------------

В продолжение дискуссии SPF5 strings [1]. Документы просмотрел по
диагонали, но с общим выводом не согласен (не читал, но осуждаю :) ).
По-моему в этом месте лучше следовать стандарту - байты это байты, а
символы это символы. Считать длину строк в символах. Аргумент про то
что utf8 не вписывается в эту картину - не принимается, по той причине
что оперировать utf8 в памяти неудобно и расточительно по времени.
utf8 не надо приводить к этому интерфейсу (CHAR+ CHAR- CHARS etc), а
только фиксированные строки. А utf8 испольузуется обычно для
ввода/вывода, общения системы с внешним миром.
Т.е. я вижу так :
- внутри - все строки широкие двух-байтные
- в слова чтения/записи в консоль и подключения файлов добавляется
вектор который отвечает за перекодировку. Да, файлы из внешнего мира
никому ничего не должны и не обязаны быть в cp1251 :). Этот вектор
обобщает ANSI><OEM. Или лучше два вектора - один для текущего ввода,
один для вывода. Этот вектор должен уметь преобразовывать разные по
длине варианты кодирования. В ядре же только минимальный - тождественное
преобразование.
- S" выбирает строку из внутреннего буфера, где она уже в
двух-байтном виде, т.е. определяется преобразованием с помощью
вектора ввода/вывода. Для случаев когда нужен однобайтный массив
символов (это не строка!) - отдельное слово - например B" которое
обрезает каждый символ из буфера до байта.
- Вызовы АПИ - TWINAPI: CharLower смотрит чтобы слово было в
dll-ке в двух вариантах - CharLowerA и CharLowerW (если нет - ошибка) и
в зависимости от WIDE-CHAR подключает нужный вариант. Если надо чётко
указать какую функцию использовать - WINAPI:

Кривости ANS
-----------------

Первый и самый неприятный - WRITE-FILE и другие файловые слова работают
с символами, а не с байтами. ИМХО в ядре надо делать файловые операции
байтовые - согласен с [1].
Нет примитивных слов для работы с байтами, только с символами.
В wide-char для этого введены слова B@ B! B,
(~pinka/lib/ext/basics.f). Предлагаю их считать частью минимального
ядра (внести сейчас в основную ветку) и использовать сейчас и в
однобайтном коде.
Для многих слов нет байт-эквивалентов, например FILL COMPARE SEARCH, а
в существующем коде они вполне используются для байт массивов...

Грядут перемены
---------------------

Что можно/нужно делать сейчас (и в однобайтной версии).
Различать использование B@ и C@ и применять.
Использовать CHARS - думать о символах как об абстрактных единицах
данных, а не "один символ - один байт)".
Не использовать COUNT для прохождения по массиву _байт_
Проверить подозрительные места -
2DUP *CHARS* +
COUNT *CHARS* +
*CHARS* OVER + SWAP ?DO
все C@ проверить на предмет того что это именно исмвол, а не байт
( кстати тесткейсы в этом здорово помогают :) - been there, done that )

Литература
--------------

[1] http://www.nabble.com/SPF5-strings-td12350159.html


--
 ~ygrek

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

ygrek-3
In reply to this post by ygrek-3
Привет,

Опции в spf_compileoptions,f добавлены - WIDE-CHAR собственно включает
широкие символы. UNIX-ENVIRONMENT - определяет какой режим LT LTL будет
по умолчанию в новой системе, (т.к. во время компиляции вызывается уже
новая полуготовая система которая подгружает файл - эта опция позволяет
без правки исходников собирать под wine-ом - иначе приходилось перед S"
src\done.f" INCLUDED делать UNIX-LINES).
Кстати насчёт опций может имеет смысл сделать так же как и spf4.ini -
ini-шку для опций - которая не будет лежать в cvs - чтобы можно было
локально править как вздумается?

--
 ~ygrek

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

supergold
In reply to this post by ygrek-3
anyone can speak english to help with OTA project?
OPEN TERMINAL ARCHITECTURE based on open boot,anyone have tcpip stack
written in forth?


----- Original Message -----
From: "ygrek" <[hidden email]>
To: <[hidden email]>
Sent: Monday, February 04, 2008 2:47 PM
Subject: Re: [Spf-dev] wide-char


> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/


----------------------------------------------------------------------------
----


> _______________________________________________
> Spf-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/spf-dev
>


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

azekeprofit
Administrator
In reply to this post by ygrek-3
В src/compiler/spf_compile.f :

: S", ( addr u -- )
\ Разместить в пространстве данных строку, заданную addr u,
\ в виде строки со счетчиком.
  DUP B, S,
;

и в src/noopt.f :

: INLINE,
 BEGIN COUNT DUP C3 <>
 WHILE B,
 REPEAT 2DROP ;

То есть, это я так понимаю что (аналог на форте текущего асмового ядрёного слова):

: COUNT ( c-addr1 -- c-addr2 u ) DUP B@ SWAP 1+ SWAP ;

так и будет? Или "не всё сразу"? И один из мотивов сохранения такого -- нежеление/муторность менять структуру словарной статьи?

Ну тогда надо исправить комментарии к COUNT (обычный и стековый) в которых говорится об символах, с пометкой о том что вот это вот противоречит ANS.

NB Кстати, этот COUNT можно заменить на фортовский (на тот что выше при сохранении текущего положения дел или на CHAR-aware вариант). Оптимизатор там делает маш. код по размеру таким же, а скорость -- лишь чуть хуже (в ручном асм-коде out-of-order execution применён).
Reply | Threaded
Open this post in threaded view
|

Re: wide-char

ygrek-3
On Mon, 4 Feb 2008 23:53:31 -0800 (PST)
azekeProfit <[hidden email]> wrote:

>
> В src/compiler/spf_compile.f :
>
> : S", ( addr u -- )
> \ Разместить в пространстве данных строку, заданную addr u,
> \ в виде строки со счетчиком.
>   DUP B, S,
> ;
>
> и в src/noopt.f :
>
> : INLINE,
>  BEGIN COUNT DUP C3 <>
>  WHILE B,
>  REPEAT 2DROP ;
>
> То есть, это я так понимаю что (аналог на форте текущего асмового ядрёного
> слова):
>
> : COUNT ( c-addr1 -- c-addr2 u ) DUP B@ SWAP 1+ SWAP ;
>
> так и будет? Или "не всё сразу"? И один из мотивов сохранения такого --
> нежеление/муторность менять структуру словарной статьи?
Да, так сейчас, и это неправильно (по стандарту) - для счётчика в
counted строках отводится символ. Исправлю.
Насчёт словарной статьи - навернео поменять не так просто будет - но
это и необязательно - никто ведь не обещал что NFA это counted строка.
 
> NB Кстати, этот COUNT можно заменить на фортовский (на тот что выше при
> сохранении текущего положения дел или на CHAR-aware вариант). Оптимизатор
> там делает маш. код по размеру таким же, а скорость -- лишь чуть хуже (в
> ручном асм-коде out-of-order execution применён).

ASCIIZ> кстати тоже фортовая версия не сильно проигрывает. Если
применить трюк - использовать @ 0xFFFF AND, а не C@ т.к. похоже MOVZX
медленная команда.

--
 ~ygrek

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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
|

terminal project based on open boot and forth token language

supergold
I am looking for open boot concept so if the hardware changes the token
interpreter does not change.The open boot concept with forth token
interpreter act as a virtual machine like java vm, you adapt the VM as the
hardware changes.


the terminals today have to hold multiapplications and be able remove or
load these applications, the token language combined with the open boot
interpreter allow you to do so.

download applications with authentication as example below:
 The terminal generates a random number and sends it to the server, the
terminal  encrypts the number with a shared encryption key between the
terminal and the server before returning it to the card. The card then
compares the returned result after decrypting with the matching key. The
pair may then perform the operation in reverse.

Once communication is established, each message between the pair is verified
through a message authentication code. This is a number that is calculated
based on the data itself, an encryption key, and a random number. If data
has been altered (for any reason, including transmission errors) message
must be retransmitted. Alternatively, if the terminal has sufficient memory
and processing power, the data can be verified through a digital signature.

The most common encryption methods are symmetric DES (Data Encryption
Standard), 3DES (triple DES) and public key RSA (Rivest-Shamir-Adleman's
algorithm), allowing up 56, 168, and 1024 bit long keys, respectively.

Russia will need EMV(euro,mastercard,visa) application like every other
country and other value added services on the card whcih the terminal needs
to support, my concern is not with russia it is worldwide. It just happens
alot of forth programmers are still in russia. Techno Forth seems to have
the tcpip to connect to backend, but do not have the open boot concept/forth
interpreter/token language/compiler understanding. Can anyone help?

www.onecardconnect.com
[hidden email]


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

Dmitry Yakimov-2
In reply to this post by ygrek-3
ygrek wrote:
> ASCIIZ> кстати тоже фортовая версия не сильно проигрывает. Если
> применить трюк - использовать @ 0xFFFF AND, а не C@ т.к. похоже MOVZX
> медленная команда.
>
>  
Трюк использовать нельзя, на ARM будет AV data misalignment.

Дмитрий.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

azekeprofit
Administrator
Dmitry Yakimov-2 wrote
ygrek wrote:
> ASCIIZ> кстати тоже фортовая версия не сильно проигрывает. Если
> применить трюк - использовать @ 0xFFFF AND, а не C@ т.к. похоже MOVZX
> медленная команда.
>
>  
Трюк использовать нельзя, на ARM будет AV data misalignment.
Не только. На заурядном x86 при взятой из кучи памяти с невыровненным размером, можно получить отказ доступа при попытке взять торчащие последние 3-1 байта (не говоря уже о штрафах за невыровненность).
Reply | Threaded
Open this post in threaded view
|

Re: wide-char

ygrek-3
On Tue, 5 Feb 2008 23:46:50 -0800 (PST)
azekeProfit <[hidden email]> wrote:

> > Трюк использовать нельзя, на ARM будет AV data misalignment.
>
> Не только. На заурядном x86 при взятой из кучи памяти с невыровненным
> размером, можно получить отказ доступа при попытке взять торчащие последние
> 3-1 байта (не говоря уже о штрафах за невыровненность).

: asciiz> ( c-addr -- c-addr u )
  DUP
  BEGIN DUP 3 AND WHILE DUP C@ 0= IF OVER - >CHARS EXIT THEN CHAR+ REPEAT  
  BEGIN DUP @
    DUP 0xFF AND 0= IF DROP OVER - >CHARS EXIT THEN
    8 RSHIFT
    DUP 0xFF AND 0= IF DROP CHAR+ OVER - >CHARS EXIT THEN
    8 RSHIFT
    DUP 0xFF AND 0= IF DROP 2 CHARS + OVER - >CHARS EXIT THEN
    8 RSHIFT
        0xFF AND 0= IF 3 CHARS + OVER - >CHARS EXIT THEN
    CELL +
  AGAIN ;

вот такой вот вариант на 20% быстрее перебора в лоб :)
и если считать что менеджер памяти даёт куски с гранулярностью больше 4
байт (а это так) то AV не должно быть.

ЗЫ COUNT исправил, пришлось в tc перенести ещё и HIDE/SMUDGE

--
 ~ygrek

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

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

Ваше сообщение от 06.02.2008 22:30:

> : asciiz> ( c-addr -- c-addr u )
>   DUP
>   BEGIN DUP 3 AND WHILE DUP C@ 0= IF OVER - >CHARS EXIT THEN CHAR+ REPEAT  
>   BEGIN DUP @
>     DUP 0xFF AND 0= IF DROP OVER - >CHARS EXIT THEN
>     8 RSHIFT
>     DUP 0xFF AND 0= IF DROP CHAR+ OVER - >CHARS EXIT THEN
>     8 RSHIFT
>     DUP 0xFF AND 0= IF DROP 2 CHARS + OVER - >CHARS EXIT THEN
>     8 RSHIFT
>         0xFF AND 0= IF 3 CHARS + OVER - >CHARS EXIT THEN
>     CELL +
>   AGAIN ;
>
> вот такой вот вариант на 20% быстрее перебора в лоб :)
>  
Зато на 400% некрасивее, чем в лоб. И где гарантия, что это оптимальнее
на всех
существующих и будущих процессорах? Может стоить оставить такие
редкоиспользуемые
С-интерфейсные функции неоптимальными? Жалко твоего времени, чесслово :)

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

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

2008/2/4 ygrek <[hidden email]>:
По-моему в этом месте лучше следовать стандарту - байты это байты, а
символы это символы. Считать длину строк в символах.

Да, байты и символы смешивать нельзя.
Но, измерение длины в символах чаще мешает, чем дает удобство.

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

Если WRITE-FILE будет измерять в байтах (не по стандарту), то допустимо и остальным словам по теме измерять длину в байтах (будет единообразно). Стандартные варианты всех этих слов должны быть легко доступны.
Смешивать же, часть слов в байтах, часть в символах — плохо, т.к. имеющиеся исходники заточены или целиком на один вариант, или целиком на другой вариант.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

Yuriy Zhilovets
In reply to this post by Andrey Cherezov
Andrey Cherezov пишет:

>Может стоить оставить такие редкоиспользуемые С-интерфейсные функции неоптимальными?
>  
>
Если хранить все строки как asciiz (когда задача требует активного
обмена с внешними программами), то ASCIIZ> используется при стыковке с
фортовскими словами, то есть довольно часто.

Ю. Жиловец


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

ygrek-3
In reply to this post by Andrey Cherezov
On Thu, 07 Feb 2008 01:30:44 +0200
Andrey Cherezov <[hidden email]> wrote:

> Зато на 400% некрасивее, чем в лоб. И где гарантия, что это оптимальнее
> на всех
> существующих и будущих процессорах? Может стоить оставить такие
> редкоиспользуемые
> С-интерфейсные функции неоптимальными? Жалко твоего времени, чесслово :)

Я ни в коей мере не собирался такого монстра пихать в ядро :)

--
 ~ygrek

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

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

Ваше сообщение от 07.02.2008 13:02:
Может стоить оставить такие редкоиспользуемые С-интерфейсные функции неоптимальными?
    
Если хранить все строки как asciiz (когда задача требует активного 
обмена с внешними программами), то ASCIIZ> используется при стыковке с 
фортовскими словами, то есть довольно часто.
  
Если хранить строки как "строки с длинным счетчиком" (XCOUNT) и одновременно
с обязательным нулем на конце, то ASCIIZ> никогда не нужен при вызове внешних
API (достаточно DROP'ать длину), а нужен только при приеме строк из внешних API
в тех достаточно редких случаях, когда в API не предусмотрен возврат и счетчика.
У меня даже подозрение, что для работы с теми функциями WINAPI, которые используются
в ядре SPF, ASCIIZ> не нужен ни разу (?).

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

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

> Да, байты и символы смешивать нельзя.
> Но, измерение длины в символах чаще мешает, чем дает удобство.
>
> Кроме того, слова "S,", "SLIT," мне нужны для бинарных блоков данных (черный
> ящик), а не только для строк.

Но ведь это не строки, а именно бинарные данные! Массив байт.

> Если WRITE-FILE будет измерять в байтах (не по стандарту), то допустимо и
> остальным словам по теме измерять длину в байтах (будет единообразно).

Какие "остальные слова по теме" ? Тут просто явный глюк стандарта.

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

Да. Но изменение будет только в семантике FILE. И это будет логичное
изменение! И его никто не заметит т.к. я ещё не видел кода
( a u ) >CHARS h WRITE-FILE
очевидно потому-что так писать противоестественно. А вот использование
CHARS в нужных(по стандарту) местах довольно часто - т.к. логика :
"это строка символов - сколько в них байт?" - располагает к
оперированию символами как отдельным понятием.


Я не понимаю почему счёт длины строк в символах неудобен.
- Функции WinAPI оперируют в символах (кстати, у winapi тоже был
переход и они выбрали символы!)
- Все алгоритмы со строками оперируют символами.
- Меня не интересуют байты когда я оперирую строкой посчитанной в
символах (обратное неверно)
- Если слова из набора STRING будут принимать аргументы в символах то
подсчёт байтами будет требовать на каждый чих >CHARS. Если же и
строковые слова считают в байтах - это будет неправильно - потому
что они оперируют (по своей сути, внутренне) с символами - получается
нелогичный инерфейс. Для слов в ядре это незаметно - они слишком
примитивные (COMPARE SEARCH etc), а вот например для COMPARE-U ?
- Даже использование >CHARS -- некрасиво, т.к. это потенциальная потеря
информации (если число нечётное).
- Также, как заметил Андрей, в таком случае весь правильный сегодня код
(который использует CHARS, и такой код есть) станет неправильным. А код
который не использует CHARS всё равно останется неправильным!
Пример
: SKIP1 ( a u -- a' u' ) 1- SWAP 1 + SWAP ;
в символах должен быть так
: SKIP1 1- SWAP CHAR+ SWAP ;
в байтах должен быть так
: SKIP1 CHAR- SWAP CHAR+ SWAP ;

Вообщем, у меня субьективное чувство, что это неправильно по сути.

--
 ~ygrek

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
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: wide-char

Ruvim Pinka
Привет!

1. Мне бы хотелось, чтобы слои реализации лексиконов были удобны, без
пропусков полезных уровней. Примеры из SPF4. CREATE (заглядывающее
вперед) реализуется на основе CREATED (постфиксный). LITERAL
(немедленный) на основе "LIT," (простой). Для слова ":NONAME"
(изменяющего STATE) нижележащий уровень пропущен (вариант такого
уровня дан в ~pinka/spf/compiler/).

2. Я нахожу, что операции над блоками данных (как черных ящиков),
заданных в виде пар ( addr u ) весьма удобны и востребованны. К ним
относятся такие слова как "S,", "SLIT," CROP, SEATED (см. split.f),
HASH, и некоторые библиотеки целиком, типа hash-table.f. Т.е.,
выкинуть этот слой блоков данных очень не хотелось бы.

3. Если строками оперировать как блоками символов (и измерять в символах), то
    а) это отдельный слой блоков символов над слоем блоков данных,
    б) необходимо очень частое перекидывание >CHARS/CHARS,
       -- при каждой связи со слоем блоков данных (в том числе I/O),
       -- при вычислении подстрок, от адресной арифметики никуда не денешься.
    Например, см. слово NEXT-LINE в next-line.proto.f, там куча этих
перебросок (пять штук в трех строчках). А видели определение слова
SPLIT в таком раскладе? Моск плавится от этих CHARS еще сильней ;)

4. Если строками оперировать как блоками данных, то
    а) не нужен отдельный слой, т.к. слой блоков данных работает и для
любых строк,
    б) по моему опыту, перекидывание CHARS нужно гораздо реже (когда
надо проверить, что символов не менее n, или взять i-ый символ -- но
это также, как и в п.3).

Слово SEARCH (и все, его использующие) зависит от размера символа, а
слово COMPARE и COMPARE-U еще и от кодировки (если по хорошему :). Их
реализация практически не зависит от выбора формата счетчика. Такие
слова могут быть доступны в вариантах для различных кодировок и
размеров.


5. Это все хорошо, если забыть про стандарт94 и существующий код. Но.
    а) стандарт кое-где не проработан, и эту кривость можно
поддерживать лишь библиотекой совместимости, без встраивания ее в свои
разработки;
    б) да, кроме двух "правильных", код существует и всех других видов
(даже в пределах меня: я писал и так и сяк намеренно, испытывая
варианты). Причем, я думаю, что больше всего кода, который завязан на
однобайтовость символов, и его шерстить по любому надо (и заодно
написать как-то правильно);
    в) стандартных слов, завязанных на счетчик, мало. Т.е., при
использовании библиотек третьих фирм (да и своих старых тоже) им можно
дать такой набор этих слов, на который они заточены, и поверх сделать
обертки.

6. я нахожу, что слой "блоки символов" излишен, без него проще, а что
он дает полезного (кроме следования стандарту) -- непонятно.  Прошу
высказаться, у кого что еще есть по теме :)


On 2/8/08, ygrek <[hidden email]> wrote:
> Я не понимаю почему счёт длины строк в символах неудобен.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
12