LINUX.ORG.RU

Опубликован новый стандарт языка C: C11

 , ,


0

8

Международная Огранизация по Стандартизации (ISO) опубликовала новый международный стандарт языка программирования C: ISO/IEC 9899:2011, ранее известный как C1X. Основные изменения:

  • поддержка многопоточности;
  • улучшенная поддержка юникода;
  • обобщенные макросы (type-generic expressions, позволяют статичную перегрузку);
  • анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям);
  • управление выравниванием объектов;
  • статичные утверждения (static assertions);
  • удаление опасной функции gets (в пользу безопасной gets_s);
  • функция quick_exit;
  • спецификатор функции _Noreturn;
  • новый режим эксклюзивного открытия файла.

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

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

Последний черновик стандарта

>>> Подробности

★★★★

Проверено: Shaman007 ()
Последнее исправление: unsigned (всего исправлений: 4)

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

Я сказал, что для себя на С++ при необходимости реализую сам.

Не, за тебя это сделают авторы трех нужных тебе библиотек - разными способами 8)

Kallikanzarid
()

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

А в каких есть?

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

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

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

Согласен. Я говорил про мозги только в контексте программирования - я вовсе не считаю их дураками.

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

# поддержка многопоточности;

Вендопроблемы. В линуксе стандарт - POSIX Threads

В С++11 «поддержка многопоточности», в числе прочего, включала изменения в модели памяти (1.10). В C11 - то же самое (5.1.2.4), что хорошо синхронизирут оба стандарта. Речь о поведении компилятора и никакие pthreads его не обеспечат. Теперь можно полагаться на то, что на любой платформе любой поддерживающий этот стандарт компилятор будет предсказуемо себя вести при конкурентном доступе к памяти.

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

И туда же - твои штампы «десктоп» и «сервер».

Закрой дверь в серверную, дует.

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

Конечно, кода то меньше. Вместо четырёх пробелов всего один таб. Чем длиннее отступы тем больше отрыв в производительности. Мы поэтому перед заливкой кода на сервера sed-ом прогоняем.

Вот за это я и недолюбливаю питон. История Фортрана кому-то ничему не научила.

ИМХО, нельзя считать надёжным язык, в котором семантика зависит от отступов.

hobbit ★★★★★
()

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

А чего из C99 нет в GCC?

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

ИМХО, нельзя считать надёжным язык, в котором семантика зависит от отступов.

А ещё ужаснее, когда она зависит из-за точек с запятой ))

for (i=0; i < N; i++); // ой
{
...
}

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

Интересно, а среди тех, кто пишет стандарты С, есть ли такой авторитет как Страуструп?

Надеюсь, что нет >>_<<

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

МХО, нельзя считать надёжным язык, в котором семантика зависит от отступов.

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

Я не совсем понял товарища выше, они что, компиляцию в pyc не осилили?

Vudod ★★★★★
()

удаление опасной функции gets (в пользу безопасной gets_s);

Ну не могли они, хотя бы чисто с прикола, не ломать обратную совместимость?!

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

Ну не могли они, хотя бы чисто с прикола, не ломать обратную совместимость?!

Она в C99 была объявлена устаревшей, но кто ж её из библиотек-то выкинет?

Begemoth ★★★★★
()

Международная Огранизация по Стандартизации (ISO)

Правильно будет «Международная огранизация по стандартизации (ISO)». Так же, как и Московский государственный университет (МГУ), например.

Буквенные аббревиатуры, сложносокращенные слова и графические сокращения - http://gramota.ru/spravka/rules/?rub=sokr

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

ШВИМ!

Шальные Выкидоны Известного Модератора?

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

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

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

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

Именно. Это основная проблема расширения языков.

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

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

Именно. Это основная проблема расширения языков.

Которая со временем плавно превращается в основную проблему удобочитаемости кода.

Таки да.

IMHO лучше бы рушили обратную совместимость в таких случаях.

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

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

Ревью? Зачем? IMHO собрать, поглядеть на все ворнинги/ошибки и исправить их - разве этого не достаточно в 99%? Совместимость никто никуда не ломал.

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

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

Python 3 --- нет? Хотя не все ещё перешли, многие проекты уже поддерживают двойные либы или даже полностью мигрировали на 3 ветку.

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

на С написаны основополагающие вещи, на питоне - самостоятельные проекты и всякая гуйня

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

и всякая гуйня

Отличная двусмысленность.

Pavval ★★★★★
()

