Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Давайте обсудим недостатки и недочёты С++, недостатки языка 
:(
    Опции темы
setq
Дата 27.9.2003, 00:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

понятно, что половина "недостатков" пропадает с увеличением опыта, когда узнаёшь Си++ получше.

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



начнём с мелочей :-)

0) мне не нравится, что break'ом нельзя выкинуться из конструкции
for (;;) switch () { ... }
потому что это слово одинаково как для выхода из for (;;) так и из switch () {}
приходится чесать правой лапой за левым ухом.

1) мне не нравится, что в определении функции нужно писать
f (int x, int y)
и нельзя просто
f (int x,y)

2) мне не нравится, что можно написать
for (;;) {
вместо
for (; true ;) {
и нельзя
while () {
вместо
while (true) {

3) мне не нравится, что если в for (;;) в круглых скобках до первой запятой объявляется переменная -
for (int i;;)
- то туда уже не засунуть других выражений, типа -
for (i=6, j=0, k=666;;)

пока всё :-))
  Вверх
RAN
Дата 27.9.2003, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



А можно только ругать? А оспаривать и хвалить?
Ну, всё равно молчать не умею smile.gif .

Насчёт break
Я об этом тоже думал. И мне хотелось бы, чтоб в дополнении к break существовал бы оператор, условно назовём его block <имя> {...}.
Чтоб возможно было такое:
Код

block SomeBlock
{
   ..............
   ..............
   break SomeBlock;
   .............
}


Наличие имени у блока позволяло бы выходить из вложенных блоков. Имена были бы локальны, т.е. действовали лишь в пределах блока. И никаких конфликтов. Просто бы решалась проблема выхода из вложенных циклов
Код

block Finding
   for(i=0; i<10; i++)
       for(j=0; j<10; j++)]
           if(a[i][j] == x) break Finding;
/* Всё результат в i и j */

Вот такая идея smile.gif

P.S. Я подсел на C конкретно. С - лучший язык smile.gif
PM MAIL ICQ   Вверх
p0s0l
Дата 27.9.2003, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



RAN - идея насчет блоков с точки зрения компиляции не очень удачна, так же как и простые переходы (не знаю, есть ли они в C, но в паскале это были goto <label>), т.к. это нарушает структуру программы...



--------------------
С уважением, г-н Посол.
PM   Вверх
DENNN
Дата 27.9.2003, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
простые переходы (не знаю, есть ли они в C,

Есть goto:метка
Цитата
идея насчет блоков с точки зрения компиляции не очень удачна,......т.к. это нарушает структуру программы...

Почему это интересно? По современным представлением уровень программы понижается с каждым оператором goto (причем не только C, но и любой другой). Существует теорема (или что-то подобное, названия не помню), что любую конструкцию, использующую операторы перехода можно переписать без них (что кстати правда) smile.gif ).
block.....break также удовлетворяет этим понятим, как и while....break, for....break и т.п.

А мне не нравиться, что при объявлении функции значения параметров по умолчанию всегда должны стоять последними, а при вызове такой функции, если мне надо передать последний параметр, то я вынужден и прописывать все предыдущие перед ним. Это серьезное препятствие при позднем совершенствовании кода, кода скажем мне необходимо в функцию добавить еще один параметр не имеющий default-значения, то приходиться весь код вызовов этой функции переписывать (ну либо искать более удобные пути).
PM ICQ   Вверх
mr.DUDA
Дата 27.9.2003, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



ОЧЕНЬ НЕ НРАВИТСЯ путаница с .h и .cpp - с точки зрения пространства имён (что откуда будет видно, если поочередно подключать "H к CPP", "CPP к CPP", "CPP к H" и "H к H" adv/hair.gif, и почему мой любимый VC++ не разрешает мне подключать Includ'ы половиной из вышеперечисленных способов ?). Если бы не было такой путаницы (а было бы например как в C# - один тип файлов), было бы проще жить нам (и сложнее компилятору smile.gif но это ведь его проблемы).


--------------------
user posted image
PM MAIL WWW   Вверх
Crait
Дата 27.9.2003, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



CPP forever ! adv/65.gif adv/65.gif adv/65.gif

setq, твоя третья проблема может быть разрешена так :
for (int i=6, j=0, k=666;;)

А вот мне бы хотелось вложенных функций - как в Паскале.

А также того, чтобы при объявлении переменных класса
можно было бы указывать инициализатор :

class MyClass
{
int cnt = 0;
};

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

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

printf("Ошибка ... в функции %s",__FUNCTION_NAME__);

А еще поддерживать двоичный формат :
long i = 0b10011100011000111000001100000110;

И еще - чтоб можно было делать switch по переменной любого типа :

switch (str)
{
case "King":
...

case "Crimson":
...
}

switch (d_value)
{
case double(1) :
...

case double(1.5) :
...
}

И чтоб как в Паскале можно было в switch'е указывать диапазон :

switch (i)
{
case 1 .. 3:
...

case 4:
...
}

И чтобы можно было переопределять операторы с двумя параметрами.
Типичный пример - operator[][] для обращения к элементам матрицы.

И чтобы typeof включили в стандарт.

Фу, блин, расписался... Все же C++ - лучший язык программирования !

Это сообщение отредактировал(а) Crait - 27.9.2003, 14:50
PM MAIL   Вверх
maxim1000
Дата 27.9.2003, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



много того, что хотелось бы видеть в C++ (по крайней мере мне), есть в Delphi (точнее в Object Pascal):
1. properties
2. dcu - объявления и реализации находятся в одном файле
3. уже упоминавшееся (int x,y)
4. div и /, а не просто / - чтоб всегда было видно дробноеделение или нацело

Это сообщение отредактировал(а) maxim1000 - 27.9.2003, 15:22


--------------------
qqq
PM WWW   Вверх
GanZaleZ
Дата 27.9.2003, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 15.7.2003

Репутация: нет
Всего: нет



Эх человеки ! Как грили Пионеры - "Мы не ищем лугких путей"
Так что если бы да кобы то С++ превратился бы в PHP и не нужно бы было обьявлять какого типа переменная ! ))) но это было бы уже смешно !
А может вообще зачем чтото писать ? Вышел бы Visual C# какойнить 9 версии , и чтобы там вам
Вообще ниче писать не надо было , мышкой поводил , поколдовал , и все ! Хе хе хе
Есть конечно траблы ! где не без них ! Но мне всерафно кажется что это обсуждать - это как обсуждать РУССКИЙ язык ! Вот я фсеже не пойму почему слово КОФЕ мужского рода ! ))))
PM MAIL   Вверх
Fantasist
Дата 27.9.2003, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
block.....break также удовлетворяет этим понятим, как и while....break, for....break и т.п.


Ничего подобного! Во-первых, с точки зрения структуры, break и continue реккомендуется использовать как можно реже. Во-вторых, в while, do и for эти операторы прерывают выполнения в границе одного блока и вполне понятно какого. А конструкция:

Код

block Finding
  for(i=0; i<10; i++)
      for(j=0; j<10; j++)]
          if(a[i][j] == x) break Finding;


ничем не отличается от:

Код

  for(i=0; i<10; i++)
      for(j=0; j<10; j++)]
          if(a[i][j] == x) goto Finding;
Finding:


Так что и выдумывать ничего не надо.

Цитата
А мне не нравиться, что при объявлении функции значения параметров по умолчанию всегда должны стоять последними,


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

Цитата
при позднем совершенствовании кода, кода скажем мне необходимо в функцию добавить еще один параметр не имеющий default-значения


Используй перегрузку.

Цитата
И еще - чтоб можно было делать switch по переменной любого типа :


Так так оно уже и есть. Ничем от паскаля не отличается. Разница только в том, что в Паскале есть тип строка, а в С++ нету.

Цитата
Но мне всерафно кажется что это обсуждать - это как обсуждать РУССКИЙ язык !


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



--------------------
Волны гасят ветер...
PM MAIL   Вверх
maxim1000
Дата 28.9.2003, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата

Цитата
А мне не нравиться, что при объявлении функции значения параметров по умолчанию всегда должны стоять последними,

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

"теоретически нельзя": не стоит бросаться такими выражениями, их еще нужно доказывать...
или опровергать smile.gif
представим себе, что при вызове фунукции вместе со значениями можно писать имя параметра (по-моему, я этовидел в VB или еще в каком-то бейсике)
тогда вполне возможно указать любое подмножество параметров, а остальные оставить по умолчанию
P.S.
Хотя лично мне такое бы не понравилось...


--------------------
qqq
PM WWW   Вверх
setq
Дата 28.9.2003, 10:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Fantasist <<Действительно, что его обсуждать - все равно мы им не пользуемся>>
:-)
  Вверх
p0s0l
Дата 28.9.2003, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Цитата
Почему это интересно? По современным представлением уровень программы понижается с каждым оператором goto (причем не только C, но и любой другой). Существует теорема (или что-то подобное, названия не помню), что любую конструкцию, использующую операторы перехода можно переписать без них (что кстати правда)  ).

И к чему это сказано ? Си - ЯВУ, зачем понижать уровень с помощью goto ?
Я же говорил, что такие конструкции как block ... break и goto нарушают структурность, иерархичечность, что присуще ЯВУ, а не низкоуровневым языкам... Конечно, можно пользоваться goto, что я и делал, когда начал прогать, но сейчас я уже непредставляю, куда можно сунуть goto...
Цитата
break и continue реккомендуется использовать как можно реже.
Почему ? Это как раз-таки ничего не нарушает, т.к. выход происходит за пределы текущего блока... Это всё равно, что сказать, что return не рекомендуется использовать - смысл break и return полностью совпадает (кроме возвращаемого значения) - выход из текущего блока(функции). Можно было бы оставить в функции только 1 return в самом конце, но кто так делает ?
А вот если выход был бы за пределы внешнего блока, то тут могли бы появиться некоторые неувязочки, т.к. вначале каждого блока может выделятся память или запоминаться в стеке регистры (соответственно в конце блока регистры восстанавливаются) - тогда для организации выхода из двойного блока пришлось бы генерить специальный код для восстановления регистров и памяти.
Цитата
Хе, ну ты сказанул. По другому даже теоретически нельзя, так что эта претензия не в какие ворота не лезет.

