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 вообще нигде, даже для очистки ресурсов при ошибке. Так заживём, ЛОР!

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

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

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

Но многим это заходит и они даже бабло лопатой гребут.

Пишут сишный код и запускают его на JVM? :) :) :)

Кто мешает программе записать имя файла в одну ячейку памяти и получить доступ к замапленной тушке файла в другом месте?

И как же JVM будет писать в ячейку настоящей памяти, причём определённую? Может как-нибудь уже стоит прочитать про JVM Instruction Set?

Тем не менее, работать такое будет.

Нет, не будет. Потому что у программы исполняющейся на JVM нет способа что-либо записать по какому-либо конкретному адресу процесса JVM. Среди инструкций JVM нет таких инструкций.

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

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

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

Потому что у программы исполняющейся на JVM нет способа что-либо записать по какому-либо конкретному адресу процесса JVM. Среди инструкций JVM нет таких инструкций.

Тебя обманули. Ищи sun.misc.Unsafe.

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

Ищи sun.misc.Unsafe.

Бгг. Вызываем нативный сишный код из программы на си скомпилированной для JVM. Зачем здесь прослойка из JVM?

Есть код на C который в итоге всё равно испольует нативный код на C. Зачем его вообще компилировать для JVM если его можно скомпилировать сразу в нативный код? Вы там в своей секте в упор не видите полного идиотизма и маразматичности вашего «решения»?

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

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

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

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

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

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

Ты прав, лучше программы от Stanson, которые работают до следующего вторника от Microsoft или апдейта Ubuntu, потому что Stanson доков не читает и завязываются на реализацию какой-то хуиты, которая изменится в ближайшем апдейте операционки.

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

Мне как-то нужно было пересобрать модик для майнкрафта, так вот, он собирался только с седьмой версией gradle! Что ж такое, чому JVM не помог?!

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

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

Вы хоть понимаете, что компьютеры они для того, чтобы что-то реально делать, а не чтобы крутить сколь угодно замечательный код, который, не имеет ни входных, ни выходных данных, потому что реальный вход и выход - это в 100% случаев unsafe, не по стандарту и вообще фу. Мультяшная поня такая, не жрёт, не какает и не возит. Зато красиво, да. Ну или денег отсыпают немеряно, «за безопасность» и «когнитивную толерантность».

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

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

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

потому что реальный вход и выход - это в 100% случаев unsafe, не по стандарту и вообще фу

Если у тебя вход – это unsafe, надевай презерватив. А чтобы не было фу, надо мыться.

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

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

Откуда такая ненависть к стандартам языков, а так же ко всему кроме C?

И из чего сделан такой вывод? Я спокойно отношусь к стандартам и скорее буду использовать стандартные фичи, нежели какие-то компиляторно-специфичные конструкции, но если стандарт мешает реализации, то он идёт нахрен. Мне плевать что какой-то недоделанный MSVC не умеет alloca, и если оно мне надо, то будет alloca. Мне плевать на чью-то идиосинкразию к адресам, и если мне надо взять по адресу 0xC0000010 адрес буфера, а по адресу 0xC0000020 его размер, я вообще не буду заморачиваться со стандартом и думать про всякий бред типа адрес не число, а напишу это всё так, как считаю нужным и удобным.

Сишечка не хаскель какой. Тут стандарт не догма, а всего лишь рекомендации.

Или анон там выше про тебя писал, когда имел ввиду поехавших ассемблерщиков?

Я ассемблер вообще не очень. Ассемблер ARM или MIPS хотя бы прикольный, ассемблер всяких <32 битных однокристалок тоже не напрягает, и может быть в каком-то случае я и напишу десяток-другой строк на них, а вот ассемблер x86 - отвратительная срань, которую я если и буду лепить, то исключительно если никакого другого выхода вообще нет.

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

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

Сишечка не хаскель какой. Тут стандарт не догма, а всего лишь рекомендации.

При том, что у Haskell нет стандарта как такового.

Ну да ладно. Я так и понял, что ты из тех говнокодеров, которые обильно обмазываются UB, а потом, когда после обновления GCC их код ломается, ломятся в багзиллу и орут, что разработчики компилятора – мудаки.

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

hateyoufeel ★★★★★
() автор топика

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

Зачем они в Си.
Какие алгоритмы упростятся?
Лямбды они больше похожи на то, что программист толком не умеет разработать хорошие алгоритмы и поэтому он как в свое время goto,
ТЯНЕТ лямбды где попало …

Что упростит «defer из golang» и не принесет ли он в Си не нужную абстракцию?

Си хорош тем, что он ПОНИМАЕТ /разработчики его конечно учат/ особенности архитектур CPU и избавляет разработчика он ПРИБИВАНИЯ МОЛОТКОМ кода к конкретной архитектуре CPU.

В целом Си предоставляет удобные операторы для кодирования алгоритмов …

