ФлеймФорумПрограммирование

Почему Си должен умереть (храбростийность) (3 стр)

Страницы: 1 2 3 4 556 Следующая »
#30
2:50, 5 дек 2021

samrrr
> Да я и фрее паскаль видел. Только переходить на него, после того как в си
> увидел возможность
> -не объявлять временные переменные в начале программы
Ты ещё не всё видел. :)
В Форт и локальных переменных нет для объявления.

Aroch
> Понятно что в программировании скорость ввода не сильно важна, но усталость
> всё равно накапливается от лишних действий,
:)
( то, что на листинге ниже в круглых скобках - это просто джентельменский комментарий входных данных на стеке, а слово TO в этом фрагменте кода записывает их в переменные программы)
  Изображение

Quackery - CRC-32

Имбирная Ведьмочка
> Но почему-то типичным адептам скобочек такое не нравится, начинают, наоборот,
> говорить что-то типа "скобочек слишком мало,
Лисп им в руки. :)


P.S. Из одного комментария к статье узнал, что возможность "поворота" (ротации) переменной появилась аж в C++ 20. :)

#31
3:22, 5 дек 2021

Имбирная Ведьмочка
> я концы у блоков не вижу
вот видишь уже как минимум одну потерю ты назвал. И на все твои остальные "фичи" также можно привести доводы чего мы лишаемся.
1 frag / 2 deaths
> Я про это:
снова дет. сад? "нет тут мы не хотим видеть проблемы, вон взгляните лучше туда!"

#32
3:28, 5 дек 2021

Создатели некоторых языков программирования.
https://www.mindomo.com/ru/mindmap/mind-map-48ec0244c5db40d88bcbc7f235ac7e06

Бросается в глаза, что часть из них с бородой, а другие нет (исключив Кобол женщину)
т.е. вероятно наличие бороды у создателя языка как то отображается на свойствах самого языка. :)

#33
7:01, 5 дек 2021

1 frag / 2 deaths
> Такая конструкция читается слева направо без долбанутых спиралек, но почему
> авторы сей до неё не додумались?

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

Объявление указателя на функцию - то же самое, идешь от functptr, рассматривая всю сложную конструкцию с ним как выражение, применяя "операции" в порядке приоритета:

1). сначала разадресация указателя (поэтому * funcptr в скобках) - получаем саму функцию
2). затем применение к функции операции вызова - получаем значение с типом результата функции

приходя в конечном итоге к

ResultType выражение;

что уже по сути эквивалентно элементарному объявлению переменной.

Все любые более сложные конструкции (например, какой нибудь массив указателей на функции, или указатель на указатель на функцию) - абсолютно по той же схеме. Никакие спиральки тут не при чем.

#34
9:53, 5 дек 2021

=A=L=X=
> Что характерно критикуются не плюсы, а самый что ни на есть Си Кернигана и
> Ритчи со всеми обновками и модными пунктами стандарта который чихнуть боится,
> лишь бы не заявить что какая то операция не является UB
Весьма правильная статья.
Вообще, мне философия Си видится ущербной - этакий язык, где даже сложение толком не определено и от платформы к платформе может давать разные результаты.
А UB в арифметических операциях это вообще ужас. Допустил переполнение знакового сложения? Всё, теперь твоя программа может потенциально запустить ядерные ракеты.

В Rust в этом плане всё намного лучше. Типы все имеют фиксированный размер (нет гаданий о размерах int/short), арифметические операции дают предсказуемый результат, UB заборот, даже в таких мутных случаях, как сдвиг на размер больший ширины типа и преобразование float в int с выходом за диапазон.
И что характерно, никто не жалуется, что там какая-то производительность потерялась от всей этой определённости. Если что-то и потерялось, то на уровне погрешности измерений.

Xunter
> Вот Zig повзрослеет и добъёт там
Последний раз, как я его смотрел, там вручную память выделялась и освобождалась. Так что в помойку.

true_bump
> Аккуратность - первое правило программиста
А ещё идеальные программисты блюют радугой и пердят бабочками.

1 frag / 2 deaths
> const * void (& const int, & [42] int) func_ptr;
До сих пор не могу это осилить, каждый раз гуглю.

kipar
> Пишу на Си на работе (для микроконтроллеров)
Держите его!
Рассказывай, как ты до такого докатился и почему не пишешь на хотя-бы C++?

KPG
> бросается в глаза, что часть из них с бородой, а другие нет
Вот удивительно, люди бывают с бородой и без бороды!
Кстати, я разработчик своего языка и с бородой.

#35
10:21, 5 дек 2021

Panzerschrek[CN]
> Рассказывай, как ты до такого докатился и почему не пишешь на хотя-бы C++?
Если буду писать на С++ (и все будут делать также), то все его убийцы так никогда и не взлетят. Надо дать им шанс.

#36
11:02, 5 дек 2021

Aroch
> например, скорости сборки
8 ядерный процессор поможет тебе. Ну или 50-100 ядерный если деньги есть.

1 frag / 2 deaths
> К тому же твои попытки притянуть сишарп и жабу говорят, что ты вообще не
> понимаешь, зачем нужен С
Можешь притянуть rust и C++, смысл от этого не поменяется.