Может я что-то не понимаю, но почему нельзя сделать такие вызовы:
func1(,,,,,2.434);
Т.е. первые параметры по умолчанию ?...
Цитата
Так так оно уже и есть. Ничем от паскаля не отличается. Разница только в том, что в Паскале есть тип строка, а в С++ нету.

К слову: в Паскале нельзя делать case по строковым переменным (и по float тоже), можно только по целочисленным или перечисляемым типам...



--------------------
С уважением, г-н Посол.
PM   Вверх
Crait
Дата 28.9.2003, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



2 Fantasist

Ты не прав, что в switch'е можно использовать переменную любого типа.
Попробуй скомпилировать хотя бы следующее :

int f1 (double Value)
{
switch (Value)
{
case double(1):
return 1;

case double(1.5):
return 2;
}

return 3;
}

PM MAIL   Вверх
Fantasist
Дата 29.9.2003, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
Почему ? Это как раз-таки ничего не нарушает, т.к. выход происходит за пределы текущего блока... Это всё равно, что сказать, что return не рекомендуется использовать - смысл break и return полностью совпадает (кроме возвращаемого значения) - выход из текущего блока(функции). Можно было бы оставить в функции только 1 return в самом конце, но кто так делает ?


Вот именно тем и нарушает, что это безусловный выход. Я знаю одного человека (знаю, конечно, сильно сказано) который ругает своих подчиненных за использование более одно return в функции. Ну, ругает, может, сильно сказанно, но очень не поощряет. Почему? Все из-за той же структуры. И смысл break'a и return'a не совсем совпадают. После break'а еще код может выполнятся в данной функции - после return'a нет. Про continue я вообще молчу. Видал я с ним такое! smile.gif

Цитата
Может я что-то не понимаю, но почему нельзя сделать такие вызовы:
func1(,,,,,2.434);


Да, ошибся. Теоретически все возможно. Можно ключевое слово ввести, типа default_value. Только, конечно, не в С++. Такая штукенция совсем не в духе детерминированного С++. Да и не думаю, что это бы что-то принесло. Сделали бы первый параметр по умолчанию возникли бы другие проблемы. Неговоря уже о том, что читать такие программы было бы еще тяжелее.

Цитата
К слову: в Паскале нельзя делать case по строковым переменным (и по float тоже), можно только по целочисленным или перечисляемым типам...


Ну так я и говорю, ничем от паскаля не отличается. smile.gif Да и вполне понятно почему. switch - конструкция используемая для бысрого перехода по таблице значений. Из строк таблицу не построишь - строки надо сравнивать побайтно. Ну а значение с плавающей точкой так и вообще сравнивать нельзя, хоть с if'ом, хоть со switch'eм.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Vyacheslav
Дата 29.9.2003, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код

try
{
 for (;;)
   switch
   {
     ...
     throw 1;
   }
}
catch(...)
{
}


Остальное все, по моему, не стоит и обсуждать.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 29.9.2003, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



[
Цитата

А вот мне бы хотелось вложенных функций - как в Паскале.

Если очень хочется. можно использовать локальные классы-функтуаторы.
Код

int f( int i )
{
 int j = i*2;

 class g_
 {
 public:
   g_( int& j ) : j_( j ) { }

   int operator()( int k )
   {
     return j_+k;  
   }

 private:
   int& j_;
 } g( j );

 j += 4;

 return g( 3 );
}


Цитата

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

Макросы не являются принадлежностью ООП, являются наследием С и чрезмерное их использование - плохой стиль.
Цитата

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

printf("Ошибка ... в функции %s",__FUNCTION_NAME__);

Как правило, это решается в конкретных компиляторах
Например, в С++Builder имеются подобные макросы:__FILE__, __FUNC__, __LINE__, __DATE__
Цитата

И чтоб как в Паскале можно было в switch'е указывать диапазон
switch (i)
{
case 1 .. 3:
...

case 4:
...
}

Зачем?
Код

switch (i)
{
case 1:
case 2:
case 3:  ...
break;
case 4:
...
}






--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Crait
Дата 29.9.2003, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



2 Fantasist
О да, от Паскаля оно не отличается - подобная функциональность
отсутствует и в нем и в CPP.
А значения с плавающей точкой
сравнивать все - таки можно - если осторожно wink.gif Скажем, такой код

void f1 (double Value)
{
if (Value == 1)
do_something(1);
else
if (Value == double(1.5))
do_something(2);
else
do_something(3);
}

.......
f1(1);
f1(1.5);
f1(2);

будет работать всегда.

Что касается сравнения строк (и других типов данных),
необязательно делать его "побайтно".
Бинарный поиск в отсортированной таблице - весьма эффективен.
Кстати, насчет таблиц. Реально, многие (извиняюсь, некоторые, два из двух)
компиляторы, проверенные мною на этот предмет, реализуют switch
с небольшим числом вариантов как последовательность проверок по типу if.
И ваще, язык высокого уровня - на то и служит,
чтобы не грузить программиста подобной рутиной. ;)

2 Vyacheslav
Спасибо насчет информации о __FUNC__ .
Что же касается кода

switch (i)
{
case 1:
case 2:
case 3:
...
break;

case 4:
...
}

- оно понятно; а если поддиапазон 1..100 ?

Насчет локальных классов - тоже понятно, но как-то оно через ж...
Да и были проблемы с этим - уже не упомню, какие.

