Re[7]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 10.04.13 13:43
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>То есть ты предлагаешь включать в ISO C++ любой убогий костыль, в корне не соответствующую генеральной линии языка, который хоть как-то стандартизирован?

только самое необходимое.

EP>В смысле синтаксис? ну да, я о том и говорю.

не только синтаксис, но и "закулисная" реализация.

EP>Поддержка нужна, и она прекрасно реализуется library-only. Microsoft PPL, Intel TBB — тому подтверждение.

в отношении С++ и многопоточности — слова типа "хорошо"/"отлично"/"прекрасно" — вообще не соответствуют действительности. в С++ с многопоточностью полная жопа.
посмотри на такие компилируемые ЯП как haskell/Go/Rust — в них да, какое-то из этих слов может использоваться.

EP>Вот например:

EP>1. В OpenMP Proposal они предлагают paralleltask, который по функциональности сильно пересекается с std::async. Но, почему-то их язык не устраивает — новый keyword подавай.
цель проста: упростить реализаторам жизнь.

EP>2. Предложенный ими "parallel for" — имеет свои семантические ограничения, ты не можешь любой for заменить на parallel for. Эти ограничения должны быть описаны в стандарте, захламляя core language.

EP>В то время как library-only решение может забетонировать эти ограничения в API:
EP>
EP>parallel_for_each( irange(0,100), [&](i) a[i]=i*2 );
EP>or
EP>parallel_transform( irange(0,100), a, [](i) i*2 );
EP>

это же можно реализовать в Cilk+ или OpenMP. достаточно лишь научить их принимать пользовательское функторы/предикаты.

EP>Да, кстати, что делать например с parallel reduce, parallel transform/map? тоже вводить openmp'шные костыли?

нет же, строка выше.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[10]: Что нам C++14 готовит...
От: B0FEE664  
Дата: 10.04.13 14:02
Оценка:
Здравствуйте, niXman, Вы писали:

X>а кто-то видел, есть ли пропосал для for(), который принимает пару значений "от — до" ?

X>
X>for ( auto idx: {34..56} ) {}
X>for ( auto idx: {34,56} ) {}
X>


не нужно.

Я не использовал, но в стандарте есть operator "" и literal suffix identifier,
что, по идее, должно позволять писать так:

for ( auto idx: "34..56"_range ) {}
И каждый день — без права на ошибку...
Re[8]: Что нам C++14 готовит...
От: Evgeny.Panasyuk Россия  
Дата: 10.04.13 14:03
Оценка:
Здравствуйте, niXman, Вы писали:

EP>>То есть ты предлагаешь включать в ISO C++ любой убогий костыль, в корне не соответствующую генеральной линии языка, который хоть как-то стандартизирован?

X>только самое необходимое.

Настолько необходимое, что нужно включать ASAP, а не подождать нормального library-only proposal типа N3554?
Я вообще не пойму какой-то тут может быть ASAP: на твоих компиляторах есть OpenMP? — ну замечательно, просто бери и используй — зачем тащить в C++ ISO?

EP>>Поддержка нужна, и она прекрасно реализуется library-only. Microsoft PPL, Intel TBB — тому подтверждение.

X>в отношении С++ и многопоточности — слова типа "хорошо"/"отлично"/"прекрасно" — вообще не соответствуют действительности. в С++ с многопоточностью полная жопа.
X>посмотри на такие компилируемые ЯП как haskell/Go/Rust — в них да, какое-то из этих слов может использоваться.

я конкретно говорю про сравнение openmp vs library-only

EP>>Вот например:

EP>>1. В OpenMP Proposal они предлагают paralleltask, который по функциональности сильно пересекается с std::async. Но, почему-то их язык не устраивает — новый keyword подавай.
X>цель проста: упростить реализаторам жизнь.

Реализаторы спокойно могут использовать openmp внутри реализации N3554

EP>>2. Предложенный ими "parallel for" — имеет свои семантические ограничения, ты не можешь любой for заменить на parallel for. Эти ограничения должны быть описаны в стандарте, захламляя core language.

EP>>В то время как library-only решение может забетонировать эти ограничения в API:
EP>>
EP>>parallel_for_each( irange(0,100), [&](i) a[i]=i*2 );
EP>>or
EP>>parallel_transform( irange(0,100), a, [](i) i*2 );
EP>>

X>это же можно реализовать в Cilk+ или OpenMP. достаточно лишь научить их принимать пользовательское функторы/предикаты.

Openmp с функторами это же вообще жесть и цирк с конями.
но речь не о них.

Пример выше показывает, что при использовании irange — интерфейс реинфосит использование инкремента одним только синтаксисом. В то время как в OpenMP семантику возможных инкрементов нужно дополнительно описывать, причём в core langauge.

EP>>Да, кстати, что делать например с parallel reduce, parallel transform/map? тоже вводить openmp'шные костыли?

X>нет же, строка выше.

Поясни, желательно с небольшими примерами кода
Re[8]: Что нам C++14 готовит...
От: Мишень-сан  
Дата: 11.04.13 08:02
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, niXman, Вы писали:


X>>иначе С++ получается самым неподходящим ЯП для разработки многопоточных программ.


KP>Господа, проявите терпение, Rust почти готов


Ждём-с. Идеи в основе просто пальчики оближешь — movable owned values, non-nullable по умолчанию, type inference...
Хотя конечно с некоторыми вещами типа явного self для функций-членов класса и чрезмерной мании сокращать идентификаторы я бы поспорил.
Re[9]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 11.04.13 08:08
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>Ждём-с. Идеи в основе просто пальчики оближешь — movable owned values, non-nullable по умолчанию, type inference...

радует то, что они компилятор строят на основе LLVM, а не как Go, самопальный =)

МС>Хотя конечно с некоторыми вещами типа явного self для функций-членов класса и чрезмерной мании сокращать идентификаторы я бы поспорил.

да, self в последней редакции языка меня тоже расстроил %)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[10]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 11.04.13 11:36
Оценка:
так а что, 'static if' в 2014 таки ждать не стОит?!
пишу тут кодец и думаю, будь доступен сабж — кода бы получилось в разы меньше, и он бы писался и читался в разы проще.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[11]: Что нам C++14 готовит...
От: Evgeny.Panasyuk Россия  
Дата: 11.04.13 16:51
Оценка:
Здравствуйте, niXman, Вы писали:

X>так а что, 'static if' в 2014 таки ждать не стОит?!

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

уже походу не будет static if.
Re[12]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 11.04.13 16:54
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>уже походу не будет static if.

как из этого документа ты это понял?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[13]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 11.04.13 17:02
Оценка:
Здравствуйте, niXman, Вы писали:

X>как из этого документа ты это понял?

понял.
я поначалу подумал, что это ссылка на пропосал

а откуда ты взял эту ссылку? где-то вообще обсуждался этот документ? есть ли решение?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[14]: Что нам C++14 готовит...
От: Evgeny.Panasyuk Россия  
Дата: 11.04.13 17:47
Оценка:
Здравствуйте, niXman, Вы писали:

X>а откуда ты взял эту ссылку? где-то вообще обсуждался этот документ? есть ли решение?


взял отсюда.
Re[14]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 11.04.13 17:48
Оценка:
прочитал отговорку описанную в документе и улыбнулся =)))
аргументы не принимать 'static if' приводятся на реально нелепых примерах %)
template<typename T, typename A>
class dynarray {
   T* start_;
   T* finish_;
   static if (!is_empty<A>::value) {
      A alloc_;
   }
};

// Although may seem like an elegant alternative, the impact 
// on the class’s implementation is far less so.
// For example, how would we write a constructor?
template<typename T, typename A>
dynarray<T, A>::dynarray(size_t n, T value, const A& alloc)
   :start_(alloc.allocate(n * sizeof(T))
   ,finish_(start + n)
{
   static if (!is_empty<A>::value) {
      alloc = alloc_;
   }
}

// Every access to the allocator member must be guarded by a new static if.
// Again, this use of static if is viral.
// A viable alternative to the use of static if or more traditional means of
// implementing the empty base optimization is to use a tuple. The tuple template
// will eliminate all of the overhead of empty classes.
// The use of static if might also be used to reorder data structures for tighter
// alignment, but this is a potentially dangerous idea that could lead to bugs that
// are exceptionally difficult to diagnose and fix.
// Being a new and relatively simple-to-use new feature, static_if would 
// undoubtedly be used by many who have no need for the relatively small 
// incremental improvement in performance offered. The library writers for which such
// techniques really are important, already have the tools and skills needed.

ну зачем тут статик иф?!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[15]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 11.04.13 18:06
Оценка:
ну или такой пример.
// The static if feature is also available inside class scope. A number of possible
// applications have been presented. Below is an example of a metafunction for
// computing factorials.

template <unsigned long n>
struct factorial {
   static if (n <= 1) {
      enum : unsigned long { value = 1 };
   } else {
      enum : unsigned long { value = factorial<n - 1>::value * n };
   }
};

// This seems like a reasonable idea, but the motivating example simply moves
// the complexity from one style of idiomatic programming to another and does
// so in a way that requires a new language feature. A better solution would be
// to use constexpr functions. A significant negative consequence of that feature
// is increased confusion about how to write integer metaprograms.

ну реально же, зачем кому-то может понадобится написать такое, когда в стандарте есть constexpr?!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[15]: Что нам C++14 готовит...
От: Ku-ku  
Дата: 11.04.13 22:57
Оценка:
Здравствуйте, niXman, Вы писали:

X>прочитал отговорку описанную в документе и улыбнулся =)))

X>аргументы не принимать 'static if' приводятся на реально нелепых примерах %)

Обрати внимание, какие веские контраргументы господин Страуструп умеет приводить, когда дело касается его предложений
Re[16]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 12.04.13 06:11
Оценка:
Здравствуйте, Ku-ku, Вы писали:

KK>Обрати внимание, какие веские контраргументы господин Страуструп умеет приводить, когда дело касается его предложений

да он троллит =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Что нам C++14 готовит...
От: CoolCmd Россия  
Дата: 19.04.13 16:43
Оценка:
а почему не хотят добавить else для for? с другим названием конечно.
простите, я убил небо
Re[2]: Что нам C++14 готовит...
От: Ops Россия  
Дата: 19.04.13 17:13
Оценка:
Здравствуйте, CoolCmd, Вы писали:

CC>а почему не хотят добавить else для for? с другим названием конечно.


Это как?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: Что нам C++14 готовит...
От: CoolCmd Россия  
Дата: 19.04.13 19:30
Оценка: 1 (1)
Здравствуйте, Ops, Вы писали:

Ops>Это как?

так. и для while тоже.
простите, я убил небо
Re[4]: Что нам C++14 готовит...
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 19.04.13 19:49
Оценка:
Здравствуйте, CoolCmd, Вы писали:

CC>Здравствуйте, Ops, Вы писали:


Ops>>Это как?

CC>так. и для while тоже.

Тогда, имхо, было бы логично добавить две ветки — одна выполняется, если был break, другая — если не был. Опциональная третья ветка — если цикл выполнился 0 раз.
Маньяк Робокряк колесит по городу
Re[2]: Что нам C++14 готовит...
От: niXman Ниоткуда https://github.com/niXman
Дата: 20.04.13 05:33
Оценка:
Здравствуйте, CoolCmd, Вы писали:

CC>а почему не хотят добавить else для for? с другим названием конечно.

почему не хотят? вроде уже предложили.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: Что нам C++14 готовит...
От: LuciferSingapore Россия  
Дата: 20.04.13 06:03
Оценка: :)
Здравствуйте, Кодт, Вы писали:

К>Либо это экономия на синтаксисе, — чтобы минимизировать количество новых ключевых слов. Отсюда и ~T вместо dtor.


старый добрый "синтаксический оверхед" (тм)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.