C++ расширение языка
От: Caracrist https://1pwd.org/
Дата: 30.06.10 05:43
Оценка: :)))
Скажу чего мне нехватает
Покритикуйте или расскажите чего нехватает вам. Ссылки на языки в которых подобная проблема решена будут интересны, но хотелось бы не сильно далеко уходить от мира c++

Мне не так уж и много надо.

1. break [what]; continue [what];
возможность делать break(и continue) из любого скоупа, а не только цикла. Плюс параметризировать.
число говорит сколько скоупов оборвать, а назавание цыкла говорит какой первый встречающийся цикл оборвать. Через запятую перечисление последовательных обрывов.

например если написанно:
  Скрытый текст
{
  while(true)
  {
    break 2; // это ведет
  }
} // сюда

while (true)
{
 {
    break while; // это ведет
 }
} // сюда

do
{
 {
   while (true)
   {
     for (;;)
    {
      break while, 1; // это ведет
    }
   }
 } // сюда
} while(true);

{
  while(true)
  {
    continue 2; // это ведет
  }
 // сюда
}

while (true)
{
 {
    continue while; // это ведет
 }
// сюда
} 

do
{
 {
   while (true)
   {
     for (;;)
    {
      continue while, 1; // это ведет
    }
   }
 // сюда
 }
} while(true);


2. ключевое слово loop (или любое другое имеющее такую же функциональность)

loop auto my_scope_var = get_the_var();
loop string my_scope_string;

Строка инициализации переменной выполняется один раз после входа в loop scope, а деструктор вызывается при выходе из него.

примеры:

  Скрытый текст
string s;
ifstream fin("1.txt");
while (getline(fin, s)) // читаем по строкам
{
    loop istringstream iss;
    loop string s2; // эти переменные объявленны тут только для читабельности,
// их реальное место за пределами цикла, но при этом нет никакой причины чтобы они были бы там видны...
    iss.str(s);
    while (iss >> s2) // читаем прочитанную строку по словам
    {
       if (/*some condition*/)
       {
           continue while, while; // :) goto nextLine;
       }
       //...
    }

nextLine:
}

for (;;)
{
   if (not time to begin changes)
     continue;
   loop lock_t lock(m_mutex);
   // допустим что все изменения в данном цикле должные делаться под одним замком, 
   // однако нет никакой причины закрывать его заранее
}


3. goto case; как в C#
~~~~~
~lol~~
~~~ Single Password Solution
Re: C++ расширение языка
От: bnk СССР http://unmanagedvisio.com/
Дата: 30.06.10 06:11
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Скажу чего мне нехватает

C>Покритикуйте или расскажите чего нехватает вам. Ссылки на языки в которых подобная проблема решена будут интересны, но хотелось бы не сильно далеко уходить от мира c++

Старый (мега)топик по поводу — "Выйти из двух циклов сразу"
Re[2]: C++ расширение языка
От: Caracrist https://1pwd.org/
Дата: 30.06.10 06:38
Оценка:
Здравствуйте, bnk, Вы писали:

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


C>>Скажу чего мне нехватает

C>>Покритикуйте или расскажите чего нехватает вам. Ссылки на языки в которых подобная проблема решена будут интересны, но хотелось бы не сильно далеко уходить от мира c++

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


Почитал, там
Автор: WolfHound
Дата: 26.05.06
не только не про с++, но ещё и только одно моё пожелание рассматривается, и почти без аргументов. В общем не катит, давайте свежие идеи и критику!
~~~~~
~lol~~
~~~ Single Password Solution
Re: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 07:02
Оценка: 2 (2)
Здравствуйте, Caracrist, Вы писали:

C>Скажу чего мне нехватает


как немного надо человеку для счастья

C>1. break [what]; continue [what];

C>возможность делать break(и continue) из любого скоупа, а не только цикла. Плюс параметризировать.
C>число говорит сколько скоупов оборвать,

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

C>2. ключевое слово loop (или любое другое имеющее такую же функциональность)

C>примеры:

[ccode]
{string s;
string s2;
while (getline(fin, s)) // читаем по строкам
....
}}
[/code]

C>3. goto case; как в C#


н-да. сколько программируешь, год-два?
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: C++ расширение языка
От: Мишень-сан  
Дата: 30.06.10 07:12
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

Я вместо этих извратов с break-continue предпочёл бы нормальные локальные функции.
Re[3]: C++ расширение языка
От: Caracrist https://1pwd.org/
Дата: 30.06.10 07:20
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

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


МС>Я вместо этих извратов с break-continue предпочёл бы нормальные локальные функции.


а выход через несколько исключениями реализовать, и все необходимое by-ref передавать?
вся идея локальных скоупов в конструкторах/деструкторах, break/continue/loop/if-else и visibility других локальных переменных, можно от них отказаться, но по моему это не правильный путь.
~~~~~
~lol~~
~~~ Single Password Solution
Re: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 08:08
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Скажу чего мне нехватает

C>Покритикуйте или расскажите чего нехватает вам. Ссылки на языки в которых подобная проблема решена будут интересны, но хотелось бы не сильно далеко уходить от мира c++

Заменить шаблоны макросами аля Немерл. Остальной сахар реализовать через них.
Нормальные сообщения об ошибках (полагаю, что с заменой шаблонов на макросы уйдут в прошлое и нечитаемые развертки стэка инстацирования).
Стандарт на объектные файлы.
Главное гармония ...
Re[2]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 08:12
Оценка:
Здравствуйте, Mazay, Вы писали:

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


и чем же они заменятся?

вообще верит в макросы может только человек которыми ими никогда не пользовался. представь себе хотя бы отладку кода, используюшего макросы....
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 08:20
Оценка: 1 (1)
Здравствуйте, Mazay, Вы писали:

