LINUX.ORG.RU
решено ФорумTalks

О проблемах СИ, о проблемах СИ++, и вообще помогите разобраться что творится в мире этом?

 , ,


0

4

Только что сидели в дискорде с человеком одним, написавшим бота чисто на ИИ(по его словам), по виду не особо разбирающегося в том, как работает сам бот и что он делает. Естессна, вспомнив про то, что вокруг одни говноеды и тру-кодеры вымерли (цитируя: Когда-то на нём писался практически весь софт, и понятие «быть программистом» однозначно и безальтернативно включало в себя «знать Си».), я поднял панику. Откуда не возьмись выскачил ещё один чел, который прямо пошёл на меня со словами следующими:

[22:45] ну по твоим же словам
[22:45] если ты си-процедурщиков превозносишь
[22:46] язык с кучей проблем с безопасностью памяти

язык с кучей проблем с безопасностью памяти

Часто читал об этом. В ответ упомянул, что есть безопасный Раст, крайне нелюбимый львиной долей ЛОРа. Как вдруг тот же чел выдвигает своё сильное заявление о том, что Rust - это не альтернатива СИ, и что альтернативой СИ будет Zig(я никогда про него не слышал).

[22:49] зиг - альтернатива си
[22:49] превозносить си, который любой функциональщик будет презирать
[22:50] любой, кто пишет на хаскеле, лиспах

Пишу чуть ли не ночью, поэтому сейчас туго соображаю. Что за Zig? Кто начал форсить Rust как альтернативу C? Не сам же я это придумал. И с каких пор C теперь не в почёте?

Перемещено hobbit из general


Мы деды писали на Си и будем писать на Си, максимум на плюсы переедем и то будем писать в стиле Си больше, чем в стиле плюсов. Остальное просто не признаем, потому что эти всякие новомодные язычки меняются быстрее, чем девушки.

hibou ★★★★★
()
Ответ на: комментарий от u5er

у чистой сишки даже вввод вывода за пределами языка но в пределах стандартной библиотеки которая в пределах языка :)

ваще реальное отличие Сяшки от предшествеников что язык явно ожидает на машине некую сущьность в рантайме называемую ОС(полумух) поэтому и эмбедед тоже ниша Сяшке ибо явно задаётся куцое окружение исполнение али ваще баребон с microIO если вообще

qulinxao3 ★☆
()
Ответ на: комментарий от sanyo1234

Товарищ, старые ОС написаны конечно же, на АСМ-е, хотя бы потому, что у 6502 стек 8-и битный, его сишечка в момент выжрет. Да и z80 мало радости любителям ЯвУ доставлял. В те времена, Си была в продакшн только на больших машинах, на Хоум-ПК - только АСМ. Что касается сейчас - использования АСМ-а по делу я видел последний раз в майнинговвх программах. А эти ваши ОС на АСМ-е - спермотоксикоз в самом незамутнённом виде, они не рабочие, я проверял.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 3)
Ответ на: комментарий от qulinxao3

Коверкать язык ты мастер, при этом в тексте ни точек, ни запятых. Да ещё и ошибки в словах. Получаешь клоуна за такое. Я раза 3 перечитал твоё сообщение и даже не уверен, что ты хотел сказать.

u5er ★★★
()
Ответ на: комментарий от lenin386

реально микропроцессорная революция 70ых и до нулевых (когда многоядерность[как вариант конкурентного исполнения] опять стала мэйнстримом как в 60ых на больших машинах - теже транспьютеры тада это нонешнии gpu без графического output :)

реальность линейна в отличии от мира идей

qulinxao3 ★☆
()

Кто начал форсить Rust как альтернативу C?

NIST, NSA, FBI и прочие бумажные безопасники.

Что за Zig?

То, что не форсят бумажные безопасники.

somemong
()
Ответ на: комментарий от qulinxao3

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

u5er ★★★
()
Ответ на: комментарий от u5er

азанного, получается так,

2+2=5 <- у не всех получается

ты вахтёр?!

qulinxao3 ★☆
()
Ответ на: комментарий от u5er

ну а что умеет сишка на голом железе?

да и вообще как устроена работа с железом?

На х86 и его наследнице, х86-64, обычно для старого оборудования – это порты, инструкции outb(), inb() и их аналоги. Которые суть – библиотечные функции же. Понятно, что нужен режим ядра в защищенном режиме, но ядро внутри себя тоже реализует некоторые функции стандартной библиотеки Си. То есть «пиша» на Си ты используешь какие-то функции, которые уже написаны.

С новыми устройствами навроде PCI/PCIE, там эти как его… бары. Bar0, bar1 и прочее, которое суть тоже память. И никаких сверх секретных инструкций там тоже нет. Работается как с памятью. Если ты работаешь с этим из ядра, то в ядре уже готовые функции есть для этого. Опа?! Т.е. тоже ничего Си-специфичного, просто готовые функции.

А внутри ядра или какой-либо еще библиотеки, функции реализованы ассемблерными вставками. То есть тоже не Си.

Можно и самому все это реализовать, не пользуясь функциями ядра. Конфиг-спэйс шины пси мапится в адреса пространства памяти. Узнать с каких адресов – это нужно читать документацию на процессор, скорее всего нужно будет прочитать адрес из порта процессора. Порты тоже мапятся в пространство памяти.

Итого, все сводится к командам чтения портов. Которые вовсе не сишные, а просто команды процессора, обернутые в библиотечные функции. Че там Си-шного?

hibou ★★★★★
()
Ответ на: комментарий от hibou

То есть «пиша» на Си

:)

Во время написания на Си

sanyo1234
()
Ответ на: комментарий от hibou

ну а что умеет сишка на голом железе?

да и вообще как устроена работа с железом?

Я могу судить исключительно по своему опыту работы с stm32 blue pill (сейчас точную модель модель мк не вспомню). Там суть в том, что вся периферия мк и управляющие регистры отображены в память. То есть, грубо говоря, мк может адресовать 4 гига памяти. Эти 4 гига поделены на участки. Один участок отвечает за настройку тактирования самого мк, другой - за настройку портов ввода-вывода и т.д.. И вся работа сводилась к тому, что ты обращаешься по различным адресам в памяти и пишешь/читаешь. Так что на мой взгляд, сишка на голом железе может всё.

u5er ★★★
()
Ответ на: комментарий от u5er

Вообще как бы хороший вопрос, почему нельзя просто разыменовать указатель, да? Зачем нужны специальные команды для доступа к некоторым участкам памяти? Я думаю, ответ больше в истории. Но вообще даже сейчас разыменование указателей вместо доступа к порту по ассемблерной команде – это плохо.

hibou ★★★★★
()
Ответ на: комментарий от hibou

Bar0, Bar1 и прочее - что угодно, в том числе, и порты. Правда, современное железо имеет тенденцию от использования портов уходить, см. выше. Даже RS порты сейчас в память отображаются.

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

Окей, даже если мы все представим как память, и сможем работать через разыменование указателей. И что тут сишного? В паскале тоже есть указатели.

hibou ★★★★★
()
Ответ на: комментарий от hibou

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

На мк это было примерно так. Допустим, в даташите указан адрес 0x00AAE0BB для порта ввода-вывода А, который представляет из себя 8 GPIO. Код будет примерно такой

volatile unsigned char* portA = 0x00AAE0BB;
*portA = 0x0F;

Тогда GPIO 0-3 выдадут высокий уровень, а GPIO 4-7 - низкий. Только там обычно даётся некий «опорный» адрес, а всё остальное - это смещения, которые нужно прибавить к.

Тут фишка в том, подо что ты кодишь. Если ты кодишь под голое железо, то ты сам себе хозяин и можешь читать/писать по любым адресам в памяти. Если ты кодишь под операционку, то ты будешь дёргать уже её функции. Такие как outb() и inb(), которые ты упомянул выше.

u5er ★★★
()
Последнее исправление: u5er (всего исправлений: 1)
Ответ на: комментарий от u5er

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

hibou ★★★★★
()
Ответ на: комментарий от hibou

Именно! А теперь попробуй донести это до @qulinxao3. Хотя… он, похоже, больше занят троллингом тупизной, а не обсуждением технических деталей :)

u5er ★★★
()
Ответ на: комментарий от hibou

И много таких языков ты знаешь? Паскаль полумёртв, в конвульсиях. В новомодных и безопасных, это через ансейвы делается, что-то ай-ай-ай.

lenin386 ★★★★
()
Ответ на: комментарий от dataman

Он в разведке работает, не иначе. Вроде русским языком пишет, а ничего не понятно xD

u5er ★★★
()
Ответ на: комментарий от u5er

тобой не распарсенный(имхо я думаю по причине немочи твоёй в семантику ты же можешь верить что некорректный синтаксис с моей стороны отказ твой распознать) тезис прост

в отличии от других Алгол языков - Си писали математики и связисты с гиганским фортран-опытом в анамнезе поэтому существенная часть того что раньше включали в язык вынесенно в функции из «библиотек»( чисто текстуальной подстановки ака инклюды - всё по классике моды в макрорасширения текстов для сырцов али linkовка .а см https://www.tuhs.org/Archive/Applications/Early_C_Compilers/primevalC.html )

только потом эти «библиотеки» стали «стандартными» что у униха - что в иных общепринятых

крч Си это буквально блочный ассемблер

qulinxao3 ★☆
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Ответ на: комментарий от windows10

Ты только что в точности описал как действуют все профессианалы

Тебе квалифицированный специалист строит дом с десятой попытки? Переделывает по три тысячи раз за 4 года?

Именно так и происходит в 99% случаев если обратиться в «профессиональную» контору. Не знаю ни одного случая в котором дом был бы построен как положено, из качественных материалов, в срок и без доплат и без обнаруживаемых через годы фундаментальных косяков.

Стоматолог вырывает три зуба, прежде чем вырвать правильный?

Примерно так и происходит. Могут и зуб не тот выдрать, и заставить заплатить за нахер ненужные тебе «удаления зубного камня» или ещё какую бесполезную хрень, иначе чинить зуб отказываются. Бизнес, фигли. И это всё вместо того, чтобы просто выяснить как вырастить новый зуб.

Повар несет десяток пицц, прежде чем принесет нормальную?

Самая вкусная пицца которую я когда-либо ел была сделана любителем. :) Вот эта вся херня из «квалифицированного» общепита - годится только чтобы как-то перекусить.

Ты кажется забыл что означает термин «квалификация» =)

Это ты забыл что такое квалификация. И живёшь в каком-то манямирке где квалификация заменена на подчинение каким-то правилам и обладание какими-то бумажками.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 2)

О проблемах СИ

СИ — это система мер. О её проблемах ноют разве что американцы.

Wapieth
()
Ответ на: комментарий от sanyo1234

А более высокоуровневый - значит, наиболее близкий к асму, но всё же обладающий некоторыми свойствами обычных ЯП.

Он не «более близкий к асму». Дальше не читал этот поток компетентнсти.

lesopilorama
()
Ответ на: комментарий от u5er

Про «не реализуемо» можешь пойти и рассказать разработчикам колибри.

Их скорость разработки и богатство фич и способность запускаться на разных платформах - это и есть нереализуемо.

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от qulinxao3

крч Си это буквально блочный ассемблер

Неверно. Ассемблер - это что-то, что в курсе о каком-либо железе. Си вообще не подозревает, что какое-то там железо существует. Даже адреса памяти в указателях для Си - абстракция. Эти адреса могут быть виртуальными через 10 слоёв виртуализации или адресовать какие-то реальные порты ввода-вывода на STM32 как писали выше - Си об этом не узнает, для него это просто ссаное число.

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 2)
Ответ на: комментарий от lesopilorama

адреса памяти в указателях для Си - абстракция. Эти адреса могут быть виртуальными через 10 слоёв виртуализации или адресовать какие-то реальные порты ввода-вывода на STM32 как писали выше - Си об этом не узнает, для него это просто ссаное число.

А теперь! внимание, ШОК! Сенсация. Примите удобные позы, вас предупредили. В ассемблере _всё_ _тоже_ _самое, 1:1. Теперь, ты будешь считать время до этого сообщения и после. Твой мир никогда не будет прежним.

lenin386 ★★★★
()
Ответ на: комментарий от James_Holden

Но, ведь на ассемблере не надо писать никакие адреса, по крайней мере в ситуациях, когда их не надо писать на C.

Ну все зависит от самого асма и железа с которым работаете.

anc ★★★★★
()
Ответ на: комментарий от windows10

и даже не беря во внимание ограничения самого языка

Поперхнулся... Ограничения в чем?

случайно выстрелить себе в ногу среди десятков тысяч строк кода - выше

...

чем когда кот - прост, чистен и понятен.

Сравнили теплое с твердым.

anc ★★★★★
()
Ответ на: комментарий от lenin386

Ну в целом да, только это была последняя зацепочка, позволявшая связать СИ и ассемблер или аппаратуру.

