C1X - новый стандарт си.
От: FR  
Дата: 11.08.10 09:34
Оценка: 44 (5)
Новые языки конечно хорошо, но си похоже сдаваться не собирается и разработка его нового стандарта идет вовсю:

http://en.wikipedia.org/wiki/C1X
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1494.pdf

Из интересного:

Multithreading support

Improved Unicode support

Bounds-checking interfaces

Type-generic expressions using the _Generic keyword

Объявление переменных как и в C++ не в начале блока.
Re: C1X - новый стандарт си.
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 11.08.10 09:43
Оценка: +3
Здравствуйте, FR, Вы писали:

FR>Объявление переменных как и в C++ не в начале блока.


Не флейма ради, но это еще в C99 было и прекрасно поддерживается Pelles C for Windows, например.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re: C1X - новый стандарт си.
От: vdimas Россия  
Дата: 12.08.10 07:39
Оценка:
Здравствуйте, FR, Вы писали:

FR>Из интересного:


FR>Multithreading support


Через макросы и библиотеки можно сделать и сейчас в таком же предложенном синтаксисе, не факт что надо было тащить в стандарт.


FR>Improved Unicode support


С юникодом круто, ибо поддержка синтаксиса. Особенно полезно, если char16_t будет другим типом, а не typedef к short. Было бы неплохо, если бы этот синтаксис так же поддерживался следующими стандартами С++.

FR>Type-generic expressions using the _Generic keyword


Хм... шаблоны С++, ИМХО, мощнее, не факт что нужно было вводить это в С.
Re: C1X - новый стандарт си.
От: 24  
Дата: 12.08.10 07:55
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Type-generic expressions using the _Generic keyword


Как-то мрачновато это выглядит. Оставили бы лучше C в покое, ато превратится в такого же монстра, как С++.
Re: C1X - новый стандарт си.
От: SpaceConscience  
Дата: 12.08.10 20:48
Оценка: -4
Молодцы, вроде не стремятся к излишнему усложению.

#define минимализм "убожество"

main ()
{
    printf("%s\n", "Девиз сишников: " минимализм " - наше все!");
}
Собрался ставить минус? Да сам иди в жопу!

































































.
Re[2]: C1X - новый стандарт си.
От: alzt  
Дата: 16.08.10 17:57
Оценка: +1
Здравствуйте, SpaceConscience, Вы писали:

SC>Молодцы, вроде не стремятся к излишнему усложению.


SC>
SC>#define минимализм "убожество"
SC>


Сейчас ниша Си — это различные низкоуровневые приложения: операционные сети, драйвера, всевозможные контроллеры, мелкие утилиты, работа с памятью.
Очень важным для Си на мой взгляд являются 2 вещи:
1. указатели с адресной арифметикой, позволяющие сделать очень многие вещи
и
2. простота языка, что облегчает создание нового Си-компилятора.

Появился какой-нибудь хитроумный прибор с нестандартной архитектурой, для которого нужен драйвер. На чём его писать? Си отличный выбор. Во-первых, много программистов знает этот язык, т.к. их легко будет найти и заменить. Во-вторых, несложно сделать\адаптировать компилятор на Си для этого устройства. А часто и не надо этого делать, т.к. уже есть.

А если добавлять в язык множество фишек, то получится очередной Си++, т.к. джавы очевидно из Си уже не выйдет. Кто будет на нём писать? Для большинства приложений подойдут другие языки, которые и легче и первоначально предназначались для высокоуровневых задач.

В данном случае усложнение может убить сам язык.
Re[3]: C1X - новый стандарт си.
От: SpaceConscience  
Дата: 16.08.10 21:19
Оценка: 1 (1) +1 -1
Это все понятно.

У меня лично был опыт создания большой прикладной программы на чистом си. Да, такой адский мазохизм.

Для себя я решил, что си — это вообще не язык программирования, а формат объектных файлов. Он хорошо подходит только для конвертирования в него кода из нормального языка.

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

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

