LINUX.ORG.RU

defer в C быть!

 ,


0

9

Привет, ЛОР!

Как я писал три года назад, в стандарт языка Си было предложено добавить выражение defer, выполняющее функцию или блок кода по выходу из области видимости, где оно было объявлено.

На днях данное предложение получило официальный статус и, скорее всего, defer появится в будущем стандарте C2y.

При этом, defer почти наверняка не будет добавлен в C++, так как его использование будет конфликтовать с другими частями этого языка.

Ссылка на пост в блоге автора: https://thephd.dev/c2y-the-defer-technical-specification-its-time-go-go-go

Спецификация: https://thephd.dev/_vendor/future_cxx/technical%20specification/C%20-%20defer/C%20-%20defer%20Technical%20Specification.pdf

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

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

Для тебя вопрос «как много багов в среднем находят в твоём коде из расчёта на 1000 строк и как много из них связаны с неопределённым поведением» является тупым? Потому что это на самом деле очень важный вопрос.

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

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

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

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

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

на Си я могу писать вообще не напрягаясь. а все твои проблемы с ним проистекают от твоего незнания и неопытности, а не от какой-то мифической «сложности» или «небезопасности» Си.

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

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

lol

lmao even

все твои проблемы с ним проистекают от твоего незнания и неопытности, а не от какой-то мифической «сложности» или «небезопасности» Си.

Это не мои проблемы. CVE – это проблемы всего человечества. Ну или той его части, которая пользуется поражённым софтом. Например, лялексом.

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

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

типически я пишу на с++ и слегонца на голанге, но вообще я широкого спектра.

на чистом си не пишу, потому что там неймспейсов и классов нет. добавили бы модули, и классы, наверное писал бы на нем.

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

хы, а я бы писала на плюсах, если бы ООП из него убрали нафиг :) считаю его бесполезным теоретическим УГ, абсолютно ненужным на практике. но каждому своё.

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

и чего ты ржёшь? ты дорасти до такого уровня сначала.

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

вот когда ты научишься писать такой софт, тогда и поговорим.

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

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

и чего ты ржёшь? ты дорасти до такого уровня сначала.

Над твоим самомнением ржу. Это и правда забавно.

вот когда ты научишься писать такой софт, тогда и поговорим.

Когда всё человечество научится, хочешь сказать? Потому что дыр в коде на Си находят очень много. Некоторые даже из поиска дыр в сишном коде профессию делают.

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

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

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

Пишу на C++, но не использую в нём: class, std, STL, template, …
Своё crt и подсистема управления динамическими переменными и объектами любой сложности.

Что такое к примеру динамический объект?

Возьмём код LibreOffice.
В нём в исходниках сотни структур, используемых для работы скажем с Excel.
У меня их в исходном коде нет.
Используются метаданные Excel о которых компилятоа ничего не знает.
Это структуры необходимы для работы с Excel.
Вручную эти метаданные не создавал.
Имеется API, которое анализирует xml файлы из xlsx и создаёт на их лснове метаданные автоматически.
При открытии xlsx, программа создаёт динамический объект согласно метаданных и в него грузbтс данные из Excel.

Надеюсь понятно рассказал, что такое подсистема управления динамическими объектами?

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

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

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

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

Это называется обьектно-ориентрованные базы данных.

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

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

То же самое вы можете сказать разработчикам объектно-ориентированных баз.
Поругать кого-то вовсе не сложно.

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

тщетно набрасывать на вентилятор в попытках её очернить

Типа, вагона CVE для каждого известного проекта на Си недостаточно для её очернения?

Серьёзно, сходи хотя бы сюда на opennet. Там половина дыр, за которые выплатили деньги, это чисто сишечные проблемы: use-after-free, переполнение буфера, неинициализированные переменные и подобное. Мне кажется, это достаточно для очернения.

с такой упорной зацикленностью на этой цели это уже смахивает на диагноз.

Я просто вбрасываю на ЛОР. Ты ведёшься, мне смешно, я друзьяшкам скидываю. Видишь? Все при деле!

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

Поругать кого-то вовсе не сложно.

причем тут ругать? просто предупреждаю о гаражном велосипедостроении.

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

а не просто так - чик чик и готова «система».

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

Вы мне Америку не открыли.
Или думаете не разбирался с их архитектурой.
Что у вас за манера такая считать, что вокруг все дураки и на коленке ведут разработку ничего не зная?

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

Что у вас за манера такая считать, что вокруг все дураки и на коленке ведут разработку ничего не зная?

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

это все равно что разработать космическую ракету в гараже и улететь на луну.

просто потраченное время итак короткой жизни.

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

Надеюсь понятно рассказал, что такое подсистема управления динамическими объектами?

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

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

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

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

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

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

Ой такую простыню накатал из прошлых разработок и нечайно всё удалил.
Ныне то что разрабатываю на пару порядков лучше …

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

это бывает. я если пишу большой текст, то ctrl-a, ctrl-c иногда нажимаю, чтобы не потерялось вдруг при нажатии не той кнопки :)

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

Рад был побеседовать с разработчиком.
А вот с форумом закруглюсь однозначно.
Нет желания вести разговоры о defer и иной …

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

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

а что за софтинки такие васянские(с примерами)? они может и нужны… но их в природе, достаточного качества, нет.

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

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

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

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

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

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

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

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

