Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> куда "идет" С++11 и С++17 ? 
V
    Опции темы
boostcoder
Дата 13.2.2012, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



только недавно утвердили С++11, но уже сейчас завалил комитет proposal`ами.

любопытно, чего еще не хватает программистам(кроме тех, кто инструментом пользоваться не умеет), и куда новые фитчи ведут ведут С++?

порадовала идея со static if () {} (1 и 2)

еще больше порадовал Sequential access to data members and base sub-objects: http://www.open-std.org/jtc1/sc22/wg21/doc.../2012/n3326.pdf

так же A Standard Programmatic Interface for Asynchronous Operations: http://www.open-std.org/jtc1/sc22/wg21/doc.../2012/n3327.pdf
еще Resumable Functions: http://www.open-std.org/jtc1/sc22/wg21/doc.../2012/n3328.pdf

кстати, после появления в стандарте многопоточности, пришла пора стандартизовать асинхронность ;)


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

зы
свежая, и абсолютно бесплатная версия драфта С++11 от 2012-01-16.

Это сообщение отредактировал(а) boostcoder - 17.2.2012, 00:40
PM WWW   Вверх
boostcoder
Дата 13.2.2012, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



вот и предложение о включении boost.filesystem: http://www.open-std.org/jtc1/sc22/wg21/doc...2012/n3335.html

Добавлено через 2 минуты и 26 секунд
и запрос стандартизовать транзакции. которые, кстати, реализованы в Intel и в GCC-4.7.0.

Добавлено через 9 минут и 19 секунд
просьба стандартизовать C++ Language Constructs for Parallel Programming. который реализован в компиляторах Intel и в форке GCC под названием CilkPlus. дока/спецификация.
PM WWW   Вверх
boostcoder
Дата 13.2.2012, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



и модули: Modules in C++.
и Scoping of operator new. хотя не очень понимаю смысла.. можно просто использовать new и delete в скопе транзакции.

boost.range smile кто-то только сегодня говорил об этом.

PM WWW   Вверх
borisbn
Дата 16.2.2012, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Чего бы ещё хотелось - конструктор/деструктор для типа. Не для объекта, а именно для типа. В конструкторе, например, можно инициализировать статические члены класса.
В boost.filesystem реквестирую итерирование по каталогу по маске. Совершенно непонятно, почему они это не сделали  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 16.2.2012, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(borisbn @  16.2.2012,  10:40 Найти цитируемый пост)
Чего бы ещё хотелось - конструктор/деструктор для типа. Не для объекта, а именно для типа. В конструкторе, например, можно инициализировать статические члены класса.

покажи на примере. а то не понимаю..

Цитата(borisbn @  16.2.2012,  10:40 Найти цитируемый пост)
В boost.filesystem реквестирую итерирование по каталогу по маске. Совершенно непонятно, почему они это не сделали

ну хз.. может это вовсе не задача итератора... он же итератор.
PM WWW   Вверх
mes
Дата 16.2.2012, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  16.2.2012,  09:47 Найти цитируемый пост)
покажи на примере. а то не понимаю..

что то типо этого :
Код

struct A 
{
   static int i;
};
int A::i=5;


Код

struct A 
{
   static int i;
   
   static A () : i (5) {}   
};




--------------------
PM MAIL WWW   Вверх
borisbn
Дата 16.2.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(mes @  16.2.2012,  11:10 Найти цитируемый пост)
что то типо этого :

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

вот ещё вспомнил (до-диез навеял) - если перед строкой в кавычках стоит символ @, то строка не ескейпится.
@"\\192.168.1.1:C:\temp\do\not\escape" вместо "\\\\192.168.1.1:C:\\temp\\do\\not\\escape"
для регэкспов два слеша для адреса в начале строка выглядит вообще ужасно
"\\\\\\\\(\\d+" и т.д.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
serghd
Дата 17.2.2012, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



а следующим будет точно c++12? Не с++14 или типа того?
PM MAIL   Вверх
boostcoder
Дата 17.2.2012, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



следующим будет С++17. отредактировал топик smile

но до него, как говорит комитет, для С++11 выйдет корректирующий документ.


Это сообщение отредактировал(а) boostcoder - 17.2.2012, 00:38
PM WWW   Вверх
borisbn
Дата 17.2.2012, 06:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



> отредактировал топик
опппппа… а как?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 17.2.2012, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(borisbn @  16.2.2012,  11:40 Найти цитируемый пост)
Чего бы ещё хотелось - конструктор/деструктор для типа. Не для объекта, а именно для типа.
Есть один подводный камень - порядок инициализации. Т.е. может получиться так, что один конструктор типов будет использовать тип, для которого конструктор еще не вызван.
PM   Вверх
borisbn
Дата 17.2.2012, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(bsa @  17.2.2012,  10:29 Найти цитируемый пост)
Есть один подводный камень - порядок инициализации.

Хммм. Действительно. Интересно, а как это в шарпе решили (и решили ли) ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
502
Дата 17.2.2012, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Цитата(bsa @  17.2.2012,  10:29 Найти цитируемый пост)
Т.е. может получиться так, что один конструктор типов будет использовать тип, для которого конструктор еще не вызван. 

это как? что-то до меня не доходит
PM MAIL   Вверх
newbee
Дата 17.2.2012, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(502 @  17.2.2012,  11:44 Найти цитируемый пост)
это как? что-то до меня не доходит 
Класс А использует поле класса Б, которое может быть неинициализировано. Точно такая же фигня при ручном создании "инициализаторов", когда нужно выполнить настройки до main.

Добавлено через 2 минуты и 13 секунд
А вот в делфи, smile как мне подсказывает один хацкер, можно указать порядок инициализации файлов, а внутри файлов инициализаторы выполняются друг за другом.

Добавлено через 3 минуты и 32 секунды
В С++ дефакто это тоже можно через порядок файлов линковщику, но официально это undefined behaviour.


--------------------
You're face to face
With man who sold the world
PM   Вверх
boostcoder
Дата 17.2.2012, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(borisbn @  17.2.2012,  06:14 Найти цитируемый пост)
опппппа… а как?

как отредактировал? или, что отредактировал?

Цитата(newbee @  17.2.2012,  10:47 Найти цитируемый пост)
но официально это undefined behaviour

с++ более строгий язык, использующий более строгие трактовки.

PM WWW   Вверх
borisbn
Дата 17.2.2012, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(boostcoder @  17.2.2012,  14:05 Найти цитируемый пост)
как отредактировал? или, что отредактировал?

раньше в названии темы было С++12 (мне дажу уведомлялки на почту приходят с этим заголовком). Теперь в названии - С++17. Вот я и спрашиваю, как ты отредактировал название темы ?

P.S. ааааа. всё. разобрался. нужно просто нажать "редактировать" на первом же сообщении. своём ессно))


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 17.2.2012, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



угу.

PM WWW   Вверх
newbee
Дата 17.2.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(boostcoder @  17.2.2012,  15:05 Найти цитируемый пост)
как отредактировал? или, что отредактировал?
Каким образом ты отредактировал заголовок топика? У меня не получается...

Цитата(boostcoder @  17.2.2012,  15:05 Найти цитируемый пост)
с++ более строгий язык, использующий более строгие трактовки.
Я не понимаю, что ты имеешь в виду, я просто хотела сказать, что в рамках языка линковщика нет и ни в каких стандартах нет гарантии, что завтра это будет продолжать работать.

Я сама один раз сильно поджарилась на этой фигне)) В программе нужно было инциализировать разные модули, ну я сваяла макрос аля функция инициализации, писала-писала, оно долго работало, но настало время добавления еще одного модуля с инициализатором, оно взяло все и рухнуло )) Пришлось из main вручную вызывать правильную цепочку инициализаторов. Если бы при разработке придерживалась ООП-шной архитектуры системы, проблем бы не возникло.


--------------------
You're face to face
With man who sold the world
PM   Вверх
boostcoder
Дата 17.2.2012, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(newbee @  17.2.2012,  14:22 Найти цитируемый пост)
я просто хотела сказать, что в рамках языка линковщика нет

будет.

Цитата(newbee @  17.2.2012,  14:22 Найти цитируемый пост)
Я не понимаю, что ты имеешь в виду

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

порядок инициализации статических переменных - UB.

PM WWW   Вверх
boostcoder
Дата 17.2.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



borisbn уже ответил.
просто клацаешь "редактировать" на топике. там же и название темы изменить можно.


у mes`а так вообще супер способности! он посты свои удалять может! smile 

