172 похожих чатов

Добрый день. Есть у кого мысли, почему в Rust понадобилось

заводить ключевое слово const, для функций, которые могут быть использованы для вычисления констант времени компиляции? Ведь компилятор мог бы сам по телу функции "понимать" можно ли ее использовать в const выражении или нет?
Или тут вопрос в более явной семантике?

7 ответов

6 просмотров

Если ты ставишь кейворд const, то это еще и гарантия пользователям твоего кода - они могут опираться, что функция и в будущем будет константной.

rfc и его обсуждение смотрел? https://rust-lang.github.io/rfcs/0911-const-fn.html

const fn это гарантия того что функцию можно выполнить при компиляции.

Dmitry-Khominich Автор вопроса
Jøhn Đøꝩsøn
const fn это гарантия того что функцию можно выпол...

как вариант такую же гарантию можно было бы обеспечить static_assert'ом. Я боюсь, если const функции будут развиваться туда же, куда и constexpr функции в C++ (там уже аллокаторы времени компиляции завезли в C++20), то легче будет найти фукнции, которые НЕ являются const. Придется везде лепить слово const..

const (или constexpr из C++) - часть публичного API. Если он будет выводиться автоматически, то любые изменения реализации могут случайно поменять публичный API (причем рекурсивно по всем зависимостям).

Dmitry-Khominich Автор вопроса

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
Почему никто не подсказал, что можно объявить свои типы данных, в которых меньше полей, чем в отданном джейсоне, и добавлять их по необходимости?
Strange Rabbit
10
Хтось використовував Vapor на Windows?
Jaroshevskii
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Карта сайта