Этот язык программирования чуть выше и не ХУЖЕ АССЕМБЛЕРА.   
Язык для СИСТЕМНОГО ПРОГРАММИРОВАНИЯ ...

У прикладных ЯП ДРУГИЕ ЗАДАЧИ …

Владимир

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

Удобные операторы? Кому в голову вообще пришло сделать разыменование указателя через префиксный оператор, в результате чего обращение к полю структуры через указатель превращается в невесть что: (*a).b ?

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

Удобные операторы? Кому в голову вообще пришло сделать разыменование указателя через префиксный оператор, в результате чего обращение к полю структуры через указатель превращается в невесть что: (*a).b ?

Алгоритмы от этого не страдают.
Мне ФИОЛЕТОВО … /может быть привык/

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

Алгоритмы от этого не страдают. Мне ФИОЛЕТОВО … /может быть привык/

Вообщем то был бы не против, если бы кто-то разработал язык системного программирования типа Си и не привнес в него ВСЯКУЮ МУТЬ И НЕ НУЖНЫЙ ТУМАН …

В Си конечно можно было бы синтаксис не много более удобный сделать, но не нужно тащить в него «ЧТОБЫ ОН БЫЛ ПОХОЖ».

Разработчики должны понимать, почему именно Си выбрали разработчики МНОГИХ ВЕЛИКОЛЕПНЫХ ПРОЕКТОВ …

И не нужно в Си ПРИВНОСИТЬ

ЭКПЕРИМЕНТЫ /которые сродни экстрементам/ ...

Владимир

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

Я так и понял, что ты из тех говнокодеров, которые обильно обмазываются UB, а потом, когда после обновления GCC их код ломается, ломятся в багзиллу и орут, что разработчики компилятора – мудаки.

Странно, никогда с таким не сталкивался. Даже какие-то древние мои поделия прекрасно собираются gcc 11.

Слышал о таком только от соблюдателей стандартов и любителей новомодных фич.

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

Тоже наверно любитель стандартов и новомодных фич. Нашли друг-друга, ничего удивительного.

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

Тоже наверно любитель стандартов и новомодных фич.

Да нет, скорее любитель «С как лучшего языка» и «стандарты идут лесом, на моём компиляторе это работает». А потом приходится вагоны UB извлекать.

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

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

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

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

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

а был бы ты девочкой, так ещё и жениться впридачу пообещал бы.

Ты же современный человек - женись так.

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

Ну а я о чём, пришлось аж отдельный оператор городить. В паскале же всё просто и логично в аналогичном случае. Разыменование a^, доступ к полю a.b, доступ к полю по ссылке на структуру - внезапно - a^.b

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

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

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

Ну а я о чём, пришлось аж отдельный оператор городить.

Хотели есть и съели Кука ...
anonymous
()

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

Шутка /серьезная/

Это все происки МАКАК.

Они Си НЕ ОСИЛИЛИ и им его нужно сделать похожим по функциональности на GO, Javascript, Python, …

И с УМНЫМ видом утверждают, что мол Си станет

СОВРЕМЕННЫМ! ...  
anonymous
()
Ответ на: комментарий от anonymous

Они Си НЕ ОСИЛИЛИ

Если уж обсуждать Си, то нужно самому себе задать вопрос «Какая функциональность нужна для ЯП, ориентированного на системное программирование?» и попробовать ответить на этот вопрос.

Беда в том, что МОДЕРНИСТЫ не понимают различие ЯП пригодных для системного программирования и ЯП ориентированных на создание проектов для /как бы это сказать/ решения предметных задач …

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

А потом приходится вагоны UB извлекать.

Вижу в вас родственную ДУШУ! Могу помочь вам С ИЗВЛЕЧЕНИЕМ.

Владимир

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

в Си всегда были указатели на функции. сделать функтор из указателя на функцию и указателя на параметр - вообще не проблема. тыщу лет так делали и никто не страдал.

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

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

не сишные традиции

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

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

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

anonymous
()

Пиздец, товарищи!

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

Единственный разум в этом говнюшнике из долбоебов, наркоманов и русофобов-мудераторов!

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

C++ не навоз, а мощный жилистый лопух

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

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

… и спившихся астрономов-говнокодеров.

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

Сишные традиции

Сишные традиции - это быть дегенератом, который не может сложить/вычитать три числа, что много раз показывали как Эдики, так и разработчики ядра Linux: https://www.opennet.ru/opennews/art.shtml?num=56556

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

так и разработчики ядра Linux: https://www.opennet.ru/opennews/art.shtml?num=56556

Лулз в том, что integer underflow может произойти в любом языке вообще. ЕМНИП в Rust добавили исключения при дебажной сборке, но до этого же ещё дойти надо.

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

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

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

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

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

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

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

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

с этим есть какая-то проблема?

А чо топорщиться-то сразу.

я не хочу

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

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.