Это сообщение отредактировал(а) boostcoder - 17.2.2012, 14:35
PM WWW   Вверх
502
Дата 17.2.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Цитата(mes @  17.2.2012,  14:32 Найти цитируемый пост)
точно не могу утверждать, но мне кажется постов не хватает для разрешения..

да, надо 1000
PM MAIL   Вверх
bsa
Дата 18.2.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Было бы хорошо, если бы наконец ввели "правильные" указатели на методы - с привязкой к объекту (bound pointers to member functions). И синтаксис был бы интуитивней, и работы было бы меньше программистам (не пришлось бы использовать всякие boost::bind и boost::function).
Например:
Код
bool (class *method)(int); //мое виденье синтаксиса, но я не настаиваю
...
method = &object.method; //получение - просто и элегантно
...
if (method(10)) //вызов - опять же просто и элегантно
   ...

bool (MyClass::*method2)(int);
method2 = &MyClass::method;
method = &object.(*method2); //получение "правильного" из "обычного"
method2 = static_cast<bool (MyClass::*)(int)>(method); //допустимо только явное преобразование при обратной операции
MyClass *p = static_cast<MyClass*>(method); //допустимо только явное преобразование
На физическом уровне такой указатель имеет фиксированный размер в 2 указателя:
Код
struct {
   void *object;
   bool (*function)(void*,int);
};
Фактически, это тоже самое, что и bind(&MyClass::method, &object, _1), но уже встроенное в язык.

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

Предложение от Borland: n1384

Это сообщение отредактировал(а) bsa - 20.2.2012, 16:38
PM   Вверх
boostcoder
Дата 18.2.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



bsa, да, логично.

PM WWW   Вверх
xvr
Дата 20.2.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(bsa @  18.2.2012,  13:44 Найти цитируемый пост)
Было бы хорошо, если бы наконец ввели "правильные" указатели на методы - с привязкой к объекту.

В BCB такие есть - __closure называются. Насколько мне известно попытка продавить это в стандарт языка успехом не увенчалась  smile 

Кроме того, есть некоторое количество библиотек, которые это реализуют (обычно под именем типа delegate_чего_нибудь или аналогичным)

PM MAIL   Вверх
azesmcar
Дата 20.2.2012, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Хотелось бы finally в стандарте и побольше возможностей для статических проверок.

Это сообщение отредактировал(а) azesmcar - 20.2.2012, 13:43
PM   Вверх
bems
Дата 20.2.2012, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(newbee @  17.2.2012,  10:47 Найти цитируемый пост)
А вот в делфи, smile как мне подсказывает один хацкер, можно указать порядок инициализации файлов, а внутри файлов инициализаторы выполняются друг за другом.
можно поточнее что имеет в виду этот хацкер под файлами и инициализаторами?
Если "инициализатор внутри файла" это конструктор класса, то компилятор всё-таки делает попытку упорядочить вызовы так чтобы избежать использования класса до того, как будет вызван его конструктор. Если там циклическая ссылка, то всё равно всё плохо


Это сообщение отредактировал(а) bems - 20.2.2012, 14:12


--------------------
Обижено школьников: 8
PM MAIL   Вверх
newbee
Дата 20.2.2012, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(bems @  20.2.2012,  15:04 Найти цитируемый пост)
можно поточнее что имеет в виду этот хацкер под файлами и инициализаторами?
Если "инициализатор внутри файла" это конструктор класса, то компилятор всё-таки делает попытку упорядочить вызовы так чтобы избежать использования класса до того, как будет вызван его конструктор
Когда пересекусь, спрошу, если не забуду. По памяти: есть функции со специальным именем - Initizalization или не знаю как, - они выполняются в начале работы программы, их порядок можно как-то задать, например в одном модуле ты создаешь объект в инициализаторе, в другом - как-то его настраиваешь (пример из пальца).

