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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> куда "идет" С++11 и С++17 ? 
V
    Опции темы
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   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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