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 )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/ |