LINUX.ORG.RU

В стандарт C предложено внести лямбды и defer из golang

 , ,


5

6

Привет, ЛОР!

Я тут тебе немного покушать принёс. Как ты, наверное знаешь, не за горами выход нового стандарта языка C – C23. Среди прочих вкусностей, таких как лямбды в стиле C++, в этот стандарт предложено добавить механизм defer, аналогичный существующему в языке Go.

Ссылка на предложение: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm

В случае, если этот стандарт будет принят, будет возможно написание вот такого кода:

p = malloc(N);
defer { free(p); }

Где аргументом оператора defer является анонимная функция. Так же возможны более сложные варианты использования:

enum { initial = 16, };
double buffer[initial] = { 0 };
...
size_t elements = 0;
double* q = buffer;
defer [orig = q, &q]{ if (orig != q) { free(q); }};
...
// increase elements somehow
...
// adjust the buffer
if (elements > initial) {
    double* pp = (q == buffer) ? malloc(sizeof(double[elements])) : realloc(q, sizeof(double[elements]));
    if (!pp) return EXIT_FAILURE;
    q = pp;
}
...

Учитывая всё это, скоро в C больше не будет нужно использовать goto вообще нигде, даже для очистки ресурсов при ошибке. Так заживём, ЛОР!

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

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

Владимир

anonymous
()
Ответ на: комментарий от Stanson

да, я когда-то давно, когда это ещё только начиналось, общалась с разработчиками i2p, но тогда там был ещё бардак, не было никакого описания и писать было нечего. я не вдавалась в подробности, что там в деталях, но всяких туннельных протоколов навалом и я не понимаю смысл городить ещё один вид VPN'ов. и уж тем более на жабе.

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

с матриксом, кстати, то же самое. я не понимаю, в чём был смысл его разработки. чем он лучше других, уже существующих протоколов? чего авторы хотели достичь этим проектом? в чём разница с тем же XMPP, например. насколько я понимаю, там разница только в том, что это json. но это фигня вообще. то есть, нет рационального объяснения, есть только сам софт. причём с одного УГ они его переписали на другое, но он всё равно жрёт ресурсы и тормозит. что это и зачем оно - это загадка. страшнее попсового серверного ПО сейчас только клиентское. там вообще жуть и мрак. приложения долбят сеть, как потерпевшие. каждая говёшка на спайфоне создаёт трафик, который чуть ли не виден из космоса. а юзеры даже не понимают, что это ненормально. и эти клиенты окончательно добивают блоатварь, которая крутится на серверах. так что одно другого стоит. но всё это печально, потому что весь этот шлак убивает сети. и в результате тормозит всё. я когда полезла в протоколы Федивёрса, я была поражена тем, сколько чудовищно тупого и абсолютно ненужного трафика там ходит. и это просто результат кривого софта. но если бы софт был не кривой, то по моим прикидкам, трафик снизился бы раз в 10 как минимум. и такое сейчас везде.

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

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

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

у кого-то задницу рвало

Признаться, было такое и со мной … Но любовь зла …

C'est La Vie

Владимир

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

КозаБараны = ( Коза / Бараны), 5;

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

