powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / MUMPS 2020
25 сообщений из 137, страница 4 из 6
MUMPS 2020
    #39980576
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LittleCat
целые числа имеют ограниченную точность, то, что влезает в сетку, сортируется как числа, а что нет - как строки
Формально они правы; если следовать букве Стандарта: если не число, то строка, а значит пусть как строка и сортируется. Но ведь неудобно! А в ISC решили иначе, и это тоже иногда неудобно. Я на эту тему даже проблему когда-то открывал (не помню уже, что из-за этого ломалось). Процитирую, т.к. никакого секрета тут нет:
*** Мой вопрос: ***

Current Locale is: ^%SYS("LOCALE","CURRENT")="ruw8"
Collation table: Cyrillic2 or Cache standard (it doesn't mean much).

The following code provides the output as follows:

kill b
set a=1E30,b(+a)=1,b(+a_"1")=3,b(+a_"1a")="3a"
set a=3E30,b(+a)=2,b(+a_"1")=4,b(+a_"1a")="4a"
set b($c(2))="c2"
zwrite b

b(1000000000000000000000000000000)=1
b(3000000000000000000000000000000)=2
b("10000000000000000000000000000001")=3
b("30000000000000000000000000000001")=4
b($c(2))="c2"
b("10000000000000000000000000000001a")="3a"
b("30000000000000000000000000000001a")="4a"

while the expected output is:

b(1000000000000000000000000000000)=1
b(3000000000000000000000000000000)=2
b($C(2))="c2"
b("10000000000000000000000000000001")=3
b("10000000000000000000000000000001a")="3a"
b("30000000000000000000000000000001")=4
b("30000000000000000000000000000001a")="4a"

because as to ISO M Standard, in the first half of ASCII table there should be only 2 collation
ranges:
1) numbers (sorted numerically)
2) non-numbers (sorted alphabetically).

while in Cache one can find 3 collation ranges:
1) numbers (sorted numerically)
1*) pseudo numbers (sorted numerically)
2) non-numbers (sorted alphabetically).

Should be mentioned that this sample code provides correctly collated {glvn} in MSM, MiniM, GT.M.

*** И ответ разработчика ***

This is correct behavior. Anything which is entirely numeric will collate as if it was a number
even if it exceeds the capacity of the supported precision. SPJ932 contains a description of this.

If you create the global with string collation, then all entries are collated as strings.
--------------<skipped>------
Цитата из изменения SPJ932: "In ANSI collation, any number (or string that is in canonic
numeric form) is collated numerically, before all non-numeric strings."
...
Рейтинг: 0 / 0
MUMPS 2020
    #39980910
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из новостей:

Поддержано введение
set $qs(name,pos) = expr

Для удаления предлагал дополнить
kill $qs(name,expr)
но пока не поддержано, возможно что неактуально.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39980929
LittleCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov
Формально они правы; если следовать букве Стандарта: если не число, то строка, а значит пусть как строка и сортируется.

И где в моем примере "не число" ?
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981026
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LittleCat
И где в моем примере "не число" ?

Код: javascript
1.
2.
3.
4.
YDB>s x="202004080830202004080930" w x,!,+x,!,x=+x
202004080830202004080930
202004080830202004000000
0


Извини, пропустил слово: x - не каноническое число, поэтому с т.з. действующего Стандарта поведение YottaDB корректно.

Возможные неприятные последствия противоположного решения (в Cache) показаны ранее в моём примере под спойлером.

Источник проблемы здесь - не М-система, а формирование строк, по формату являющихся числами, в результате не вычислительных операций (конкатенации и пр.). Добавь разработчики букву в начало такого индекса, поведение было бы одинаковым в обеих системах. В моём случае они так и поступили.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981035
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я
kill $qs(name,expr)
Что под этим понималось?

set a(1,2)=12
set a(1,2,3)=123
set a(1,2,3,4)=1234
set ref=$name(a(1,2,3,4))

kill $qs(ref,2)

w ref

a(1,3,4) ; - если это, то непонятно, зачем
или
a(1) ; - если это, то в предложении смысл есть.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981041
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov
ну я
kill $qs(name,expr)
Что под этим понималось?

Операция set может проставить значение индекса, но не удалить индекс. Этого не хватает для полноты операций.
А чтобы получить a(1) есть второй аргумент у $name()
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981045
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я
Операция set может проставить значение индекса, но не удалить индекс
Какой физический смысл сего деяния? Вот есть глобальная ссылка, допустим; зачем вырезать в ней промежуточные индексы, просто "чтобы было"?
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981048
LittleCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov
LittleCat
И где в моем примере "не число" ?

Код: javascript
1.
2.
3.
4.
YDB>s x="202004080830202004080930" w x,!,+x,!,x=+x
202004080830202004080930
202004080830202004000000
0


Извини, пропустил слово: x - не каноническое число,


