LINUX.ORG.RU

C++0x: концептов не будет

 ,


0

0

Комитет по стандартизации ISO языка программирования С++ на июльском собрании принял решение отказаться от идеи концептов в новом стандарте. Основных причины две - сомнительная польза от столь существенного нововведения и сырость текущего предложения: за шесть лет разработки авторам так и не удалось определиться с полным и однозначным описанием.

Концепты предполагали дать возможность наложения ограничений на обобщённые типы в шаблонах функций и классов; можно провести аналогию с классами типов из Haskell.

По словам Майкла Вонга, члена комитета по стандартизации C++, пересмотра данного решения стоит ожидать не ранее чем через пять лет. Стоит заметить, что ранее из проекта стандарта была выброшена идея сборщика мусора; причиной была названа излишняя сложность в реализации.

Статья Страуструпа «Simplifying the Use of Concepts»: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2906.pdf

Статья Вонга (часть 1): http://www-949.ibm.com/software/rational/cafe/blogs/cpp-standard/2009/07/20/the-view-or-trip-report-from-the-july-2009-c-standard-meeting

Статья Вонга (часть 2): http://www-949.ibm.com/software/rational/cafe/blogs/cpp-standard/2009/07/20/the-view-or-trip-report-from-the-july-2009-c-standard-meeting-part-2

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

Мде... а ты точно уже не студент? Потому что студню, который только что освоил Си и прется от крутизны (своей и языка), такие заявления простить еще можно. Но для действующего прогера - это клиника...

tailgunner ★★★★★ ()

Re: C++0x: концептов не будет

Лямбды-то хоть живы еще? Или тоже зарежут? :(

rmammoth ()
Ответ на: Re: C++0x: концептов не будет от Manhunt

Re: C++0x: концептов не будет

Я намекаю, что это было круто в старых версиях компилятора. В современных компиляторах после оптимизации оно итак будет register, если компилятор "видит", что переменная будет менять свое значение часто.

funky_dennis ()

Re: C++0x: концептов не будет

Без паники :) Фактически это значит, что идея концептов отдана на откуп производителям компиляторов. Обкатают в виде нестандартных расширений С++, а там и в Стандарте появится.

greenMind ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

> Что, 2.95.хх тоже умел такое? :)

Думаю, да, но не в этом пойнт. Зачем делать _такую_ оптимизацию вручную? Лптимизируй алгоритмы, а оптимизацию кода оставь компилятору.

tailgunner ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

Объясню на пальцах - сейчас можно не беспокоиться о скорости выполнения участков кода, так как компиляторы стали настолько суровы, что программисты будут скоро не нужны. Можно будет писать прямо словами на своем родном языке :) Компилятор сделает наиболее оптимальный алгоритм выполнения задачи :)

funky_dennis ()
Ответ на: Re: C++0x: концептов не будет от tailgunner

Re: C++0x: концептов не будет

Да что такое :) Алгоритмы нужно оптимизировать былокодерам. Вменяемый программист пишет код, скорость которого упирается в CPU или IO, где кроме как хардварного апгрейда (масштабирование вертикально) или масштабирования вширь производительность не увеличить.

funky_dennis ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

Вроде ж в ридонли собрались? ;)

>Компилятор сделает наиболее оптимальный алгоритм выполнения задачи :) 
Да, но это будет не родственник C++ :)

impfp ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

> Алгоритмы нужно оптимизировать былокодерам. Вменяемый программист пишет код, скорость которого упирается в CPU или IO

Спасибо, поржал.

> Я намекаю, что это было круто в старых версиях компилятора.

В суровые 80-е -- наверное.

Manhunt ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

> Алгоритмы нужно оптимизировать былокодерам

Ааааа я повелся на троллинг!!1111 %)

> Вменяемый программист пишет код, скорость которого упирается в CPU или IO, где кроме как хардварного апгрейда (масштабирование вертикально) или масштабирования вширь производительность не увеличить.

причем этот тролль еще и не умеет выражать свои мысли :D

tailgunner ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от impfp

Re: C++0x: концептов не будет

>>Компилятор сделает наиболее оптимальный алгоритм выполнения задачи :)
>Да, но это будет не родственник C++ :)


Боюсь, без квантовых компьютеров (чтобы решать np-полные задачи) этого не будет. Да и с ними - не факт.

Manhunt ★★★★★ ()

Re: C++0x: концептов не будет

Мать твою. А смысл тогда в этом какой? в новом стандарте

по моему это было очень важно, по крайней мере для меня

namezys ★★★★ ()

Re: C++0x: концептов не будет

Херасе, я тут развел... :) Троллинг это что такое? :)

funky_dennis ()
Ответ на: Re: C++0x: концептов не будет от impfp

Re: C++0x: концептов не будет

> Есть подозрение, что и не только хаскеьл-писатели

А кто еще? Где еще есть приличные type classes или аналоги?

www_linux_org_ru ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от namezys

