LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

за низкоуровневой абстракцией if скрывается высокоуровневая абстракция match.

одинаковый у них уровень абстракции, вообщем-то if это частный случай match

Если взять определение из википедии, то match явно более высокоуровневая абстракция.

Только жалоба Ygor мне кажется необоснованной, это zero-cost абстракция. Сам С многое вносит, пусть Ygor подумает как компилируется деление uint64_t на 32 битных платформах. Еще С не только скрывает сложные операции, но и не дает доступа к низкоуровневым, вот как в «переносимом ассемблере» записать без нестандартных расширений этот простейший код?

int64_t mul(int64_t a, int64_t b) 
{
    return ((__int128)a * b) >> 32;
}

mul:
mov rax, rdi
imul rsi
shrd rax, rdx, 32
ret

Исходная версия MOPKOBKA, :

за низкоуровневой абстракцией if скрывается высокоуровневая абстракция match.

одинаковый у них уровень абстракции, вообщем-то if это частный случай match

Если взять определение из википедии, то match явно более высокоуровневая абстракция.

Только жалоба Ygor мне кажется необоснованной, это zero-cost абстракция. Сам С многое вносит, пусть Ygor подумает как компилируется деление uint64_t на 32 битных платформах. Еще С не только скрывает сложные операции, но и не дает доступа к низкоуровневым, вот как в «переносимом ассемблере» записать без нестандартных расширений этот простейший код?

int64_t mul(int64_t a, int64_t b) 
{
    return ((__int128)a * b) >> 32;
}

mul:
  mov  rax, rdi
  imul rsi
  shrd rax, rdx, 32
  ret