Плюс, есть еще такие понятия, как фронтенд и бэкенд. В норме, если у вас появился новый нестандартный процессор, надо написать бэкенд к GCC и программировать на C++. Что за дурь такая — каждый раз переписывать весь компилятор вместе с парсером под каждую новую платформу?

А что касается "низкоуровневости" — если посмотреть на реальные программы на си, мы там увидим суррогат объектного языка программирования с объектами, инкапсуляций и полиморфизмом, только реализовано все это вручную. В итоге средняя программа на си изоморфна аналогичной программе на C++, только в первой делается вручную то, что во второй делает компилятор.

Флейм разводить я не имел в виду, так как для меня и так все ясно.

Если кому-то нравится на си писать сложные программы — пускай пишут, есть же умельцы, которые могут одним топором церковь срубить.
Собрался ставить минус? Да сам иди в жопу!

































































.
Re[3]: C1X - новый стандарт си.
От: Pzz Россия https://github.com/alexpevzner
Дата: 17.08.10 01:37
Оценка:
Здравствуйте, alzt, Вы писали:

A>Появился какой-нибудь хитроумный прибор с нестандартной архитектурой, для которого нужен драйвер. На чём его писать? Си отличный выбор. Во-первых, много программистов знает этот язык, т.к. их легко будет найти и заменить. Во-вторых, несложно сделать\адаптировать компилятор на Си для этого устройства. А часто и не надо этого делать, т.к. уже есть.


Ну, строго говоря, сейчас задача переноса Си на новую архитектуру решается путем добавления backend'а к gcc и написания runtime library. А тем самым, почти автоматически решается задача переноса на нее всей группы языков, поддерживаемых gcc
Re: C1X - новый стандарт си.
От: dilmah США  
Дата: 19.08.10 13:41
Оценка:
Я недавно обнаружил, что типы нельзя определять в возращаемом типе, то есть нельзя писать типа такого:

enum {
  SUPERVAL_A,
  SUPERVAL_B,
  SUPERVAL_C
} foo();


никто не знает это не собираются изменить в апкамин стандартах С или С++?
Re[2]: C1X - новый стандарт си.
От: Pzz Россия https://github.com/alexpevzner
Дата: 19.08.10 13:54
Оценка: +1
Здравствуйте, dilmah, Вы писали:

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


Хм. gcc этот код съел. g++ — нет. Я не большой знаток тонкостей c++, но думаю дело в scope: если дозволить такое определение типа, то виден этот тип будет в единственном месте, в прототипе функции. А значит, им никак нельзя будет воспользоваться ни в самой функции, ни в коде, вызывающей ее, а потому такое определение бесполезно и попытка использования его — ошибочна.
Re[2]: C1X - новый стандарт си.
От: Lorenzo_LAMAS  
Дата: 19.08.10 15:47
Оценка:
D>никто не знает это не собираются изменить в апкамин стандартах С или С++?
это можно делать в С.
Of course, the code must be complete enough to compile and link.
Re[3]: C1X - новый стандарт си.
От: dilmah США  
Дата: 19.08.10 15:58
Оценка:
L_L>это можно делать в С.

а, да, я это g++ компилировал. Руки сами написали, был удивлен что не откомпилировалось.
Re[4]: C1X - новый стандарт си.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.08.10 06:38
Оценка:
Здравствуйте, SpaceConscience, Вы писали:

SC>У меня лично был опыт создания большой прикладной программы на чистом си. Да, такой адский мазохизм.

SC>Для себя я решил, что си — это вообще не язык программирования, а формат объектных файлов. Он хорошо подходит только для конвертирования в него кода из нормального языка.

Давно есть уже более внятное определение — "переносимый ассемблер". Конечно, он при этом ни разу не язык высокого уровня (по современным меркам, а не 70-х годов). Ну и что с того? Ниши всякие нужны, роли всякие важны.

SC>Лаконичность языка — это достоинство, недостаток в нем — это полная и абсолютная нерасширяемость. То есть в языке ничего нет, и добавить — никак. Хорошо, хоть есть препроцессор, хоть какое-то ничтожное метапрограммирование, а то без него было бы совсем уныло.