Тут про функции гоdорят... Хочу а) нормальную ламбду с замыканием, б) нормальную переменную-функцию, в которую (с определенной сигнатурой) можно было бы хранить функцию и указатель на метод, связанный с объектом (то, о чем bsa писал), в) продолжения. Надоело на коленке каждый раз все это городить.

Добавлено через 1 минуту и 12 секунд
Но я, как известно, никто и мою "хочу" никого не ебеинтересует.


--------------------
You're face to face
With man who sold the world
PM   Вверх
bems
Дата 20.2.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(newbee @  20.2.2012,  14:21 Найти цитируемый пост)
есть функции со специальным именем - Initizalization или не знаю как, - они выполняются в начале работы программы, их порядок можно как-то задать, например в одном модуле ты создаешь объект в инициализаторе, в другом - как-то его настраиваешь (пример из пальца).
ну да, там порядок задаётся. Но вообще оно не для этого. 



--------------------
Обижено школьников: 8
PM MAIL   Вверх
xvr
Дата 20.2.2012, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(bems @  20.2.2012,  14:04 Найти цитируемый пост)
можно поточнее что имеет в виду этот хацкер под файлами и инициализаторами?

Видимо имеется в виду то, что в Delphi unit (это модуль, которых увы нету в С++) должен явно указывать все unit'ы, которые он использует. И на этапе линковки инициализация всех unit'ов программы выполняется с учетом их зависимостей.

PM MAIL   Вверх
bems
Дата 20.2.2012, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(xvr @  20.2.2012,  14:28 Найти цитируемый пост)
Видимо имеется в виду то, что в Delphi unit (это модуль, которых увы нету в С++) должен явно указывать все unit'ы, которые он использует. И на этапе линковки инициализация всех unit'ов программы выполняется с учетом их зависимостей.
да, но это не то, о чем была речь. Речь была именно о конструкторах классов (не экземпляров), а это другое (хотя реализовано почти так же)

Добавлено через 5 минут и 15 секунд
Цитата(xvr @  20.2.2012,  14:28 Найти цитируемый пост)
И на этапе линковки
я бы так смело не говорил на каком этапе



--------------------
Обижено школьников: 8
PM MAIL   Вверх
bsa
Дата 20.2.2012, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(xvr @  20.2.2012,  14:37 Найти цитируемый пост)
В BCB такие есть - __closure называются. Насколько мне известно попытка продавить это в стандарт языка успехом не увенчалась

Конечно не увенчалась. Borland решила одним документом провести три "фичи":
- bound pointers to member functions
- properties (надстройка над геттерами/сеттерами)
- Enriched RTTI (тип доступа класса - published)

Все что я нашел, это дело закончилось "предложение не готово для включения в C++0x, но может быть перерассмотрено позже".

На comp.std.c++ шли довольно жаркие дискуссии по поводу этих указателей. Александреску в 1999 году какую-то нерабочую хрень в виде шаблона closure<>  и кучи наворотов предлагал. И все это вместо того, чтобы внести в стандарт такую простую и очевидную вещь! Да, у нее есть недостатки, например: неочевиден синтаксис в случае присутствия перегруженных методов (но он и для существующих указателей не особо очевиден).
PM   Вверх
boostcoder
Дата 20.2.2012, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(xvr @  20.2.2012,  13:37 Найти цитируемый пост)
попытка продавить это в стандарт языка успехом не увенчалась

не замечал такого предложения..

Цитата(azesmcar @  20.2.2012,  13:42 Найти цитируемый пост)
Хотелось бы finally в стандарте

что это?

PM WWW   Вверх
azesmcar
Дата 20.2.2012, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(boostcoder @  20.2.2012,  17:35 Найти цитируемый пост)
что это?

Код

try
{
   // пытаемся
} catch (...)
{
   // срабатывает при исключении
} finally
{
   // срабатывает всегда
}

на сегодняшний день RAII заменяет отсутствие finally в стандарте языка, но иногда использовать finally проще и логичнее.
PM   Вверх
boostcoder
Дата 20.2.2012, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



