?

Log in

No account? Create an account

Рабочее - Ваши рубидии уже у кобальта во ртути

Jan. 3rd, 2014

04:54 pm - Рабочее

Previous Entry Share Next Entry



Си(++):

unsigned short a = ~0;
unsigned char b = 0;
bool c = a >= b - 1;

c истинно.

Верилог:

wire [15:0] a = ~0;
wire [7:0] b = 0;
wire c = a >= b - 1;

с ложно.

Какой результат вам больше нравится?

Comments:

[User Picture]
From:fregimus
Date:January 4th, 2014 01:04 am (UTC)
(Link)
Мне оба одинаково не нравятся…
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 01:17 am (UTC)
(Link)
А какой бы понравился?
(Reply) (Parent) (Thread)
[User Picture]
From:fregimus
Date:January 4th, 2014 02:13 am (UTC)
(Link)
Где типы явно приводятся, т. е. сравнение — ошибка компиляции.

В Верилоге я плохо понимаю. Знаю, зачем он, но не знаю вовсе самого языка, так что насколько такой экстрим был бы допустим — не могу сказать.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 02:19 am (UTC)
(Link)
Один язык (VHDL, уж простите), где типы надо явно приводить, настолько неуклюж, что разработчики зачастую пишут совершенно дикий неэффективный код, лишь бы не разбираться, как их приводить.

Верилог отличается от Си тем, что в нем нет базовой ширины операций, какой в Си является int.
(Reply) (Parent) (Thread)
[User Picture]
From:e2pii1
Date:January 22nd, 2014 04:01 am (UTC)
(Link)
в приличном С++ компиляторе будет warning на сравнение signed/unsigned. Этого достаточно.

(Reply) (Parent) (Thread)
[User Picture]
From:amigofriend
Date:January 4th, 2014 01:05 am (UTC)
(Link)
Тоже мне бином ньютона!

тому кто любит сложности -
c ложно
тому кто любит женщин -
c истинно!
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 01:16 am (UTC)
(Link)
Вот ведь как бывает: и в мыслях не имел тему раскрывать, а раскрыл.
(Reply) (Parent) (Thread)
[User Picture]
From:amigofriend
Date:January 4th, 2014 01:19 am (UTC)
(Link)
не мог он си от верилога
как мы ни бились отличить
но тему мог зато раскрыть!
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:January 4th, 2014 01:19 am (UTC)
(Link)
Уж что стандартизировали. :)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 01:23 am (UTC)
(Link)
Поведение Верилога нужно запомнить, потому что по сравнению с Си его понять гораздо труднее.
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:January 4th, 2014 01:44 am (UTC)
(Link)
Должен заметить, что и поведение в C(++) нужно запомнить. :)
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 01:50 am (UTC)
(Link)
Потом главное не забыть, какое где.
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:January 4th, 2014 05:31 am (UTC)
(Link)
Да, one не должен forget что and где.
(Reply) (Parent) (Thread)
From:ex_juan_gan
Date:January 4th, 2014 01:58 am (UTC)
(Link)
первый
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 02:10 am (UTC)
(Link)
А если хочется, чтобы было ложно, то надо писать "минус 1u". Но интуитивно это должно быть по умолчанию, раз переменные вокруг без знака.
(Reply) (Parent) (Thread)
[User Picture]
From:morfizm
Date:January 4th, 2014 03:36 am (UTC)
(Link)
Первый.

Я считаю, что неявные касты и численные сравнения для разных типов допустимы только в C и в C++, исключительно из уважения к истории.

В во всех остальных языках это выглядит отвратительно. Надо требовать явный каст на этапе компиляции.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 04:12 am (UTC)
(Link)
Верилог всего на год моложе, чем С++, так что и его можно уважить.
А язык с явными кастами на этапе компиляции в индустриальном использовании приводит к тому, что разработчики с ума сходят и пишут белиберду вместо эффективного кода.
(Reply) (Parent) (Thread)
[User Picture]
From:morfizm
Date:January 4th, 2014 04:44 am (UTC)
(Link)
В отношении года создания - да, справедливо. Но про Верилог я узнал только сегодня, а про C++ я знал почти с самого начала.

Можно примеры? (Если не белиберды, то хотя бы языков, где вы её видели).
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 04:56 am (UTC)
(Link)
Язык был, вестимо, VHDL, а код был связан с размножением знакового бита при преобразовании с увеличением ширины данных, где данные были не числа, а битовые векторы. Безымянный автор кода, который мне пришлось отлаживать, отчаявшись написать компилируемый код, не придумал ничего лучше, чем присваивать биты в цикле по одному. В его оправдание скажу, что и у меня получилось правильно написать необходимую функциональность не с первого раза. А на weakly typed language это пишется тривиально, типа b = signed(a);
(Reply) (Parent) (Thread)
[User Picture]
From:morfizm
Date:January 4th, 2014 05:06 am (UTC)
(Link)
Спасибо! Интересная штука.
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:January 4th, 2014 05:36 am (UTC)
(Link)
Сравнения (на равенство, больше-меньше, я о целых и вещественных числах) должны быть автоматически математические без требования явного приведения типов в коде программистом, даже если язык поддерживает целочисленные типы со знаком и без. Прошлый век же такое требовать или за кулисами нематематически приводить знаковые к беззнаковым, ломая простую и понятную всем математическую идиому.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:January 4th, 2014 05:57 am (UTC)
(Link)
Математические сравнения бывают и по модулю 2n.

(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:January 4th, 2014 06:51 am (UTC)
(Link)
Много чего бывает. В мире полно кода, где неправильно сравниваются signed и unsigned.
(Reply) (Parent) (Thread)