Не говори "ничего нет" про тьюринг-полную систему.:) Всё, что нужно — можно написать. Почему ты решил писать напрямую на Си, а не на domain specific language, хотя бы и самопальном? Или на чём-то скриптовом? Бутербродное построение придумали много лет назад.

SC>Простота создания компилятора — это стандартная отмазка. На самом деле, ядро языка можно было бы сделать еще проще, но достаточно сделать возможности для расширения и получить на порядок более мощный язык, см. лисп, например.


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

SC>Плюс, есть еще такие понятия, как фронтенд и бэкенд. В норме, если у вас появился новый нестандартный процессор, надо написать бэкенд к GCC и программировать на C++. Что за дурь такая — каждый раз переписывать весь компилятор вместе с парсером под каждую новую платформу?


Что за дурь такая — не читать документацию и считать, что "переписывать весь компилятор"? Для новой платформы надо её описать, это да. Описание делается стандартным образом и не меняет существующие механизмы. И зачем "программировать на C++"? Ты GCC с Clang/LLVM не путаешь?

SC>А что касается "низкоуровневости" — если посмотреть на реальные программы на си, мы там увидим суррогат объектного языка программирования с объектами, инкапсуляций и полиморфизмом, только реализовано все это вручную. В итоге средняя программа на си изоморфна аналогичной программе на C++, только в первой делается вручную то, что во второй делает компилятор.


Безусловно. Только зачем пытаться использовать несоответствующий инструмент?

SC>Флейм разводить я не имел в виду, так как для меня и так все ясно.


Нет, у тебя национальное русское блюдо — каша в голове (tm). "Всё ясно" в таком случае означает перепутанность и непонимание основ. Вообще, зачем ты это всё начал рассказывать в ветке про новый стандарт? Думаешь, все испугаются и перестанут его развивать?;))

SC>Если кому-то нравится на си писать сложные программы — пускай пишут, есть же умельцы, которые могут одним топором церковь срубить.


Типа отмазался?;) Ну не хочешь писать на нём — не пиши. Надеюсь, никто не заставляет (а если заставляет — то соответственно платит).
The God is real, unless declared integer.
Re[2]: C1X - новый стандарт си.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.08.10 06:49
Оценка:
Здравствуйте, vdimas, Вы писали:

FR>>Multithreading support

V>Через макросы и библиотеки можно сделать и сейчас в таком же предложенном синтаксисе, не факт что надо было тащить в стандарт.

В стандарт — чтобы все одинаково сделали. Это как раз полезно.

FR>>Improved Unicode support

V>С юникодом круто, ибо поддержка синтаксиса. Особенно полезно, если char16_t будет другим типом, а не typedef к short.

Это вряд ли, Си это не Go.

FR>>Type-generic expressions using the _Generic keyword

V>Хм... шаблоны С++, ИМХО, мощнее, не факт что нужно было вводить это в С.

Введено именно затем, чтобы не вводить шаблоны.
The God is real, unless declared integer.
Re[5]: C1X - новый стандарт си.
От: SpaceConscience  
Дата: 21.08.10 10:35
Оценка:
N>Давно есть уже более внятное определение — "переносимый ассемблер". Конечно, он при этом ни разу не язык высокого уровня (по современным меркам, а не 70-х годов).

Это невнятное и дурацкое определение. "Переносимый ассемблер" — это оксюморон. До низкоуровневых возможностей конкретного ассемблера, например x86, ему как до Луны, а иначе и быть не может.

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

N>Нет, у тебя национальное русское блюдо — каша в голове (tm). "Всё ясно" в таком случае означает перепутанность и непонимание основ.


Нет, это у тебя каша в голове. Ты вообще ничего не понял из моего сообщения, просто ничего, ни общую мысль, ни конкретное содержание. Стоило ли писать ответ?
Собрался ставить минус? Да сам иди в жопу!

































































.
Re[6]: C1X - новый стандарт си.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.08.10 18:55
Оценка:
Здравствуйте, SpaceConscience, Вы писали:

N>>Давно есть уже более внятное определение — "переносимый ассемблер". Конечно, он при этом ни разу не язык высокого уровня (по современным меркам, а не 70-х годов).