вот я сделаю быстрый сервер и вроде бы хорошо.

мало что ли «быстрых серверов» на свете-то? их на гитхабе сотни и тыщи. и требования непонятны - что значит быстрый?

а я не хочу давать зловредам инструмент для вредительства в сети. и вот эта дилемма мучает меня больше всего остального

если им надо - они сами его напишут. ну не будет АНБ сша воровать каш код.

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

там это некий блок что исполнится после перехвата исключения и его обработки(или необработки).

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

идея примерно похожа

Чего это примерно? defer в случае исключения срабатывать не обязан, или в чём разница-то?

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

я вот хочу сделать сервер и клиент для fediverse. но такие, чтобы шустрые и жрали мало ресурсов.

Как называется твой форум для обсуждения этого в Retroshare?

я и не тороплюсь никуда

Технологии какие? Си/С++? Gtk/Qt?

Весь fediverse проклят, потому что требует доменных имён для сайтов. А в I2P нет уверенности, что он (fediverse) работает (и там меньше людей).

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

Чего это примерно? defer в случае исключения срабатывать не обязан, или в чём разница-то?

в си нет исключений. дефер - это просто блок кода, куда делается джамп, при попытке выйти из блока, например через break или return.

зачем для объяснения(или пояснения) «просто джампа» приплетать исключния - непонятно. исключения - довольно сложны в реализации и стоят лишнего кода и лишних телодвижений во время исполнения.

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

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

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

но может, настало время её реанимировать. собрать новую версию и попробовать запустить через проксю.

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

Технологии какие? Си/С++? Gtk/Qt?

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

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

с протоколом tor, а сейчас с ним какбэ вообще проблемно

30 лет опыта работы с сетями и проблема запилить тор? что-то тут не сходится, но пока не могу понять что

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

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

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

Вообще, можно вместо отдельной фунции использовать просто блок.

Но это надо немножно знать Си знать и думать почаще, с чем, у сишников есть трудности

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

в си нет исключений

Есть. Могут быть библиотеки, которые вызывают другие библиотеки, а те снизу выбрасывают исключения и это всё проходит насквозь.

«GCC uses DWARF call frame information to unwind the stack. This information includes instructions for how to restore registers and the stack pointer at each stack frame.»

«GCC uses .eh_frame and .gcc_except_table sections in the ELF binary to store information about stack frames and exception handling. The libgcc library interprets this information during stack unwinding.»

https://stackoverflow.com/questions/26300819/why-gcc-compiled-c-program-needs-eh-frame-section

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

но я давно туда не лазила

Вот и с твоей платформой будет то же самое (никто не будет ей пользоваться). Потому что сейчас все люди сидят в телеграме, и общаются там с ботами, написанными через Bot API.

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

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

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

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

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

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

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

tor … уже давно работает на множестве узлов

Вот именно, и большинство этих узлов запущено в АНБ. У них даже исследования проводились по отслеживанию именно TOR, а про I2P такого слышно не было.

не могу сказать, насколько он жив

А он и не жив. Слава российскому DPI.

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

Есть. Могут быть библиотеки, которые вызывают другие библиотеки, а те снизу выбрасывают исключения и это всё проходит насквозь.

это нужно для транспорта с++ эксепшенов через сишный код. к самому си, как к языку, это не относится.

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

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

(gcc extension) The -fexceptions flag enables exception support in C code.
-fno-exceptions flag disables exception handling

https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_exceptions.html#intro.using.exception.compat

«C language code that is expecting to interoperate with C++ should be compiled with -fexceptions. This will make debugging a C language function called as part of C++-induced stack unwinding possible.»

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

«For GNU systems, all appropriate parts of the GNU C library are already compiled with -fexceptions.»

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

C language code that is expecting to interoperate with C++ should be compiled with -fexceptions. This will make debugging a C language function called as part of C++-induced stack unwinding possible

написано ж черным по-белому - ДЛЯ взаимодействия си кода с с++ кодом. От себя добавлю - С++ кодом, использующим исключения.

Далее - «это сделает раскрутку стека си функции возможной». Тут нет слов про использование исключений в си. Без плюсов эта фича вообще не нужна.

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

я бы писала на плюсах

А это не твои слова:

Dig in crossplatform C++ programming

?

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

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

А Social Networks Are Crap, написанный на Си, видела? Тоже неудовлетворителен?

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

Ещё один анонимус, который не отличает семантику языка от генерируемого машинного кода? На SQL лучше не смотри тогда, пиши выборку из таблиц на Си.

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

Регистрант, который за деревьями леса не видит. Испугался asm кода? А мог бы увидеть, что дергаются rust-функции Iterator, StepBy.

Семантика for - это вызов next у итератора.

A..B - создает объект-итератор trait Iterator

step_by - это функция trait StepBy, которая возвращает итератор.

И судя по документации trait StepBy появился только в версии 1.28, Не известно, когда стабилизировали.

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

мог бы увидеть, что дергаются rust-функции

И какой вывод из этого? Мы обсуждаем возможность простого написания цикла от a до b, раст и бейсик с этим справляются. В Си, как мы увидели, даже сеньоры с 30-летним стажем не могут с первого раза написать такое. Что при этом происходит под капотом совершенно не важно.

unC0Rr ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)