LINUX.ORG.RU

Ответ на: комментарий от tailgunner

Зачем эти сложности? Аналог newtype уже можно сделать, тебе даже дали ссылку на готовую либу. Пользуйся хоть сейчас, или она тебя чем-то не устраивает?

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

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

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

Си++ и без этого _очень_ большой и запутанный.

tailgunner ★★★★★
()
Ответ на: комментарий от Crocodoom

6. Полноценный язык макросов/кодогенерации. Например, чтобы, допустим, в цикле можно было бы создать N переменных a0 ... aN, притом N задается параметром.

Создай массив :)

Ну ты же понимаешь о чем я.

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

Значит не понимаешь...
Если честно, я не вспомню конкретного примера когда мне этого не хватало. Могу придумать еще пример - создать функции fn1..fnN, но это тоже придумка.

Ладно, будет конкретный пример, может кину сюда тему, тебя позову.

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

Но речь-то шла о Си++ и исключениях. Понятно, что отказ от исключений кое-что упрощает, но в Си++ исключения уже есть.

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

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

Си++ и без этого _очень_ большой и запутанный.

Это да.

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

Хочется чтобы лучшие практики в стандарт переходили

Это checked exceptions — лучшие практики?!

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

Попробуйте написать шаблонный for_each или accumulate в присутствии спецификации исключений. Может быть сами поймете.

Ок, сложно, согласен. Но шаблoны раскрываются в compile-time, а значит компилятор может это вычислить. Как по мне, лучше уж пусть ребята, которые пишут компилятор, разок потрудятся, но подуменьшат количество багов всему остальному миру. Не думаю что это будет сложнее какого-нибудь PGO.

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

Ок, сложно, согласен.

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

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

О чем ты вообще?

Про свой кейс для foreach (var e : a) {...} -> for (var i=a.length;i;i--) {var e = a; ...}

Да уж, «сделать один раз replace».

Ну так у автора duktape не было такой задачи, чтобы кто-то делал replace до разбора кода. В любом случае там чёрт ногу сломает что-то менять. А если бы был какой-нибудь процессор, который перегонял скриптопортянку в сишный код, самому автору было бы во много раз легче запиливать какие-нибудь es5 фичи. Там даже for..of нету.

crutch_master ★★★★★
()
Ответ на: комментарий от theNamelessOne

Ну сделай себе в нём инфиксную нотацию или возьми готовую, ты ж сам за это топил.

Я без понятия как на нем вообще что-то можно писать, а ты говоришь, «сделай себе». Пример скинь, как можно там избавиться от кучи скобок, чтобы код не смотрелся, как куча дерьма.

crutch_master ★★★★★
()

Будущее — оно либо светлое, либо C++.

Miguel ★★★★★
()
Ответ на: комментарий от vladimirmir2016

Нет, старый код на Си, конечно, более читаем, чем многое из современного, но недостаточно. Я даже не знаю как он должен выглядеть.

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

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

Смотрел на cppreference Possible implementation First version. Далее попытался найти какие исключения могут бросать operator=, operator+, operator++, и т. п, например, для vector. И не нашел. Плохо искал? noexcept тоже вроде не указывают...

Тогда гипотетически. Предположим, что для какого-то контейнера, operator++ (на итератор) может бросить std::out_of_range. Тогда объявление функции будет выглядеть как

template<class InputIt, class T>
T accumulate(InputIt first, InputIt last, T init) throw(std::out_of_range)


Предположим, что есть другой контейнер, для которого operator+ может бросить std::overflow_error. Если использовать accumulate в том виде, в котором она объявлена выше, с этим контейнером, то компилятор должен выдать warning о том, что accumulate в применении к этому контейнеру может выбросить std::overflow_error, хотя объявлений функции этого не предполагает.

Наверное теперь встает вопрос о том, как это положить в стандартную библиотеку. Очень просто: функция accumulate специфицируется для каждого типа из стандартной библиотеки, а общий вариант функции объявляется как noexcept, притом обязать компиляторы проверять это на этапе компиляции. Получается что теперь, если ты подкладываешь нестандартный контейнер в accumulate, то, дабы избежать warning'ов, нужно специфицировать функцию accumulate (если она используется) указав перечень исключений.

P. S. Я знаю что throw() в объявлении функции deprecated.

Kroz ★★★★★
()
Ответ на: комментарий от crutch_master

Ну пока что именно так получается. JS и WebAssembly, для них уже гора компиляторов

vertexua ★★★★★
()
Ответ на: комментарий от vladimirmir2016