M>Заменить шаблоны макросами аля Немерл. Остальной сахар реализовать через них.


Поймите правильно, я не предлагаю использовать именно макросы Немерла. Я говорю, что полезной была бы возможность полноценной кастомизации синтаксиса языка на базе C с классами. Остальное будет реализовано в виде библиотек типа буста и stl. В C++ сообществе уже есть успешный опыт по кастомизации синтаксиса с помощью перегрузки операторов, шаблонов. Взгляните на BOOST_FOREACH, SCOPE_EXIT, boost::lambda. Если бы у разработчиков были более удобные инструменты , то эти улучшения было бы также удобно использовать как встроенные операторы. Какими будут эти средства — вопрос обсуждаемый, но макросы Немерла как минимум стоит рассмотреть.
Главное гармония ...
Re[3]: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 08:23
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


BZ>и чем же они заменятся?


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


Позовите Ви... Влада!
Они же в Немерле как-то отлаживаются. Там какие-то хитрые макросы, не такие как в сишном препроцессоре.
Главное гармония ...
Re: C++ расширение языка
От: _nn_ www.nemerleweb.com
Дата: 30.06.10 08:26
Оценка: +2
Здравствуйте, Caracrist, Вы писали:

C>Скажу чего мне нехватает

C>Покритикуйте или расскажите чего нехватает вам. Ссылки на языки в которых подобная проблема решена будут интересны, но хотелось бы не сильно далеко уходить от мира c++

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

const int hash_abc = hash("abc"); // compile time :)
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 08:30
Оценка: -2
Здравствуйте, Mazay, Вы писали:

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


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


M>Они же в Немерле как-то отлаживаются. Там какие-то хитрые макросы, не такие как в сишном препроцессоре.


и в C++ как-то отлаживаются шаблоны C++ — это как раз специализированные макросы, которые лишены хотя бы части их недостатков. с макросами будет только хуже. любые идеи универсальных препроцессоров упираются в диагностику и отладку
Люди, я люблю вас! Будьте бдительны!!!
Re[5]: C++ расширение языка
От: Мишень-сан  
Дата: 30.06.10 08:48
Оценка: +2
Здравствуйте, BulatZiganshin, Вы писали:

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


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


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


M>>Они же в Немерле как-то отлаживаются. Там какие-то хитрые макросы, не такие как в сишном препроцессоре.


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


Там, ЕМНИП, не простой текстовый препроцессор, а полноценная компайл-тайм логика. в D есть отголосок — компайл-тайм функции.

Вообще же мне не совсем понятно, в какую сторону несёт новый стандарт — вводят какой-то зоопарк сказочных конструкций (как пример — альтернативный typedef и новый формат декларации функций), но при этом выбрасывают такие вещи как концепты. О стандарте на ABI и полноценных модулях остаётся только мечтать.
Re[6]: C++ расширение языка
От: Мишень-сан  
Дата: 30.06.10 08:57
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

Кстати, наткнулся как-то на интересную идею (где-то на форуме Nemerle кажется): расширить семантику типа void, в частн. позволить единственное значение этого типа — например (). И соответственно позволить конструкции вида return (); в функциях возвращающих void. Это позволило бы не писать для некоторых случаев делегирования в шаблонах отдельную специализацию.
Re[7]: C++ расширение языка
От: _nn_ www.nemerleweb.com
Дата: 30.06.10 09:13
Оценка: +1
Здравствуйте, Мишень-сан, Вы писали:

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


МС>Кстати, наткнулся как-то на интересную идею (где-то на форуме Nemerle кажется): расширить семантику типа void, в частн. позволить единственное значение этого типа — например (). И соответственно позволить конструкции вида return (); в функциях возвращающих void. Это позволило бы не писать для некоторых случаев делегирования в шаблонах отдельную специализацию.


Ну что-то в этом духе можно и сегодня
void f()
{
}

void g()
{
 return f();
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[8]: C++ расширение языка
От: Мишень-сан  
Дата: 30.06.10 09:19
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Ну что-то в этом духе можно и сегодня

__>
__>void f()
__>{
__>}

__>void g()
__>{
__> return f();
__>}
__>


Да, и правда можно.
Re[6]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 10:25
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

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


МС>Там, ЕМНИП, не простой текстовый препроцессор, а полноценная компайл-тайм логика. в D есть отголосок — компайл-тайм функции.


новое — это хорошо разрекламированное старое синтаксические макросы хорошо известны с 60-х, как и их недостатки

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

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

современная реализация ЯП — это не только трансляция его в низкоуровневый код. это ещё куча средств (рефакторинга, диагностики, навигации, отладки, UI-дизайна и т.д.), облегчающая тебе работу. макросы, создаваемые пользователями, либо должны обеспечивать все те же уровни обработки (что уже становится сравнимо с созданием custom-компилятора), либо они будут оставаться чужеродным фрагментом на теле
Люди, я люблю вас! Будьте бдительны!!!
Re[7]: C++ расширение языка
От: Klapaucius  
Дата: 30.06.10 10:33
Оценка: +2
Здравствуйте, BulatZiganshin, Вы писали:

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


Ну это-то понятно. Ему и нужен не текстовый препроцессор, а некий аналог Template Haskell.
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[8]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 10:53
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


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


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

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

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

и всё это решает только одну проблему макросов, а их множество...
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 10:59
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>и всё это решает только одну проблему макросов, а их множество...


Макросы, немакросы. В любом случае очевидно, что необходим более мощный механизм управления компиляцией. Навешивание синтаксических свистоперделок не выход.
Главное гармония ...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.