SC>Это невнятное и дурацкое определение. "Переносимый ассемблер" — это оксюморон.


Нет.

SC> До низкоуровневых возможностей конкретного ассемблера, например x86, ему как до Луны, а иначе и быть не может.


Зато это язык, пригодный для написания почти чего угодно на системах с двоичной арифметикой, двоичной иерархией размеров и (почти всегда) 8-битным байтом, с адресуемой одним числом памятью, выдаваемой связными кусками... можно долго продолжать. А низкоуровневые возможности — непереносимы и поэтому не учитываются.

SC>Это, конечно, язык высокого уровня, только слишком ограниченный.


Может, в 1970-х он был высокого уровня. Но сейчас за окном 2010-й год. И сейчас необходимым признаком, чтобы язык был высокого уровня, является наличие first-class functions и отсутствие арифметики указателей.

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


Скажи это авторам проектов объёма и масштаба с Linux. А я посмотрю на реакцию.:)

N>>Нет, у тебя национальное русское блюдо — каша в голове (tm). "Всё ясно" в таком случае означает перепутанность и непонимание основ.

SC>Нет, это у тебя каша в голове. Ты вообще ничего не понял из моего сообщения, просто ничего, ни общую мысль, ни конкретное содержание. Стоило ли писать ответ?

Стоило. Хотя бы для того, чтобы твоё сообщение не сбивало с толку тех, кто только начал разбираться в теме и готов поверить любому написанному слову.
The God is real, unless declared integer.
Re[5]: C1X - новый стандарт си.
От: Трурль  
Дата: 21.08.10 19:15
Оценка:
Здравствуйте, netch80, Вы писали:

N>Давно есть уже более внятное определение — "переносимый ассемблер".


Более точное определение: "переносимый ассемблер PDP-11".
Re[6]: C1X - новый стандарт си.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.08.10 19:25
Оценка:
Здравствуйте, Трурль, Вы писали:

N>>Давно есть уже более внятное определение — "переносимый ассемблер".

Т>Более точное определение: "переносимый ассемблер PDP-11".

Ну почему же. Разве int и void* ограничены 16 битами? В принципе, единственное неприятное наследие PDP-11, которое почему-то не хотят устранять — это формат записи восьмеричных констант.
The God is real, unless declared integer.
Re[5]: C1X - новый стандарт си.
От: Mr.Cat  
Дата: 21.08.10 20:06
Оценка:
Здравствуйте, netch80, Вы писали:
SC>>Простота создания компилятора — это стандартная отмазка. На самом деле, ядро языка можно было бы сделать еще проще, но достаточно сделать возможности для расширения и получить на порядок более мощный язык, см. лисп, например.
N>Кошмар какой-то пишешь. Зачем делать LISP внутри C, когда можно написать интерпретатор и конструкция будет значительно прямее?
Думаю, наш коллега недоволен макросами в Си и хочет, чтобы они были помощнее — что-нибудь навроде макросов в лиспе/схеме. Я так понимаю, макросы в си используются достаточно активно — было бы логично уделить внимание удобству часто используемого инструмента.

Как-то на рсдн обсуждалась вот эта ссылка: http://voodoo-slide.blogspot.com/2010/01/amplifying-c.html. Там авторы вообще предлагают закатать весь си в лиспоскобки (что, конечно, уж слишком), но заодно и показывают, где бы нашли применение лиспомакросы (бойлерплейт, навроде корректного освобождения ресурсов, компайл-тайм проверки для функций а-ля принтф и т.п.)
Re[6]: C1X - новый стандарт си.
От: SpaceConscience  
Дата: 21.08.10 22:01
Оценка:
MC>Думаю, наш коллега недоволен макросами в Си и хочет, чтобы они были помощнее — что-нибудь навроде макросов в лиспе/схеме.

Необязательно макросов. Концепции могут быть разными.

MC>Я так понимаю, макросы в си используются достаточно активно — было бы логично уделить внимание удобству часто используемого инструмента.


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

MC>Как-то на рсдн обсуждалась вот эта ссылка: http://voodoo-slide.blogspot.com/2010/01/amplifying-c.html. Там авторы вообще предлагают закатать весь си в лиспоскобки (что, конечно, уж слишком), но заодно и показывают, где бы нашли применение лиспомакросы (бойлерплейт, навроде корректного освобождения ресурсов, компайл-тайм проверки для функций а-ля принтф и т.п.)


Это слишком чудовищная порча синтаксиса, тоже нехорошо.

Но это так, абстрактные рассуждения, си он и есть си, его определяющие черты — консервативность и ограниченность, которые являются его единственными достоинствами.
Собрался ставить минус? Да сам иди в жопу!

































































.
Re[3]: C1X - новый стандарт си.
От: vdimas Россия  
Дата: 21.08.10 22:46
Оценка: +1
Здравствуйте, netch80, Вы писали:

V>>Через макросы и библиотеки можно сделать и сейчас в таком же предложенном синтаксисе, не факт что надо было тащить в стандарт.


N>В стандарт — чтобы все одинаково сделали. Это как раз полезно.


Ну если только в стандарт библиотеки, а не синтаксиса языка.


FR>>>Type-generic expressions using the _Generic keyword

V>>Хм... шаблоны С++, ИМХО, мощнее, не факт что нужно было вводить это в С.

N>Введено именно затем, чтобы не вводить шаблоны.


Да просто я продолжаю смотреть на С с той точки зрения, чтобы его код можно было переносить в случае необходимости на С++ без полной переделки. И вот этот _Generic резко напрягает.
Re[6]: C1X - новый стандарт си.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 22.08.10 04:46
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

N>>Кошмар какой-то пишешь. Зачем делать LISP внутри C, когда можно написать интерпретатор и конструкция будет значительно прямее?

MC>Думаю, наш коллега недоволен макросами в Си и хочет, чтобы они были помощнее — что-нибудь навроде макросов в лиспе/схеме. Я так понимаю, макросы в си используются достаточно активно — было бы логично уделить внимание удобству часто используемого инструмента.

И какая религия мешает пропустить текст через любой нужный препроцессор?:) Генерируй себе из любых макросов, проблем-то...
Потому и не вводится ничего вместо стандартного препроцессора, что стандартный заточен на задачу, которая нужна в 100% случаев — а именно, поддерживать заголовочные файлы. А всё остальное — "твори, выдумывай, пробуй!" (tm) и не забудить применить make (в общем смысле), чтобы реализовать зависимости.

MC>Как-то на рсдн обсуждалась вот эта ссылка: http://voodoo-slide.blogspot.com/2010/01/amplifying-c.html. Там авторы вообще предлагают закатать весь си в лиспоскобки (что, конечно, уж слишком), но заодно и показывают, где бы нашли применение лиспомакросы (бойлерплейт, навроде корректного освобождения ресурсов, компайл-тайм проверки для функций а-ля принтф и т.п.)


Пусть выпустят макропроцессор, комплекты стандартных макросов и наберут хоть какую-то, но базу применений. Без этого их предложение никто всерьёз не рассмотрит.
The God is real, unless declared integer.
Re[3]: C1X - новый стандарт си.
От: пыщьх http://rsdn_user.livejournal.com
Дата: 22.08.10 07:46
Оценка:
Здравствуйте, alzt, Вы писали:

A>Сейчас ниша Си — это различные низкоуровневые приложения: операционные сети, драйвера, всевозможные контроллеры, мелкие утилиты, работа с памятью.

A>Очень важным для Си на мой взгляд являются 2 вещи:
A>1. указатели с адресной арифметикой, позволяющие сделать очень многие вещи
Есть в С++
A>и
A>2. простота языка, что облегчает создание нового Си-компилятора.

A>Появился какой-нибудь хитроумный прибор с нестандартной архитектурой, для которого нужен драйвер. На чём его писать? Си отличный выбор. Во-первых, много программистов знает этот язык, т.к. их легко будет найти и заменить. Во-вторых, несложно сделать\адаптировать компилятор на Си для этого устройства. А часто и не надо этого делать, т.к. уже есть.