А препроцессор и макросы - вещь хорошая (IMHO),
если пользоваться ею умеренно. И вместно.
Хоть даже и не согласуются они с парадигмой ООП.
Когда оптимизируешь по скорости критические участки кода -
бывает, уже и не до ООП.
Структурность же при (разумном) использовании макросов сохраняется.
Шаблоны (template) в подобных случаях не всегда применимы.

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

Это сообщение отредактировал(а) Crait - 29.9.2003, 18:55
PM MAIL   Вверх
RAN
Дата 29.9.2003, 14:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Цитата
try
{
for (;;)
   switch
   {
     ...
     throw 1;
   }
}
catch(...)
{
}


Так и знал, что кто-нибудь предложит. Забыл в своём топике написать. Исключения - это и есть исключения. Смысл их в том, при нормальной работе ни одно исключение вызываться не должно. А вариант Vyacheslav'а - это скажем так, маленькая хитрость. Я против такого применения. Тем более, что некоторые среды будут останавливать выполнение программы с сообщением о произошедшей исключительной ситуации.

Но я тут о другом подумал. Тут говорили, что нельзя вводить возможность выхода из вложенных блоков. А try ввели в стандарт и ничего. Все понимают и легко читают. Я считаю, что goto плохо применять, потому как не известно куда он выбросит. А break выходит за пределы блока.
PM MAIL ICQ   Вверх
Vyacheslav
Дата 29.9.2003, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Crait
Цитата

А значения с плавающей точкой
сравнивать все - таки можно - если осторожно  Скажем, такой код


Настоятельно делать этого не рекомендую smile.gif. Особенно, если пишите программы для бухгалтерии. Можете получить кучу неприятностей, схватив где нибудь ситуацию вроде этой.

Код

#include <iostream>
#include <conio.h>
int main(int argc, char* argv[])
{
double value  = 1.005 - 1.0;
if (value == double(0.005))
 std::cout << value <<"== 0.005";
else
 std::cout << value <<"!= 0.005";
getch();

   return 0;
}







--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Crait
Дата 29.9.2003, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Эт понятна. Я ж говорю - если осторожно ;)

Это сообщение отредактировал(а) Crait - 29.9.2003, 18:52
PM MAIL   Вверх
Fantasist
Дата 29.9.2003, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
f1(1);
f1(1.5);
f1(2);

будет работать всегда.


Ага, пока кто-нибудь не вызовет эту функцию со значением полученным кодом типа приведенного Vyacheslav'ом.

Цитата
Что касается сравнения строк (и других типов данных),
необязательно делать его "побайтно".


Обязательно. Бинарный поиск, хеш-таблицы - это методика храниния и поиска данных, и там действительно не всегда приходиться сравнивать строки, но сравниваются они только побайтно. Да и в любом случае процесс длительный.
Хотя, конечно, switch выглядит более удобочитаемо, чем куча if... else'ов. С этим согласен.



--------------------
Волны гасят ветер...
PM MAIL   Вверх
Peter
Дата 30.9.2003, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Кому не нравится Си - пусть говорит об этом на сишных конференциях высшего уровня. Там многоопытные специалисты примут или не примут предложения.
Есть еще вариант: написать свой собственный компилятор и играть с ним, сколько душе угодно.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Crait
Дата 30.9.2003, 13:47 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Спасибо, Peter, за ценные советы.
PM MAIL   Вверх
RAN
Дата 30.9.2003, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Модератор: Я понимаю, что тема располагает к флейму. Но последнии два топика - это уже слишком. Прошу не продолжать в этом направлении. Всё равно буду удалять.
PM MAIL ICQ   Вверх
Yujen
  Дата 1.10.2003, 15:52 (ссылка)    |    (голосов: 2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А ты не слышал такую поговорку: "Плохому танцору всегда ЯЙЦА МЕНШАЮТ" biggrin.gif
Я вот например DELPHI видел всего два раза в жизни, и не понял как там и что там, хотя в Turbo Pascal'е писал когдато (в древние времена, в эпожу MS-DOS), и что я по твоему должен на каждом углу орать, что DELPHI это [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] отстой Borland MUST DIE MSVISUAL C++ FOR EVA.
Нет парень ты в себе разберись, а потом уже что-либо охаивай, напиши для начала какой-нибуть простенький интерпретатор, дай людям поюзать, вот тогда и только тогда ты поймешь, что это такое: писать...
А обделать можно все, что угодно. Обделать легко, отмыться трудно
  Вверх
setq
Дата 1.10.2003, 16:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











:-)
это в чей адрес, интересно?

по поводу...

Crait
<<setq, твоя третья проблема может быть разрешена так :
for (int i=6, j=0, k=666;;)>>