ну да, это нужно.
но признаюсь, так же не видел этого предложения..
PM WWW   Вверх
bsa
Дата 20.2.2012, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(boostcoder @  20.2.2012,  18:35 Найти цитируемый пост)
не замечал такого предложения..

Цитата(bsa @  18.2.2012,  14:44 Найти цитируемый пост)
Предложение от Borland: n1384


PM   Вверх
boostcoder
Дата 20.2.2012, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



хорошая новость!

несколько дней тому, началось обсуждение планов и принципов развития стандартной библиотеки С++: TR2 is dead; multiple TR's coming instead.

особенно радует то, что смягчились требования по принятию библиотек в состав стандартной.
приоритеты на ближайшее время таковы:
  • SG1: Concurrency and Parallelism (chair: Hans Boehm). This is the old Concurrency sub-group.
  • SG2: Modules (chair: Doug Gregor). A new sub-group of the committee's evolution working group (EWG).
  • SG3: File System (chair: Beman Dawes). A LWG sub-group to handle the Boost.Filesystem work item approved at the meeting.
  • SG4: Networking (chair: Kyle Kloepper). A LWG sub-group to handle the Boost.Asio work item approved at the meeting.
модули!
файловая система!!
сеть!!!

Добавлено через 3 минуты и 27 секунд
хотя по поводу модулей, я что-то не въехал.. это же в основном поддержка со стороны препроцессора/компилятора, а не со стороны библиотек...
PM WWW   Вверх
boostcoder
Дата 21.2.2012, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(azesmcar @  20.2.2012,  13:42 Найти цитируемый пост)
Хотелось бы finally в стандарте

мнение Страуструпа по этому поводу: http://www2.research.att.com/~bs/bs_faq2.html#finally

PM WWW   Вверх
borisbn
Дата 21.2.2012, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(boostcoder @  20.2.2012,  22:55 Найти цитируемый пост)
это же в основном поддержка со стороны препроцессора/компилятора

Это ж здорово! Чем больше требований к компилятору введут в стандарт, тем проще будет писать кросскомпиляторные программы. К тому же там наверняка будут требования к оформлению модулей в коде


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
sergioK1
Дата 22.5.2012, 18:07 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(bsa @ 18.2.2012,  12:44)
Было бы хорошо, если бы наконец ввели "правильные" указатели на методы - с привязкой к объекту (bound pointers to member functions). И синтаксис был бы интуитивней, и работы было бы меньше программистам (не пришлось бы использовать всякие boost::bind и boost::function).
Например:
Код
bool (class *method)(int); //мое виденье синтаксиса, но я не настаиваю
...
method = &object.method; //получение - просто и элегантно
...
if (method(10)) //вызов - опять же просто и элегантно
   ...

bool (MyClass::*method2)(int);
method2 = &MyClass::method;
method = &object.(*method2); //получение "правильного" из "обычного"
method2 = static_cast<bool (MyClass::*)(int)>(method); //допустимо только явное преобразование при обратной операции
MyClass *p = static_cast<MyClass*>(method); //допустимо только явное преобразование
На физическом уровне такой указатель имеет фиксированный размер в 2 указателя:
Код
struct {
   void *object;
   bool (*function)(void*,int);
};
Фактически, это тоже самое, что и bind(&MyClass::method, &object, _1), но уже встроенное в язык.

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

Предложение от Borland: n1384

типа Java/C# reflection ? 
Осталось еще все сделать все функции virtual, segmentation fault  отлавливать в сatch и GC добаваить , и  все нету больше С++  smile  

С++ 12 придумали в 1995году, под названием Java  smile  правда так и недоделали нормальную возможность прямого доступа к памяти,  похоже комитет хочет имеено этого ,

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





Это сообщение отредактировал(а) sergioK1 - 22.5.2012, 18:15
PM MAIL   Вверх
volatile
Дата 23.5.2012, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(sergioK1 @  22.5.2012,  18:07 Найти цитируемый пост)
С останеться как был и гап между ним и С++ вырастет , и кто то должен будет его заполнить, 
мне пока не понятно , 

Дык пока вроде ничего значительно нарушающего обратную совместимость не приняли? или я ошибаюсь?
Так что можно писать в любом стиле покрывающем широкий гап от С до С++12

