OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 11:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: #034: Strings зависит от Kernel
СообщениеДобавлено: Воскресенье, 20 Октябрь, 2019 22:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
В эталоне этой зависимости не было.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Понедельник, 21 Октябрь, 2019 10:57 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Может быть и так. Что-то не думали о таком. Эта проблема связана с тем, что у вас своё некоторое ядро в котором нет этих процедур. В 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 аналогичная история.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Понедельник, 21 Октябрь, 2019 14:15 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Kernel это вообще говоря рантайм языка в первую очередь. Зачем туда насовывать всё подряд настолько бессистемно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Понедельник, 21 Октябрь, 2019 14:28 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Понедельник, 21 Октябрь, 2019 15:23 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Kernel незаконно находится в System, на самом деле, потому такое происходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Понедельник, 21 Октябрь, 2019 16:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Петр, поясните, мысль о незаконности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Понедельник, 21 Октябрь, 2019 20:19 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
А мы вроде обсуждали уже, модуль Kernel единственный в System не соответствует схеме с хост-имплементацией. Вот был бы модуль SystemCore+x86win32(Host :mrgreen:)Core, было бы все хорошо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Вторник, 22 Октябрь, 2019 00:14 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Думается, что в общем случае не может быть SystemCore, может быть только xxxHostCore, потому что ядро оно и есть ядро. Интерфейсы разных ядер могут пересекаться, но из этого не следует, что пересечение или его подмножество может быть стандартом для всех ядер вообще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Вторник, 22 Октябрь, 2019 15:50 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Есть функции "мира", которые реализованы из хоста, но их можно давать в руки пользователю и они не тематические, как Strings, куда их ещё разместить, как не в модуль SystemCore, ну или SystemSystem.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Strings зависит от Kernel
СообщениеДобавлено: Вторник, 22 Октябрь, 2019 18:02 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
А, понятно. Я непосредственно про Kernel говорил, и думал что вы про его разделение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #034: Strings зависит от Kernel
СообщениеДобавлено: Четверг, 07 Май, 2020 06:41 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Добавлен кросс-платформенный модуль 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 теперь нет зависимости от ядра.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #034: Strings зависит от Kernel
СообщениеДобавлено: Четверг, 07 Май, 2020 07:27 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Что не нравится... Что теперь надо везде не только Math надо импортировать перед Strings, но и Unicode с Utf ...


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Теперь Strings зависит только от Math. Все юникодные операции в модуле Unicode. Все преобразования Utf8 в модуле Utf.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Задачу мы не дожали и не дообсуждали. Так как сейчас две разные реализации 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 для совместимости?


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

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
В bmbb юникод делается через хук в Kernel. Если юникод не нужен, то модуль с реализацией просто не линкуется в образ.
Я так сделал потому что код модуля HostUnicode генерируется, он огромный как в текством виде, так и в бинарном, и при этом мне надо было соблюдать достаточно жесткие ограничения на размеры образа.
Не могу сказать что это лучшый способ, но я пояснил почему выбрал именно его.

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

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


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

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


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

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

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


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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #034: Strings зависит от Kernel
СообщениеДобавлено: Среда, 16 Июнь, 2021 20:46 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Иван Денисов писал(а):
Задачу мы не дожали и не дообсуждали. Так как сейчас две разные реализации IsUpper и др. Одна в ядре, другая в Unicode.

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

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


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Если переместить SplitName и MakeFileName из ядра, то тогда и правда, что не нужен.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB