Re[2]: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 11:00
Оценка: +1
Здравствуйте, _nn_, Вы писали:

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


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



Вот, кстати, ещё одно свидетельство того, что программисты хотят программировать не только для компьютера, но для компилятора.
Главное гармония ...
Re: C++ расширение языка
От: gear nuke  
Дата: 30.06.10 11:19
Оценка:
Здравствуйте, Caracrist, Вы писали:

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


Очень редко есть такая необходимость при современном подходе писать множество мелких функций, а тем более при наличии lambda expression.

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


Не нужно, уже есть {}

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


Не нужно. switch практически используется очень редко.


Зато есть лишее — const. Точнее, не хватет иммутабельности по умолчанию. Но это получится уже другой язык...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: C++ расширение языка
От: Мишень-сан  
Дата: 30.06.10 11:39
Оценка:
Здравствуйте, Mazay, Вы писали:

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


Не думаю, что большинству программистов нафик впалось писать для компилятора. Просто если некие сложные расчёты будут проделаны компилятором один раз, при каждом запуске можно будет на халяву пользоваться готовым результатом, а не считать всё заново.
Re[2]: C++ расширение языка
От: Caracrist https://1pwd.org/
Дата: 30.06.10 11:42
Оценка:
Здравствуйте, gear nuke, Вы писали:



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


GN>Не нужно, уже есть {}


какая связь?
~~~~~
~lol~~
~~~ Single Password Solution
Re: C++ расширение языка
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 30.06.10 11:44
Оценка:
Здравствуйте, Caracrist, Вы писали:

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


Этот список больно поход на описание возможностей Ada
Re[9]: C++ расширение языка
От: Klapaucius  
Дата: 30.06.10 12:12
Оценка: 1 (1) +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>compile-time dynamic typing


Мне одному кажется, что это оксюморон?
... << 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[10]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 12:15
Оценка:
Здравствуйте, Klapaucius, Вы писали:

BZ>>compile-time dynamic typing


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


compile-time dynamic typing of types. я вроде описал в чём он заключается
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: C++ расширение языка
От: Klapaucius  
Дата: 30.06.10 12:16
Оценка:
Здравствуйте, Mazay, Вы писали:

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

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

Это, скорее, свидетельство того, что было бы желательно, если бы компилятор вычислял все, что можно вычислить на этапе компиляции. Т.е. если все данные для ф-и hash известны на этапе компиляции, как в данном случае — она на этом этапе и вычисляется. Если данные не известны — на этапе выполнения. А в чем удобство вводить разные сорта ф-ий для этапа компиляции и выполнения не понятно.
... << 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: C++ расширение языка
От: dilettante  
Дата: 30.06.10 12:17
Оценка:
Здравствуйте, Caracrist, Вы писали:

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


1. Нормальных локальных функций.
2. Блоки-как-выражения.
3. Продолжения (вроде POSIX setcontext/getcontext, только не такие уродливые)
Re[4]: C++ расширение языка
От: samius Япония http://sams-tricks.blogspot.com
Дата: 30.06.10 12:20
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


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


K>Это, скорее, свидетельство того, что было бы желательно, если бы компилятор вычислял все, что можно вычислить на этапе компиляции. Т.е. если все данные для ф-и hash известны на этапе компиляции, как в данном случае — она на этом этапе и вычисляется. Если данные не известны — на этапе выполнения.


А что делать с побочными эффектами, которые могут иметь место в процессе выполнения?
Re[11]: C++ расширение языка
От: Klapaucius  
Дата: 30.06.10 12:21
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>я вроде описал в чём он заключается


Где описали?
И где еще может проверяться макрос, если не в месте применения? — там ведь будет AST на входе в большинстве случаев. Какими контрактами это AST описывать и, главное, зачем?
... << 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[5]: C++ расширение языка
От: Klapaucius  
Дата: 30.06.10 12:25
Оценка: 1 (1) +3
Здравствуйте, samius, Вы писали:

S>А что делать с побочными эффектами, которые могут иметь место в процессе выполнения?


Так ведь у ф-ий нет побочных эффектов по определению ф-ции. А вводить различия между ф-ями и процедурами, (на уровне системы типов, например) это более полезное подразделение. Оно не только для определения того, что можно в компайл-тайм вычислить пригодится.
... << 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[2]: C++ расширение языка
От: Klapaucius  
Дата: 30.06.10 12:27
Оценка:
Здравствуйте, dilettante, Вы писали:

D>3. Продолжения


А как совмещать продолжения и RAII?
... << 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: C++ расширение языка
От: igna Россия  
Дата: 30.06.10 12:28
Оценка: 5 (1)
Здравствуйте, Caracrist, Вы писали:

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


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

do statement while ( expression ) ;


на

do statement while ( expression ) statement


и получаем возможность вместо

    for(;;) {
        . . .
        if ( . . . )
            break;
        . . .
    }


писать

    do {
        . . .
    } while ( . . . ) {
        . . .
    }
Re[4]: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 13:05
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


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

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

K>Это, скорее, свидетельство того, что было бы желательно, если бы компилятор вычислял все, что можно вычислить на этапе компиляции. Т.е. если все данные для ф-и hash известны на этапе компиляции, как в данном случае — она на этом этапе и вычисляется. Если данные не известны — на этапе выполнения. А в чем удобство вводить разные сорта ф-ий для этапа компиляции и выполнения не понятно.


У компиляторов не хватает на это мозгов. Приходится помогать ручками.
Главное гармония ...
Re[4]: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 13:08
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

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


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


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


Большинству программистов нафик не брякало использовать boost::mpl и прочую шаблонную магия. Но библиотеками написанными с их помощью пользуются многие с большим удовольствием.
Главное гармония ...
Re[2]: C++ расширение языка
От: Caracrist https://1pwd.org/
Дата: 30.06.10 13:10
Оценка:
Здравствуйте, dilettante, Вы писали:

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


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


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

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



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

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

~~~~~
~lol~~
~~~ Single Password Solution
Re[4]: C++ расширение языка
От: Mazay Россия  
Дата: 30.06.10 13:15
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


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

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

K>Это, скорее, свидетельство того, что было бы желательно, если бы компилятор вычислял все, что можно вычислить на этапе компиляции. Т.е. если все данные для ф-и hash известны на этапе компиляции, как в данном случае — она на этом этапе и вычисляется. Если данные не известны — на этапе выполнения. А в чем удобство вводить разные сорта ф-ий для этапа компиляции и выполнения не понятно.


Функции этапа компиляции могут применяться для того, чтобы управлять генерацией машинного кода и курочить AST. С их помощью можно научить компилятор новым синтаксическим конструкциям, навешать любую метаинформацию, ввести атрибуты для всего, что только можно — полей, методов, классов, блоков кода, переменных и функций и т. д. Сделать тот же выход из двух циклов.
Главное гармония ...
Re[5]: C++ расширение языка
От: BulatZiganshin  
Дата: 30.06.10 13:19
Оценка: 1 (1) +1
Здравствуйте, Mazay, Вы писали:

M>Функции этапа компиляции


общепринятый термин — метапрограммирование
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: C++ расширение языка
От: gear nuke  
Дата: 30.06.10 13:25
Оценка:
Здравствуйте, Caracrist,

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


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

Было
for (;;)
{
   if (not time to begin changes)
     continue;
   loop lock_t lock(m_mutex);
   // допустим что все изменения в данном цикле должные делаться под одним замком, 
   // однако нет никакой причины закрывать его заранее - и нельзя, т.к. иначе изменения будут под разными замками
   
   // а какие причины держать лок дольше чем надо???
   // если условия взятия лока не должны быть защищены этим локом,
   // их можно безопасно вынести за цикл по тем же самым причинам
}
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.