Писать с нуля компилятор для хитроумного прибора — бред. Портирование GCC с любой похожей архитектуры — пара-тройка человеко-месяцев (был личный опыт). Портируется только back-end, т.е. поддерживаться будут как C, так и C++ (без STL).

A>А если добавлять в язык множество фишек, то получится очередной Си++, т.к. джавы очевидно из Си уже не выйдет. Кто будет на нём писать? Для большинства приложений подойдут другие языки, которые и легче и первоначально предназначались для высокоуровневых задач.

ИМХО, допиливать C, когда есть C++ — полный бред. Зачем добавлять нативную поддержку unicode в C, если можно скомпилировать существующую программу на C компилятором C++, и в ней будет работать юникод? Победить панический страх некоторых разработчиков перед расширением CPP?
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re: Идиотизм, ИМХО
От: пыщьх http://rsdn_user.livejournal.com
Дата: 22.08.10 07:54
Оценка:
Здравствуйте, FR, Вы писали:

FR>Новые языки конечно хорошо, но си похоже сдаваться не собирается и разработка его нового стандарта идет вовсю:


FR>http://en.wikipedia.org/wiki/C1X

FR>http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1494.pdf

Берем существующий компилятор С++, собираем на нем нашу программу на С. Если нужны фичи из списка, используем СУЩЕСТВУЮЩИЕ фичи С++ (использование g++ вместо gcc не заставляет использовать исключения вместо кодов возврата):

FR>Из интересного:


FR>Multithreading support


template <typename _BaseType> class _TLSValue
{
    C_ASSERT(sizeof(_BaseType) == sizeof(void *));
    //...
}


FR>Improved Unicode support

wchar_t wszString[] = L"C++ has it for ages";


FR>Type-generic expressions using the _Generic keyword

template<>


FR>Объявление переменных как и в C++ не в начале блока.

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

Вообще, странная идея "возьмем очередное мелкое подмножество С++, обзовем его C с классами и прибамбасами, чтобы сишники не плевались, добавим пару ключевых слов, чтобы не пугать людей словом template и назовем это новым стандартом". Детский сад, короче.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[2]: Идиотизм, ИМХО
От: SpaceConscience  
Дата: 22.08.10 08:19
Оценка:
FR>>Объявление переменных как и в C++ не в начале блока.
П>А вот эту фичу нельзя было добавлять. Никто из фанатов C этим языком теперь пользоваться не будет, т.к. это же перегружает компилятор...

Это старая фича из C99.
Собрался ставить минус? Да сам иди в жопу!

































































.
Re[3]: Идиотизм, ИМХО
От: пыщьх http://rsdn_user.livejournal.com
Дата: 22.08.10 08:23
Оценка:
Здравствуйте, SpaceConscience, Вы писали:

FR>>>Объявление переменных как и в C++ не в начале блока.

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

SC>Это старая фича из C99.

Да знаю-знаю. Не удержался, решил съязвить...
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[7]: C1X - новый стандарт си.
От: Mr.Cat  
Дата: 22.08.10 09:32
Оценка:
Здравствуйте, netch80, Вы писали:
N>Потому и не вводится ничего вместо стандартного препроцессора
А по мне так _generic с явным прицелом на макросы предлагается.

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

А у них есть препроцессор на базе коммонлиспа: http://gitorious.org/c-amplify/
Re[4]: C1X - новый стандарт си.
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.08.10 15:31
Оценка:
Здравствуйте, пыщьх, Вы писали:

П>ИМХО, допиливать C, когда есть C++ — полный бред. Зачем добавлять нативную поддержку unicode в C, если можно скомпилировать существующую программу на C компилятором C++, и в ней будет работать юникод? Победить панический страх некоторых разработчиков перед расширением CPP?


Потому что существует куча людей, которые сознательно выбирают Си для своего нового кода, и не хотят платить цену C++, не используя никаких его преимуществ.
Re[5]: C1X - новый стандарт си.
От: SpaceConscience  
Дата: 22.08.10 15:48
Оценка:
Pzz>Потому что существует куча людей, которые сознательно выбирают Си для своего нового кода, и не хотят платить цену C++, не используя никаких его преимуществ.