Вопрос немножко не по сабжу: на чем написано ядро FreeBSD? Open-, NebBSD, windows? Какой язык помимо ассемблера? (С или С++)?

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

Ты этим хочешь сказать, что в других недоязыках нет рестартов? Ну да, наверное нет, только причем тут рестарты? (тред не читал)

Неугадал ;-) а надо было бы прочитать отквоченное...

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

Конечно, реализуют. Аккурат к выходу следующего стандарта.

burjui
()

ну а где расчёты и лаборантки?

havelite
()

В связи с недавней кончиной Денниса Ритчи меня терзает интерес: третьему изданию K&R быть?

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

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

matumba ★★★★★
()

Я как-то смотрю на этот Си - ну труп же трупом, а всё равно шевелят, бальзамируют, уповают на какие-то эфемерные «миллиарды строк кода»... а мозг применить - не? Я эту дебильную легенду о миллиардах строк слышу уже 20 лет. И что интересно: за эти же 20 лет я не видел практически ни одной (десктопной) программы, которая бы зижделась на своей базовой реализации - практически всегда вылезают ублюдства недоразработчиков, которым то 640 килобайт хватало на всё, то строки у них не длиннее 255 байт, то файлы не больше 64Кб... всё это дерьмо не является «наследием», перестаньте на него молиться. Каждые 5 лет мы шагаем в новые измерения и только самый прозорливый разработчик может себе позволить код, который не выкинут через 10 лет (и не тешьте себя - у вас такой же среднестатистический говнокод).
К чему я это всё? Да к тому, что не только не надо бояться ломать совместимость (а точнее - приводить язык к современным стандартам), но и вообще полностью отказываться от позорищ типа фортрана, си, с++, жабы и т.п. Даже линукс с его GNU-поделиями можно спокойно в течении 5 лет переписать на C# или D. Но кому это надо? Только вам, молодым энтузазистам. Старпёры будут латать старое одеяло и вещать про совместимость с их тухлым кодом. Красота кибернетики, чо!

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

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

Поверь мне, так было всегда. Еще C99 далеко не на всех платформах поддерживается ... лет через 12, может быть, я напишу такой же пост про c11.

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

Долго смотрел на слово функтор

если долго смотреть на функтор - он начнёт поглядывать на тебя :)

у C++ своя, отличная от всего мира терминология

jtootf ★★★★★
()

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

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

Я как-то смотрю на этот Си - ну труп же трупом, а всё равно шевелят, бальзамируют, уповают на какие-то эфемерные «миллиарды строк кода»... К чему я это всё? Да к тому, что не только не надо бояться ломать совместимость (а точнее - приводить язык к современным стандартам), но и вообще полностью отказываться от позорищ типа фортрана, си, с++, жабы и т.п.

Чуваг, ты не поверишь, но в продакшене крутится столько систем 40 летней давности, найти специалистов для которых все сложнее и сложне, что скоро парни, знающие фортран будут цениться больше чем жаба-кодеры. Писать на современных диалектах, конечно, прикольно, но вот в 99% случаев никому не нужно. Кроме того, собрать ВСЕ бизнес-требования для старых и больших систем невозможно, поэтому, переписать их так же невозможно ;)

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

Опять же, возвращаясь к комерческим unix-ам, вынужден заметить, что pthreads везде реализован немного по разному. Самую малость, но вот чтобы заюзать какую-нибудь функцию pthread_cleanup_push() нужно изрядно подготовиться к тому что это нифига не функция, а макрос: [http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_cleanup_pop.html]

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

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

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

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

К чему я это всё? Да к тому, что не только не надо бояться ломать совместимость (а точнее - приводить язык к современным стандартам), но и вообще полностью отказываться от позорищ типа фортрана, си, с++, жабы и т.п. Даже линукс с его GNU-поделиями можно спокойно в течении 5 лет переписать на C# или D.

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

PS: отдельный привет укуркам, которые рассуждают про табы vs пробелы в Python и не слышали про .pyc файлы.

Pythonist
()

поддержка многопоточности наконец то

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

с++ образец прямоты ?! не смешите батенька если уж и говорить о костылях то с++ и есть по сути набор облегчающих жизнь костылей

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


RE: matumba у тебя крыша поехала что ли ты хоть понял что сказал ? ну перепишем мы всё GNUтое на c# и чего? зачем? чтобыты не трындел пуская слюни запомни что си самый переносимый язык это просто инструмент а для линукса и других GNU ЭТО СТАНДАРТ

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