...не получится для
for (int i=6, double j=7.7, char *s=0;;)
такие дела :-(
  Вверх
mr.DUDA
Дата 1.10.2003, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
...не получится для
for (int i=6, double j=7.7, char *s=0;;)
такие дела :-(

ГА !!!

получится, если делать вот так:
Код
void InitCycle(int &i, double &j, char *&s, int valI, double valJ, char *valS)
{
    i = valI;
    j = valJ;
    s = valS;
}

..........

int i; double j; char *s;
for(InitCycle(i, j, s, 6, 7.7, 0);;)


такие дела
biggrin.gif biggrin.gif biggrin.gif


--------------------
user posted image
PM MAIL WWW   Вверх
Peter
Дата 7.10.2003, 16:33 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



2RAN: по-моему, мое сообщение не было оффтопик. Правда, я вместо того, чтобы поругать язык, высказал свое мнение об участниках форума. Насмотрелся уже на докторов наук, которые ни в зуб ногой даже в "своей" теме.
Учиться надо!!!
А на конференциях высокого уровня, я полагаю, не чайники сидят, а многоопытные соображающие мужики.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Vit
Дата 7.10.2003, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Цитата(Peter @ 7.10.2003, 07:33)
Кому не нравится Си - пусть говорит об этом на сишных конференциях высшего уровня.


Модератор: Кому, что и где говорить указывать не надо. Не маленькие - сами разберёмся! Вас не устраивает наш уровень - пожалуйста, мы никого не держим! Идите на "сишные конференции высшего уровня". Зачем Вы тогда здесь отвечаете? Если Вам не нравится то что здесь говорится - вам надо обратится к модератору, и он уберёт замечания не соответствующие правилам форума, а Вам никто права распоряжаться на форуме хозяйской рукой, указывая кому и что говорить, не давал. Не надо подменять администрацию. Кроме того среди тех кто высказывался никто не сказал, что ему не нравится C.

Цитата(Peter @ 7.10.2003, 07:33)
Там многоопытные специалисты примут или не примут предложения.


Модератор: Знаете, у нас свои специалисты есть. Реклама других форумов категорически запрещена. Читайте правила. Нам не требуется чтобы кто-то принимал или не принимал наши возражения. Здесь люди обмениваются своим мнением, и для этого не требуется принятие кем либо каких-то предложений. Вы нас наверное с какой-то другой организацией спутали!


Цитата(Peter @ 7.10.2003, 07:33)
Правда, я вместо того, чтобы поругать язык, высказал свое мнение об участниках форума.



Модератор: Вы сделали 3 ошибки!
1) Язык C/C++ никто не ругал. Были высказаны мнения по поводу того, что в этом языке кому-то не удобно, или что бы он хотел иметь. Замете, ни один из участников дисскуссии не ругал язык. Указывали на недостатки - да, сравнивали с другими языками - да, ругать - нет! Впрочем тема, бала несколько одиозно озаглавлена - это исправлено, но к чести участников форума - никто до ругани в адрес C не опустился.

2) Высказывать личное мнение об участниках форума категорически запрещено! См. правила форума.

3) Переход с обсуждения темы на обсуждение обсуждающих - есть офтопик. См. правила форума.



Цитата(Peter @ 7.10.2003, 07:33)
Насмотрелся уже на докторов наук, которые ни в зуб ногой даже в "своей" теме.


Модератор: Это вы о тех аксакалах которые сидят на "на сишных конференциях высшего уровня"? Так мы туда и не ходим! Зачем они нам!


Цитата(Peter @ 7.10.2003, 07:33)
Учиться надо!!!


Модератор: Да, причём многим надо учиться языку С++, а участнику под ником "Peter" надо прежде всего учится уважению собеседников, уважению чужого мнения, умению внимательно читать и понимать смысл прочитанного и элементарной вежливости и культуре общения, по-видимому Peter пропустил детский сад и первые 3 класса школы, где учили таким простым вещам...


Цитата(Peter @ 7.10.2003, 07:33)
А на конференциях высокого уровня, я полагаю, не чайники сидят, а многоопытные соображающие мужики.



Модератор: Да пусть сидят где угодно!



Модератор: Я снизил репутацию участника Peter, объяснения вы можете найти в таблице рейтингов, а аргументы описаны здесь. Обращаясь к Peter, хочу сказать, что вы умудрились в 2х коротких сообщениях многократно нарушить правила форума, оскорбить участников форума и администрацию форума. Повторные действия в этом направлении могут привести к анулированию Вашей учётной записи и блокирование IP адресов Вашего провайдера для доступа к форуму. Обжаловать мои действия, как и действия модераторов можно в специальном разделе "Обсуждение форума" http://forum.vingrad.ru/index.php?act=SF&f=27.

Продолжение этой дисскуссии здесь будет рассматриваться как повторное злостное нарушение правил форума. Причём не важно, кто будет продолжать обсуждение. Здесь обсуждаем - недостатки, недочёты языка C/C++ и то что Вам лично в этом языке не хватает для полного счастья. Меня, модераторов и Peter'а продолжать обсуждать здесь КАТЕГОРИЧЕСКИ ЗАПРЕЩАЕТСЯ!



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 7.10.2003, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Модератор:
2 setq - осторожнее в названии темы. Вы всё правильно написали по поводу возможности недостатков языка C, и обсуждение может быть интересным, но заголовок темы таким быть не должен!


Заголовок я исправил, не обессудте, надеюсь теперь вопросы по поводу корректности ни у кого не возникнут.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Baa
Дата 8.10.2003, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Вит, подписываюсь под каждым твоим словом адресованным Peter'у.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
mike_prog
Дата 11.10.2003, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 27.9.2003

Репутация: нет
Всего: 1



