Re[10]: Самый низкоуровневый язык, ага
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 29.09.23 09:56
Оценка:
Здравствуйте, vdimas, Вы писали:

V>>>Двухфакторная инициализация — статическая и динамическая.

ЕМ>>CRT не является безусловно необходимым для этого.

V>Тогда будет UB. ))


Да и хрен бы с ним.

V>ты тогда не можешь полагаться на спецификации языка.


Уж где-где, а во встроенных системах, где без регулярной ревизии порождаемого кода можно словить разнообразных глюков, полагаться на общие спецификации языка — последнее дело.

V>Для динамической фазы инициализации CRT требуется


Если Вы об инициализации неконстантным выражением, то да. Я даже не подумал, что кто-то в здравом уме может использовать такое на МК.

V>программисту удобнее, когда численно совпадающие адреса данных и программы на самом деле смотрят в разную память.


Далеко не всегда удобнее — с теми же табличными функциями.

V>Считай, что это чуть другой образ мышления.


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

V>Одно плохо — тебе недоступна возможность явного вызова этой ф-ии, этим занимается CRT.


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

V>Тут во всей красе проявляется то правило инженерии, что самое общее решения является наихудшим для каждого конкретного случая. ))


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

V>нет такой возможности в языке, забудь. ))


"Жопа есть, а слова — нет?"

V>если архитектура не позволяет непосредственно читать байты из адресного пространства команд, то ты через макросы прошиваешь команду сложения рабочего регистра с константой (или загрузки константы в регистр) + операция ret. Тогда обращение к таблице вырождается в call c предвычисленным смещением.


Все бы хорошо, но вот быстродействие такого...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.