lesopilorama
()
Ответ на: комментарий от anc

Поперхнулся... Ограничения в чем?

Ограничения в работе со строками, ограничения вменяемого дебаггинга, ограничения в работе с памятью (да, прикинь, бесконечный дроч с malloc\free - это ограничение, из-за которого программер должен тратить ресурс не на функционал программы, а на борьбу с выделением\освобождением), ограничения в работе с массивами, ограничения в ООП, ограничения с переносимостью.

Сравнили теплое с твердым.

Ага. Единственная причина по которой это убожество еще живо - legacy. Если бы этот ЯП появился сегодня - его тут же выбросили б.

windows10 ★★★★★
()
Ответ на: комментарий от hibou

Остальное просто не признаем, потому что эти всякие новомодные язычки меняются быстрее, чем девушки.

ЧСХ да.

anc ★★★★★
()

тру-кодеры вымерли

Глупости. Полно людей пишут на C. А могут писать на C - в разы больше. Никто никуда не вымер. Тем более, что язык один из самых простых из промышленных.

язык с кучей проблем с безопасностью памяти

Это верно. В C почти нет средств для того, чтобы писать код без ошибок при работе с памятью. Всё держится только на умениях программиста.

В ответ упомянул, что есть безопасный Раст, крайне нелюбимый львиной долей ЛОРа. Как вдруг тот же чел выдвигает своё сильное заявление о том, что Rust - это не альтернатива СИ, и что альтернативой СИ будет Zig(я никогда про него не слышал).

В этом есть доля истины. Rust это скорей замена для C++. Хотя, конечно, никто не запрещает и C заменять. Но Zig и вправду концептуально ближе к замене C, чем Rust. Хотя язык крайне молодой и экспериментальный, но кое-что уже и на нём написано.

И с каких пор C теперь не в почёте?

С это уникальный язык. Лично мне он нравится, т.к. мне плевать на безопасность и прочую мишуру. Меня не штрафуют за баги и не платят премии за отсутствие багов. Да и в принципе я просто стараюсь не писать код с багами и всё. В своём последнем проекте на несколько десятков тысяч строк кода, я не нашёл ни одного бага, связанного с неправильной работой с памятью. Вот один баг нашёл буквально на днях - там чисто логический баг, один флажок сбрасывал не в том месте.

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

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от windows10

Ограничения в работе со строками

А их тупо нет в си. Всё просто: нет строк и нет ограничений при работе с ними. Выкуси =P

ограничения в работе с памятью

И именно поэтому не стихают новости о том, что в очередной программе нашли очередную сишную дырень уязвимось, связанную с доступом за пределы буфера :)

ограничения в работе с массивами

Тут тоже самое: ты можешь свободно получить доступ к любому элементу массива, даже если этот элемент находится за границей этого самого массива! Как тебе такое? xD

u5er ★★★
()
Ответ на: комментарий от seiken

Питон ещё больше.

python3 и python2 — два разных языка.

thunar ★★★★★
()

Си убийца Ассемблер, Си++ убийца Си, Руст убийца Си++, Зиг убийца Руст
дело раскрыто

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 2)
Ответ на: комментарий от i-rinat

Не связано напрямую, но 8 ГиБ это практически минимальное количество ОЗУ, которое можно поставить в современный настольный компьютер. Никогда не видел в продаже плашек DDR5 объёмом меньше 8 ГиБ. Похоже, их даже не выпускают.

DDR3 по-прежнему пользуются спросом. А ноут с 8 Гб я прекратил использовать потому, что надоело менять кулеры.

question4 ★★★★★
()
Ответ на: комментарий от lenin386

в майнинговвх программах

Частный случай криптографии, которая регулярно пишется на ассемблере, и не от хорошей жизни. OpenSSL, подсистема crypto ядра Linux в пример.

Еще можно вспомнить FFmpeg. Также ассемблер применяется для достижения того, что нельзя добиться средствами языка. В пример приведу Boost.Context, используемый для реализации симметричных (в языке асимметричные!) корутин в Boost.Coroutine.

Siborgium ★★★★★
()
Ответ на: комментарий от Siborgium

асм != машкод

критические места тюнят видя выхлоп бинаре

и часто кодовые вставки уже в опкодах цели - когда реальне массовое

qulinxao3 ★☆
()
Ответ на: комментарий от anc

Потому что это торговая марка, принадлежащая вери биг боссам.

sparkie ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)