А по-моему один единственный недостаток - это его тупой компилятор и синтаксис. Вот в PERLе синтаксис удачнее.
Цитата
Я имею в виду пробелы, скобки, ну вы меня понимаете...

PM MAIL ICQ   Вверх
maxim1000
Дата 11.10.2003, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Сказать, что компилятор тупой, - не сказать ничего. Желательно было бы указать, по сравнению с чем он тупой.
Если по сравнению с тем, как профессиональный человек пишет на ассемблере, то полностью согласен (я имею в виду качество кода, а не время разработки), а если по сравнению с другим компилятором, то хотелось бы услышать пример для сравнения (надеюсь, не Perl имелся в виду smile.gif )
А синтаксис - дело привычки
Хотя в некоторой степени я с этим соглашусь: мне кажется, что он излишне символичен. Намного приятнее писать mod вместо % (более читабельно), да и записи типа while(*s1++=*s2++); я предпочитаю заменять на
Код

while(true)
{
  *s1=*s2;
  if(*s1==0)
     break;
  s1++;
  s2++;
};



--------------------
qqq
PM WWW   Вверх
RAN
Дата 12.10.2003, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Синтаксис и, прежде всего,"скобки и пробелы" - это та самая мощь C++. Как раз это я и обожаю. И мне иногда плакать хочется, когда читаю что-то типа: "это было причиной множества ошибок и в C# этого нет". Жуть. Это у кого были ошибки? У новичков? Верните сквозное выполнение в switch, опрератор delete и т.д. smile.gif
PM MAIL ICQ   Вверх
Kefir
Дата 12.10.2003, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



знаете, по моему C++ язык более чем хороший. возможности просто неограниченные. я начинал с етого языка и теперь никаких неудобств не вижу. C# я в глаза не видел, но наслышан о нём как о VB: Second Edition. Ну да ладно. Не буду удаляться от темы. 4то касаетса компилятора - ползуюс VC++6 и очень даже доволен. не думаю, что борланд силно хуже или лу4ше.
PM MAIL WWW Skype   Вверх
RAN
Дата 13.10.2003, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Мне в борланде фишка нравиться. Когда работаешь с файлом cpp, то соответствующий ему h можно увидить, переключившись закладкой внизу листа (как в Excel). А вверху закладки всех открытых unit'ов. Удобно.
PM MAIL ICQ   Вверх
DENNN
Дата 16.10.2003, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
Мне в борланде фишка нравиться. Когда работаешь с файлом cpp, то соответствующий ему h можно увидить, переключившись закладкой внизу листа

ДОстаточно поставить add-in к VS6.0 WndTabs и настроить автоматическое открытие заголовочного файла.
(Ближайшая ссылка на него на RSDN.ru)

Цитата
Хотя в некоторой степени я с этим соглашусь: мне кажется, что он излишне символичен. Намного приятнее писать mod вместо % (более читабельно), да и записи типа while(*s1++=*s2++); я предпочитаю заменять на CODE

while(true) { *s1=*s2; if(*s1==0)break; s1++; s2++; };

Вот и очень плохо. Для читабелно mod вместо % только потому что ты плохо помнишь арифметические операции языка. Тоже отностится и к твоему коду smile.gif
PM ICQ   Вверх
oleg1973
Дата 16.10.2003, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



вот мне не нравится что нету вставки бинарного файла smile.gif ну картинки к примеру smile.gif
ченить типа
include 'main.jpg'


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
DENNN
Дата 16.10.2003, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
от мне не нравится что нету вставки бинарного файла ну картинки к примеру ченить типа include 'main.jpg'

Ну и что после этого делать? Те же ресурсы получаются smile.gif
PM ICQ   Вверх
Guest
Дата 21.10.2003, 15:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1.1. Мои сообщения были адресованы setq.
1.2. Темы достоинств или недостатков языка Си++ - это не вопрос жизни и смерти.

Вывод: прошу прощения у setq за чрезмерную резкость.

2.1. Читал книгу Чарльза Калверта "Программирование для Win32" (название привел неточно) - он описывает, как обсуждаются предложения по улучшению языка, рекомендации по безошибочному программированию и т. д.
2.2. На сайте http://home.perm.ru/~strannik/ можете найти проект - человек создает собственный компилятор Си++/Паскаль/Модула-2. Синтаксис - какой ему понравился, такой и делает.
2.3. То, что кому-то может не нравиться в языке - либо эта вещь рассчитана на профессионалов, а не на учащихся, либо там были какие-то проблемы с созданием компилятора, либо оно реализовано в одном компиляторе, но его нет в другом.
  Вверх
Peter
Дата 21.10.2003, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Был глюк. Сообщение выше - мое.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
knave
Дата 23.10.2003, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 6.3.2003
Где: Санкт-Питербург ( Россия)

Репутация: 1
Всего: 5





--------------------
С наилучшими пожеланиями !!!
PM MAIL ICQ   Вверх
DENNN
Дата 23.10.2003, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
http://www.podgoretsky.com/ftp/Docs/C/Stra.../Interview.html

Довольно интересно читать smile.gif. Тем более, что если сам хорошо не владеешь языками то можно даже воспринять всерьез все эти аргументы о том, что C++ и ООП просто неудобная вещь в сравнении с C и линейным программированием. smile.gif
PM ICQ   Вверх
Ars
Дата 23.10.2003, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

