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

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

GPU – один из примеров процессора, который программировать на Си нормально нельзя.

и продолжается наглое 4.2

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

GPU – один из примеров процессора, который программировать на Си нормально нельзя.

и продолжается наглое 4.2

Ударение на слове «нормально». В твоём примере с Doom утилизация GPU на уровне плинтуса. Как демка это круто. Для практических целей – лучше такое не делать.

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

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

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

детишки, клоуны с фейспалмом - это вы.

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

потому что вы тут отчаянно путаете Си с какими-то реализациями компилятора.

Не путаем. В стандарте языка английским по белому написано, что такое Undefined Behaviour и что такое Implementation-defined Behaviour. И определение из стандарта противоречит твоим словам тут.

даже после моих объяснений до вас не доходит

Твои пояснения – бред шизофреника.

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

В стандарте языка английским по белому написано, что такое Undefined Behaviour и что такое Implementation-defined Behaviour

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

я просто никогда не видел кода гениев си. куда ни посмотришь - фигня фигней.

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

GPU – один из примеров процессора, который программировать на Си нормально нельзя.

кхм.

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

Это бесполезно, не пытайтесь. Вы не сможете объяснить, а он не поймет, потому что вообще не ставит себе такой задачи.

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

Треды в стандартную библиотеку перетащили чтобы обеспечить переносимость многопоточного кода. Без тредов в стандарте многопоточная программа уже нарушает стандарт.
Только вот то, как это сделано не везде хорошо (например те же threadsafe статики и синхронизации повсюду в c++ stl)
В си же появление тредов в стандарте проблем не должно создавать, а лишь убирает неопределённости, связанные с многопоточными программами, реализация же c11threads зачастую является просто набором алиасов на pthreads.
Так же появились функции для работы с атомиками, что позволяет более гибко сообщить компилятору о способах доступа к ним, позволив сгенерировать более оптимальный код, чем при использовании volatile

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

я просто никогда не видел кода гениев си

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

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

Чисто на стандартном Си распараллеленную GPU программу конечно сложно написать, однако стандарт не запрещает номер задачи в воркгрупе передавать неким аргументом, либо реализовать параллелизм в стиле openmp
То, что Си для этого не предназначен - это уже другой вопрос. То, что doom использует только один поток на GPU - уже проблема не языка, а самого doom'а, инструментарий же, там используемый вполне позволяет создать и параллельную программу.

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

SDL, также пример хорошего кода.
Перевёл его правда на C++ и убрал из него штуе пятьдесят макросов и излишнюю типизацию.

Но сам код на Си разработан вполне профессионально.
Советую пропробовать перевести harbour или SDL на C+++, тогда
сразу увидите чем синтаксис Си отличается от C++.
Потратил на это пару дней, так как рутины много.
Конечно советую это сделать не профессионалам.

Капча супер!
Просит меня показать колесо, выбираю лавочку.
Капча говорит ПРАВИЛЬНО!

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

Это на любителя, но код вполне хорош.

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

Так и компиляторы с Си и C++ программисту доверяют.
Почему?
Потому что это ЯП для системных программистов.

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

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

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

Когда знаешь тип переменной из названия - это удобно

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

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

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

Приказы не обсуждаются!

Линус Торвальдс: «Вписывание типа переменной в её имя (так называемая венгерская нотация) ущербно — компилятор и так знает типы и может проверить их, и это запутывает программиста»
alysnix ★★★
()
Ответ на: комментарий от alysnix

При использовании хорошей IDE этих проблем нет.
Использую C++ из Visual Studio 13 + VASSISTX - супер удобно!

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

При использовании хорошей IDE этих проблем нет.

в смысле? она сама приписывает префикс?

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

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

VASSISTX, да и IDE подсказывают тип переменной.
Рефакторинг - просто песня!
… …

И non problem!
Полно фич, облегчающих запись кода.

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

Не додумывайте того, чего не знаете и не фантазируйте.
У меня многолетний опыт разработки в Linux.

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

В Visual Studio пишу кроссплатформенный код.
Кроме этого у меня своя кроссплатформенная crt …
Просьба к вам не фантазировать.

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

У меня многолетний опыт разработки в Linux.

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

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

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

Опять из пальца что-то высасываете.
Откуда вы знаете какую использую нотацию?
Вы по делу пишите, а не какие-то свои домыслы.

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

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

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

У большинства программистов свои предпочтения в испоьзрвании имён переменных, …
ИМХО здесь и обсуждать то нечего.

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

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

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

интересно в самом майкрософт это еще используют?

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

Да. у них имеются некоторые корпоратиные правила.
Например часто используют префикс «m_» для полей в классах.

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

ИМХО это весьма удобно.
У Microsoft много чего полезного можно перенять. Честно говоря не использую их API,

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

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

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

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

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

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

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

нелабильный

какой-какой? я слово «лабильность» только в психиатрии в основом встречала. это резкая перемена настроения, внезапная плаксивость и прочее такое. как-то не могу натянуть это на программирование. но «нелабильность» - это норма, вообще-то :)

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

Мне ближе использовать иногда символ «_» как постфикс, а в качестве префикса не использую.

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

Чисто на стандартном Си распараллеленную GPU программу конечно сложно написать

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

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

когда от канпилятора уже ничто не зависит. а все происходит по воле господа-труваси и разработчиков процов и железа. вот как они перехватят эту ситуацию

Рассмотрим такой код: https://godbolt.org/z/1qens9jYd

int test(int a, int b) {
    if (b < 0) return 0;
    if (a + b < a) return 1111;
    return 31337;
}

Что тут не зависит от компилятора и как железо должно перехватить ситуацию и вернуть 1111 при определённых значениях параметров, если функция компилируется в такой код:

test:
        mov     eax, esi
        sar     eax, 31
        not     eax
        and     eax, 31337
        ret

И это не баг компилятора и не implementation-defined behavior.

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

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

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

ASSISTX много удобных фич имеет, да и сама IDE от Microsoft весьма хорошая.
Использую её потому, что в связке с ASSISTX всё очень удобно.
А код перенести в Linux - non problem.

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

Что ж теперь, оптимизации отключать? Да, этот вопрос напрямую связан с UB.

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

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