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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чего Вам не хватает в стандарте Си++, Собираем предложения 
:(
    Опции темы
borisbn
Дата 13.4.2011, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Здравствуйте !
Предлагаю в этой теме собирать предложения/пожелания к стандарту Си++.
Отдаю себе отчёт, что это никак не повлияет на комитет ISO, но просто интересно, чего людям не хватает.

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

Начнём.

1. Возможность задавать параметры по-умолчанию не только в конце списка аргументов, но и в начале/середине. При этом вызов будет выглядеть следующим образом:
Код

// Описание
void foo( int a, int b, int x = 0, int y );
// вызов
foo( 3, 42, , 20 );


2. В std::string добавить функции преобразования числа в строки и обратно. Типа такого
Код

class string {
...
static string num( int val, int length = 0, char fill = '0', int base = 10 );
static string num( double val, int length = 0, int precision, char fill = '0' );
int toInt( bool * ok = 0 );
double toDouble( bool * ok = 0 );
};

и т.п.
Объясню: почти наверняка у каждого есть скелет в шкафу свои обёртки над stringstream или sprintf... Почему бы не сделать это централизовано...

3. Позаимствовать у До-диеза unescape строки (не знаю, как это правильно называется), чтобы не нужно было вставлять в строку бэкслэши. Типа такого
Код

path = @"\\host\path\to\file";
или так
path = @"\\host\path\to\file" "\n"; // @ действует только до закрывающей кавычки



Это сообщение отредактировал(а) borisbn - 13.4.2011, 10:32


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


Эксперт
****


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

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



Там уже есть модульность?


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


Новичок



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

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



Не совсем к стандарту языка, скорее к IDE предложение.
Добавить возможность временного кода, который исполняется только на debug-компиляции.
Например, вам для отладки нужно записывать отладочный лог в базу данных, чего не нужно будет делать в релизе.

Код

int main()
{
    int i = 42;
    debug
    {
        fopen(file);
        fwrite(file, time(now);
        fclose(file);
    }
    return i;
}


В dubug-компиляции выполняет весь код выше, а в релизе компилятор должен игнорировать конструкцию debug{}.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
bems
Дата 13.4.2011, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



TIT, а чем условная компиляция не подходит?


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


Эксперт
****


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

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



Цитата(bems @  13.4.2011,  09:15 Найти цитируемый пост)
Там уже есть модульность?

а что это ? можно с примером, чтоб понятней было ?

TIT, а чем это "вкуснее", чем
Код

int main()
{
    int i = 42;
    #ifdef _DEBUG
        fopen(file);
        fwrite(file, time(now);
        fclose(file);
    #endif
    return i;
}


Это сообщение отредактировал(а) borisbn - 13.4.2011, 09:33


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


Эксперт
****


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

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



Цитата(borisbn @  13.4.2011,  09:01 Найти цитируемый пост)
void foo( int a, int b, int x = 0, int y );

ну и что делать компилятору если он видит foo(1, 2, 3);
Тройка уходит в х (и возникает ошибка "недостаточно параметров") или у? И почему?

Добавлено через 1 минуту и 14 секунд
Цитата(borisbn @  13.4.2011,  09:31 Найти цитируемый пост)
а что это ? можно с примером, чтоб понятней было ? 
нечто менее убогое чем директива #include препроцессора. Например вроде юнитов Паскаля



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


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

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



Предлагаю сделать стандартными контейнеры QT и часть типов -- QString, QVariant. Как вспомню еще - дополню)


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
borisbn
Дата 13.4.2011, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bems @  13.4.2011,  09:32 Найти цитируемый пост)
ну и что делать компилятору если он видит foo(1, 2, 3);Тройка уходит в х (и возникает ошибка "недостаточно параметров") или у? И почему?

не... вызов должен быть такой
Код

foo(1, 2, , 3);

а твой вариант должен выдавать ашипку


Цитата(bems @  13.4.2011,  09:32 Найти цитируемый пост)
нечто менее убогое чем директива #include препроцессора. Например вроде юнитов Паскаля

есть нечто подобное в ActiveX (type-library и т.п.), но в итоге всё сводится к генерации h-ников и тем же #include'ам

в общем нету.


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


Эксперт
****


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

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



Цитата(borisbn @  13.4.2011,  09:36 Найти цитируемый пост)
вызов должен быть такой
окей. Не вижу в таком варианте много пользы, но пусть будет

Цитата(borisbn @  13.4.2011,  09:36 Найти цитируемый пост)
есть нечто подобное в ActiveX

не-не, активикс и не плюсоспецифичен

Цитата(borisbn @  13.4.2011,  09:36 Найти цитируемый пост)
в общем нету

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


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


Эксперт
****


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

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



Цитата(bems @  13.4.2011,  09:41 Найти цитируемый пост)
окей. Не вижу в таком варианте много пользы, но пусть будет

для заключительных параметров это сделано и, в общем-то, удобно
Код

void replaceString( string where, string before, string after, bool caseSens = false, bool replaceAll = true );
вызов:
replaceString( "A quick brown fox jumps over a lazy dog", "a", "the" );
// Гыыы, получится lthezy dog. пусть это будет новая порода :)

а если нужно, например, указать диапазон [min;max], и в большинстве случаев min=0...
Сейчас приходится либо менять их местами (полный бред)
Код

void setDiap( int max, int min = 0 );

либо не использовать параметр по-умолчанию
Код

void setDiap( int min, int max );

а хотелось бы так
Код

void setDiap( int min = 0, int max );
вызов setDiap( , 100 );



Это сообщение отредактировал(а) borisbn - 13.4.2011, 10:34


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


Эксперт
****


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

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



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

Это можно сделать и в текущем С++, но это будет либо громоздко, либо накладно, либо недостаточно избирательно  smile 

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


Эксперт
****


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

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



xvr, не совсем понял, абстрактые интерфейсы ?
Можешь привести примерчик, как бы это выглядело ?


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


Опытный
**


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

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



borisbn
Цитата(borisbn @  13.4.2011,  08:01 Найти цитируемый пост)
1. Возможность задавать параметры по-умолчанию не только в конце списка аргументов, но и в начале/середине. При этом вызов будет выглядеть следующим образом:


Выглядит как-то криво чессслово. Уж тогда лучше как в python к примеру

Код

def foo(a, b, c=5, *args, **kwargs):
    pass

foo(1, 2, 7, x1=10, x2=12)




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


uploading...
****


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

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



1. побольше возможностей для compile-time проверок.
Например ключевое слово override как в C# значительно бы помогло при работе с виртуальными функциями. Также неплохо было бы иметь что-то вроде sealed.
Еще неплохо было бы иметь compile-time спецификацию исключений вместо того недоразумения, что есть сейчас.

2. параллельные алгоритмы
3. эффективная реализация thread-safe контейнеров
4. thread-pool
5. нормальный и не тормозной аналог sprintf-а.
6. добавить в стандарт библиотеку работы с сетью (возможно asio)
7. сериализация и отражения

пока это, потом еще дополню.

...естественно я это пишу с учетом наличия нового стандарта.

Это сообщение отредактировал(а) azesmcar - 13.4.2011, 14:06
PM   Вверх
xvr
Дата 13.4.2011, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(borisbn @ 13.4.2011,  12:34)
xvr, не совсем понял, абстрактые интерфейсы ?
Можешь привести примерчик, как бы это выглядело ?

Пример (прямо из текущего проекта).

Есть некоторый модуль, который занимается чтением объектных файлов (в ELF формате), извлечением из них кода (отдельно для каждой секции кода ELF файла) и некоторой символьной информации, и складывает это все в некоторый поток (в самопальную базу данных).

Корень всего модуля - класс File. Ему дают имя ELF файла, он его читает и делает набор экземпляров классов Section.
Один экземпляр Section описывает 1 секцию кода. Он содержит собственно образ кода, таблицу релокаций и таблицу символов (это еще один класс - Symbols).

Очевидно, что у всех этих классов есть 2 набора интерфейсов - для чтения и разбора исходного ELF файла и для доступа к результатам разбора.

Второй набор интерфейсов является public интерфейсом всего модуля, а первый набор (чтение ELF файла) нужен только для начального чтения файла (он весь покрывается единственным public методом File::open() )

Проблема как раз в 1м наборе интерфейсов. Он должен быть public для всех классов, входящих в модуль (File, Section, Symbols) и private для внешнего мира.

Вот этого и не хватает


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

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

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

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

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


 




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


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

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