Репутация: 2
Всего: 2



Где-то что-то подобное я уже читал... А, вот где hehe.gif


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
Peter
Дата 18.11.2003, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Бьярне Строуструп по поводу принятого в 1994 году стандарте ANSI C сказал: "Он гораздо ближе к идеалу, чем то, что было до него".


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Vyacheslav
Дата 18.11.2003, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Небольшая информация. Трехгодичный мораторий на внесение измений стандарта окончился и сейчас идет работа по внесению изменений. Информацию о текущем положении дел можно подчерпнуть отсюда
http://std.dkuug.dk/jtc1/sc22/wg21/docs/pa...402.html#hickey
http://www.cuj.com/documents/s=8890/cujexp0310sutter/
http://www.cuj.com/documents/cujcexp0308sutter/

Лично меня порадовало внесение в стандарт(пока в черновной вариант) шаблонного класса function, в частности облегчающего работа с указателями на метод класса
Например.
Код

string AppendA( string s ) { return s + 'a'; }

class B {
public:
 virtual string AppendB( string s ) { return s + 'b'; }
};

class Derived : public B {
 string AppendB( string s ) { return s + "bDerived"; }
};

class Name {
public:
 Name( string s ) : s_( s ) { }
 string Get() const { return s_; }

private:
 string s_;
};

const char* AppendD( const Name& s ) {
 static string x;
 x = s.Get() + 'd';
 return x.c_str();
}


string test = "test";
B b;
Derived der;

function<string (string)> f;  
                                                             
f = &AppendA;                                
cout << f( test ) << endl;

f = bind1st( mem_fun( &B::AppendB ), &b );
cout << f( test ) << endl;
f = bind1st( mem_fun( &B::AppendB ), &der );
cout << f( test ) << endl;                    

f = c;                                        
cout << f( test ) << endl;

f = &AppendD;                                
cout << f( test ) << endl;    


Замена __closure от Borland выглядела примерно так
Код

//typedef void  (__closure * TNotifyEvent)(TObject* Sender);

typedef function< void(TObject*) > TNotifyEvent;
...
void TForm1::Button1Click(TObject* Sender)
{
...
}

void Click(TObject* Sender)
{
...
}

//Button1->OnClick = Button1Click;
Button1->OnClick = bind1st( mem_fun( &TForm1::Button1Click ), this );
//Button1->OnClick = Form2->Button1Click;
Button1->OnClick = bind1st( mem_fun( &TForm2::Button1Click ), Form2 );

//а вот этого closure не мог
Button1->OnClick = &Click;








--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
BuBu
Дата 20.11.2003, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 6.11.2003

Репутация: нет
Всего: нет