О, а что, за использование C++ надо платить? Комитету? И вы платите? Странно, я никогда не платил и не слышал, чтобы кто-нибудь платил.

А сколько надо платить в месяц?
Собрался ставить минус? Да сам иди в жопу!

































































.
Re[5]: C1X - новый стандарт си.
От: пыщьх http://rsdn_user.livejournal.com
Дата: 22.08.10 15:51
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, пыщьх, Вы писали:


П>>ИМХО, допиливать C, когда есть C++ — полный бред. Зачем добавлять нативную поддержку unicode в C, если можно скомпилировать существующую программу на C компилятором C++, и в ней будет работать юникод? Победить панический страх некоторых разработчиков перед расширением CPP?


Pzz>Потому что существует куча людей, которые сознательно выбирают Си для своего нового кода, и не хотят платить цену C++, не используя никаких его преимуществ.

И какова цена C++, компилирующего исходники на чистом C (с парой фич С++)?
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[6]: C1X - новый стандарт си.
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.08.10 21:03
Оценка:
Здравствуйте, пыщьх, Вы писали:

Pzz>>Потому что существует куча людей, которые сознательно выбирают Си для своего нового кода, и не хотят платить цену C++, не используя никаких его преимуществ.

П>И какова цена C++, компилирующего исходники на чистом C (с парой фич С++)?

Время компиляции, неполная совместимость с Си (особенно раздражает необходимость явно преобразовывать void*), некоторые фичи C++, типа исключений, имеют свою цену в генерируемом годе, даже если их не использовать, отсутствие предупреждений о несовместимости исходного кода с Си (что может быть важным, если предполагается портабельность этого кода), и т.д. и т.п.
Re[7]: C1X - новый стандарт си.
От: MaxSem  
Дата: 23.08.10 09:08
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, пыщьх, Вы писали:


Pzz>Время компиляции


Убогое время компиляции в C/C++ связано не с фичами языка, а с допотопной моделью компиляции с отдельным этапом препроцессинга, кучей подключаемых хедеров, объектников и .lib'ов. Естественно, если вы на голых сях напишете программу только с #include <stdio.h>, то она будет компилироваться заметно быстрее, чем плюсплюсовая, в которой подключена добрая половина boost'а. Однако сравнение некорректно в том плане, что подключенные в первом случае библиотеки дают гораздо меньше функционала, чем подключенные во втором — так что тут имеет место tradeoff, а не однозначный проигрыш.

Pzz>неполная совместимость с Си (особенно раздражает необходимость явно преобразовывать void*)


В C++ нет необходимости приводить void* к чему-либо, поскольку malloc() в нём есть лишь для обратной совместимости, а не как рекомендуемый способ выделения памяти. Use new, Luke!

Pzz> некоторые фичи C++, типа исключений, имеют свою цену в генерируемом годе, даже если их не использовать



Сроду не требовалось платить за то, что не используешь.

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

А зачем компилятору одного языка заботиться о совместимости с другим? C++ — это всё-таки другая парадигма программирования а не просто ООП-расширение для старого доброго C. Соответственно, в нём всегда рекомендовалось, например, использовать cout << foo << endl; вместо printf("%d\n", foo);. Таким образом, имея файл с расширением .cpp, не стоит ожидать его совместимости с .c. Если нужно кровь из носа иметь в некотором проекте куски, компилируемые на обоих языках, их можно явно компилировать как C-код. Либо (для любителей потрахаться) добавить в процесс отдельный шаг с компиляцией тем компилятором C, совместимость с которым требуется — исключительно для проверки.
fnord
Re[8]: C1X - новый стандарт си.
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.08.10 09:20
Оценка:
Здравствуйте, MaxSem, Вы писали:

MS>Убогое время компиляции в C/C++ связано не с фичами языка, а с допотопной моделью компиляции с отдельным этапом препроцессинга, кучей подключаемых хедеров, объектников и .lib'ов. Естественно, если вы на голых сях напишете программу только с #include <stdio.h>, то она будет компилироваться заметно быстрее, чем плюсплюсовая, в которой подключена добрая половина boost'а. Однако сравнение некорректно в том плане, что подключенные в первом случае библиотеки дают гораздо меньше функционала, чем подключенные во втором — так что тут имеет место tradeoff, а не однозначный проигрыш.


