OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:39

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




Начать новую тему Ответить на тему  [ Сообщений: 332 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 17  След.
Автор Сообщение
СообщениеДобавлено: Суббота, 08 Май, 2021 12:29 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
kekc_leader писал(а):
А что если компилятор, когда видит в начале секции инициализации модуля (главный BEGIN) множество присваиваний вида "переменная := константа", загонял бы это всё (не во время выполнения, а в момент компиляции) в сегмент данных? Какие здесь могут быть проблемы? Такие данные ведь можно потом изменять?
Такая фича есть в OO2C (с ограничениями).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 06 Июнь, 2021 03:33 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Александр Ильин писал(а):
Точнее, переписывают с XDS Oberon-2 на C#.
Кстати, Александр. Я переписал Вашу утилиту ImportGraph при помощи Ofront+, теперь она может работать и под Linux, и под 64 бит. Это как пример, иллюстрирующий мой подход.



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: SYSTEM.THISRECORD, SYSTEM.THISARRAY и SYSTEM.TYP
СообщениеДобавлено: Четверг, 29 Июль, 2021 20:13 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Внедрил в Ofront+ поддержку системных функций SYSTEM.THISRECORD, SYSTEM.THISARRAY и SYSTEM.TYP:


Но я склоняюсь сейчас к тому, чтобы сократить THISRECORD / THISARRAY до THISREC / THISARR.

Из минусов — потеряется совместимость с BlackBox, но из оправданий — данные функции даже не документированы, а полной совместимости с BlackBox у Ofront'а+ не будет, т.к. я наверное всё-таки не планирую внедрять мета-информацию в модули, как делает это BlackBox. К тому же, в BlackBox есть флажок [callback], который в Ofront+ называется [stdcall], я считаю это более выразительным. Буду рад услышать ваши комментарии, особенно в пользу сокращения. Тем более, что в BlackBox уже есть ANYREC (а не ANYRECORD).

В целях автоматизации пересборки Ofront+ освоил онлайн-сервис Travis-CI. Теперь я делаю изменения в Ofront'е+, заливаю их в гитхаб, а трэвис сам скачивает себе проект и автоматически собирает для Linux, macOS и FreeBSD, а потом собранные бинари тоже заливает в гитхаб. Так что теперь появился реп специально для бутстрапных Си-файлов и собранных бинарей:


Здесь будет самый свежий набор раскруточных файлов, из которых можно получить сборку для Linux, macOS и FreeBSD любой разрядности. Но на трэвисе, к сожалению, из ходовых поддерживаются только архитектуры AMD64 и aarch64, но нет ни x86, ни armv7.

Для раскрутки (получения сишников) используется пилотная сборка Ofront+ для Win32, но я предпочитаю собирать её локально и руками, т.к. бывают нюансы. Версию для Win64 собрать тоже можно — соответствующие скрипты в репе имеются, но в этом нет особого смысла.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SYSTEM.THISRECORD, SYSTEM.THISARRAY и SYSTEM.TYP
СообщениеДобавлено: Пятница, 30 Июль, 2021 08:36 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Oleg N. Cher писал(а):
Из минусов — потеряется совместимость с BlackBox

А из плюсов?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 30 Июль, 2021 22:54 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Из плюсов - более коротко. Ну и не ломает традицию: INTEGER, но SHORTINT (а не SHORTINTEGER). RECORD, но ANYREC (а не ANYRECORD).

Это не слишком широко используемые функции, до сих пор Ofront+ без них обходился.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 31 Июль, 2021 15:47 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Строковые операции в Ofront+ улучшены для повышения надёжности.

Ofront+ реализует бо́льший набор строковых операций, чем Ofront/voc. В частности, в Ofront+ есть системный тип POINTER TO ARRAY [untagged] OF CHAR, который является указателем на Си-строку, заканчивающуюся 0X (без сохранённой длины). Над такими строками можно делать ряд небезопасных операций: небезопасное вычисление длины, присвоение небезопасной строки безопасной строке, присвоение безопасной строки небезопасной строке. Всё это полезно для работы со сторонними библиотеками, разработанными на Си и других языках.

Улучшения:

Вместо __STRLEN для небезопасных Си-строк, завершающихся 0X, теперь используется функция __CSTRLEN. __STRLEN стала безопасной и получила второй параметр — максимальную длину строки. И теперь она проверяет наличие 0X в строке, а в случае его отсутствия будет трап.

В сообщении о языке Оберон чётко сказано, что строки всегда должны завершаться 0X.

Цитата:
9.1. Assignments
...
2. Strings can be assigned to any array of characters, provided the number of characters in the string is less than that of the array. (A null character is appended). Single-character strings can also be assigned to variables of type CHAR.

Таким образом, если на вход LEN поступила строка без 0X, значит это не строка, а просто массив символов, для которого операция LEN не имеет смысла. И эту проблему важно диагностировать на как можно более ранней стадии разработки.

Дополнительные аргументы функций __STRLEN, __STRCOPY и __STRAPND — имя модуля и позиция в тексте для быстрого поиска ошибки.

Вот картинки, которые иллюстрируют, насколько операции со строками теперь безопаснее в Ofront+ по сравнению с CPfront:

Изображение

Изображение

Изображение

На данный момент я считаю работу над строковыми операциями завершённой. Что ещё планируется — поддержка двухбайтового типа CHAR.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Август, 2021 00:19 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Библиотека Artemis Роберта Дойла (Robert Doiel), о которой он недавно писал в рассылке ETH, успешно собрана при помощи Ofront+.

Artemis разработана на Oberon-07.

Изображение



Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Август, 2021 09:40 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Oleg N. Cher писал(а):
...
На второй картинке в левом окне (то, что "сгенерировано Ofront+"), есть потенциально опасный код.

При объявлении
Код:
char* s ... ;
, стрОки
Код:
s = "11111111";
__MOVE("1111111", s, ...);
дадут ошибочное поведение или нарушение защиты на ряде систем.


Причина: литеральные строковые значения, навроде "111111111", обычно, располагаются компиляторами в области констант. И, опять-таки, обычно, это всё располагается в read-only memory областях. В правильных системах это - либо сегменты с доступом только для чтения, либо - флэш-память. То есть, мы: либо вылетаем по неправильной операции, либо - по нарушению доступа, либо постоянно начинаем ресетиться, если нет обработчика такой операции в случае некоторых встроенных систем. Или получаем неожиданное поведение самой программы, когда чтение из s будет давать значение по адресу последнего присвоенного литерала, не смотря на все последующие __MOVE-ы... если до того не рухнет от их последствий.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Август, 2021 17:47 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Влад, этот код написан не для исполнения. Просто показано, что такие операции возможны. Вы же предположили, что вот это будет исполняться последовательно?

Код:
s = "11111111";
__MOVE("1111111", s, ...);

А оно не будет исполняться вообще никак. Т.е. здесь просто две не связанные друг с другом операции. Первая - получение адреса на строку, бог с ней где она там находится, в ридонли или нет. А вторая - перемещение куска памяти по указателю.

Операции опасные, некрасивые, но увы - часто нужные. И в BlackBox/CPfront они поддержаны в той же мере.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Август, 2021 08:41 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Oleg N. Cher писал(а):
Влад, этот код написан не для исполнения. Просто показано, что такие операции возможны. Вы же предположили, что вот это будет исполняться последовательно?

Код:
s = "11111111";
__MOVE("1111111", s, ...);

А оно не будет исполняться вообще никак. Т.е. здесь просто две не связанные друг с другом операции. Первая - получение адреса на строку, бог с ней где она там находится, в ридонли или нет. А вторая - перемещение куска памяти по указателю.

Операции опасные, некрасивые, но увы - часто нужные. И в BlackBox/CPfront они поддержаны в той же мере.

Между первой и второй строчкой может быть очень много других строчек и программист может не отследить ситуацию со способом объявления s.... А потом - сильно удивляться. :)))) Два раза, причём...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 04 Август, 2021 08:04 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Oleg N. Cher писал(а):
Библиотека Artemis Роберта Дойла (Robert Doiel), о которой он недавно писал в рассылке ETH, успешно собрана при помощи Ofront+.
прикольный чувак этот Дойел: в одном модуле (Chars) константа MAXSET = 31, в другом (DStrings) - MAXSET = 32...
Не, я, конечно, понимаю, что - "модульность", "сокрытие информации" и - всё такое... :)
Ещё прикольней, что к каждому объявлению, в этих модулях, почти дословное объяснение добавлено о причинах ввода этой константы...
Понятно, что, если есть "костыль", который полезен для кучи мест, то - вынеси в общий файл с подобными объявлениями вспомогательного всего, что ПОЧТИ ВСЕГДА использоваться, БУДЕТ. Так оно ещё и значения разные имеет... :)
И это - только то, за что сразу "глаз зацепился", без "вникания в творение", таксать...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 04 Август, 2021 20:26 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Ага. Я не вникал особо в его код, только пересобрал, ибо интересуюсь допилить Ofront+ до приемлемой поддержки Оберона-07. Так что изредка пробую им что-то собирать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 05 Август, 2021 11:31 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Таких дублирований констант в разных модулях полно и в компиляторе ББ (как он называется, opc, что ли), и в компиляторе Фокс от A2. Возможно, что это зачем-то нужно. А то, что они не совпали - ну что же, не ошибается только тот, кто ничего не делает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 05 Август, 2021 23:40 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
budden писал(а):
Таких дублирований констант в разных модулях полно и в компиляторе ББ (как он называется, opc, что ли), и в компиляторе Фокс от A2. Возможно, что это зачем-то нужно. А то, что они не совпали - ну что же, не ошибается только тот, кто ничего не делает.

Ошибки - исправлять надо, а не постулировать через, разного рода, оправдания.
Иначе они могут накопиться сверх критической, допустимой, для данной системы, массы, и эта система рухнет под тяжестью их кумулятивного, совокупного отрицательно эффекта...
Хотя, вы, наверное, и в ответ на это, свои "практические, жизненные" соображения и аргументы имеете... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 06 Август, 2021 05:20 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Влад,
очень новый для Оберона человек, даже не совсем программист, пробует свои силы в программировании на простом языке. Я это могу только приветствовать.
Кстати, он просил Вас поблагодарить за указание этой ошибки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 06 Август, 2021 07:19 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Oleg N. Cher писал(а):
Влад,
очень новый для Оберона человек, даже не совсем программист, пробует свои силы в программировании на простом языке. Я это могу только приветствовать.
Кстати, он просил Вас поблагодарить за указание этой ошибки.
В связи с тем, что я - унылый, окончательный и занудный брюзга и хорошо осведомлённый оптимист, я продолжу своё надоедливое и въедливое ворчание в эту сторону... :)

Я, конечно, от всей души принимаю и рад благодарности этого человека и разделяю твои чувства и мысли относительно желания людей использовать в работе обероны!...

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

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

Получается интересная коллизия.
С одной стороны, у нас есть конкретная реализация модульности в некотором языке, одним из следствий которой является возможность сокрытия информации и ограничения доступа (+ локализация эффектов воздействия и использования).
С другой, - мы открываем возможность "множественности трактований смыслов и содержаний" сущностей с одним и тем же именем. В данном случае - констант.
Интересно, что подобные проблемы возникают и у пользователей языка Си(++). Только обусловлены они прямо противоположными подходами и способами организации текстов программ и - полным отсутствием поддержки модульности. :)))))) правда, касаются они не столько констант, сколько - переменных.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 14 Август, 2021 15:54 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Экспериментирую с отсутствием разделителя ";" в диалекте Оберон-3. Компилится такое:

Изображение

Навеяно Oberon+


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 15 Август, 2021 09:39 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Перевод строки становится значим для компилятора (как в Го) или нет?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 15 Август, 2021 12:48 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
В A2 есть Lax-режим, который делает то же самое. Но я не знаю, как он работает и не пользовался им.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 15 Август, 2021 19:13 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Борис Рюмшин писал(а):
Перевод строки становится значим для компилятора (как в Го) или нет?
Не становится. Лично я против того, чтобы форматирование текста влияло на логику кода.

Как оказалось, разделитель в виде ";" Оберону не особо нужен - и выпилить его из OP2 можно парой несложных правок.

Но ";" я не выпилил совсем, пусть остаётся необязательным. В т.ч. и для совместимости.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 332 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 17  След.

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


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

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


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

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