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 в этих и большинстве других компиляторов нет.

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

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

ПОСАДИ КОМПЬЮТЕР НА ЦЕПЬ И ЗАСТАВЬ ЛАЯТЬ!

домашняя автоматизация: сделай сам; лучший подарок для техногика

http://www.unicontrollers.com/products/unc01x

[#]  
mironov_ivan

Внезапно и неожиданно! Лично я на фоне нового стандарта C++ даже и забыл, что C тоже потихоньку пилят...

***** ()
[#]  

> # анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям);

Хехе, это же было в план9 в их компайлерах давным-давно...

anonymous ()
[#] Ответ на: комментарий от anonymous 23.12.2011 12:17:43  

Но кому, кроме отпетых маргиналов, это интересно?

anonymous ()
[#]  
Novell-ch

всемукапец++

*** ()
[#]  
fractaler
>>-----Цитата---->>

улучшенная поддержка юникода;

<<-----Цитата----<<

Объясните нубу, что это значит. Появились специальные функции? теперь можно не писать конструкции вида if( byte < 0xC0 ) blablabla..?

**** ()
[#]  

Интересно как выглядит поддержка много поточности, boost.thread запилили что ли?

anonymous ()
[#]  
soko1

После С99 - С11, логичненько

*** ()
[#]  
CARS

Лямбды где? Где лямбды, я вас спрашиваю!

** ()
[#]  
mikhalich

Тоже бумажным останется?

** ()
[#] Ответ на: комментарий от CARS 23.12.2011 13:01:55  

зачем они тебе в сишке? для этого есть плюсы же

anonymous ()
[#]  

C11

С99
С11
А какие компиляторы эти стандарты поддерживают?

* ()
[#] Ответ на: комментарий от fractaler 23.12.2011 12:58:51  

С википедии:

>>-----Цитата---->>

Improved Unicode support based on the C Unicode Technical Report ISO/IEC TR 19769:2004 (char16_t and char32_t types for storing UTF-16/UTF-32 encoded data, including conversion functions in <uchar.h> and the corresponding u and U string literal prefixes, as well as the u8 prefix for UTF-8 encoded literals

<<-----Цитата----<<
* ()
[#] Ответ на: C11 от sjb 23.12.2011 13:06:42  

Re: C11

c99 @ gcc

anonymous ()
[#]  
gensym
>>-----Цитата---->>

C11

<<-----Цитата----<<

хотеть везде

* ()
[#] Ответ на: комментарий от anonymous 23.12.2011 13:06:17  
gensym
>>-----Цитата---->>

зачем они тебе в сишке? для этого есть плюсы же

<<-----Цитата----<<

зачем нужны лямбды в плюсах, если сами плюсы не нужны совсем?

* ()
[#]  
geekless

Ого. Не знал, что его пилят.

** ()
[#] Ответ на: комментарий от gensym 23.12.2011 13:10:43  

А что нужно? Явка или похапе?

anonymous ()
[#] Ответ на: комментарий от anonymous 23.12.2011 13:14:41  
gensym
>>-----Цитата---->>

А что нужно? Явка или похапе?

<<-----Цитата----<<

топик же

* ()
[#]  
elrprt

Как ни странно, практически все основные изменения - торт.

P.S. вот этот тред и одна страница слабо укладываются в голове.
Хотя все с чего-то начиналось...

()
[#]  

"Обобщенные макросы" - это неточно: на самом деле, это новый синтаксис выражений:

_Generic(arg,
  type1: expr1,
  type2: expr2,
  default: expr3
)
Выбирает выражение в зависимости от типа агрумента.

** ()
[#]  

Too little too late.

Но за ссылку на последний драфт - спасибо.

***** ()
[#]  

ура ура

()
[#] Ответ на: комментарий от theNamelessOne 23.12.2011 13:06:08  
>>-----Цитата---->>

С++-капец?

<<-----Цитата----<<

С таким набором изменений - нет, те же обобщенные макросы просто кривой костыль, по сравнению с ним С++ просто образец прямоты.

anonymous ()
[#] Ответ на: комментарий от unsigned 23.12.2011 13:24:47  
>>-----Цитата---->>

В C++ default нет )

<<-----Цитата----<<

шаблоны же

anonymous ()
[#]  
Grid_Sergey

Отличная новость. 90% времени провожу в писании программ на Си, рад что его всё-таки пилят)

()
[#]  
enchantner

Я видел этот тред на одной странице... Красота. Будем учить.

()
[#] Ответ на: комментарий от anonymous 23.12.2011 13:25:40  

Вспоминая шаблоны, нужно забывать про "образец прямоты".

** ()
[#]  
Begemoth

> обобщенные макросы (type-generic expressions, позволяют статичную перегрузку);

Они упоролись.

***** ()
[#] Ответ на: комментарий от unsigned 23.12.2011 13:29:13  
>>-----Цитата---->>

Вспоминая шаблоны, нужно забывать про "образец прямоты".

<<-----Цитата----<<

До тез пор, пока на глаза не попадет то, что предлагается в С11.

anonymous ()
[#] Ответ на: комментарий от unsigned 23.12.2011 13:29:13  
Begemoth

> Вспоминая шаблоны, нужно забывать про "образец прямоты".

По сравнению с этими обощёнными выражениями шаблоны таки образец прямоты. В С99 они добавили _Complex, теперь _Generic, С++ в этом плане гораздо красивее.

***** ()
[#]  

Многопоточность

Немного копипаста.

thread_local /* keyword */
void call_once(once_flag *flag, void (*func)(void));
int cnd_broadcast(cnd_t *cond);
void cnd_destroy(cnd_t *cond);
int cnd_init(cnd_t *cond);
int cnd_signal(cnd_t *cond);
int cnd_timedwait(cnd_t *restrict cond,
      mtx_t *restrict mtx,
      const struct timespec *restrict ts);
int cnd_wait(cnd_t *cond, mtx_t *mtx);
void mtx_destroy(mtx_t *mtx);
int mtx_init(mtx_t *mtx, int type);
int mtx_lock(mtx_t *mtx);
int mtx_timedlock(mtx_t *restrict mtx,
     const struct timespec *restrict ts);
int mtx_trylock(mtx_t *mtx);
int mtx_unlock(mtx_t *mtx);
int thrd_create(thrd_t *thr, thrd_start_t func,
     void *arg);
thrd_t thrd_current(void);
int thrd_detach(thrd_t thr);
int thrd_equal(thrd_t thr0, thrd_t thr1);
_Noreturn void thrd_exit(int res);
int thrd_join(thrd_t thr, int *res);
int thrd_sleep(const struct timespec *duration,
     struct timespec *remaining);
void thrd_yield(void);
int tss_create(tss_t *key, tss_dtor_t dtor);
void tss_delete(tss_t key);
void *tss_get(tss_t key);
int tss_set(tss_t key, void *val);
pthread-капец, в общем.

** ()
[#]  
>>-----Цитата---->>

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

<<-----Цитата----<<

Почему?

P.S. ну ладно, я видел этот тред с одной страницей.

()
[#] Ответ на: комментарий от Begemoth 23.12.2011 13:34:34  
_Alignas _Alignof _Atomic _Bool _Complex _Generic _Imaginary _Noreturn _Static_assert _Thread_local

Мне тоже не нравится, в общем-то. Но, например, для _Noreturn добавлен макрос noreturn.

** ()
[#] Ответ на: комментарий от anonymous 23.12.2011 12:35:17  
>>-----Цитата---->>

Но кому, кроме отпетых маргиналов, это интересно?

<<-----Цитата----<<

Разработчикам Linux Kernel?

()
[#] Ответ на: Многопоточность от unsigned 23.12.2011 13:36:00  

Re: Многопоточность

>>-----Цитата---->>

pthread-капец, в общем.

<<-----Цитата----<<

как только будет рабочая реализация в gcc и clang

anonymous ()
[#]  

где про атомарные типы? Это одна из основных фич нового стандарта.

anonymous ()
[#] Ответ на: Многопоточность от unsigned 23.12.2011 13:36:00  

А есть уже реализации этой этого интерфейса поверх pthreads?

***** ()
[#] Ответ на: комментарий от CARS 23.12.2011 13:01:55  
Pavval
>>-----Цитата---->>

CARS

Лямбды где? Где лямбды, я вас спрашиваю!

<<-----Цитата----<<

В С++ те же лямбды реализованы функторами. Вопрос: как ты подобные вещи сделаешь в С, где нету ничего далее указателя на функцию? создавать lambda_t с несовместимостью со стандартными средствами С?

**** ()
[#] Ответ на: комментарий от tailgunner 23.12.2011 13:20:58  
Pavval
>>-----Цитата---->>

tailgunner

Но за ссылку на последний драфт - спасибо.

<<-----Цитата----<<

Скоро нормальный вариант где-то выложат.

**** ()
[#] Ответ на: комментарий от tailgunner 23.12.2011 13:40:28  

Думаю, нет. Это я наперед загадываю.

И, кажется, с pthreads тут работы на день.

** ()
[#] Ответ на: Многопоточность от unsigned 23.12.2011 13:36:00  
Pavval
>>-----Цитата---->>

unsigned

pthread-капец, в общем.

<<-----Цитата----<<

Всегда лучше иметь платформенно-независимый API.

**** ()
[#]  
adzeitor

Зашибись :) Жалко не скоро будет повсеместно использоваться...

* ()
[#] Ответ на: комментарий от unsigned 23.12.2011 13:38:47  
Begemoth

> Мне тоже не нравится, в общем-то

Я не о том, выравнивание, многопоточность (модель исполнения, а не набор функций) должны быть в С, как в переносимом ассемблере, а _Complex и тем более _Generic указывают на общую слабость системы типов и выглядят инородно в С.

***** ()
[#] Ответ на: комментарий от anonymous 23.12.2011 13:40:26  
Pavval
>>-----Цитата---->>

где про атомарные типы? Это одна из основных фич нового стандарта.

<<-----Цитата----<<

Многопоточность подразумавает их как один из API синхронизации.

**** ()
[#] Ответ на: комментарий от anonymous 23.12.2011 13:40:26  
Begemoth

> где про атомарные типы?

В многопоточности, вестимо.

***** ()
[#] Ответ на: комментарий от tailgunner 23.12.2011 13:45:29  
Pavval
>>-----Цитата---->>

tailgunner

Но это же будет незаконно :)

<<-----Цитата----<<

Я тебе лично разрешаю.

**** ()