Если бы в начале числа был 0, это было бы неканоническое число. Если бы присутствовал любой символ, отличный от цифры, это было бы неканоническое число. Но почему в приведенном примере это число неканоническое ? Из-за того, что во внутреннем представлении оно не влезает в разрядную сетку и при арифметических операциях обрезается ? Но это проблема реализации, а не концепции. Это что же, будут разные реализации М-систем с разным внутренним представлением чисел, и во всех одни и те же данные будут сортироваться по-разному ?
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981056
LittleCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел определение канонического представления целого числа
Каноническая форма положительного целого числа в десятичном представлении является конечной последовательностью цифр , которая не начинается с нулем.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981065
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov
ну я
Операция set может проставить значение индекса, но не удалить индекс
Какой физический смысл сего деяния? Вот есть глобальная ссылка, допустим; зачем вырезать в ней промежуточные индексы, просто "чтобы было"?

Этого не хватает для полноты операций.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981084
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LittleCat
Каноническая форма положительного целого числа в десятичном представлении является конечной последовательностью цифр , которая не начинается с нулем.
Это неполное определение применительно к M. Стандарта нет под рукой, но см., например, Canonical Form of Numbers или у Е. Каратаева, "2.8 Каноничность индексов" (стр. 221). У Е. Каратаева, правда, добавлено немного странное правило № 6, которое не выполняется ни в Cache, ни в GT.M, но сейчас это не важно.

Простейшая проверка, является ли строка X каноническим числом:

if $isvalidnum(X),X=+X w "Yes!" ; без $isvalidnum можно нарваться на <NUMERIC OVERFLOW>.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981086
LittleCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдержка из стандарта ANSI 1995 года
Only numbers which may be represented with a finite number of decimal digits are representable as numeric values. A data value has the form of a number if it satisfies the following restrictions.

a. It shall contain only digits and the characters "-" and ".".
b. At least one digit must be present.
c. "." occurs at most once.
d. The number zero is represented by the one-character string "0".
e. The representation of each positive number contains no "-".
f. The representation of each negative number contains the character "-" followed by the representation of the positive number which is the absolute value of the negative number. (Thus, the following restrictions describe positive numbers only.)
g. The representation of each positive integer contains only digits and no leading zero.
g. The representation of each positive number less than 1 consists of a "." followed by a nonempty digit string with no trailing zero. (This is called a fraction.)
h.The representation of each positive non-integer greater than 1 consists of the representation of a positive integer (called the integer part of the number) followed by a fraction (called the fraction part of the number).


См. пункт g. А чего там Женя написал, или Intersystems, так это они что-то хотели под себя подогнать, под свою реализацию.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981092
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Костя,

Это определение тоже немного странное:
- п. "g" встречается дважды
- в п. "h" ничего не сказано про ".".

Если обратиться к документу, с которого началась эта дискуссия, так там недвусмысленно сказано о наличии неточностей в Стандарте. Возможно, как раз один из таких случаев.

Итак, имеем:
  • Стандарт M 1995, возможно, подлежащий уточнению в 2020.
  • Cache, сортирующая любые (даже очень длинные, явно не канонические) цифровые строки как числа.
  • GT.M/YottaDB, сортирующий таким образом только канонические (в смысле +X=X) числа.
Не будем спрашивать, кто виноват. Ответ на вопрос "Что делать?", КМК, очевиден.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39981095
LittleCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov
Костя,

Это определение тоже немного странное:
- п. "g" встречается дважды
- в п. "h" ничего не сказано про ".".

Если обратиться к документу, с которого началась эта дискуссия, так там недвусмысленно сказано о наличии неточностей в Стандарте. Возможно, как раз один из таких случаев.

Итак, имеем:
  • Стандарт M 1995, возможно, подлежащий уточнению в 2020.
  • Cache, сортирующая любые (даже очень длинные, явно не канонические) цифровые строки как числа.
  • GT.M/YottaDB, сортирующий таким образом только канонические (в смысле +X=X) числа.
Не будем спрашивать, кто виноват. Ответ на вопрос "Что делать?", КМК, очевиден.


Леша, извини, буквы я сам расставлял, они со странички стандарта не откопипастились ;-)

http://71.174.62.16/Demo/AnnoStd

ИМХО никаких неточностей нет, определение канонических целых чисел соответствует математическому.
Насчет того, что делать, я как раз придерживаюсь мнения, что будущий стандарт нужно привести в соответствие с реальным миром, и буду рад, если любые индексы, соответствующие пункту g старого стандарта будут сортироваться как числа.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39984318
Onix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что делать когда появится сверхдлинная арифметика? 128+ бит уже на подходе.
...
Рейтинг: 0 / 0
MUMPS 2020
    #39984325
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Onix
А что делать когда появится сверхдлинная арифметика? 128+ бит уже на подходе.
А я так понимаю у вас уже есть мысли как этим можно будет пользоваться в MUMPS?
Есть примеры того зачем оно нужно?
...
Рейтинг: 0 / 0
MUMPS 2020
    #39994271
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из новостей. На MDC один из вопросов - NEW $REFERENCE, пока все в раздумьи.