Я сравнивал время компиляции одного и того же текста, с одними и теми же #include. Результат чуть выше по thread'у, разница в несколько раз. Угадайте, в чью пользу

Pzz>>неполная совместимость с Си (особенно раздражает необходимость явно преобразовывать void*)


MS>В C++ нет необходимости приводить void* к чему-либо, поскольку malloc() в нём есть лишь для обратной совместимости, а не как рекомендуемый способ выделения памяти. Use new, Luke!


Минуточку, минуточку. Мне тут впаривают компилятор C++ в качестве компилятора Си, только лучше. Какой нафиг use new? В Си нет никакого new.

Pzz>> некоторые фичи C++, типа исключений, имеют свою цену в генерируемом годе, даже если их не использовать


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

MS>А зачем компилятору одного языка заботиться о совместимости с другим? C++ — это всё-таки другая парадигма программирования а не просто ООП-расширение для старого доброго C. Соответственно, в нём всегда рекомендовалось, например, использовать cout << foo << endl; вместо printf("%d\n", foo);. Таким образом, имея файл с расширением .cpp, не стоит ожидать его совместимости с .c. Если нужно кровь из носа иметь в некотором проекте куски, компилируемые на обоих языках, их можно явно компилировать как C-код. Либо (для любителей потрахаться) добавить в процесс отдельный шаг с компиляцией тем компилятором C, совместимость с которым требуется — исключительно для проверки.

Парой мессаджей выше звучало утверждение, что незачем, мол, поддерживать Си, если есть C++, который и Си компилирует, и все новые расширения поддерживает, и разве что лапти не штопает. Вот затем и надо, что C++ — не Си, хоть свиду и похож.
Re[7]: C1X - новый стандарт си.
От: пыщьх http://rsdn_user.livejournal.com
Дата: 23.08.10 15:46
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Время компиляции,

Для embedded и т.п. (где Си обычно и используется) — несущественно, ибо 1 сек vs. 2 сек.
Pzz>неполная совместимость с Си (особенно раздражает необходимость явно преобразовывать void*)
80% преобразований void * — это malloc(). Вместо него в C++ есть new(). Остальные 20% легко лечатся использованием template<>. В любом случае, несильно причесать код, ИМХО, намного проще, чем создавать новый стандарт и переводить на него компиляторы.
Pzz>некоторые фичи C++, типа исключений, имеют свою цену в генерируемом годе, даже если их не использовать,
Not really. По крайней мере, в GCC и MSVC, C-шный файл, собранный C++-компилятором будет идентичен собранному C-шным компилятором (после линковки и убиения debug info).
Pzz>отсутствие предупреждений о несовместимости исходного кода с Си (что может быть важным, если предполагается портабельность этого кода), и т.д. и т.п.
Очевидно, если мы используем фичи С++, то код будет несовместим с Си. Зачем тогда предупреждения? Собираем C-шным компилятором и получаем список ошибок.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[8]: C1X - новый стандарт си.
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.08.10 18:54
Оценка:
Здравствуйте, пыщьх, Вы писали:

Pzz>>Время компиляции,

П>Для embedded и т.п. (где Си обычно и используется) — несущественно, ибо 1 сек vs. 2 сек.

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

Pzz>>неполная совместимость с Си (особенно раздражает необходимость явно преобразовывать void*)

П>80% преобразований void * — это malloc(). Вместо него в C++ есть new(). Остальные 20% легко лечатся использованием template<>. В любом случае, несильно причесать код, ИМХО, намного проще, чем создавать новый стандарт и переводить на него компиляторы.

Спасибо. И потерять при этом обратную совместимость с сишными компиляторами?

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

П>Очевидно, если мы используем фичи С++, то код будет несовместим с Си. Зачем тогда предупреждения? Собираем C-шным компилятором и получаем список ошибок.

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