Думаю и указатели не приняли чтоб сохранить обратную совместимость.



PM MAIL   Вверх
sergioK1
Дата 23.5.2012, 08:51 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(volatile @ 22.5.2012,  23:33)
Так что можно писать в любом стиле покрывающем широкий гап от С до С++12

Думаю и указатели не приняли чтоб сохранить обратную совместимость.

Можно то можно но осторожно, от програмиста теперь будет требоваться знать все эти уровни ,  
что бы понимать код других,
т,е вместо того чтобы писать код, он будет вынужден разбираться в новых фичах, 
и еще одна проблема которая только усугубиться IMHO, новые фичи начнут применять не по назначению, 
PM MAIL   Вверх
k0rvin
Дата 23.5.2012, 09:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Зачем finally при наличии RAII?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
drug007
Дата 23.5.2012, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



finally, имхо, неудачная реализация хорошей идеи. Иногда нужно обработать и общий случай с помощью finally, и конкретную ошибку c помощью catch и по дельфям помню, что получались некрасивые многоэтажные вложенные конструкции из finally и except (дельфийский  catch), на пару строк кода могло выйти 6-7 строк этих самых конструкций. В этом плане, на мой взгляд, эффективнее подход D с его выражением scope(), погармоничнее finally.

А вообще язык переусложняется и обратная совместимость начинает тяготить язык и усложнять жизнь разработчикам компиляторов. Рано или поздно языку придется отказаться от обратной совместимости, иначе язык задохнется под своей же тяжестью. Неплохо было бы все-таки ввести стандарт на ABI, принять модули и реализовать выбор версии языка для модуля (если рантайм у версий языка один и тот же, это не будет сложно). Тогда можно будет обеспечить совместимость не усложняя язык и мешая все в кучу, а просто раздельно компилировать модули с учетом версии языка, используемой в данном модуле. На уровне компоновщика уже разницы между стандартами не будет и он все слинкует. Главное стандарт на ABI. Тогда можно будет даже (иногда smile ) статически линковать с объектным кодом других языков.

Главное, сборщик мусора не вводить в стандарт smile.
PM MAIL   Вверх
k0rvin
Дата 23.5.2012, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(drug007 @ 23.5.2012,  10:04)
finally, имхо, неудачная реализация хорошей идеи. Иногда нужно обработать и общий случай с помощью finally, и конкретную ошибку c помощью catch и по дельфям помню, что получались некрасивые многоэтажные вложенные конструкции из finally и except (дельфийский  catch), на пару строк кода могло выйти 6-7 строк этих самых конструкций.


В этом плане, на мой взгляд, эффективнее подход D с его выражением scope(), погармоничнее finally.

Просто в делфе убогий синтаксис и разделение try ... except и try ... finally. В более нормальных языках это выглядит примерно как
Код

try {
    ...
} catch (IOException e) {
    ...
} catch (Exception e) {
    ...
} finally {
    ...
}


Цитата(drug007 @ 23.5.2012,  10:04)
В этом плане, на мой взгляд, эффективнее подход D с его выражением scope(), погармоничнее finally.

В C++ и это не нужно, т.к.
Код

void foo() {
    File* file = new File("/path/to/file");
    FileOwner owner(file); // в конструкторе FileOwner файл открывается
    try {
        // работаем с файлом
    } catch (...) {
        // обрабатываем исключение
    }
} // автоматический вызов деструктора ~FileOwner, который закроет файл и удалит объект file



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
bsa
Дата 23.5.2012, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(k0rvin @  23.5.2012,  12:09 Найти цитируемый пост)
    File* file = new File("/path/to/file");
    FileOwner owner(file); // в конструкторе FileOwner файл открывается