Мое предложение по NEW $REFERENCE такое:
* все автоматические изменения naked indicator (разные там $D, $O) и прямое присваивание $REFERENCE смотрят на каком последнем уровне стека было NEW $REFERENCE и только на нем меняют.
* при смене текущей базы данных просматриваем все уровни стека и на каких был NEW $REFERENCE на всех них и сбрасываем в пустую строку.
* на чтении возвращаем с последнего стека где был NEW $REFERENCE.
* если не было NEW $REFERENCE то значит операция на нулевом уровне.

Отличие в поведении других NEW svn - во втором пункте, на смене текущей базы.

Такой вариант выглядит и достаточно совместимым и не слишком косячным.

Пишу чтобы посоветоваться. У кого будут поправки, замечания, и прочее - отпишитесь.
К этой теме нужно отнестись взвешенно.
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014630
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из новостей

Вместо MUMPS V1 теперь ведется его продолжение RSM (Reference Standard M), проект продолжает David Wicksell.

David Wicksell
RSM V1.72.0 is now live at https://gitlab.com/Reference-Standard-M/rsm

Eugene Karataev
We will refer to RSM instead of MV1?

David Wicksell
Yes. MV1 stopped being developed in 2018. and Ray Newman retired. He passed it along to me this year, and I changed its name from MV1 to RSM. The original MV1 will be archived at https://gitlab.com/Reference-Standard-M/mumpsv1, with no more updates ever, while RSM will be hosted at https://gitlab.com/Reference-Standard-M/rsm
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014769
ну я
И
.....
* при смене текущей базы данных просматриваем все уровни стека и на каких был NEW $REFERENCE на всех них и сбрасываем в пустую строку.
.....

Отличие в поведении других NEW svn - во втором пункте, на смене текущей базы.

Такой вариант выглядит и достаточно совместимым и не слишком косячным.

Пишу чтобы посоветоваться. У кого будут поправки, замечания, и прочее - отпишитесь.
К этой теме нужно отнестись взвешенно.


А не накладно при смене базы стек гонять?
Я наверно не в курсе, но разве $zr не должен был хранить в себе еще и ссылку на конкретную БД в начале?
У нас всё в одной всегда живёт, но есть мысль такая: кодогенерация во временную БД (специальную, в оперативке которая) и оттуда сгенерированный код ориентируясь на структуру основной БД по ней бегает. Т.е. свитч во временную БД, там вызов кода который делает переключение обратно. И вот таких переключений может быть много.
Понятно, это детали реализации, и сделать можно очень быстрое переключение, но всё же. Это я так, мысли вслух.
Оно уже может решено там всё давно? :-)
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014928
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антон Аксёнов
кодогенерация во временную БД (специальную, в оперативке которая) и оттуда сгенерированный код ориентируясь на структуру основной БД по ней бегает
А зачем? Но даже допустив, что в этом есть смысл, зачем бегать от БД к БД, когда Routine Mapping позволяет отобразить хранение программного кода в любую БД, никуда не бегая.
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014949
Alexey Maslov,

Ну у кого есть оный - тот счастлив.
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014962
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антон Аксёнов,

Просто ранее упомянули $zr, а она вроде как только в Cache и в MSM, в других М-СУБД обычно $r. Какая у вас СУБД, если не секрет?

По поводу БД в памяти не стал бы обольщаться. Из нашего опыта: в Cache такие БД не поддерживаются, а в GT.M таки возможны Memory Mapped DB. Когда-то пробовали, работает медленнее, чем обычные БД, которые на Async I/O.
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014967
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антон Аксёнов

А не накладно при смене базы стек гонять?
Я наверно не в курсе, но разве $zr не должен был хранить в себе еще и ссылку на конкретную БД в начале?

Нет, не накладно )))
$ZR хранит naked indicator. А он может как содержать так и не содержать базу, это зависит от того как сослались на глобал - полностью или только по имени.
Если не полностью то это означает что операция применяется к текущей базе, иначе к явно указанной. Выполнение тех же операций в другой базе должно означать выполнение тех же операций - что указано явно то явно, а что по умолчанию - то к текущей.
Сам naked indicator может быть прочитан в локальную переменную, сохранен в глобале или передан в девайс, прочитан из глобала или девайса, применен, но в любом случае система должна выполнить строго те же операции. Даже если это другая М система.
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014968
Alexey Maslov,

MSM. В ней нет Routine Mapping, на сколько я знаю. Только таблица трансляций. Там что-то есть с маппингом процентных, откуда их цеплять, а вот межу Volume Group маппинг произвольных нет.

А с БД в оперативки... МЫ в неё умеем, всё что могу сказать ;)
...
Рейтинг: 0 / 0
MUMPS 2020
    #40014980
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антон Аксёнов
МЫ в неё умеем, всё что могу сказать
Да мы тоже когда-то пробовали (в MSM, лет 27 назад), и тоже тормозило. Система не была на это рассчитана изначально по понятным причинам.

Но может времена изменились, и с более быстрой памятью ситуация изменилась? Хорошо, если так.

Если не секрет, что держит в MSM? Сейчас ведь есть из чего выбрать, в том числе из бесплатного.
...
Рейтинг: 0 / 0
25 сообщений из 137, страница 4 из 6
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / MUMPS 2020
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]