Опять таки, это всего лишь предложение и не в чем не настаиваю … ``` Тех кто «не в теме» просьба не отвечать …


Кстати точность результата это и "фиксированная арифметика".  
В Си конечно можно добиться того, чтобы была поддержка "фиксированной арифметики", но ИМХНО этот функционал можно возложить на компилятор ...

PS: Для меня это не вопрос, но может быть кому-то такой синтаксис и упростил немного код.

Владимир

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

Эээээээээээ, понял!

В этом треде трешка Си-шников, а остальные для

ПОБОЛТАТЬ И ПОХАМИТЬ ...

PS: Си-шникам мое предложение НЕ АКТУАЛЬНО! …

ВОТ И ОБСУДИЛИ! ...

Владимир

anonymous
()
Ответ на: комментарий от Stanson

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

Зачем чтобы сказать себе xmpp-клиент, который память не портит -_-

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

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

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

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

Зачем чтобы сказать себе xmpp-клиент, который память не портит -_-

И купить новый девайс в который это жирное и тормозное поделие влезет. Всё ради того, чтобы в каком-то дико невероятном случае не попортилась память, причём без каких-либо последствий. Последствий никаких нет, но это «небезопасно». Что-то мне это очень сильно напоминает. А, ну да, коронабесие же. На всякий случай непременно нужно устроить полную жопу, причём всем подряд. Ради безопасности же.

Очень похоже что хипстерские язычки это вообще часть намного более глобальной повесточки. Ради абстрактной «безопасности» нужно всех заставить жрать говно и платить корпорациям. И ведь весь хайп и активный маркетинг этих язычков появился синхронно со всем остальным говнищем.

Вот ведь как всё просто, оказывается. :)

Можно даже проверить корреляцию любви к «безопасным» язычкам с любовью к общественному транспорту, использованием зондов от FAANG, эколожеством, коронабесием и всем прочим. Впрочем, и так всё понятно. :)

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

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

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

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

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

И ведь весь хайп и активный маркетинг этих язычков появился синхронно со всем остальным говнищем.

Жабе вон сто лет в обед. Такая же безопасная серебряная бритва своего времени. «Безопасность» во все времена хорошо продается. Уж очень человеки за свою жопу трясутся.

bread
()
Ответ на: комментарий от Iron_Bug

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

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

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

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

Для меня это не проблема.

Нет, и хорошо …

Это обсуждение ... 

Владимир

anonymous
()
Ответ на: комментарий от fsb4000

ненависть к программистам на

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

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

Ну это правильно, от программистов на ниче хорошего ждать не приходятся.

Шутка

Согласен с вами!

Они СОБАКИ такие ЗАНОСЧИВЫЕ ...

Это профессиональное НЕДОМОГАНИЕ И НЕДЕРЖАНИЕ! …

Владимир

anonymous
()
Ответ на: комментарий от bread

от программистов на ниче хорошего ждать не приходятся

Сказал программист на меловой доске? Или на листочке на каком-то псевдокоде?

Любой программист, это програмист на.

Это не исключает того что человек знает 2 или 3 языка.

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

Жабе вон сто лет в обед.

Санки, кстати, не рекламировали жабку именно как безопасную, они рекламировали её как переносимую и энтерпрайзную. А Гослинг вообще думал что это язычок для однокристалок в кофеварках, поэтому, кстати, в логотипе чашка с кофе. Жаба апплеты именно так и проникли в веб и браузеры, из-за типа переносимости, потом, правда, оказалось что это совсем не безопасно, и жабоапплеты теперь можно найти только в каких-нибудь древних свитчах, и чтобы ими воспользоваться придётся искать какой-нибудь древний нетшкаф. Или можно вспомнить мобильную жабу, которая вообще ни с какой стороны не была безопасной, с неё же и началась история вирусов для телефонов.

А вот именно про безопасность жабы заговорили аккурат во времена появления всяких Agenda NNNN, активизации эколожества, попыток ВОЗ организовать фейковые пандемии и всего такого. Как раз конец 2000х - начало 2010х. В это же время появляются и всякие «безопасные» язычки, включая rust, golang и т.п. И на ЛОРе резко активизируются нелюбители сишечки.

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

Жаба апплеты и

Какой же я, …

Вот вспомнил Ялту 1999 года.
Все купаются, а я лежу на пляже и мануал о том как апплеты разрабатывать ЧИТАЮ.

М-да …

Владимир

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

Все купаются, а я лежу на пляже и мануал о том как апплеты разрабатывать ЧИТАЮ.

А в море голышом плещется юный ШУЛЬМАН.

ГЛАЗ НЕ ОТОРВАТЬ ОТ ЭТОЙ КРАСОТЫ ...

Владимир

anonymous
()
Ответ на: комментарий от Stanson

Жаба апплеты

Мда, это я не очень удачно набросил про жабу. Лучше было микрософт вспомнить с их «managed» кодом. Хотя и там больше напирали на удобство. Конечно до осьминожьего раста, где готовы раком ползать во имя безопасности, всем предшественникам далеко.

bread
()
Ответ на: комментарий от Iron_Bug

и кто же тебе «портит память»?

@Stanson память портит.

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

Если для тебя проблемы чтения с ФС неизвестные, то в твоей квалификации у меня тоже сомнения. Стасона заело на отвалившемся диске, но ведь это же не единственная проблема, ведущая к ошибками чтения. Вы про T10 PI слышали, надеюсь?

anonymous
()

Какой же классный наброс получился! Я доволен. Тут и неспособность прочитать стандарт языка, на котором пишешь, и отказ перестать срать мимо буфера (привет Stanson!), и апелляция к эколожцам, и вообще всё. Это один из моих лучших вбросов, честно. Я очень горд собой :DDD

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

Любой программист, это програмист на.

«На» зависит от задачи и конъюнктуры. А вот какой-нибудь «программист на питоне» в вакууме это диагноз.

bread
()
Ответ на: комментарий от Iron_Bug

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

Ну вот @Stanson без костылей подняться не смог, и по пути насрал мимо буфера.

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

Какой вы безотказный, Владимир.

Владимир.

anonymous
()
Ответ на: комментарий от Iron_Bug

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

аналогия в корне неверна

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

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

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

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

Алсо станки с одноразовыми лезвиями рулят и педалят.

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

Блин, да к женщине и требований таких нет, анон. Пользуйся одноразовыми станками.

Владимир.

anonymous
()
Ответ на: комментарий от bread

«На» зависит от задачи и конъюнктуры.

  • у сишника - не зависит, ему раст или джаву дай - он всё в ансейфы обернёт из-за сомнительного прироста производительности на 0.488%

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

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

Тут, скорее, можно придумать опасную и электрическую бритвы

Не нужно. Есть топор. Заодно и дрова наколешь, и курицу зарубишь для супа. Бритву придумали ламерюги.

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

Не знать вообще как шайтан-машина работает, это тоже сомнительная доблесть.

а забивать вместо предметной области свой мозг знаниями того, что скорее всего не понадобится, а если и понадобится, то там мизерная часть от того, и это можно освоить on demand, это какая доблесть?

anonymous
()
Ответ на: комментарий от bread

Не нужно. Есть топор. Заодно и дрова наколешь, и курицу зарубишь для супа. Бритву придумали ламерюги.

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

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

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

Не ищи оправдание своему страху в рационализме. Писать на сишечке тема: лучшие операционки, от эмбеда до мейнфреймов, написаны на сишке. Лучшие либы написаны на сишке, они оттестированы от и до, на различных архитектурах, под разной нагрузкой, в различных средах. Это лучшее что есть, всё остальное – детский сад.

anonymous
()
Ответ на: комментарий от Stanson

с любовью к общественному транспорту

Вы имеете что-то против трамваев?

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

Не ищи оправдание своему страху в рационализме.

да какой страх? скорее презрение и сожаление, что индустрия уже лет 40 катится в СГ: C, Юниксы, потомки ихние…

anonymous
()
Ответ на: комментарий от BceM_IIpuBeT

Я только не понял, как ты собрался испортить стэк массивом из кучи?

Код прочитай ещё раз. Там буквально.

int ret;
char buf[BUFLEN];
...
ret = read(...);
buf[ret] = 0;

Где ты кучу видишь?

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

read() при фейле вернёт -1. Получается buf[-1]=0. Что там перед buf будет – хер его знает, потому что никто не гарантирует порядок расположения автоматических переменных в памяти. Я прогонял этот кусок у себя и у меня затирался байт в одном из указателей, объявленных по соседству. Что уже треш. Но может, например, и стек гард перетереться, после чего при выходе из функции прилетит SIGABRT.

Плюс, у чувака в буфере будет строка без \0 в конце. Сам знаешь, чем это чревато.

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

Произведем нормализацию

Шо ты несёшь? Там надо просто проверку if(ret < 0) { log("READ FAILED OLOLOLO UPYACHKA"); return; } сунуть.

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

Ну ок. Произведем нормализацию ret к [0, max] и что это даст?

Корректно работающую программу?

anonymous
()
Ответ на: комментарий от hateyoufeel

Там надо просто проверку if(ret < 0) { log(«READ FAILED OLOLOLO UPYACHKA»); return; } сунуть.

а куда логировать-то?

anonymous
()
Ответ на: комментарий от hateyoufeel

Ты понимаешь, что если read вернул ошибку после открытия НА ЧТЕНИЕ(буферизацию учитывай тоже), то проблема c buf[-1] это последнее, что тебя будет волновать.

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

Ты понимаешь, что если read вернул ошибку после открытия НА ЧТЕНИЕ(буферизацию учитывай тоже), то проблема c buf[-1] это последнее, что тебя будет волновать.

Нет. Ты считаешь, что при возврате -1 из read() корректное поведение – это обосрать стек и выпасть с сегфолтом? Вот тебе тупой сценарий, где может -1 выпасть: прога запущена на компе с медленным диском/флешкой, после вызова read() прилетел какой-нибудь сигнал программе, read() вернулся с -1 и EINTR в errno.

Валидный сценарий? Вот и я думаю, что валидный.

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