wizzard: (Default)
[personal profile] wizzard

128 and 256-bit, respectively ^^

Date: 2009-10-16 05:09 am (UTC)
From: [identity profile] thedeemon.livejournal.com
They should be called long long long and long long long long. ;)

Date: 2009-10-16 05:27 am (UTC)
From: [identity profile] nicka-startcev.livejournal.com
Только intXXX_t и uintXXX_t!
В крайнем случае sXXX и uXXX.

Date: 2009-10-16 05:55 am (UTC)
From: [identity profile] zeux.livejournal.com
long long long is too long for gcc!

Date: 2009-10-16 07:18 am (UTC)
From: [identity profile] zhengxi.livejournal.com
ranges в Ada есть.
может еще где-то, не знаю.

Date: 2009-10-16 07:21 am (UTC)
From: [identity profile] zhengxi.livejournal.com
и еще хорошо иметь что-то типа
vector<int, 0..8> (массив интов размером от 0 до 8)
при небольшой верхней границе это можно скомпилять без динамического выделения, при большой - с ним.

Date: 2009-10-16 08:54 am (UTC)
From: [identity profile] insooo.livejournal.com
Ерунда какая-то, инт это нативный размер регистра общего назначения процессора, за этим он и нужен. Если нужны инты неограниченной\переменной длинны нужно воспроизвить децималы в памяти.

Choosing a programming language is like choosing a bar..

Date: 2009-10-16 09:45 am (UTC)
From: [identity profile] insooo.livejournal.com
Любой тип данных\код, который использует int, использует его интерпретацию основанную на его представлении. Представление для конкретной архитектуры фиксировано и хорошо известно, включая диапазон значений. two's-complement 32 bit signed integer это представление. Интерпретаций естественно может существовать бесконечное множество.

My point is, если хочется ограничивать диапазон допустимых значений, то нужно ограничивать диапазон интерпретаций, а не влиять на представление. Проще говоря если понимать int *меньше* numberBits *больше* как попытку сделать представление в битах определенной длинны, то это либо бред, либо misleading из-за названия типа и параметра типа. =P

Date: 2009-10-16 10:11 am (UTC)
From: [identity profile] zhengxi.livejournal.com
В один байт компилятор/JIT может захуячить структуру вроде:
{
int<1..5> a;
int<1..5> b;
int<0..9> c;
}
А может и 3 DWORD'а сделать, смотря что эффективней
это не сделать только задавая длину поля в битах

Date: 2009-10-16 10:13 am (UTC)
From: [identity profile] zhengxi.livejournal.com
ну и заданные програмистом range дают больше информации для статического анализа и обнаружения ошибок на этапе компиляции

Date: 2009-10-16 10:54 am (UTC)
From: [identity profile] insooo.livejournal.com
На этапе компиляции такие ошибки можно обнаружить при присваивании значений известных опять же на этапе компиляции. Остальные ошибки такого рода все равно придется решать в рантайме, а их именно так и решают сейчас, когда *интерпретация* инта не совпадает с требуемым диапазоном\набором значений.

Другое дело что тогда выброс исключения\assert\what-you-have будут локализованы, но ни что не мешает написать приблизительно тоже самое сейчас в виде типа данных с контрактом на изменение значения представленное базовым интом.

Date: 2009-10-16 10:56 am (UTC)
From: [identity profile] insooo.livejournal.com
Примерно по этим же самым причинам битовые поля считаются плохо переносимыми, а им уже много лет. Упаковка нескольких чисел в один байт с нефиксированными границами внутри сведет с ума процессор на ALU. Ну и делать представление базового типа зависящим от чего-то кроме платформы это кошмар.

Date: 2009-10-16 11:42 am (UTC)
From: [identity profile] zhengxi.livejournal.com
Развивая идею:

Fixed point (подобный тип есть в Limbo, хотя integer range там нет):
fixed<-180, +180, 1/60/60> longitude_in_seconds;

Floating point:
fixed<(-2**53)..(2**53-1), 2**(−1022..1023)> d;

:)

Date: 2009-10-16 05:27 pm (UTC)
From: [identity profile] zhengxi.livejournal.com
Если вдруг встретишь какие-нибудь реализации подобной системы типов, или хотябы статьи - поделись ссылками

Date: 2009-10-28 09:15 am (UTC)
From: [identity profile] zhengxi.livejournal.com
вот еще: http://thesz.livejournal.com/671977.html?thread=4692969#t4692969
идея бродит в умах :)

Date: 2009-11-28 08:17 pm (UTC)
From: [identity profile] udpn.livejournal.com
а можно еще раз про этот самый статический ассерт? я не понял

Date: 2009-11-28 11:29 pm (UTC)
From: [identity profile] udpn.livejournal.com
Ребенок умеет считать только до пяти. Давайте научим его цифре "шесть"?

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

зы Кстати, это еще и затребует от языка иметь intrinsic set. А хотелось бы в стандартной библиотеке.

Date: 2009-11-28 11:30 pm (UTC)
From: [identity profile] udpn.livejournal.com
Plankalkul Конрада Цузе xD

Date: 2009-11-28 11:39 pm (UTC)
From: [identity profile] udpn.livejournal.com
Ни разу не видел кода на С++ вроде

range<0, 255> a;
range<-10, 10> b;
a += b; // Error: Range check failed

хотя его довольно просто написать. Быть может, это никому не нужно?

ps Какбы намекну, что множество всех предикатов значительно мощнее множества предикатов вида P = {a <= x <= b}.

Date: 2009-11-29 12:54 am (UTC)
From: [identity profile] zhengxi.livejournal.com
Просто чекать range даже мне не нужно :)
А выбирать storage type (сколько бит выделять) в зависимости от ranges и результатов операций над ними - было бы не плохо.

Profile

wizzard: (Default)
wizzard

January 2019

S M T W T F S
  12 345
6789101112
1314 1516171819
202122 23242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 31st, 2025 03:51 pm
Powered by Dreamwidth Studios