N1570, последний черновик стандарта C1X На 25 апреля 2011 года, датирован 2011-04-12C11 или ISO/IEC 9899:2011 (неофициально C1X) — новый стандарт для языка Си (ISO/IEC 9899:2011), который заменил существующий стандарт C99. Официально о выпуске стандарта было объявлено 19 декабря 2011 года. Эта версия стандарта большей частью стандартизирует возможности, существующие в распространённых современных компиляторах. Из-за плохой совместимости текущих реализаций C99 со стандартом, C11 включает в себя больше выборочных возможностей для упрощения совместимости со стандартом ядра языка. Хотя стандарт принят совсем недавно, но в GCC версии 4.6 уже есть зачаточная поддержка некоторых возможностей, описанных в черновике стандарта.
Последняя черновая спецификация (доступная для бесплатного скачивания) имеет название N1570 и была издана в апреле 2011 года.
Новый стандарт прошел заключительный пересмотр черновика 10 октября 2011 года и был официально ратифицирован ISO и опубликован в ISO / IEC 9899: 2011 8 декабря 2011 года, без каких-либо замечаний.
Определение стандартного макроса __STDC_VERSION__ со значением 201112L дает указание,что присутствует поддержка C11. Некоторые возможности C11 поддерживаются GCC начиная с версии 4.6. В Clang поддержка начинается с версии 3.1, а в IBM XL C поддержка с версии 12.1.
C11
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
C11
C11
- Вложения
-
- n1570.pdf
- (1.61 МБ) 228 скачиваний
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C11
Olej писал(а):C11
Основные изменения:
- поддержка многопоточности;
- улучшенная поддержка Юникода;
- обобщенные макросы (type-generic expressions, позволяют статичную перегрузку);
- анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям);
- управление выравниванием объектов;
- статичные утверждения (static assertions);
- удаление опасной функции gets (в пользу безопасной gets_s);
- функция quick_exit;
- спецификатор функции _Noreturn;
- новый режим эксклюзивного открытия файла.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C11
Но тему я эту завёл не в качестве новости (новостью это могло быть в 2011 году), а вот именно, главным образом, из-за вот этой позиции: поддержка многопоточности.Olej писал(а):поддержка многопоточности;
Стандарт ISO/IEC 9899:2011 вводит вместо (или в дополнение) библиотечного API потоков (pthread_t - POSIX 1003.b, расширение реального времени) совсем другую реализацию потоков, представление в языке, а не в библиотеках (чтоб было понятно, дальний аналог этого - сопрограммы в языке Go, оператор go).
И всё бы ничего, но примеров кода по использованию этого механизма практически нигде нет.
И программистам на это нужно бы обратить внимание, и это интересно.
А ещё на это нужно обратить внимание студентам, обучающимся...
Потому как ВУЗ-овские преподаватели на этой позиции вообще воспряли - здесь механизм гнобить студентов.
Как сказал в споре мне один гордый мудозвон на Хабрахабре (они там все такие ), из этой университетской когорты: "Ох как же мы дрючим этих студентов из Linux!".
Т.е., до сих пор вся эта педагогика ничего кроме Windows в глаза не видела, заумные студенты, даже подрабатывающие уже в Linux, их ... "в фуй не ставила" ... а тут - такая удача! : дрючить, дрючить и дрючить
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C11
Сравним.Olej писал(а): Но тему я эту завёл не в качестве новости (новостью это могло быть в 2011 году), а вот именно, главным образом, из-за вот этой позиции: поддержка многопоточности.
Привычный простейший POSIX код всегда выглядел так (схема):
Код: Выделить всё
#include <pthread.h>
void* threadfunc( void* data ) { // функция потока
...
pthread_exit( NULL );
};
...
pthread_t tid;
pthread_create( &tid, NULL, threadfunc, NULL );
pthread_join( tid, NULL );
Код: Выделить всё
#include <stdio.h>
#include <threads.h>
void threadfun() {
printf("Hello from thread\n");
}
int main() {
thrd_t tid;
int rc;
rc = thrd_create( &tid, threadfun, NULL );
if (rc != thrd_success) {
fprintf(stderr, "Error creating thread\n");
exit(1);
}
thrd_join(tid, NULL);
/* Wait */
return 0;
}
Код: Выделить всё
[olej@dell ch2]$ lsb_release -ircd
Distributor ID: Fedora
Description: Fedora release 23 (Twenty Three)
Release: 23
Codename: TwentyThree
Код: Выделить всё
[olej@dell C11]$ gcc -Wall -std=c11 -o thr11 thr11.c
thr11.c:2:21: фатальная ошибка: threads.h: Нет такого файла или каталога
компиляция прервана.
[olej@dell C11]$ gcc --version
gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
Copyright (C) 2015 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая
коммерческую ценность и применимость для каких-либо целей.
Код: Выделить всё
[olej@dell Clang]$ clang -xc -Wall -std=c11 -o thr11 thr11.c
thr11.c:2:10: fatal error: 'threads.h' file not found
#include <threads.h>
^
1 error generated.
[olej@dell Clang]$ clang --version
clang version 3.7.0 (tags/RELEASE_370/final)
Target: x86_64-redhat-linux-gnu
Thread model: posix
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C11
Этот код удаётся скомпилировать и запустить, например с вариантом C-библиотеки Musl (вместо Glib).Olej писал(а): Код в стандарте C11 может выглядеть так (реально работающий тест):
(подробности см. здесь: http://unixforum.org/index.php?showtopi ... &p=1291456)
Но это уже ... искусственные способы исполнения.
Т.е. на прямой вопрос: можно ли назвать дистрибутив (и его версию) из числа основных массово используемых (не шелупени), в котором можно "ис каропки", без всяких бубнов и инсталляций (сразу после установки) выполнять многопоточный код в нотации, предложенной C11?
Ответ, как я понимаю: на сегодня - нет.
P.S. И попутное любопытство: а как на сегодня, через 5 лет после публикации стандарта C11, с этим обстоят дела в MS Visual Studio?
(известный юридический принцип: "кому выгодно?")
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C11
Многопоточность, описанная C11, мне так что-то знакомое по давним временам мучительно напоминала, что посмотрел...
Ба! Так это же QNX Software Development Platform > Utilities & Libraries > Dinkum C/C++ Libraries > Dinkum C++11 Libraries (именно C++ не C):
Dinkumware
Ба! Так это же QNX Software Development Platform > Utilities & Libraries > Dinkum C/C++ Libraries > Dinkum C++11 Libraries (именно C++ не C):
Код: Выделить всё
...
num {
thrd_success = .....,
thrd_nomem = .....,
thrd_timedout = .....,
thrd_busy = .....,
thrd_error = .....
};
...
Так вот же откуда растут ноги C11!Dinkumware Limited — американская компания по производству программного обеспечения, специализируется на основных программных библиотеках для C и C++. Компания располагается в городе Конкорд (штат Массачусетс, США).
Dinkumware предлагает реализацию стандартной библиотеки C++, которая поставляется в комплекте с Microsoft Visual C++ с 1996 года и претендует на статус лидирующего поставщика библиотек C++ и Embedded C++ для сообщества разработчиков программного обеспечения для встраиваемых систем.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C11
Получается, что лобисты Microsoft просто протолкали в качестве многопоточности стандарта C11 в неизменном виде свою C++ (!) библиотеку 20-летней давности.Olej писал(а):Так вот же откуда растут ноги C11!
Которую они даже в стандарт C++ не смогли протолкать, где принята модель из Boost (<thread>).
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: C11
Вот суждение на этот счёт, высказанное в вышей из печати только вчера книжки:Olej писал(а):Получается, что лобисты Microsoft просто протолкали в качестве многопоточности стандарта C11 в неизменном виде свою C++ (!) библиотеку 20-летней давности.Olej писал(а):Так вот же откуда растут ноги C11!
Которую они даже в стандарт C++ не смогли протолкать, где принята модель из Boost (<thread>).
Раздел "Феномен языка Си", стр. 194 :
Бдительности от вас потребует также предпринятые в полтора десятилетия судоружные попытки улучшить язык Си путём принятия новых "стандартов" - сначала С99, а затем, совсем недавно, С11. Эти стандарты привели к появлению совершенно нелепого явления, растерявшего большинство основных привлекательных черт языка Си, но сохранившего все его недостатки.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей