LINUX.ORG.RU

C++, который мы потеряли

 


1

5

https://habrahabr.ru/company/infopulse/blog/279927/
https://www.facebook.com/olegchir/posts/1093480147341658

tldr: модули, концепты, транзакционная память, унифицированный синтаксис вызова, дедуктивный вывод параметров шаблонов, сопрограммы, контракты, рефлекшен, constexpr if, расширения для работы с сетью - ничего этого НЕ будет в 17



Последнее исправление: stevejobs (всего исправлений: 1)

1) Ну по сопрограммам там вроде аргументы разумные. Не понятно как сделать как следует. И довод «у нас есть возможность сделать в с++ впервые это как следует. Давайте не будем торопится» вполне себе норм довод.

2) Вот работы с сетью жаль что нет...

3) дедуктивный вывод параметров шаблона - не самая большая потеря.

4) рефлекшен - слишком глобально и серьезно, что бы принимать не обдуманно.

5) А вот модулей жалко, что нет=(

Dudraug
()

Алсо по сопрограммам всегда можно заюзать буст. Да и для сети тоже. А вот модули должны быть сделаны на уровне стандарта таки.

Dudraug
()

Перебьемся. Для половины перечисленного есть буст. Это белоручкам-хипстерам фич побольше подавай, а мы и на C++98 сидели сколько лет.

Я думаю, сейчас многие плюсовики будут поглядывать на rust. Если нужны фичи, то почему бы и нет, стоит попробовать.

Deleted
()
Ответ на: комментарий от Deleted

Это белоручкам-хипстерам фич побольше подавай

Ну просто как по мне так модули в С++ нужны. И это бустом не решишь.

Dudraug
()
Ответ на: комментарий от Dudraug

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

stevejobs
() автор топика

раз не будет, значит не нужно

Harald
()
Ответ на: комментарий от Deleted

Я думаю, сейчас многие плюсовики будут поглядывать на rust.

год на него уже поглядываю. и даже либу запилил. не вижу пока причин на него переходить. реального чего-то он не дает.

anonymous
()
Ответ на: комментарий от Deleted

поглядывать на rust
Если нужны фичи

толсто

anonymous
()

По поводу constexpr if не все так однозначно. Вот, что сказал Герб Саттер по итогам последнего митинга коммитета:

Evolution also approved the following features that were not voted in at this meeting, but are currently on track for possible approval for C++17 at our next meeting in June for inclusion in the C++17 international comment ballot (note the links are to the pre-meeting paper versions; for example, in the paper that proposed constexpr_if the committee changed the syntax to if constexpr at the meeting):

* if constexpr to allow branches that are evaluated at compile time. This is very powerful.

* Template parameter deduction for constructors, so that you can write just pair p(2, 5); instead of pair<int,double> p(2, 4.5); or auto p = make_pair(2, 4.5);. This is sweet, including that it obsoletes many “make” helpers.

* Defining the order of expression evaluation to reduce portability and usability bugs.

* operator. (dot) to allow smart references (in parallel with smart pointers) and much more.

* Defaulted comparisons, to generate ==, !=, <, <=, >, >= for types that don’t write them by hand.

Т.е. часть предложений (в частности constexpr if, а так же автоматический вывод типов для конструкторов) не были еще включены в драфт стандарта, но это может произойти на следующем митинге в июне.

Кроме того, ведутся разговоры о том, чтобы следующий стандарт вышел не в 2020-ом, а в 2019-ом (т.е. после C++17 может быть C++19, а не C++20). Так что это может быть даже лучший сценарий, с учетом опыта того, как долго фичи из C++11 и C++14 доходили до большинства мейнстримовых C++ных компиляторов. Пусть лучше C++17 включает в себя меньше, но зато будет сразу доступен в основных компиляторах (gcc, clang, vc++).

eao197 👍👍
()
Ответ на: комментарий от Deleted

Ага, уже поглядываем. Но за фичами это как раз в плюсы. По крайней мере пока не будет genericity over integer values, variadic templates и implementation inheritance.

intelfx 👍👍👍
()
Ответ на: комментарий от stevejobs

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

Так они там разные... Это не порядок.

Dudraug
()

успокойся уже, жирдяйка

anonymous
()
Ответ на: комментарий от Dudraug

ну назвать C++Next с расширением файлов .cpn и не надо будет чтобы везде собиралось, а только компилятором для этого новояза

I-Love-Microsoft 👍👍👍👍
()
Ответ на: комментарий от Legioner

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

stevejobs
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Компилятор языка - это то, что реализует стандарт.

Ну вообще говоря все современные компиляторы расшираяют стандарт. Как clang имеет фичи которых нет в стандарте, так и msvc тоже самое...

Dudraug
()

Стиви, а тебе не пох? Ты же жаба-макака. Или это хобби такое - задрачивать кресты.

anonymous
()
Ответ на: комментарий от stevejobs

Тебя как жаба-макаку это вообще никак не касается. Лечись.

anonymous
()

Жалко только модули и концепты, остальное - либо ерунда, либо есть в boost, либо действительно слишком рано.

slovazap
()
Последнее исправление: slovazap (всего исправлений: 1)
Ответ на: комментарий от Solace
#include <boost/rational.hpp>
rational<int> n01(1,10);
rational<int> n02(2,10);
rational<int> n03(3,10);
assert(n01 + n02 == n03);

впиливание в компилятор интринсики на число1.число2'RT' -> rational<long> - домашнее задание

stevejobs
() автор топика
Ответ на: комментарий от stevejobs

Ты, пожалуйста, от темы не уходи. 0.1, 0.2 и 0.3 - это константы типа double.

Кастомные суффиксы литералов «3.14_rt» можно уже сейчас, но это другой разговор.

Deleted
()

Он был потерян ещё до рождения.

Hertz
()
Ответ на: комментарий от Deleted

§13.5.8

The declaration of a literal operator shall have a parameter-declaration-clause equivalent to one of the following:

const char*
unsigned long long int
long double
char
wchar_t
char16_t
char32_t
const char*, std::size_t
const wchar_t*, std::size_t
const char16_t*, std::size_t
const char32_t*, std::size_t

а нам нужно взять все что левее кастомного суффикса и попарсить как строку, на которую уже применить длинную арифметику через boost:rational

нет, Solace так просто не отделается, придется ему все же впиливать это прям в парсер =)

stevejobs
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Сначала я тебе хотел написать «Несколько параметров не умеет. Пожалуй, через литералы это не выгорит.»

Но теперь я уже начинаю сомневаться, а нафига это вообще обсуждать, это оффтоп. А 0.1 - это литерал типа double, и все операции с ним соответствующие.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от stevejobs

У подавляющего большинства языков нет никаких стандартов языков и платформ. И всем от этого только лучше. Зачем писать 20 компиляторов для одного языка я тоже не понимаю. Написали clang и используйте везде. Не нравится — доработай, благо лицензия позволяет.

Legioner
()
Ответ на: комментарий от stevejobs

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

Ага. И переписывать всё потом, когда стандартизируют не такую реализацию как сейчас.

DarkEld3r
()

ничего полезного не потеряли, да.

anonymous
()
Ответ на: комментарий от Legioner

Написали clang и используйте везде. Не нравится — доработай, благо лицензия позволяет.

Весь этот винегрет с кучей вендоров начался задолго до того, как появился clang. И даже задолго до того, как у C++ появился первый стандарт.

Да и сам clang образец того, что дорабатывать чужое интересно далеко не всем. Ведь сделали же clang вместо того, чтобы дорабатывать gcc...

eao197 👍👍
()

модули жалко, вывод параметров шаблонов, контракты — всё остальное правильно сделали, что не внесли: народ ещё к 11-14 стандартам не привык

что касается constexpr if, то эмулируется через тернарный оператор, пока и так поживём

next_time 🤡
()
Ответ на: комментарий от Legioner

У подавляющего большинства языков нет никаких стандартов языков и платформ.

факт заключается в том, что есть: с, лисп, форт, паскаль, питон, ява, руби, яваскрипт, С#, objc — что сходу приходят на ум.

то есть, все популярные языки

next_time 🤡
()

рефлекшен

Не нужно. Для дебилов, не умеющих в полиморфизм, уже есть friend и rtti.

E
()
Ответ на: комментарий от E

Не нужно. Для дебилов, не умеющих в полиморфизм, уже есть friend и rtti.

Что за бред? Рефлексия (на этапе компиляции) была бы весьма полезна.

DarkEld3r
()
Ответ на: комментарий от DarkEld3r

Действительно, бред. Посмотрел на топикстартера и решил, что динамическая.

Да, статическая рефлексия в стандарте не помешает.

E
()
Ответ на: комментарий от stevejobs

Это не тот ли самый стандарт Явы из которого не ясно — может ли интерпретатор байткода (JRE, оптимизатор, JiT-транслятор, ... Или ещё какая хрень) менять местами выполняемые операции в функции — даже в ситуациях, когда нарушается причинно-следственная связь (манипуляция с ссылками доступными из вне)...

Обычный OpenJDK-интерпретатор/оптимизатор — такое говно не проделывает ни когда, но Хабра-макаки во всё горло орут что якобы стандарт не запрещает вмешиваться (и ломать) в причинно следственные связи! И...

...и в доказательство своей праваты эти хабра-макаки — приводят какой-то там бажный устаревший и нестандартный интерпретатор Явы от левой фирмы (но наверняка сертифицированный, ведь серъёзный интерпрайз и бла бла бла :-))..

Ну вы поняли

user_id_68054
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Ответ на: комментарий от user_id_68054

если «неясно» - значит считаем, что такой гарантии нет, и пользоваться этой фичей нельзя. Что там делает реальная реализация - неважно

stevejobs
() автор топика
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от DarkEld3r

Ты хочешь чтоб прям стандарт ISO? Такой бюрократией редко кто упарывается, а спеки у всех вменяемых имеются.

anonymous
()

ничего этого НЕ будет

все это НЕ нужно в крестах

waker
()
Ответ на: комментарий от user_id_68054

Некоторые вещи могут казаться контр-интуитивными, но для них есть объяснение в формальной модели, например такое, и развернутый комментарий к ней на SO

с другой стороны, «чья бы корова мычала», учитывая что мы тут говорим о крестах

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