Велосипед. Обычно делают так:
Код
File file("/path/to/file");
if (!file.open(<флаги открытия>) {
 ...
}
...

PM   Вверх
k0rvin
Дата 23.5.2012, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(bsa @ 23.5.2012,  11:16)
Цитата(k0rvin @  23.5.2012,  12:09 Найти цитируемый пост)
    File* file = new File("/path/to/file");
    FileOwner owner(file); // в конструкторе FileOwner файл открывается

Велосипед. Обычно делают так:
Код
File file("/path/to/file");
if (!file.open(<флаги открытия>) {
 ...
}
...

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

Добавлено через 2 минуты и 28 секунд
И открытие файла, насколько я знаю, производится таки в конструкторе.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Ivan.
Дата 23.5.2012, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: 1
Всего: 2



Еще бы очень хотелось иметь возможность создавать строковые темплейты:
Код
template<const char Str[]>
struct TStruct {
    static const char* T = Str;
};



--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
sergioK1
Дата 23.5.2012, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
baldina
Дата 23.5.2012, 11:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(Ivan. @  23.5.2012,  11:37 Найти цитируемый пост)
Еще бы очень хотелось иметь возможность создавать строковые темплейты:
их и сейчас можно.
Код

#include <iostream>
template <const char *S>
struct foo {
  static void echo () { std::cout << S << std::endl; }
};

char Hello[] = "Hello";
char World[] = "World";

int main () {
  foo<Hello>::echo();
  foo<World>::echo();
}

хотелось бы литералы использовать

Код

#include <iostream>
template <const char *S>
struct foo {
  static void echo () { std::cout << S << std::endl; }
};

int main () {
  foo<"Hello">::echo();
  foo<"World">::echo();
}


PM MAIL   Вверх
Ivan.
Дата 23.5.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: 1
Всего: 2



Цитата(baldina @  23.5.2012,  11:49 Найти цитируемый пост)
их и сейчас можно.

Не совсем то. Необходимо создавать переменные, а хотелось бы без них.
Для чего мне это нужно:
Код

struct TStruct {
    const char* Name;
    ...
};
extern const char PROGMEM Name1[];
const char Name1[] = "Abcd";
const TStruct S = {Name1, ...};
//А хочется вот так:
const TStruct S = {TProgMemString<"Abcd">::Text, ...};
//А с литералами еще лучше:
const TStruct S = {"Abcd"_ProgMem, ...};

Но все упирается в строковый шаблон

Добавлено через 3 минуты и 19 секунд
Как только я узнал про литералы - у меня сразу родилась идея создать литерал создающий строку в кодовой памяти, но через пол часа мучений я понял, что это не возможно из-за вышеуказанного ограничения с темплетами

Это сообщение отредактировал(а) Ivan. - 23.5.2012, 12:18


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
boostcoder
Дата 23.5.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



считай хеш-сумму строки в копайл-тайме, и используй ее для ассоциации со строкой.

PM WWW   Вверх
Ivan.
Дата 23.5.2012, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: 1
Всего: 2



Максимум к чему я смог придти изучив эту статью - это построить специализированный шаблон создания строки в кодовой памяти:
Код

template<const char *s, size_t N> struct     TProgStr;
template<const char *s          > struct     TProgStr<s, 2>{static const char PROGMEM T[2];};
template<const char *s          > const char TProgStr<s, 2>::T[2] = {s[0], s[1]};

template<size_t N> constexpr const char* ProgStr   (const char (&s)[N]);
template<        > constexpr const char* ProgStr<2>(const char (&s)[2]){return TProgStr<s, 2>::T;}
const char* T = ProgStr("a");

но и тут вылезает непонятная ошибка:
Error    1    in convert_nontype_argument, at cp/pt.c:5780


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
drug007
Дата 23.5.2012, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(k0rvin @ 23.5.2012,  11:09)
 
Цитата(drug007 @ 23.5.2012,  10:04)
В этом плане, на мой взгляд, эффективнее подход D с его выражением scope(), погармоничнее finally.

В C++ и это не нужно, т.к.

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

  scope(exit) {
     close(file);
  }
  file = open("/path/to/file");

весь код ясен в месте написания, не надо смотреть класс - при выходе по любой причине из текущего блока компилятор вызовет close(). 
Но, безусловно, это не самая потрясающая фича для языка, просто сравнил с finally.
PM MAIL   Вверх
boostcoder
Дата 23.5.2012, 22:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Ivan. @  23.5.2012,  16:54 Найти цитируемый пост)
Error    1    in convert_nontype_argument, at cp/pt.c:5780

очень информативно %)
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1145 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.