LINUX.ORG.RU

C2x

 , , , ,


1

8

Что нужно добавить в новый стандарт языка Си, чтобы он был удобным, дружественным и мог конкурировать с современным Go? И почему язык Си по сути не развивается? Все эти C17 ничего толкового не привнесли, никакой тебе нормальной и удобной многопоточности, ни удобных новых структур данных, во многом Си остался в 98 и ничего не поменялось в лучшую сторону. Да и на поприще стандартных библиотек Си все как-то уныло, в большинстве дистрибутивов пихают старушку Glibc от GNU, не пора бы её “переписать” заменой, выкинув или оптимизировав лишнее с оглядкой на musl и всякие dietc? И при этом всё под MIT лицензией? И всё это с учётом LLVM и ARM, мобилок и 64 ядер в каждый дом 🏠

★★★★★
Ответ на: комментарий от andalevor

отсутствует во всех остальных языках

Слишком сильно про всех. Ну раз у меня такой размах. Любой язык не умеющий жить без рантайма уже не конкурент ни разу Си.

В си нихрена нет в том и суть. =) И это по своему прекрасно. Ничего «лишнего», всё «лишнее» пишется самостоятельно под конкретную задачу. Прозрачность. Вот и всё И куча весёлого UB =)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от byko3y

Он приводит, например, к тому, что ты не можешь работать с крестовым проектом на ноутбуке без интернета

Щито?

Индустрия отвечается просто: ну и ладно, докинем еще 50 ядер в билд-сервер, и будем работать как раньше.

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

annulen ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Любой язык не умеющий жить без рантайма уже не конкурент ни разу Си.

Т.е. Fortan вы считаете языком, требующим рантайма, а C нет? Да это юниксовый шовинизм!

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

Рантайм есть, зависимости от него нет.

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

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от annulen

:D Да ладно те. Я дедушку вообще не трогаю. И ваще Fortan + C = други. Дедан фортран долбит математику ему не до этого всего уже, а шкаляр си во дворе бегает от растишки и гошки, но он быстрее и бегать ему лавки нравки =) На скамейке сидят дишка,обжексишка и ещё кучка наблюдают пока-что.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от andalevor

Я не знаток раста, почему бы нет, но вернее больше да чем нет. Касаемо ПК то да и то только там где умеет жить LLVM касаемо совсем низкоуровневого вроде прошить экзотический кристалик с 512байт EPROOM наверное уже нет. Хотяяя, вон avr же вроде шьют https://docs.rs/avrd/0.1.2/avrd/index.html https://github.com/avr-rust . Жди знатоков тут они есть. Я могу херню сгородить и ваще я не программист ни разу :D

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от andalevor

стандарт С описывает свойства абстрактной машины, для которой программист пишет инструкции. инструкции программиста для абстрактной машины компилятор преобразует в инструкции для конкретного железа.

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

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

что касается ЯП не базирующихся на ВМ, их применение ограничено спектром реального оборудования, на которое могут быть перенесены свойства соответствующей абстрактной машины. в силу чрезвычайной простоты абстрактной машины С она может быть сравнительно легко перенесена на какое угодно железо.

именно поэтому нет заинтересованных в усложнении языка, путем привнесения в него фич и сахара, могущих повлиять на простоту реализации абстрактной машины на любом конкретном железе. нет желающих наступать себе на яйца.

olelookoe ★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Чё тут сложного? А как это должно выглядеть в норме тогда?

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

Вон ниже привели как это делалось в поцкале, в сто раз проще и понятнее. Да даже в переусложнённых плюсах это можно сделать гораздо понятнее:

std::array<std::function<void()>, SIZE> callbacks;

Это вообще не строки это просто поток байт и концом его является метка ‘\0’. Ну ладно, допустим в те года были бы прям строки строчные, прямо тип данных отдельный. А толку бы с него было сейчас?

Да я не об отдельном типе говорю, хоть это было бы и хорошо, а о неудачной организации. Использовать для строк также просто char*, но без \0 на конце, и везде явно передавать размер уже было бы гораздо лучше. А сейчас нужно везде учитывать этот @#$чий \0.

Теже строки, давай мы их сделаем человечными типа string srt = "привет " + «мир»; str = str + str;

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

Bimbo
()
Ответ на: комментарий от LINUX-ORG-RU

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

Bimbo
()
Ответ на: комментарий от annulen

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

Конечно же под обычными потребительскими персоналками имеется в виду простой 8-ядерный рузен, а никак не лаптоп с селероном, который эти 50 тыс строк будет компилировать 10 минут. Тем временем, именно на подобном ноуте я 8 лет назад работал с проектами на миллионы строк в Delphi.

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

примем для ясности что С - самый примитивный из всех ЯП высокого уровня. можем ли мы на его основе определить сущность «объект», например, без необходимости определения других, нижележащих сущностей, таких как public и private данные? методы? как насчет наследования? конструкторов и деструкторов? интерфейсов? наследования интерфейсов? считая, что промежуточные сущности (через которые мы определяем что же такое «объект») представляют один слой абстракции, определение сущности «объект» занимает второй этаж абстрактных определений (считая С нулевым).

исходя из этих соображений любой объектно ориентированный язык добавляет минимум два слоя абстракции.

вряд ли кто-то всерьез занимался (если вообще занимался) подсчетом слоев абстракции применительно к конкретному ЯП, но, поскольку принцип ясен, вы можете проделать эту работу самостоятельно )

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

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

https://micropython.org/

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

Ну ты же не пересобираешь проект с нуля каждый раз

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

Ну ты же не пересобираешь проект с нуля каждый раз
А на простом 8-ядерном рузене я неплохо работаю с проектом с миллионами строк

Это скорее называется «я привык», а не «неплохо». Если бы ты работал на системах, где от начала сборки до запуска отладки успеваешь разве что отхлебнуть чая, и это на сотнях тысяч строк - ты бы не привык и не писал бы так.

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

byko3y ★★★★
()
3 мая 2020 г.
Ответ на: комментарий от Bimbo

И программа будет выжирать всю память?! Или GC всё-таки придётся использовать?

Alexey0402
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.