Есть у меня ощущение, что под поздним связыванием вы понимаете что-то свое. Поскольку, если речь идет о позднем связывании как о механизме реализации динамического полиморфизма, то при чем здесь jit вообще непонятно.

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

Предположим, что для какого-то контейнера, operator++ (на итератор) может бросить std::out_of_range.

С чего нам это предполагать?

У вас есть шаблонная функция с прототипом:

template<class InputIt, class T>
T accumulate(InputIt first, InputIt last, T init);
И ее можно использовать для любых типов итераторов и любых типов T.

Теперь попробуйте навесить на нее спецификацию исключений, которая бы (речь про спецификацию) сохраняла возможность использовать accumulate для любых типов итераторов и любых T. Т.е. для случаев, когда вы не знаете точных спецификаций исключений для InputIt::operator*, InputIt::operator++, T::operator=, T::operator+ и т.д.

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

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

Учитывая, что его нет в C++, то да.
Но сам термин общепринятый скажем для COM.
В весьма далеком приближении «позднее связывание», как в COM.

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

noexcept бывает зависимый у шаблонов, чому бы checked exceptions не быть? (представим на секунду, что checked exceptions нужны)

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

Понятия jit и всего, связанного с ним нет.
Динамические функции, ... в контексте обсуждения /с моей стороны/ ни какого отношения к классам не имеют.

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

На счет блинов, хорошая мысль ... /настоящих, а не от программистов/.

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

Понятия jit и всего, связанного с ним нет.

Странно, gccjit есть, а jit-а нет.

Вы не объяснили, зачем jit нужен в языке, тем более, в таком языке как C++.

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

Я хочу такой if, в котором кроме else {} будет nullcase {}, который будет выполнятся, если переменная в if == NULL.

switch так не умеет?

superuser ★★★★★
()
Ответ на: комментарий от vladimirmir2016

Да ведь уже говорил - «Для обеспечения возможности позднего связывания».

Если для вас «позднее связывание» — это что-то вроде IUnknown из COM-а или CORBA-вских интерфейсов, то тут сразу два вопроса:

1. Что вам мешает иметь это все в текущем C++? И COM, и CORBA, и другие похожие на них вещи, вроде ZeroC Ice, существуют и используются в C++ уже десятилетия.

2. Зачем это все в языке программирования (в смысле в стандарте языка)?

jit с моей стороны не удачный термин.

Или непонимание того, что есть jit вообще.

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

Ладно - вы правы.
В лучших традициях ЛОР скажу - «не нужно».

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

4. Убрать явное указание итераторов в стандартных алгоритмах. Чтобы вместо sort(v.begin(), v.end()) можно было делать sort(v). Раздражает лишняя писанина.

Range-v3:

#include <iostream>
#include <vector>

#include <range/v3/all.hpp>

int main() {
  std::vector<int> xs {{1, 7, 4, 5, 2}};
  ranges::sort(xs);

  for(auto &x : xs | ranges::view::take(1)) {
    std::cout << x;
  }
  for(auto &x : xs | ranges::view::drop(1)) {
    std::cout << ", " << x;
  }
  std::cout << std::endl;
}
AlexVR ★★★★★
()
Ответ на: комментарий от crutch_master

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

https://play.rust-lang.org/?version=stable&mode=debug&edition=2015&am...

Вот этот rev() дает обратный итератор, который компилятором вытрется в точности в твой for loop

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

Нет, старый код на Си, конечно, более читаем, чем многое из современного, но недостаточно. Я даже не знаю как он должен выглядеть.

05 HOME : TEXT : REM Fibonacci numbers
10 LET MAX = 5000
20 LET X = 1 : LET Y = 1
30 IF (X > MAX) GOTO 100
40 PRINT X
50 X = X + Y
60 IF (Y > MAX) GOTO 100
70 PRINT Y
80 Y = X + Y 
90 GOTO 30
100 END

Вот отсюда начинай пограмировать. Даже круг нарисовать сможешь!

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

Зачем орать, что тебе что-то нужно, если, когда показывают готовое, вести себя, как нехочуха? Если вкратце, в Racket есть возможность указать директивой в начале файла, какой синтаксис использован в данном исходнике. Есть готовые примеры. Можно и C++ запилить, если осилишь (наверное).

Virtuos86 ★★★★★
()

Об светлом будущем C++
Об

vvviperrr ★★★★★
()

Ваше мнение об C++ /путях развития, .../?

Идеальное направление для плюсов — могила. Это невероятных размеров монстр Франкенштейна который со временем становится только жирнее и уродливее.

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

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