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

Имбирная Ведьмочка
> Но почему-то типичным адептам скобочек такое не нравится, начинают, наоборот,
> говорить что-то типа "скобочек слишком мало,
Лисп им в руки. :)
P.S. Из одного комментария к статье узнал, что возможность "поворота" (ротации) переменной появилась аж в C++ 20. :)
Имбирная Ведьмочка
> я концы у блоков не вижу
вот видишь уже как минимум одну потерю ты назвал. И на все твои остальные "фичи" также можно привести доводы чего мы лишаемся.
1 frag / 2 deaths
> Я про это:
снова дет. сад? "нет тут мы не хотим видеть проблемы, вон взгляните лучше туда!"
Создатели некоторых языков программирования.
https://www.mindomo.com/ru/mindmap/mind-map-48ec0244c5db40d88bcbc7f235ac7e06
Бросается в глаза, что часть из них с бородой, а другие нет (исключив Кобол женщину)
т.е. вероятно наличие бороды у создателя языка как то отображается на свойствах самого языка. :)
1 frag / 2 deaths
> Такая конструкция читается слева направо без долбанутых спиралек, но почему
> авторы сей до неё не додумались?
Про это ж уже обсуждали здесь на форуме. Объявление переменной в Си - процесс полностью обратный тому, как из этой переменной получилось бы значение самого левого типа с учетом применения "операций" строго в порядке приоритета.
Объявление указателя на функцию - то же самое, идешь от functptr, рассматривая всю сложную конструкцию с ним как выражение, применяя "операции" в порядке приоритета:
1). сначала разадресация указателя (поэтому * funcptr в скобках) - получаем саму функцию
2). затем применение к функции операции вызова - получаем значение с типом результата функции
приходя в конечном итоге к
ResultType выражение;
что уже по сути эквивалентно элементарному объявлению переменной.
Все любые более сложные конструкции (например, какой нибудь массив указателей на функции, или указатель на указатель на функцию) - абсолютно по той же схеме. Никакие спиральки тут не при чем.
=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
> бросается в глаза, что часть из них с бородой, а другие нет
Вот удивительно, люди бывают с бородой и без бороды!
Кстати, я разработчик своего языка и с бородой.
Panzerschrek[CN]
> Рассказывай, как ты до такого докатился и почему не пишешь на хотя-бы C++?
Если буду писать на С++ (и все будут делать также), то все его убийцы так никогда и не взлетят. Надо дать им шанс.
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
> но почему-то про это нет бомбежа
Потомучто ливают из С раньше, чем начинают юзать указатели на функцию. А те кто остаются просто не имеют выбора, и бомбить нет смысла.
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 curThe 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;
}KPG
> Ты ещё не всё видел. :)
> В Форт и локальных переменных нет для объявления.
JS-style?
KPG
> появилась аж в C++ 20.
Неужели и в буууусте такого нет?
kipar
> Если буду писать на С++ (и все будут делать также), то все его убийцы так
> никогда и не взлетят.
Взлетят, когда кто-то всё-таки сможет сделать язык как С++ но без "наследия предков". Еслиб раст был оопшным, то вполне мог бы и потеснить C++.
Aroch
> вот видишь уже как минимум одну потерю ты назвал. И на все твои остальные
> "фичи" также можно привести доводы чего мы лишаемся.
Эти же доводы говорят в пользу того, чтобы после каждой закрывающей скобочки дописывать, что именно она закрывает - end while, end for i, end for j, end void make_kukarek(), end class pitukh. Ведь иначе мы не видим, к чему именно она относится. Но почему-то адепты си-синтаксиса так не делают. Почему-то, круглые скобки после ифа - это очень важно, без них как без рук; точка с запятой - это ещё важнее, без неё как без головы; а вот аннотация к концу блока - это не важно и печатные символы дороже. Почему так, как мы решаем, какую информацию нужно дублировать, а какую - нет?
samrrr
> А бывает так, что хочешь пиши, хочешь не пиши
Да, бывает.
kipar
> Если буду писать на С++ (и все будут делать также), то все его убийцы так никогда и не взлетят. Надо дать им шанс.
То ли дело на голом Си писать. Сразу шанс его убийцам даёшь!
На самом деле ты просто страдаешь из-за кривого языка, не имея никакой выгоды от этого.
Имбирная Ведьмочка
> Тип результата функции теряется посреди каши. Это функция, которая возвращает
> указатель на воид, или указатель на функцию, которая возвращает воид?
Эээээ, да, неоднозначность тут есть...
Aroch
> снова дет. сад? "нет тут мы не хотим видеть проблемы, вон взгляните лучше
> туда!"
Это называется видеть соринку в чужом глазу.
samrrr
> Можешь притянуть rust и C++, смысл от этого не поменяется.
Не поменяется, С и С++ имеют разное назначение
Panzerschrek[CN]
> Последний раз, как я его смотрел, там вручную память выделялась и
> освобождалась. Так что в помойку.
Для замены Си нормально
samrrr
> Еслиб раст был оопшным, то вполне мог бы и потеснить C++.
ООП не нужно
Panzerschrek[CN]
> Весьма правильная статья.
> Вообще, мне философия Си видится ущербной - этакий язык, где даже сложение
> толком не определено и от платформы к платформе может давать разные результаты.
да ну ... ты только сейчас прозрел?
1 frag / 2 deaths
> Не поменяется, С и С++ имеют разное назначение
Дану... И что же С умеет, чего С++ не могёт?
Вот смотри В C++, C#, Rust есть std::vector а в Си нету. Вообще.
1 frag / 2 deaths
> ООП не нужно
Что по конструктору/деструктору?
Тема в архиве.