LINUX.ORG.RU

Функциональщина на C++

 , ,


0

5

По мотивам: Си с классами

бери с++20 с концепциями, корутинами и ренжами. игнорируй всё из с++17, сфинае, не пиши упоротые шаблоны, вообще шаблоны старайся не писать, и всё будет ок.
концепции уже вроде работают, ренжи тоже есть, корутины ещё не подъехали, но в будущем пригодятся, генераторы там всякие, всё такое. ещё будет проще потом перелезть на экзекюторы и т.д. потом ещё модули затащишь.

Как эффективно учиться? (комментарий)

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

Конкретно мне интересен функционально-процедурный подход к написанию кода на крестах, что-то похожее на Rust, только без абсурдной помешанности на безопасности памяти, так сказать «си с плюшками», но совсем НЕ «си с классами», как было в упомянутом треде. Для примера: Qt и UE — это примеры плохой архитектуры в данном контексте. Например, fstream — это плохая реализация файловых операций, поскольку скатывается в классы и исключения, в ней даже нельзя без исключений получить конкретную ошибку файловых операций.

Итак: какие есть конкретные хорошо проработанные приемы и библиотеки для писания на крестах в функционально-процедурном стиле?

★★★

Ответ на: комментарий от vM

> развитием 386 на 64 рулила AMD и в 64битном режиме от них избавились, был бы это intel и сегментные регистры появились бы и там

И они там есть.

насчет 64битных сегментных регистров wiki говорит цитирую:

В 64-разрядном режиме сегментные регистры CS, DS, ES и SS в формировании линейного (непрерывного) адреса не участвуют, поскольку сегментация в этом режиме не поддерживается.

Правда есть малоизвестный режим когда регистры 64битные, а адресация 32бит, но о нём никто не знает и не использует. Я слышал о нём только на презентации athlon64 в 2004 году. Поиск в интернете такого режима ничего не дал.

>когда программировал на ассемблере меня удивило что большая часть кода команд 86 и z80 совпадало хотя ассемблер-мемоники команд разные

На какие примеры совподающих кодов Вы обратили внимание?

самое простое возврат из функции ret код вроде двести с чемто там и там одинаков

ld переименовали в mov код генерируется одинаковый

s-warus ()
Последнее исправление: s-warus (всего исправлений: 1)
Ответ на: комментарий от s-warus

AMD64 Architecture Programmer's Manual

Читаем также https://www.amd.com/system/files/TechDocs/24593.pdf#G10.1031458

4.8.1 Code-Segment Descriptors

Code segments continue to exist in long mode. Code segments and their associated descriptors and selectors are needed to establish the processor operating mode

https://www.amd.com/system/files/TechDocs/24593.pdf#page=139

4.5.3 Segment Registers in 64-Bit Mode

When FS and GS segment overrides are used in 64-bit mode, their respective base addresses are used in the effective-address (EA) calculation. The complete EA calculation then becomes (FS or GS).base + base + (scale ∗ index) + displacement.

The FS.base and GS.base values are also expanded to the full 64-bit virtual-address size, as shown in Figure 4-5. The resulting EA calculation is allowed to wrap across positive and negative addresses.

vM ()
Ответ на: комментарий от s-warus

возврат из функции ret код вроде двести с чемто там и там одинаков

В x86 2 инструкции возврата из процедуры ( + IRET )

echo 'ret; retf' | as -al
GAS LISTING                     page 1


   1 0000 C3CB          ret; retf

В Z80 это будет безусловный переход и условный переход, если NZ (Z=0) http://emuverse.ru/wiki/Zilog_Z80/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4

Как и в 8085 http://saundby.com/electronics/8085/8085Ref.pdf

В Z80 куча условных вызовов и возвратов. В x86 их, если не ошибаюсь, нет. http://www.zilog.com/docs/z80/UM0080.pdf#G5.1020958

vM ()
Последнее исправление: vM (всего исправлений: 1)
Ответ на: комментарий от vM

Пока каникулы в школе не закончились, ознакомься в интернетах какие компутеры были в 2001 году. Или если ты можешь составить какой-то более вразумительный вопрос чуть сложнее первичной рефлексивной фазы - давай.

alienclaster ★★★ ()