Pull to refresh
12
0

Пользователь

Send message

И да, я при вождении машины тоже практически не обращаю внимания на вращение колес других машин

Неправда, ты сразу заметишь, если кто-то едет на ручнике с заблокированными колёсами.

Увеличенный снимок Group Decode ROM. Это фото составлено из металлического, поликремниевого и кремниевого слоёв.

Так "поликремний" же -- это полуфабрикат, из которого кристаллический кремний выращивают после расплавления?

Если желающих товар купить нет, то это просто недоступный товар

Невостребованный, а не недоступный.

И к чему эта простыня?

Машины с 18- и 36-битными словами дожили до начала 90-х. C на них был.

Не, ты мне реализацию шестибитных байтов обоснуй. В большую размерность всё элементарно засовывается. Ещё интересно как это сочетается с твоей уверенностью в нереальности систем с другой размерностью int.

Собственные разработки Cray имели 32-битные слова без возможности байтовой адресации, на них и CHAR_BIT сишный был равен 32.

И сейчас такие системы есть, но в твоей реальности они не существуют.

Я честно не хочу влазить в режим language lawyerʼа плохого пошиба, поэтому скажу так: если я вижу определение типа int a[1000];, то я вместе со 100500 других источников, включая учебники C, называю это массивом, как бы это кому-то ни не нравилось.

Называй как хочешь, устройство языка это не меняет.

Ни разу не приходилось под такие писать после ~2000 года, потому и указал явно, что «вокруг меня».

Я уже понял, что ты солипсист.

То есть вы решили на платформах с естественными 16 битами решить проблему расширением разрядности до уровня, поддержка которого уже в разы более громоздкая, потому что длинная арифметика?

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

Тебе только указали, что надо использовать stdint и явно указывать размерность.

Когда написано: int a[1000]; — это массив.

А когда после используешь a или *a - это указатель. Сам ты хрен с пальцем.

Более того, sizeof(a) выдаст в этом случае 4000, а не 4 (считая, что int — 4 байта).

У тебя вызов sizeof() заменится константой на этапе компиляции.

Очень удобно критиковать язык, не зная его.

Так и на C код не заработает, если нужных библиотек/API нет, в чём тут недостаток Rust?

Изначальная претензия была к Си.

Банальный пример: на всяких микроконтроллерах нет stdio.h

Вообще-то есть. И переопределением, например, putc() можно использовать printf для вывода в последовательный порт или любой другой интерфейс.

зато есть прямой доступ к регистрам процессора

Указатели на абсолютные адреса использовать можно ("регистры" периферии), именованные регистры общего назначения без ассемблера - нельзя.

У volatile свободная реализация, он ничего не гарантирует.

Нет, если у тебя не выделяется/очищается память при этом через malloc/free. Указателю ведь можно задать абсолютный адрес, который можно использовать за пределами функции.

Привет от нереальных платформ avr, pic, stm8, rpi4.

Кому не должно?

Были, не спорю. Но для них не нужен был язык Си.

Конечно, массивы в Си есть

Наверняка для них размерность и тип задаются, да? Или исключительно указатель на начало даже без типа?

стоит положить массив в структуру

А потом ты берёшь указатель на эту структуру с типом другой структуры и, оказывается, что массив уже не массив.

В Си нет массивов, они введены в синтаксис добавлением смещения к указателю.

Если машина, например, с 6-битными байтами (как было типовым решением в 1950-60-х)

А напомни, когда разработан Си и сколько таких машин было с того времени? Не было надобности - нет реализации.

Какие возражения против сказанного?

Утверждение, что в Си есть массивы.

Вы не в курсе, что массивы располагаются в памяти в последовательных адресах?

Элементы массивов? В каком языке?

В чём возражение?

В требовании абсурдной ерунды, которой ни в одном языке нет за ненадобностью. Код грея либо аппаратно реализованные контроллеры разбирают, либо собственный программный код. Ты ещё какой-нибудь виганд попроси в язык включить.

на любой из поддерживаемых платформ

Значит если интерпретатора питона нет на платформе или твой код использует сишную библиотеку, распространяемую в прекомпилированных бинарниках, то не заработает?

Как ни странно — да. Конечно, у конкретный крейтов могут зависимости быть от библиотек, которые отсутствуют на какой-то платформе, но это проблема крейтов, а не языка/компилятора;

Так и код на Си везде заработает, если доступны нужные библиотеки и API.

Если в memset передаётся адрес, который потом не читается, то конечно этот вызов будет соптимизирован.

В Си это невозможно предсказать.

Код на питоне, тайпскрипте или расте можно просто взять и запустить/собрать на любой из поддерживаемых платформ и он сразу заработает. Удачи просто собрать исходники с/с++ на новой платформе.

Собрать код на питоне или тайпскрипте? Раст у тебя везде заработает?

Везде улучшит. В зависимости от ЦП int может быть размером и 16 и 32 и 64 бита.

1
23 ...

Information

Rating
Does not participate
Registered
Activity