OberonCore
https://forum.oberoncore.ru/

заменяемые "встроенные" типы
https://forum.oberoncore.ru/viewtopic.php?f=86&t=6804
Страница 1 из 1

Автор:  budden [ Суббота, 25 Сентябрь, 2021 22:06 ]
Заголовок сообщения:  заменяемые "встроенные" типы

Я думал, что это моё ноу-хау, но всё уже украли до нас :lol:

Вчера я узнал, что в C# и в Котлине можно переопределить смысл таких встроенных типов, как Int, в любом модуле, если импортировать "другой системный модуль" или если просто определить тип с таким именем. Т.е. совершенно нет нужды спорить о том, как должны начинать выглядеть INTEGER-ы при переходе к 64 разрядам - они могут выглядеть так, как надо, в каждом конкретном месте. Другое дело, что при портировании кода и библиотек вопрос всё равно всплывёт, но поскольку его можно решать контекстно-зависимо, то его острота снижается. Я планирую реализовать такую возможность в ЯОС, но об этом мало кто знает.

Поскольку эта фича, оказывается, уже давно в мейнстриме и ничего нового из себя не представляет, нет смысла и скрывать это :lol:

В Си, на самом деле, тоже можно переопределить встроенные типы, например, написать

Код:
#define int char


Естественно, это сломается на любом стандартном заголовочном файле, но в принципе так сделать тем не менее можно и я встречал практические применения, не для int, но для printf.

Автор:  Rifat [ Воскресенье, 26 Сентябрь, 2021 00:09 ]
Заголовок сообщения:  Re: заменяемые "встроенные" типы

Надо для начала понять критерии, на которые опираемся. Я как-то рассказывал, что после того, как начал изучать тему формальной верификации или доказательства программ, стал немного по-другому смотреть на многие вещи в языках программирования: начал обдумывать это с той точки зрения, а возможна ли формальная верификация программ, которые используют эту фичу. С точки зрения этого критерия многие фичи языков программирования являются плохими, так как не понятно, как возможно это верифицировать, соответственно, это делает верификацию реальных программ, где хотя бы раз встретилась такая фича практически невозможной, то есть можно проверить остальной код, но все вместе на 100% доказать нельзя. И по данному критерию отсеивается очень большое количество остроумных фич, которые кто-то придумал для какого-то языка, и где-то кем-то для чего-то это даже используется. Можно, конечно, сказать, что мало кто формально доказывает программы. Но, как мне кажется, доказываемость и понимаемость программ программистом коррелируют. То есть делая возможным доказательство, мы тем самым и упрощаем программу для программиста, соответственно, будет меньше ошибок и так далее.

Автор:  Sergej Durmanov [ Воскресенье, 26 Сентябрь, 2021 10:32 ]
Заголовок сообщения:  Re: заменяемые "встроенные" типы

Здесь нет никакого "ноу-хау" - именно так Оберон изначально и работал: Можно было написать, например, так:
TYPE INTEGER = LONGINT;
или как-то так:
CONST TRUE = FALSE;
Разумеется, от этой дряни избавились.

Автор:  budden [ Воскресенье, 26 Сентябрь, 2021 12:00 ]
Заголовок сообщения:  Re: заменяемые "встроенные" типы

Рифат, для автоматических рассуждений о программах с глобальным модулем нужна модель этого глобального модуля. Если глобальный модуль сменный, то нужна модель под все варианты и учёт сменности. Рассуждения о сложных программах в принципе являются сложными (почти безнадёжно сложными), для этого достаточно процедур и циклов. С указателями на функции в любой форме, будь то процедурные типы или виртуальные функции, всё становится ещё хуже. При добавлении eval - совсем из рук вон плохо.

В этой системе координат сменный глобальный модуль никакой беды не порождает.

Сергей, я это как-то и подозревал. Однако смысл сменного глобального модуля в том, чтобы не было фиксированного набора примитивов вообще, а он возникал бы в результате импорта того или иного глобального модуля. И не обязательно альтернативные встроенные типы должны выражаться через уже существующие - для них может потребоваться писать куски бекенда. Как самый простой пример, заменить оберонову систему типов на числовую башню, как в лиспе, или на бухгалтерские типы с большой мантиссой и автоокруглением до копеек. Для примера, ЕМНИП в 1С тип числа не является числом с плавающей точкой - он больше похож на BCD из SQL, но при этом он является встроенным типом. В АО с его перегрузкой операций это доступно. Но из литералов всё равно будут возникать встроенные типы Оберона. Концепция сменного глобального модуля должна и этот вопрос как-то решать, чтобы литералы получали встроенные типы. Великовато получается для идеи именно "сменного глобального модуля", тут уже и синтаксис может быть затронут. Но смысл именно в этом - если сменный модуль поставили, то должна быть защита от протекания встроенных типов в этот модуль.

Но я очень прошу не вставлять эту, как Вы изволили выразиться, "дрянь" в A2 - потому что в этом случае у ЯОС будет меньше конкурентных преимуществ :lol:

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