Re: C++0x: концептов не будет

> А смысл тогда в этом какой? в новом стандарте

STL обновят. Слово auto. Конструкторы от &&. Variadic templates. Тебе этого мало? :)

Manhunt ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от anonymous4

Re: C++0x: концептов не будет

> RIP.

Уже лет 20 рип, да рип говорят.. а он все жив. И еще лет 20 проживет. :-)

smh ★★★ ()
Ответ на: Re: C++0x: концептов не будет от smh

Re: C++0x: концептов не будет

> И еще лет 20 проживет. :-)

Будь моя воля, я бы его закопал. Вместе с Си. Семантика у языков этих - ахтунг полнейший. Взять хотя бы недавнюю новость про дырку в линуксячем ведре http://www.linux.org.ru/view-message.jsp?msgid=3880660 .

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

Manhunt ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от Manhunt

Re: C++0x: концептов не будет

Там же написано, что бага не в ядре, а в компиляторе. Пытаются сделать из крмпилятора AI, чтобы быдлокод превратить в нормальный код.

funky_dennis ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

> Там же написано, что бага не в ядре, а в компиляторе.

Вариантов 2: 1. Бага в стандарте (попросту кривой) и в компиляторе (он более единообразно обращается с указателями, чем формально обязан по стандарту). 2. Стандарт более-менее логичен, компилятор в точности ему следует, а бага все-таки - в ведре.

Какой из вариантов имеет место - я до конца не уверен. Предполагаю, что 1.

> Пытаются сделать из крмпилятора AI

Это нормально.

> чтобы быдлокод превратить в нормальный код.

Ты не угадал. Делается это, чтобы люди могли не заморачиваться с низкоуровневой оптимизацией. Не дрочили на слова register и inline, не раскручивали циклы вручную, и не занимались тому подобным анонизмом.

Manhunt ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

> Там же написано, что бага не в ядре, а в компиляторе

Посмотри на код - баг именно в ядре. А оптимизация неправильного кода дает неопределенный результат.

tailgunner ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от Manhunt

Re: квантовых компьютеров

Боюсь, что оных не будет никогда (в сегодняшнем понимании - с кубитами и прочим найобиумом) :)

А вот компилятор английского - вполне себе возможно, и даже в обозримом будущем. Возможно даже и оптимизирующий :)

impfp ()
Ответ на: Re: C++0x: концептов не будет от Manhunt

Re: C++0x: концептов не будет

> Ты не угадал. Делается это, чтобы люди могли не заморачиваться с низкоуровневой оптимизацией. Не дрочили на слова register и inline, не раскручивали циклы вручную, и не занимались тому подобным анонизмом.

Ну блин, согласен, утрировал. Плюсы это круто. Пехапе еще круче, там вообще ни на что дрочить не надо, можно тупо писать так:

if ($val == "bla")
                                   { // some evil code
            exit(); }

if ($val != "bla") { // some nice code
                                                         }

Ну дак а троллинг это что такое?

funky_dennis ()
Ответ на: Re: C++0x: концептов не будет от tailgunner

Re: C++0x: концептов не будет

А, ну да, читал уже, что в пространстве ядра a = b->c, при условии, что b == NULL, паники не будет. В юзерспейсе был бы тупо сегфолт.

funky_dennis ()
Ответ на: Re: квантовых компьютеров от impfp

Re: квантовых компьютеров

> А вот компилятор английского - вполне себе возможно, и даже в обозримом будущем. Возможно даже и оптимизирующий :)

Ага, basic называется :) Вот только "о построении _наилучшего_ решения задачи, сформулированной на чистом английском языке" можно даже не мечтать.

Manhunt ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от funky_dennis

Re: C++0x: концептов не будет

> А, ну да, читал уже, что в пространстве ядра a = b->c, при условии, что b == NULL, паники не будет.

Паники не будет. Будеет четкий осмысленный Oops, с дампом регистров, трейсом, блэкджеком и шлюхами.

tailgunner ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от www_linux_org_ru

Re: C++0x: концептов не будет

Ну какбы старый добрый ML-like :)

Язык Coq; там, вроде как, вообще весь лямбда-куб реализован, в отличие от хаскеля того же...

impfp ()
Ответ на: Re: C++0x: концептов не будет от mannaz

Re: C++0x: концептов не будет

>>сборщик мусора... уже реализовали(Qt4)

>ЩИТО?

Там сборщик мусора "Тарас Бульба"-style: если у объекта некоего класса-потомка QObject есть родитель, то этот родитель сам удаляет своих потомков.

MYMUR ★★★★ ()
Ответ на: Re: квантовых компьютеров от Manhunt

Re: квантовых компьютеров

Ну что Вы :) Я ж про нормальный компилер, и про нормальный английский :) Про такой компилер который в себе реализует к.-л. вероятностную грамматику языка со словарями, знаниями и прочими лингвистическими плюшками... >о построении _наилучшего_ решения задачи, сформулированной на чистом английском языке Уж ли не на Шекспировском? :) Хотя... посмотрим, куда закатятся те же суперкомпиляторы и иже с ними лет эдак через пяток-другой

impfp ()
Ответ на: Re: C++0x: концептов не будет от Manhunt

Re: C++0x: концептов не будет

Еще никто не показал, что квантовые компьютеры могут решать NP-полные задачи. Даже BPP ?== BQP.

fAX ★★ ()
Ответ на: Re: C++0x: концептов не будет от yk4ever

Re: C++0x: концептов не будет

> Любителей перла надо сослать в Китай, нехай привычны к ероглифам.

У малшега детская травма? Взрослые бородатые перлисты трогали тебя во всяких местах?

AnDoR ★★★★★ ()

Re: C++0x: концептов не будет

http://www.digitalmars.com/d/2.0/template.html#Constraint

Совершенно другая фича, но >95% use-case'ов совпадают с концептами. В блоке constraint может быть абсолютно любой вычислимый при компиляции код.

naryl ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от tailgunner

Re: C++0x: концептов не будет

>Может, это и хорошо.

Как сказать - ты читал что оно такое? Это ж велосипед с квадратными
 колесами при чем крутить их надо раздельно руками! 

concept AB<typename T> {
    void a(T&);
    void b(T&); 
}; 
concept A<typename T> {
    void a(T&);
};

Ну объявили типа "класс типа".

> Obviously, every type that’s an AB is also an A, 

Очевидно.

template<A T> void g(T);
template<AB T> void f(T t)
{
    g(t); // valid call?
}

Вот и меня это интересует...

>Obviously, an AB has an a() as required by A. Obviously, A is a subset of AB.

Очевидно.

>Someone with some knowledge of concepts might say “no” and suggest 
>that AB needs to be derived from (a refinement of) A for the compiler
> to notice the obvious subset relationship.

А - то эсть это очевидно всем кроме писателя компилятора. 

>However, in real code we may not be able to modify the definition of AB.

Да не может быть! И каков же будет наш ответ парижу?

template<AB T> concept_map A<T> { } // every AB is an A

Долбонуться! В то время как народ бороздит моря дактайпинга реализуя в
 статических языках в виде структурных типов....

Короче ужос какой-то.

C++ типа объектный язык. Нахрена объектному языку классы типов хаскеля  да еще так жестоко?

r ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от naryl

Re: C++0x: концептов не будет

>В блоке constraint может быть абсолютно любой вычислимый при компиляции код.

Вот интересно. Вычсления темплейтов С++ как и собственно темплейтов D - это в принципе оверкил в том смысле что вычисляются специально руками объявленные структуры. А в компиляторах как дела с разработкой агресивных оптимизаций которые жестоко сворачивают константный код?

типа

int f(a,b) { return a + b }

f(3,f(4,5)) => откомпилируется в константу 12?

r ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от r

Re: C++0x: концептов не будет

Во избежание некоторых проблем в D такое происходит только если вызов в контексте, где необзодима константа времени компиляции. Можно использовать шаблон eval, инициализацию глобальной или статической переменной или pragma(msg).

import std.stdio;

int f(int a, int b) { return a + b; }

void main() {
    static val = f(3, f(4, 5));
    writefln(val);
}

pragma(msg, f(3, f(4, 5)));

Выводит 12 и при выполнении и при компиляции. Функция f во время выполнения не будет вызвана ни разу.

(опечаток и ошибок в коде нет)

naryl ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от mannaz

Re: C++0x: концептов не будет

>> сборщик мусора... уже реализовали(Qt4)

>ЩИТО?

разработчики Qt Software нахардкодили много random-мусора в Qt4... :)

shty ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от www_linux_org_ru

Re: C++0x: концептов не будет

>Бляяяяяяяяяяяяяяяя! И че, хаскелисты следующие 5 лет будут безнаказано нас чморить type class-ами?!

а Вы троллей не кормите и пиписьками не меряйтесь почём зря - не придётся расстраиваться... :)

shty ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от fAX

Re: C++0x: концептов не будет

>Еще никто не показал, что квантовые компьютеры могут решать...

пока ещё никто и самих квантовых компьютеров не показал во вменяемом виде

shty ★★★★★ ()
Ответ на: Re: C++0x: концептов не будет от ferhiord

Re: C++0x: концептов не будет

>> а отсутствие сборщика мусора?

>Это не задача языка.

Спорно. Возможно, что надо все-таки менять язык под сборщик мусора. Слишком многие вещи подразумевает последний. Там не так все просто. Одной перегрузкой new похоже не обойтись. Если бы было так просто, то давно бы что-нибудь придумали действительно простое и удобное.

Вот, пример языка со сборщиком мусора - С++/CLI. Правда, там еще используется CLR, и все классы, собираемые GC, также являются и управляемыми классами.

dave ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.