Re: C++ расширение языка
От: ZevS Россия  
Дата: 30.06.10 13:38
Оценка:
Так это будет просто рай! Вот, можно сразу в этюды ))

int n = 0;
do
{
 {
   while (true)
   {
     for (;;)
    {
      ++n;
      continue while, n; // это ведет куда?
    }
   }
   n--;
 }
 n++;
} while(true);
Re[2]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 13:41
Оценка:
Здравствуйте, ZevS, Вы писали:

ZS>Так это будет просто рай! Вот, можно сразу в этюды ))

ZS> continue while, n; // это ведет куда?

вылетит на третьем витке
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: C++ расширение языка
От: Мишень-сан  
Дата: 30.06.10 13:42
Оценка: +1
Здравствуйте, Caracrist, Вы писали:

  Скрытый текст
C>Здравствуйте, dilettante, Вы писали:

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


C>>> или расскажите чего нехватает вам.


D>>1. Нормальных локальных функций.

C>вот так ?
C>
C>int main()
C>{
C>  for (int i = 0; i < 4; i++)
C>  {
C>    auto eq = [&i]-> bool (int x) 
C>    { 
C>      //...
C>    };
C>    if (eq(2))
C>    {
C>    }
C>  }
C>}
C>

C>)

D>>2. Блоки-как-выражения.

C>вот так ?
C>
C>int main()
C>{
C>  for (int i = 0; i < 4; i++)
C>  {
C>    auto eq = [&]-> bool (int x) 
C>    { 
C>       //...
C>    }(2);
C>  }
C>}
C>

C>)


Это я выше по тексту назвал зоопарком сказочных конструкций. Вы не читали, чем товарищи из комитета объясняют извращённый синтаксис с выносом return type в хвост декларации? Якобы тем, что их новенький decltype не сможет, бедняжка, подождать, пока будет прочитан остаток заголовка функции. Это, извиняюсь, всё равно, что ввести обратную польскую запись в плюсы потому, что компилятору легче её разбирать. Не спорю, проще. Но мне от этого ни холодно, ни жарко.
Непосредственно по Вашему сообщению. В C# лямбда выглядит как x => y, в python как lambda x: y. А в С++0x — [&](int x) -> int { return y; }; Некоторый оверхед, не находите?
Re[4]: C++ расширение языка
От: Тот кто сидит в пруду Россия  
Дата: 30.06.10 13:46
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

M>>Вот, кстати, ещё одно свидетельство того, что программисты хотят программировать не только для компьютера, но для компилятора.


МС>Не думаю, что большинству программистов нафик впалось писать для компилятора. Просто если некие сложные расчёты будут проделаны компилятором один раз, при каждом запуске можно будет на халяву пользоваться готовым результатом, а не считать всё заново.


Тут еще вопрос, что при промышленной разработке дешевле Компилируется-то оно тоже по сто раз на дню...
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: C++ расширение языка
От: Caracrist https://1pwd.org/
Дата: 30.06.10 13:50
Оценка:
Здравствуйте, ZevS, Вы писали:

ZS>Так это будет просто рай! Вот, можно сразу в этюды ))


ZS>
ZS>int n = 0;
ZS>do
ZS>{
ZS> {
ZS>   while (true)
ZS>   {
ZS>     for (;;)
ZS>    {
ZS>      ++n;
ZS>      continue while, n; // error not a compile time expresion
ZS>    }
ZS>   }
ZS>   n--;
ZS> }
ZS> n++;
ZS>} while(true);

ZS>
~~~~~
~lol~~
~~~ Single Password Solution
Re[5]: C++ расширение языка
От: Caracrist https://1pwd.org/
Дата: 30.06.10 13:56
Оценка:
Здравствуйте, Тот кто сидит в пруду, Вы писали:

ТКС>Здравствуйте, Мишень-сан, Вы писали:


M>>>Вот, кстати, ещё одно свидетельство того, что программисты хотят программировать не только для компьютера, но для компилятора.


МС>>Не думаю, что большинству программистов нафик впалось писать для компилятора. Просто если некие сложные расчёты будут проделаны компилятором один раз, при каждом запуске можно будет на халяву пользоваться готовым результатом, а не считать всё заново.


ТКС>Тут еще вопрос, что при промышленной разработке дешевле Компилируется-то оно тоже по сто раз на дню...


для этого придумали precompiled header и частичную компиляцию
~~~~~
~lol~~
~~~ Single Password Solution
Re[6]: C++ расширение языка
От: Тот кто сидит в пруду Россия  
Дата: 30.06.10 14:16
Оценка:
Здравствуйте, Caracrist, Вы писали:

M>>>>Вот, кстати, ещё одно свидетельство того, что программисты хотят программировать не только для компьютера, но для компилятора.


МС>>>Не думаю, что большинству программистов нафик впалось писать для компилятора. Просто если некие сложные расчёты будут проделаны компилятором один раз, при каждом запуске можно будет на халяву пользоваться готовым результатом, а не считать всё заново.


ТКС>>Тут еще вопрос, что при промышленной разработке дешевле Компилируется-то оно тоже по сто раз на дню...


C>для этого придумали precompiled header и частичную компиляцию


И как, много народа метавычисления в pch пихает?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[4]: C++ расширение языка
От: 0x7be СССР  
Дата: 30.06.10 14:25
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>а выход через несколько исключениями реализовать, и все необходимое by-ref передавать?

Выход через несколько — обычный return, "все необходимое" предается как лексическое замыкание.
Re[4]: C++ расширение языка
От: _nn_ www.nemerleweb.com
Дата: 30.06.10 14:27
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>Это я выше по тексту назвал зоопарком сказочных конструкций. Вы не читали, чем товарищи из комитета объясняют извращённый синтаксис с выносом return type в хвост декларации? Якобы тем, что их новенький decltype не сможет, бедняжка, подождать, пока будет прочитан остаток заголовка функции. Это, извиняюсь, всё равно, что ввести обратную польскую запись в плюсы потому, что компилятору легче её разбирать. Не спорю, проще. Но мне от этого ни холодно, ни жарко.

МС>Непосредственно по Вашему сообщению. В C# лямбда выглядит как x => y, в python как lambda x: y. А в С++0x — [&](int x) -> int { return y; }; Некоторый оверхед, не находите?

Можно улучшить код, дать компилятору самому захватить нужные переменные и самому вывести тип.
Оверхед тут возникает от return и от невозможности вывести типы аргументов. А могли бы доделать..
int main()
{
  for (int i = 0; i < 4; i++)
  {
    auto eq = [&] (int x) 
    { 
      return i == x;
    };
    if (eq(2))
    {
    }
  }
}


int main()
{
  for (int i = 0; i < 4; i++)
  {
    auto eq = [&] (int x) 
    { 
       return i == x;
    }(2);
  }
}


В вашем примере "-> int" можно удалить.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: C++ расширение языка
От: _nn_ www.nemerleweb.com
Дата: 30.06.10 14:31
Оценка:
Здравствуйте, Mazay, Вы писали:

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


__>>Мне хотя бы constexpr и возможность манипулировать строками (массивами) во времени компиляции.


__>>
__>>const int hash_abc = hash("abc"); // compile time :)
__>>



M>Вот, кстати, ещё одно свидетельство того, что программисты хотят программировать не только для компьютера, но для компилятора.


Если бы были средства для работы с рантаймом как в .Net то можно было бы это обойти сгенерировав код во время выполнения, но в С++ этой возможности нет, а есть возможность генерировать код во время компиляции.

Всего-то нужно немного улучшить текущее положение дел в С++.


P.S.
Мега макросы это хорошо, но лучше улучшать понемногу и пользоваться, чем ждать супер улучшений 12 лет ))
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: C++ расширение языка
От: 0x7be СССР  
Дата: 30.06.10 14:32
Оценка: :)))
Здравствуйте, Caracrist, Вы писали:

ZS>> continue while, n; // error not a compile time expresion

Ваш пост огорчает любителей извратиться
Зачем себя искусственно ограничивать?
Re[9]: C++ расширение языка
От: Aleх  
Дата: 30.06.10 17:15
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


BZ>>>для того, чтобы у тебя в шаблонах/макросах не появлялось многоэтажных сообщений об ошибках, нужна типизация. те самые концепты. без них что угодно можно подставить куда попало


K>>Ну это-то понятно. Ему и нужен не текстовый препроцессор, а некий аналог Template Haskell.


BZ>настолько понятно, что ты ошибаешься


BZ>есть три типа макросов: простая текстовая подстановка а-ля #define. синтаксические макросы а-ля TH и C++ templates. и наконец "семантические макросы" а-ля C++ templates with concepts


Я бы сказал так, то что было названо — это три уровня гигиеничности макросов.

А типами (видами) макросов можно назвать следующие две разновидности.
1. Макросы, вводящие новые синтаксические конструкции и трансформирующие их во встроенные конструкции языка. Эти макросы служат только одной цели — позволяют создавать и использовать синтаксический сахар.
2. Макросы, которые используются для трансформации втроенных языковых конструкций в другие конструкции. Например, добавление сериализации, трансформация кода в ленивые или реактивные вычисления и тд, а также возможно анализа кода для каких либо оптимизаций.

BZ>фишка в том, что TH прверяет типы аргументов только на уровне "здесь должен быть какой-нибудь тип". это откладывает проверки до места фактического использования, получается compile-time dynamic typing. concepts, afair, реализовывали duck typing. а наиболее правильным я считаю, конечно же, static typing — в виде иерархий интерфейсов

Хм, то есть TH в этом плане то же, что и шаблоны C++ сейчас? Чем плох duck typing?

BZ>и всё это решает только одну проблему макросов, а их множество...
Re[10]: C++ расширение языка
От: Aleх  
Дата: 30.06.10 17:25
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


BZ>>compile-time dynamic typing


K>Мне одному кажется, что это оксюморон?


compile-time потому что подстановки шаблонов выполняются во время компиляции.
dynamic typing потому что эти подстановки шаблонов не типизированы.
То есть получается вычисление типов, где типы не имеют статически определенных типов (чтобы не было повторов слов, можно сказать супертипов или классов типов)

то есть
template<class A, class B>
               ^
               |
               не указано, что представляет собой тип, какими свойствами и методами он обладает.
Re[10]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 17:25
Оценка:
Здравствуйте, Aleх, Вы писали:

BZ>>есть три типа макросов: простая текстовая подстановка а-ля #define. синтаксические макросы а-ля TH и C++ templates. и наконец "семантические макросы" а-ля C++ templates with concepts


A>Я бы сказал так, то что было названо — это три уровня гигиеничности макросов.


нет, гигиеничность — это другое свойство

A>Хм, то есть TH в этом плане то же, что и шаблоны C++ сейчас? Чем плох duck typing?


тем, что функция format в разных классах может делать совсем разные вещи
Люди, я люблю вас! Будьте бдительны!!!
Re[6]: C++ расширение языка
От: Aleх  
Дата: 30.06.10 17:27
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Здравствуйте, Тот кто сидит в пруду, Вы писали:


ТКС>>Здравствуйте, Мишень-сан, Вы писали:


M>>>>Вот, кстати, ещё одно свидетельство того, что программисты хотят программировать не только для компьютера, но для компилятора.


МС>>>Не думаю, что большинству программистов нафик впалось писать для компилятора. Просто если некие сложные расчёты будут проделаны компилятором один раз, при каждом запуске можно будет на халяву пользоваться готовым результатом, а не считать всё заново.


ТКС>>Тут еще вопрос, что при промышленной разработке дешевле Компилируется-то оно тоже по сто раз на дню...


C>для этого придумали precompiled header и частичную компиляцию


Он не всегда помогает, часто глючит и вообще не сильно ускоряет компиляцию.
Re[3]: C++ расширение языка
От: dilettante  
Дата: 30.06.10 18:53
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>А как совмещать продолжения и RAII?


А зачем совмещать продолжения и RAII? Если же речь о вызове деструкторов — то так же, как сейчас — при выходе из блока. Собственно, setcontext/getcontext и в C++ можно использовать.
Re[2]: C++ расширение языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.06.10 19:29
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Старый (мега)топик по поводу — "Выйти из двух циклов сразу"


Или еще более старый — "Страуструп придумал С++ в шутку?".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: C++ расширение языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.06.10 19:34
Оценка:
Здравствуйте, Mazay, Вы писали:

M>Нормальные сообщения об ошибках (полагаю, что с заменой шаблонов на макросы уйдут в прошлое и нечитаемые развертки стэка инстацирования).


Не не уйдет. Проблема в синтаксисе. Он неоднозначен и однозначность достигается уже смантическими средствами (анализом является ли идентификатор типом или нет). Учитывая что шаблоны разбираются только на уровне синтаксиса — эта проблема в С++ практически не устранима.

M>Стандарт на объектные файлы.


Их вообще надо убрать и заменить их на модули (компонентного типа как в Яве, Обероне или дотнете).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C++ расширение языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.06.10 19:35
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


А ты пользовался? Нормальными то? Я вот пользовался. Проблем с отладкой кода не видел. По крайней мере они были не страшнее отладки в языках где макросов нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C++ расширение языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.06.10 19:36
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>и в C++ как-то отлаживаются шаблоны C++ — это как раз специализированные макросы, которые лишены хотя бы части их недостатков. с макросами будет только хуже. любые идеи универсальных препроцессоров упираются в диагностику и отладку


Не, ну, так позориться не стоит. Шаблоны в С++ тоже зло, кстати?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.