История изменений
Исправление MOPKOBKA, (текущая версия) :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать следующую константу после текущей, нельзя их перебрать, преобразовать в строку, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Я не читал стандарт, но по опыту программирования на С не знаю чем отличается тип enum от типа который его предоставляет, int например, оба вмещают INT_MIN..INT_MAX, имеют тот же размер, принимают разные значения вне зависимости от определенных констант.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы. В Ada легко создать массив из boolean с индексом который равен enum, и он будет преобразован в битовую маску с проверкой значений на момент компиляции.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
А все это было уже очень давно в Ada, Pascal.
Исправление MOPKOBKA, :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать следующую константу после текущей, нельзя их перебрать, преобразовать в строку, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Я не читал стандарт, но по опыту программирования на С не знаю чем отличается тип enum от типа который его предоставляет, int например, оба вмещают INT_MIN..INT_MAX, имеют тот же размер, принимают разные значения вне зависимости от определенных констант.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы. В Ada легко создать массив из boolean с индексом который равен enum, и он будет преобразован в битовую маску с проверкой значений на момент компиляции.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
Исправление MOPKOBKA, :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать следующую константу после текущей, нельзя их перебрать, преобразовать в строку, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Я не читал стандарт, но по опыту программирования на С не знаю чем отличается тип enum от типа который его предоставляет, int например, оба вмещают INT_MIN..INT_MAX, имеют тот же размер.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы. В Ada легко создать массив из boolean с индексом который равен enum, и он будет преобразован в битовую маску с проверкой значений на момент компиляции.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
Исправление MOPKOBKA, :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать следующую константу после текущей, нельзя их перебрать, преобразовать в строку, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы. В Ada легко создать массив из boolean с индексом который равен enum, и он будет преобразован в битовую маску с проверкой значений на момент компиляции.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
Исправление MOPKOBKA, :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать следующую константу после текущей, нельзя их перебрать, преобразовать в строку, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы. В Ada легко создать массив из boolean с индексом который равен enum, и он будет преобразован в битовую маску.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
Исправление MOPKOBKA, :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать следующую константу после текущей, нельзя их перебрать, преобразовать в строку, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
Исправление MOPKOBKA, :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать следующую константу после текущей, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
Исправление MOPKOBKA, :
Для этого придумали C++.
Там тоже enum это лишь набор констант, нельзя узнать не следующую, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.
Исходная версия MOPKOBKA, :
Там тоже enum это лишь набор констант, нельзя узнать не следующую, нельзя узнать количество констант enum, из за чего каждый выдумывает свою нотацию, например называют последнюю константу count, и потом думают что делать если так должна называться обычная константа.
Работы с множеством там нету кроме плохого класса std::set, и нельзя задать индексом enum, с массивом тоже самое, std::array даже не проверяет неправильные индексы.
Работы с диапазонами просто нету, как и в Rust, в Rust выдумывают новые типы на уровне компилятора, например NonZero, вместо возможности указать 1..INT_MAX.