1 frag / 2 deaths
> Реально на С? Лол?
Да да, как начнёт крашится, он расскажет полный путь файла при сборке, и в конце будет .c

1 frag / 2 deaths
> Вот в любом языке есть довольно много уродств
В C# их почти нет.

1 frag / 2 deaths
> Такая конструкция читается слева направо без долбанутых спиралек, но почему
> авторы сей до неё не додумались?
В C++ додумались.

using FunctionPtr = auto (*)(type1*, type2**, type3<type4&>) -> someStructureWithAWeirdName&;

1 frag / 2 deaths
> но почему-то про это нет бомбежа
Потомучто ливают из С раньше, чем начинают юзать указатели на функцию. А те кто остаются просто не имеют выбора, и бомбить нет смысла.

#37
11:10, 5 дек 2021

kipar
> и никакой WallWextra тебя не спасет.
С++ нужен и его vector.

kipar
> либо кресты, которые я принципиально не хочу использовать.
А чем тебе C++ неугодил?

Имбирная Ведьмочка
> А в пайтоне ещё меньше
А бывает так, что хочешь пиши, хочешь не пиши

dascript
Mandatory fibonacci samples

def fibR(n)
   if (n < 2)
       return n
   else
       return fibR(n - 1) + fibR(n - 2)

def fibI(n)
   var last = 0
   var cur = 1
   for i in range(0, n - 1)
       let tmp = cur
       cur += last
       last = tmp
   return cur

The same samples with curly brackets, for those who prefer this type of syntax

def fibR(n) {
    if (n < 2) {
        return n;
    } else {
        return fibR(n - 1) + fibR(n - 2);
    }
}
def fibI(n) {
    var last = 0;
    var cur = 1;
    for i in range(0, n-1); {
        let tmp = cur;
        cur += last;
        last = tmp;
    }
    return cur;
}
#38
11:20, 5 дек 2021

KPG
> Ты ещё не всё видел. :)
> В Форт и локальных переменных нет для объявления.
JS-style?

KPG
> появилась аж в C++ 20.
Неужели и в буууусте такого нет?

kipar
> Если буду писать на С++ (и все будут делать также), то все его убийцы так
> никогда и не взлетят.
Взлетят, когда кто-то всё-таки сможет сделать язык как С++ но без "наследия предков". Еслиб раст был оопшным, то вполне мог бы и потеснить C++.

#39
11:22, 5 дек 2021

Aroch
> вот видишь уже как минимум одну потерю ты назвал. И на все твои остальные
> "фичи" также можно привести доводы чего мы лишаемся.
Эти же доводы говорят в пользу того, чтобы после каждой закрывающей скобочки дописывать, что именно она закрывает - end while, end for i, end for j, end void make_kukarek(), end class pitukh. Ведь иначе мы не видим, к чему именно она относится. Но почему-то адепты си-синтаксиса так не делают. Почему-то, круглые скобки после ифа - это очень важно, без них как без рук; точка с запятой - это ещё важнее, без неё как без головы; а вот аннотация к концу блока - это не важно и печатные символы дороже. Почему так, как мы решаем, какую информацию нужно дублировать, а какую - нет?

samrrr
> А бывает так, что хочешь пиши, хочешь не пиши
Да, бывает.

#40
11:22, 5 дек 2021

kipar
> Если буду писать на С++ (и все будут делать также), то все его убийцы так никогда и не взлетят. Надо дать им шанс.
То ли дело на голом Си писать. Сразу шанс его убийцам даёшь!
На самом деле ты просто страдаешь из-за кривого языка, не имея никакой выгоды от этого.

#41
12:04, 5 дек 2021

Имбирная Ведьмочка
> Тип результата функции теряется посреди каши. Это функция, которая возвращает
> указатель на воид, или указатель на функцию, которая возвращает воид?

Эээээ, да, неоднозначность тут есть...

Aroch
> снова дет. сад? "нет тут мы не хотим видеть проблемы, вон взгляните лучше
> туда!"
Это называется видеть соринку в чужом глазу.

samrrr
> Можешь притянуть rust и C++, смысл от этого не поменяется.
Не поменяется, С и С++ имеют разное назначение

Panzerschrek[CN]
> Последний раз, как я его смотрел, там вручную память выделялась и
> освобождалась. Так что в помойку.
Для замены Си нормально

samrrr
> Еслиб раст был оопшным, то вполне мог бы и потеснить C++.
ООП не нужно

#42
12:21, 5 дек 2021

Panzerschrek[CN]
> Весьма правильная статья.
> Вообще, мне философия Си видится ущербной - этакий язык, где даже сложение
> толком не определено и от платформы к платформе может давать разные результаты.

да ну ... ты только сейчас прозрел?

#43
12:24, 5 дек 2021

1 frag / 2 deaths
> Не поменяется, С и С++ имеют разное назначение
Дану... И что же С умеет, чего С++ не могёт?

Вот смотри В C++, C#, Rust есть std::vector а в Си нету. Вообще.

#44
12:25, 5 дек 2021

1 frag / 2 deaths
> ООП не нужно
Что по конструктору/деструктору?

Страницы: 1 2 3 4 556 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.