Fantasist BRAVO:) I krome vsego vi je sebe predstavljajete chto napisannij kod doljen kto-to i chitat`, i po semu kak vi sebe predstavljajete ser`jeznie (imeetsja v vidu razmer koda) swich, if i drugie s bol`shim kolichestvom break-ov ili continue-ov, nu tut i zrenie isportit` mojno:) GOD BLESS C++ jazik v kotorij sam je sposoben ispravit` vse svoi nedostaki:)
PM MAIL   Вверх
sergejzr
Дата 10.4.2004, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Не могу сказать, что существует много недостатков, но пару предложений появляются, когда сравниваешь Си++ с другими языками. Например:
  • JAVA: если функция кидает Exception, то она должна быть соответственно задекларирована.
    Если юзер вызывает такую функцию, он ОБЯЗАН работать с try catch. К сожалению в Си++ это не так sad.gif Хотим кидаем хотим ловим.
  • Хотелось бы иметь возможность работать с ММХ и расширениями SSE.
  • Неплохо было бы иметь возможность указывать операции, которые могут выполняться параллельно. Как например в VHDL (хотя конечно назначение VHDL другое).
Пока всё...


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
p0s0l
Дата 10.4.2004, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Цитата
Если юзер вызывает такую функцию, он ОБЯЗАН работать с try catch. К сожалению в Си++ это не так  Хотим кидаем хотим ловим.

Не вижу недостатка в этом. Это даже к лучшему.
Например, вызываю функцию 1 (при этом она в try..catch), та в свою очередь использует сотни функций, каждая из них может выкинуть исключение - и что, каждый раз ставить try..catch ? И еще в каждом catch ставить throw, чтобы основная прога (которая вызвала ф-ию 1) тоже поймала исключение ?
Какая-то ерунда... Программист - не дурак, сам знает, когда и где ему ожидать исключений, а специально "тыкать носом" его, по-моему, абсурд.
Цитата
Хотелось бы иметь возможность работать с ММХ и расширениями SSE.

А кто мешает ? Асм-вставки давно не новинка...



--------------------
С уважением, г-н Посол.
PM   Вверх
achmed
Дата 10.4.2004, 19:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











по поводу switch, было бы неплохо что бы его расширили до испосльзования
всех пользовательских типов реализующих operator==,

еще хотелось бы безимянных функций (лямбда ф-ий, как boost::lambda),

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

хорошо бы сделать перегрузку функций как в C#, т.е. когда перегружаешь
ВФ, то пишешь ключевое слово overflow (ну или какое другое), т.е. если ошибся с сигнатурой,
что часто бывает с C++, то компилятор выдаст соотв. ошибку.

шаблоны сканера и парсера тоже не помешали бы (boost::tokenizer, boost::spirit)

да, механизм сигналов и слотов, для GUI приложений очень удобно, реализовано в Qt,
там они транслируются в C++ код.

  Вверх
sergejzr
Дата 10.4.2004, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



2 p0s0l
Цитата
Например, вызываю функцию 1 (при этом она в try..catch), та в свою очередь использует сотни функций, каждая из них может выкинуть исключение - и что, каждый раз ставить try..catch
Нехорошим стилем в ООП считается функция на сто строк(По поводу вызова ста функций).
Носом тыкать обязательно, поскольку иначе юзер вообще может быть не в курсе какие исключения могут при вызове функции полететь. В Яве механизм прекрасно работает.

2 achmed
Цитата
java прграммы буквально загромождаютсяблоками try..catch
Если нормально сдвигать, то это не проблема ИМХО. Всё аккуратно и понятно.

2 p0s0l
Цитата
Асм-вставки давно не новинка...
Вот именно, АСМ а не Си. Я согласен с тобой, что любой может написать свою функцию с вставкой АСМ. Просто Анзи Си обеспечивает интероперабилитет (Не знаю как АСМ. если так же, прошу считать пункт закрытым).

2 achmed
Цитата
по поводу switch, было бы неплохо что бы его расширили до испосльзования
всех пользовательских типов реализующих operator==
Это на много облегчило бы жизнь и улучшило читабельность кода ИМХО.


Ребята, спасибо за интересную раскладку!








--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fantasist
Дата 14.4.2004, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
JAVA: если функция кидает Exception, то она должна быть соответственно задекларирована.
Если юзер вызывает такую функцию, он ОБЯЗАН работать с try catch. К сожалению в Си++ это не так  Хотим кидаем хотим ловим.


Здесь я бы согласился, но это пока не отвечает духу С++. После недолгой работы с Java я понял что фича очень стоящая. Она заранее заставляет задуматься о грамотной иерархии обработки ошибок, да и действиетльно выглядит гораздо нагляднее. Всем четко известно, что ловить, и все обязаны это ловить. Повышает стабильность. Но все-таки это не в стиле языков подобных С++. Даже если взять только исторические причины, то очень много старого кода оказалось бы невозможно использовать при добавлении такой фичи. Java все-таки отдельный разговор (был, во всяком случае, пока не появился С#) .


--------------------
Волны гасят ветер...
PM MAIL   Вверх
sergejzr
Дата 14.4.2004, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата
Fantasist
..очень много старого кода оказалось бы невозможно использовать при добавлении такой фичи..

К сожалению это действительно так! Примерно как с телевизорами. Eщё много лет будем юзать ужасные PAL/SECAM, хотя современная технология позволяет значительные расширения разрешаюшей способности, итд,итп.
Вообще изменение стандарта дело нелёгкое из за хвостов. А ЯВА была написана с нуля и к счастью концептуально, хотя казалось бы главной задачей был именно интероперабилитет. Совершенно согласен, что не надо из Си++ делать ЯВУ, но кое чему стоило бы поучиться.




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
achmed
Дата 14.4.2004, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 12.4.2004

Репутация: нет
Всего: нет



стандарт предусматривает спецификацию исключений, но не обязывает реализовывать.
http://www.codeproject.com/useritems/stdexceptionspec.asp

PM MAIL   Вверх
mr.DUDA
Дата 14.4.2004, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Если будет добавлена поддержка свойств на уровне синтаксиса языка - это будет просто рулез !!! Под свойствами я имею ввиду:
Цитата
class A
{
   private:
      int   m_x;

   public:
      int x
      {
         get
         {
            // какие-то действия, связанные с чтением свойства "x"
             return  m_x;
         }
         set
         {
             m_x = value;
            // какие-то действия, связанные с записью свойства "x", например:
             MessageBox(0, "x изменилось !", 0, MB_OK);
         }
      }
};

void main()
{
  A  obj;
  obj.x = 1;
  int  y = obj.x;
}

("новые" ключевые слова выделены курсивом)

В C# и ManagedC++ это действительно рульная фича, вот если бы в стандарте С++ было такое rolleyes.gif ...


--------------------
user posted image
PM MAIL WWW   Вверх
Hearse
Дата 15.4.2004, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.1.2004

Репутация: нет
Всего: нет



По поводу использования MMX(SSE) - было бы приятно, если бы в STL включили стороннюю библиотеку типа Intel Small Matrix Library.
По поводу перегрузки с помощью overload, в старых версиях компиляторов оное ключевое слово было, однако отказались, посчитав избыточным. Пусть лучше компилятор выводит статистику для перегруженных функций типа

func1 - n overloads
func2 - m overloads и т.д.
PM MAIL   Вверх
sergejzr
Дата 15.4.2004, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата
achmed
стандарт предусматривает спецификацию исключений, но не обязывает реализовывать.

Ну так меня почти устраивает.

Вот только жаль..
Цитата

stdexceptionspec
Exception specifications are not checked at compile time - they are enforced at run time.
Ведь типы проверяются, почему исключения не могут?




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2489 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.