OberonCore
https://forum.oberoncore.ru/

#034: Strings зависит от Kernel
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6459
Страница 1 из 2

Автор:  Евгений Темиргалеев [ Воскресенье, 20 Октябрь, 2019 22:36 ]
Заголовок сообщения:  #034: Strings зависит от Kernel

В эталоне этой зависимости не было.

Вот наткнулся на то, что мне нужны преобразования чисел в цепочку (которые от Kernel не зависят), а Kernel не нужен. Strings не применим.

Возможно, лучшей идеей с точки зрения сохранения совместимости по зависимостям, было выделение всяких ToLower/IsIdentChar в отдельный модуль. А в Strings остались бы преобразования и всякие Find/Replace.

Автор:  Иван Денисов [ Понедельник, 21 Октябрь, 2019 10:57 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

Может быть и так. Что-то не думали о таком. Эта проблема связана с тем, что у вас своё некоторое ядро в котором нет этих процедур. В Strings есть такие ToUpper и ToLower, которые в полной мере для юникода сложно реализовать без системных библиотек. Поэтому такое решение было принято.

Вот например Kernel.Lower использует LibW.towlower
Код:
   PROCEDURE Lower* (ch: CHAR): CHAR;
   BEGIN
      IF ("A" <= ch) & (ch <= "Z") THEN RETURN CHR(ORD(ch) + 32)
      ELSIF ch > 7FX THEN RETURN CHR(LibW.towlower(ORD(ch)))
      ELSE RETURN ch
      END
   END Lower;

Для Windows аналогичная история.

Автор:  Борис Рюмшин [ Понедельник, 21 Октябрь, 2019 14:15 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

Kernel это вообще говоря рантайм языка в первую очередь. Зачем туда насовывать всё подряд настолько бессистемно?

Автор:  Иван Денисов [ Понедельник, 21 Октябрь, 2019 14:28 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

Борис Рюмшин писал(а):
Kernel это вообще говоря рантайм языка в первую очередь. Зачем туда насовывать всё подряд настолько бессистемно?

Думаю, что в ядро были добавлены функции необходимые для работы с юникодными идентификаторами. Может быть было бы разумно выделить из ядра платформенно-независимую часть, а может быть в этом нет нужды. Ведь изначально ядро зависит от платфомы.
Бессистемно - это как-то оскорбительно сформулировано. Вы Борис тоже входите коллегиально в Центр :)
А подход с National мне, например, совсем не нравился. Надо, чтобы универсально было. Как можно меньше опций.

Автор:  Пётр Кушнир [ Понедельник, 21 Октябрь, 2019 15:23 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

Kernel незаконно находится в System, на самом деле, потому такое происходит.

Автор:  Евгений Темиргалеев [ Понедельник, 21 Октябрь, 2019 16:43 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

Петр, поясните, мысль о незаконности.

Автор:  Пётр Кушнир [ Понедельник, 21 Октябрь, 2019 20:19 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

А мы вроде обсуждали уже, модуль Kernel единственный в System не соответствует схеме с хост-имплементацией. Вот был бы модуль SystemCore+x86win32(Host :mrgreen:)Core, было бы все хорошо

Автор:  Евгений Темиргалеев [ Вторник, 22 Октябрь, 2019 00:14 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

Думается, что в общем случае не может быть SystemCore, может быть только xxxHostCore, потому что ядро оно и есть ядро. Интерфейсы разных ядер могут пересекаться, но из этого не следует, что пересечение или его подмножество может быть стандартом для всех ядер вообще.

Автор:  Пётр Кушнир [ Вторник, 22 Октябрь, 2019 15:50 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

Есть функции "мира", которые реализованы из хоста, но их можно давать в руки пользователю и они не тематические, как Strings, куда их ещё разместить, как не в модуль SystemCore, ну или SystemSystem.

Автор:  Евгений Темиргалеев [ Вторник, 22 Октябрь, 2019 18:02 ]
Заголовок сообщения:  Re: Strings зависит от Kernel

А, понятно. Я непосредственно про Kernel говорил, и думал что вы про его разделение.

Автор:  Иван Денисов [ Четверг, 07 Май, 2020 06:41 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

Добавлен кросс-платформенный модуль Unicode. Спасибо SovietPony за создания генератора для такого модуля.

Интерфейс следующий.
Код:
DEFINITION Unicode;

   PROCEDURE IsAlpha (ch: CHAR): BOOLEAN;
   PROCEDURE IsLower (ch: CHAR): BOOLEAN;
   PROCEDURE IsUpper (ch: CHAR): BOOLEAN;
   PROCEDURE Lower (ch: CHAR): CHAR;
   PROCEDURE Upper (ch: CHAR): CHAR;

END Unicode.


Это позволило заменить Kernel в Strings на модули Unicode и Utf. Поэтому в Strings теперь нет зависимости от ядра.

Автор:  Иван Денисов [ Четверг, 07 Май, 2020 07:27 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

Что не нравится... Что теперь надо везде не только Math надо импортировать перед Strings, но и Unicode с Utf ...

Автор:  Иван Денисов [ Понедельник, 06 Июль, 2020 10:22 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

Теперь Strings зависит только от Math. Все юникодные операции в модуле Unicode. Все преобразования Utf8 в модуле Utf.

Автор:  Иван Денисов [ Суббота, 24 Апрель, 2021 11:19 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

Задачу мы не дожали и не дообсуждали. Так как сейчас две разные реализации IsUpper и др. Одна в ядре, другая в Unicode.

Хельмут обратил внимание на последние измерения. В частности актуализировалась проблема, что реализации в ядре и вне ядра должны совпадать. Он предложил сделать в Unicode через импорт Kernel. И потом Unicode импортировать в Strings. А это совсем не то, что мы тут собирались сделать...

Также предлагает вернуть в Strings, процедуры, перенесённые в Unicode, для совместимости. И реализовать через косвенный импорт ядра, как писал выше.
Код:
PROCEDURE IsAlpha (ch: CHAR): BOOLEAN;
PROCEDURE IsLower (ch: CHAR): BOOLEAN;
PROCEDURE IsUpper (ch: CHAR): BOOLEAN;
PROCEDURE Lower (ch: CHAR): CHAR;
PROCEDURE Upper (ch: CHAR): CHAR;

Предлагает импортировать Unicode в Strings.

X512 предложил сделать это через хук, который, если не установлен, то происходит откат к старой ASCII реализации.
Мне подход через хук кажется неверным, так как процедуры будут работать то одним способом, то другим... как-то это не способствует надежности...

Ранее мы обсуждали эту задачу с Александром, и он говорил, что логично импортировать Unicode в ядро, чтобы не было библиотечных реализаций. По такому пути и Андрей сделал в BareMetal проекте. Считаю, что только так правильно, если честно.


Есть ли возражения по тому, чтобы добавить импорт Unicode в ядро?

Есть ли поддержка идеи Хельмута вернуть IsUpper и др. процедуры в Strings для совместимости?

Автор:  SovietPony [ Суббота, 24 Апрель, 2021 14:13 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

В bmbb юникод делается через хук в Kernel. Если юникод не нужен, то модуль с реализацией просто не линкуется в образ.
Я так сделал потому что код модуля HostUnicode генерируется, он огромный как в текством виде, так и в бинарном, и при этом мне надо было соблюдать достаточно жесткие ограничения на размеры образа.
Не могу сказать что это лучшый способ, но я пояснил почему выбрал именно его.

Если бы не размеры этих функций, то я бы вообще их встроил прямо в Kernel, а не тянул в отдельном модуле. Это мне больше нравится.
(посмотрел на более оптимизированный вариант, который в bbcp - тут выглядит компактнее, так что может реально всё встроить в Kernel?)

За возврат функций в Strings плюсую. Старый код не сломается, а новый может их не использовать. Поддерживать подсистемы для старых/альтернативных версий ББ гораздо проще. Никому от этого хуже не станет. А то что Strings зависит от Kernel - вообще не считаю проблемой.

Автор:  D_S__ [ Суббота, 24 Апрель, 2021 16:58 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

Есть же правило наименования версий в IT, которое имеет вид МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ. https://semver.org/lang/ru/
Если обсуждается минорная версия - то старый код не должен ломаться по-любому, даже если это полезно, эффективно и т.д.
Это резко сужает пространство для принятия решений.

Автор:  Wlad [ Суббота, 24 Апрель, 2021 17:49 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

D_S__ писал(а):
Есть же правило наименования версий в IT, которое имеет вид МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ. https://semver.org/lang/ru/
Если обсуждается минорная версия - то старый код не должен ломаться по-любому, даже если это полезно, эффективно и т.д.
Это резко сужает пространство для принятия решений.
мажор.минор.определяющийФичеСет.номерБилда

Хотя я стал придерживаться просто исошного формата даты и времени с точностью до секунды.

Автор:  Иван Денисов [ Суббота, 24 Апрель, 2021 18:49 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

D_S__ писал(а):
Есть же правило наименования версий в IT, которое имеет вид МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ. https://semver.org/lang/ru/
Если обсуждается минорная версия - то старый код не должен ломаться по-любому, даже если это полезно, эффективно и т.д.
Это резко сужает пространство для принятия решений.

Серьезное замечание. Но в Центре когда обсуждался вопрос с Files и ядром, то придерживались мнения, что при переходе межу минорными версиями тоже возможно измерение интерфейсов и т.п.

А в целом думаю, что надо менять номер на 2.0, чтобы никого не раздражать несовместимостью :)

Автор:  Борис Рюмшин [ Среда, 16 Июнь, 2021 20:46 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

Иван Денисов писал(а):
Задачу мы не дожали и не дообсуждали. Так как сейчас две разные реализации IsUpper и др. Одна в ядре, другая в Unicode.

Да, надо дожать. Удалить модуль Unicode предлагаю я. Он вообще незачем. Процедуры, которые он реализует нормально находятся в Strings. Вот туда их и переместить полностью. Они заточены только на CHAR и это хорошо.
Цитата:
Есть ли возражения по тому, чтобы добавить импорт Unicode в ядро?

Есть. Он там не нужен.

Автор:  Иван Денисов [ Среда, 16 Июнь, 2021 20:58 ]
Заголовок сообщения:  Re: #034: Strings зависит от Kernel

Если переместить SplitName и MakeFileName из ядра, то тогда и правда, что не нужен.

А кого-то пугало, что модуль Strings увеличится в размере... Нет больше такого аргумента?

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/