| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Давайте обсудим недостатки и недочёты С++ |
| Автор: setq 27.9.2003, 00:01 |
| я собственно к чему. э... у любого языка есть недостатки, недочёты и недосмотры ну те или иные. не боги ведь горшки обжигали в конце-то концов. Страуструп тоже человек. наверно. может быть. ну не исключён такой вариант. :-) понятно, что половина "недостатков" пропадает с увеличением опыта, когда узнаёшь Си++ получше. понятно, что всегда есть способы от этих заморочек избавляться. всякие обходные пути там итд. вот давайте их сюда сваливать. вот. начнём с мелочей :-) 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 | ||||
| А можно только ругать? А оспаривать и хвалить? Ну, всё равно молчать не умею Насчёт break Я об этом тоже думал. И мне хотелось бы, чтоб в дополнении к break существовал бы оператор, условно назовём его block <имя> {...}. Чтоб возможно было такое:
Наличие имени у блока позволяло бы выходить из вложенных блоков. Имена были бы локальны, т.е. действовали лишь в пределах блока. И никаких конфликтов. Просто бы решалась проблема выхода из вложенных циклов
Вот такая идея P.S. Я подсел на C конкретно. С - лучший язык |
| Автор: p0s0l 27.9.2003, 02:47 |
| RAN - идея насчет блоков с точки зрения компиляции не очень удачна, так же как и простые переходы (не знаю, есть ли они в C, но в паскале это были goto <label>), т.к. это нарушает структуру программы... |
| Автор: DENNN 27.9.2003, 12:20 | ||||
Есть goto:метка
Почему это интересно? По современным представлением уровень программы понижается с каждым оператором goto (причем не только C, но и любой другой). Существует теорема (или что-то подобное, названия не помню), что любую конструкцию, использующую операторы перехода можно переписать без них (что кстати правда) block.....break также удовлетворяет этим понятим, как и while....break, for....break и т.п. А мне не нравиться, что при объявлении функции значения параметров по умолчанию всегда должны стоять последними, а при вызове такой функции, если мне надо передать последний параметр, то я вынужден и прописывать все предыдущие перед ним. Это серьезное препятствие при позднем совершенствовании кода, кода скажем мне необходимо в функцию добавить еще один параметр не имеющий default-значения, то приходиться весь код вызовов этой функции переписывать (ну либо искать более удобные пути). |
| Автор: mr.DUDA 27.9.2003, 13:57 |
| ОЧЕНЬ НЕ НРАВИТСЯ путаница с .h и .cpp - с точки зрения пространства имён (что откуда будет видно, если поочередно подключать "H к CPP", "CPP к CPP", "CPP к H" и "H к H" |
| Автор: Crait 27.9.2003, 14:13 |
| CPP forever ! 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++ - лучший язык программирования ! |
| Автор: maxim1000 27.9.2003, 15:19 |
| много того, что хотелось бы видеть в C++ (по крайней мере мне), есть в Delphi (точнее в Object Pascal): 1. properties 2. dcu - объявления и реализации находятся в одном файле 3. уже упоминавшееся (int x,y) 4. div и /, а не просто / - чтоб всегда было видно дробноеделение или нацело |
| Автор: GanZaleZ 27.9.2003, 22:06 |
| Эх человеки ! Как грили Пионеры - "Мы не ищем лугких путей" Так что если бы да кобы то С++ превратился бы в PHP и не нужно бы было обьявлять какого типа переменная ! ))) но это было бы уже смешно ! А может вообще зачем чтото писать ? Вышел бы Visual C# какойнить 9 версии , и чтобы там вам Вообще ниче писать не надо было , мышкой поводил , поколдовал , и все ! Хе хе хе Есть конечно траблы ! где не без них ! Но мне всерафно кажется что это обсуждать - это как обсуждать РУССКИЙ язык ! Вот я фсеже не пойму почему слово КОФЕ мужского рода ! )))) |
| Автор: Fantasist 27.9.2003, 23:00 | ||||||||||||||
Ничего подобного! Во-первых, с точки зрения структуры, break и continue реккомендуется использовать как можно реже. Во-вторых, в while, do и for эти операторы прерывают выполнения в границе одного блока и вполне понятно какого. А конструкция:
ничем не отличается от:
Так что и выдумывать ничего не надо.
Хе, ну ты сказанул. По другому даже теоретически нельзя, так что эта претензия не в какие ворота не лезет.
Используй перегрузку.
Так так оно уже и есть. Ничем от паскаля не отличается. Разница только в том, что в Паскале есть тип строка, а в С++ нету.
Действительно, что его обсуждать - все равно мы им не пользуемся. |
| Автор: maxim1000 28.9.2003, 08:49 | ||||
"теоретически нельзя": не стоит бросаться такими выражениями, их еще нужно доказывать... или опровергать представим себе, что при вызове фунукции вместе со значениями можно писать имя параметра (по-моему, я этовидел в VB или еще в каком-то бейсике) тогда вполне возможно указать любое подмножество параметров, а остальные оставить по умолчанию P.S. Хотя лично мне такое бы не понравилось... |
| Автор: setq 28.9.2003, 10:39 |
| Fantasist <<Действительно, что его обсуждать - все равно мы им не пользуемся>> :-) |
| Автор: p0s0l 28.9.2003, 11:11 | ||||||||
И к чему это сказано ? Си - ЯВУ, зачем понижать уровень с помощью goto ? Я же говорил, что такие конструкции как block ... break и goto нарушают структурность, иерархичечность, что присуще ЯВУ, а не низкоуровневым языкам... Конечно, можно пользоваться goto, что я и делал, когда начал прогать, но сейчас я уже непредставляю, куда можно сунуть goto...
А вот если выход был бы за пределы внешнего блока, то тут могли бы появиться некоторые неувязочки, т.к. вначале каждого блока может выделятся память или запоминаться в стеке регистры (соответственно в конце блока регистры восстанавливаются) - тогда для организации выхода из двойного блока пришлось бы генерить специальный код для восстановления регистров и памяти.
Может я что-то не понимаю, но почему нельзя сделать такие вызовы: func1(,,,,,2.434); Т.е. первые параметры по умолчанию ?...
К слову: в Паскале нельзя делать case по строковым переменным (и по float тоже), можно только по целочисленным или перечисляемым типам... |
| Автор: Crait 28.9.2003, 12:17 |
| 2 Fantasist Ты не прав, что в switch'е можно использовать переменную любого типа. Попробуй скомпилировать хотя бы следующее : int f1 (double Value) { switch (Value) { case double(1): return 1; case double(1.5): return 2; } return 3; } |
| Автор: Fantasist 29.9.2003, 04:28 | ||||||
Вот именно тем и нарушает, что это безусловный выход. Я знаю одного человека (знаю, конечно, сильно сказано) который ругает своих подчиненных за использование более одно return в функции. Ну, ругает, может, сильно сказанно, но очень не поощряет. Почему? Все из-за той же структуры. И смысл break'a и return'a не совсем совпадают. После break'а еще код может выполнятся в данной функции - после return'a нет. Про continue я вообще молчу. Видал я с ним такое!
Да, ошибся. Теоретически все возможно. Можно ключевое слово ввести, типа default_value. Только, конечно, не в С++. Такая штукенция совсем не в духе детерминированного С++. Да и не думаю, что это бы что-то принесло. Сделали бы первый параметр по умолчанию возникли бы другие проблемы. Неговоря уже о том, что читать такие программы было бы еще тяжелее.
Ну так я и говорю, ничем от паскаля не отличается. |
| Автор: Vyacheslav 29.9.2003, 09:18 | ||
Остальное все, по моему, не стоит и обсуждать. |
| Автор: Vyacheslav 29.9.2003, 10:05 | ||||||||||||
[
Если очень хочется. можно использовать локальные классы-функтуаторы.
Макросы не являются принадлежностью ООП, являются наследием С и чрезмерное их использование - плохой стиль.
Как правило, это решается в конкретных компиляторах Например, в С++Builder имеются подобные макросы:__FILE__, __FUNC__, __LINE__, __DATE__
Зачем?
|
| Автор: Crait 29.9.2003, 12:21 |
| 2 Fantasist О да, от Паскаля оно не отличается - подобная функциональность отсутствует и в нем и в CPP. А значения с плавающей точкой сравнивать все - таки можно - если осторожно 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) в подобных случаях не всегда применимы. Кстати, хотелось бы еще иметь возможность пошаговой отладки тела макросов (как функций). Впрочем, это пожелание - не в отношении стандарта языка, а по поводу конкретных реализаций сред программирования. |
| Автор: RAN 29.9.2003, 14:35 | ||
Так и знал, что кто-нибудь предложит. Забыл в своём топике написать. Исключения - это и есть исключения. Смысл их в том, при нормальной работе ни одно исключение вызываться не должно. А вариант Vyacheslav'а - это скажем так, маленькая хитрость. Я против такого применения. Тем более, что некоторые среды будут останавливать выполнение программы с сообщением о произошедшей исключительной ситуации. Но я тут о другом подумал. Тут говорили, что нельзя вводить возможность выхода из вложенных блоков. А try ввели в стандарт и ничего. Все понимают и легко читают. Я считаю, что goto плохо применять, потому как не известно куда он выбросит. А break выходит за пределы блока. |
| Автор: Vyacheslav 29.9.2003, 17:04 | ||||
Crait
Настоятельно делать этого не рекомендую
|
| Автор: Crait 29.9.2003, 17:20 |
| Эт понятна. Я ж говорю - если осторожно ;) |
| Автор: Fantasist 29.9.2003, 21:31 | ||||
Ага, пока кто-нибудь не вызовет эту функцию со значением полученным кодом типа приведенного Vyacheslav'ом.
Обязательно. Бинарный поиск, хеш-таблицы - это методика храниния и поиска данных, и там действительно не всегда приходиться сравнивать строки, но сравниваются они только побайтно. Да и в любом случае процесс длительный. Хотя, конечно, switch выглядит более удобочитаемо, чем куча if... else'ов. С этим согласен. |
| Автор: Peter 30.9.2003, 19:50 |
| Кому не нравится Си - пусть говорит об этом на сишных конференциях высшего уровня. Там многоопытные специалисты примут или не примут предложения. Есть еще вариант: написать свой собственный компилятор и играть с ним, сколько душе угодно. |
| Автор: Crait 30.9.2003, 13:47 |
| Спасибо, Peter, за ценные советы. |
| Автор: RAN 30.9.2003, 14:08 |
| Модератор: Я понимаю, что тема располагает к флейму. Но последнии два топика - это уже слишком. Прошу не продолжать в этом направлении. Всё равно буду удалять. |
| Автор: Yujen 1.10.2003, 15:52 |
| А ты не слышал такую поговорку: "Плохому танцору всегда ЯЙЦА МЕНШАЮТ" Я вот например DELPHI видел всего два раза в жизни, и не понял как там и что там, хотя в Turbo Pascal'е писал когдато (в древние времена, в эпожу MS-DOS), и что я по твоему должен на каждом углу орать, что DELPHI это [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] отстой Borland MUST DIE MSVISUAL C++ FOR EVA. Нет парень ты в себе разберись, а потом уже что-либо охаивай, напиши для начала какой-нибуть простенький интерпретатор, дай людям поюзать, вот тогда и только тогда ты поймешь, что это такое: писать... А обделать можно все, что угодно. Обделать легко, отмыться трудно |
| Автор: setq 1.10.2003, 16:30 |
| :-) это в чей адрес, интересно? по поводу... 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 | ||||
ГА !!! получится, если делать вот так:
такие дела |
| Автор: Peter 7.10.2003, 16:33 |
| 2RAN: по-моему, мое сообщение не было оффтопик. Правда, я вместо того, чтобы поругать язык, высказал свое мнение об участниках форума. Насмотрелся уже на докторов наук, которые ни в зуб ногой даже в "своей" теме. Учиться надо!!! А на конференциях высокого уровня, я полагаю, не чайники сидят, а многоопытные соображающие мужики. |
| Автор: Vit 7.10.2003, 23:43 | ||||||||||||
Модератор: Кому, что и где говорить указывать не надо. Не маленькие - сами разберёмся! Вас не устраивает наш уровень - пожалуйста, мы никого не держим! Идите на "сишные конференции высшего уровня". Зачем Вы тогда здесь отвечаете? Если Вам не нравится то что здесь говорится - вам надо обратится к модератору, и он уберёт замечания не соответствующие правилам форума, а Вам никто права распоряжаться на форуме хозяйской рукой, указывая кому и что говорить, не давал. Не надо подменять администрацию. Кроме того среди тех кто высказывался никто не сказал, что ему не нравится C.
Модератор: Знаете, у нас свои специалисты есть. Реклама других форумов категорически запрещена. Читайте правила. Нам не требуется чтобы кто-то принимал или не принимал наши возражения. Здесь люди обмениваются своим мнением, и для этого не требуется принятие кем либо каких-то предложений. Вы нас наверное с какой-то другой организацией спутали!
Модератор: Вы сделали 3 ошибки! 1) Язык C/C++ никто не ругал. Были высказаны мнения по поводу того, что в этом языке кому-то не удобно, или что бы он хотел иметь. Замете, ни один из участников дисскуссии не ругал язык. Указывали на недостатки - да, сравнивали с другими языками - да, ругать - нет! Впрочем тема, бала несколько одиозно озаглавлена - это исправлено, но к чести участников форума - никто до ругани в адрес C не опустился. 2) Высказывать личное мнение об участниках форума категорически запрещено! См. правила форума. 3) Переход с обсуждения темы на обсуждение обсуждающих - есть офтопик. См. правила форума.
Модератор: Это вы о тех аксакалах которые сидят на "на сишных конференциях высшего уровня"? Так мы туда и не ходим! Зачем они нам!
Модератор: Да, причём многим надо учиться языку С++, а участнику под ником "Peter" надо прежде всего учится уважению собеседников, уважению чужого мнения, умению внимательно читать и понимать смысл прочитанного и элементарной вежливости и культуре общения, по-видимому Peter пропустил детский сад и первые 3 класса школы, где учили таким простым вещам...
Модератор: Да пусть сидят где угодно! Модератор: Я снизил репутацию участника Peter, объяснения вы можете найти в таблице рейтингов, а аргументы описаны здесь. Обращаясь к Peter, хочу сказать, что вы умудрились в 2х коротких сообщениях многократно нарушить правила форума, оскорбить участников форума и администрацию форума. Повторные действия в этом направлении могут привести к анулированию Вашей учётной записи и блокирование IP адресов Вашего провайдера для доступа к форуму. Обжаловать мои действия, как и действия модераторов можно в специальном разделе "Обсуждение форума" http://forum.vingrad.ru/index.php?act=SF&f=27. Продолжение этой дисскуссии здесь будет рассматриваться как повторное злостное нарушение правил форума. Причём не важно, кто будет продолжать обсуждение. Здесь обсуждаем - недостатки, недочёты языка C/C++ и то что Вам лично в этом языке не хватает для полного счастья. Меня, модераторов и Peter'а продолжать обсуждать здесь КАТЕГОРИЧЕСКИ ЗАПРЕЩАЕТСЯ! |
| Автор: Vit 7.10.2003, 23:49 |
| Модератор: 2 setq - осторожнее в названии темы. Вы всё правильно написали по поводу возможности недостатков языка C, и обсуждение может быть интересным, но заголовок темы таким быть не должен! Заголовок я исправил, не обессудте, надеюсь теперь вопросы по поводу корректности ни у кого не возникнут. |
| Автор: Baa 8.10.2003, 01:00 |
| Вит, подписываюсь под каждым твоим словом адресованным Peter'у. |
| Автор: mike_prog 11.10.2003, 15:41 | ||
А по-моему один единственный недостаток - это его тупой компилятор и синтаксис. Вот в PERLе синтаксис удачнее.
|
| Автор: maxim1000 11.10.2003, 16:29 | ||
| Сказать, что компилятор тупой, - не сказать ничего. Желательно было бы указать, по сравнению с чем он тупой. Если по сравнению с тем, как профессиональный человек пишет на ассемблере, то полностью согласен (я имею в виду качество кода, а не время разработки), а если по сравнению с другим компилятором, то хотелось бы услышать пример для сравнения (надеюсь, не Perl имелся в виду А синтаксис - дело привычки Хотя в некоторой степени я с этим соглашусь: мне кажется, что он излишне символичен. Намного приятнее писать mod вместо % (более читабельно), да и записи типа while(*s1++=*s2++); я предпочитаю заменять на
|
| Автор: RAN 12.10.2003, 07:11 |
| Синтаксис и, прежде всего,"скобки и пробелы" - это та самая мощь C++. Как раз это я и обожаю. И мне иногда плакать хочется, когда читаю что-то типа: "это было причиной множества ошибок и в C# этого нет". Жуть. Это у кого были ошибки? У новичков? Верните сквозное выполнение в switch, опрератор delete и т.д. |
| Автор: Kefir 12.10.2003, 23:03 |
| знаете, по моему C++ язык более чем хороший. возможности просто неограниченные. я начинал с етого языка и теперь никаких неудобств не вижу. C# я в глаза не видел, но наслышан о нём как о VB: Second Edition. Ну да ладно. Не буду удаляться от темы. 4то касаетса компилятора - ползуюс VC++6 и очень даже доволен. не думаю, что борланд силно хуже или лу4ше. |
| Автор: RAN 13.10.2003, 08:52 |
| Мне в борланде фишка нравиться. Когда работаешь с файлом cpp, то соответствующий ему h можно увидить, переключившись закладкой внизу листа (как в Excel). А вверху закладки всех открытых unit'ов. Удобно. |
| Автор: DENNN 16.10.2003, 14:07 | ||||
ДОстаточно поставить add-in к VS6.0 WndTabs и настроить автоматическое открытие заголовочного файла. (Ближайшая ссылка на него на RSDN.ru)
Вот и очень плохо. Для читабелно mod вместо % только потому что ты плохо помнишь арифметические операции языка. Тоже отностится и к твоему коду |
| Автор: oleg1973 16.10.2003, 15:41 |
| вот мне не нравится что нету вставки бинарного файла ченить типа include 'main.jpg' |
| Автор: DENNN 16.10.2003, 16:17 | ||
Ну и что после этого делать? Те же ресурсы получаются |
| Автор: Guest 21.10.2003, 15:53 |
| 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 |
| Был глюк. Сообщение выше - мое. |
| Автор: knave 23.10.2003, 14:30 |
| http://www.podgoretsky.com/ftp/Docs/C/Straustroop/Interview.html |
| Автор: DENNN 23.10.2003, 15:39 | ||
Довольно интересно читать |
| Автор: Ars 23.10.2003, 16:13 |
| Где-то что-то подобное я уже читал... А, http://v.psiola.ru/cpp/bad.htm |
| Автор: Peter 18.11.2003, 16:22 |
| Бьярне Строуструп по поводу принятого в 1994 году стандарте ANSI C сказал: "Он гораздо ближе к идеалу, чем то, что было до него". |
| Автор: Vyacheslav 18.11.2003, 17:53 | ||||
| Небольшая информация. Трехгодичный мораторий на внесение измений стандарта окончился и сейчас идет работа по внесению изменений. Информацию о текущем положении дел можно подчерпнуть отсюда http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2002/n1402.html#hickey http://www.cuj.com/documents/s=8890/cujexp0310sutter/ http://www.cuj.com/documents/cujcexp0308sutter/ Лично меня порадовало внесение в стандарт(пока в черновной вариант) шаблонного класса function, в частности облегчающего работа с указателями на метод класса Например.
Замена __closure от Borland выглядела примерно так
|
| Автор: BuBu 20.11.2003, 13:34 |
| 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:) |
| Автор: sergejzr 10.4.2004, 13:26 |
Не могу сказать, что существует много недостатков, но пару предложений появляются, когда сравниваешь Си++ с другими языками. Например:
|
| Автор: p0s0l 10.4.2004, 16:00 | ||||
Не вижу недостатка в этом. Это даже к лучшему. Например, вызываю функцию 1 (при этом она в try..catch), та в свою очередь использует сотни функций, каждая из них может выкинуть исключение - и что, каждый раз ставить try..catch ? И еще в каждом catch ставить throw, чтобы основная прога (которая вызвала ф-ию 1) тоже поймала исключение ? Какая-то ерунда... Программист - не дурак, сам знает, когда и где ему ожидать исключений, а специально "тыкать носом" его, по-моему, абсурд.
А кто мешает ? Асм-вставки давно не новинка... |
| Автор: achmed 10.4.2004, 19:36 |
| по поводу switch, было бы неплохо что бы его расширили до испосльзования всех пользовательских типов реализующих operator==, еще хотелось бы безимянных функций (лямбда ф-ий, как boost::lambda), по поводу обзательных обработок исключений, java прграммы буквально загромождаются блоками try..catch. хорошо бы сделать перегрузку функций как в C#, т.е. когда перегружаешь ВФ, то пишешь ключевое слово overflow (ну или какое другое), т.е. если ошибся с сигнатурой, что часто бывает с C++, то компилятор выдаст соотв. ошибку. шаблоны сканера и парсера тоже не помешали бы (boost::tokenizer, boost::spirit) да, механизм сигналов и слотов, для GUI приложений очень удобно, реализовано в Qt, там они транслируются в C++ код. |
| Автор: sergejzr 10.4.2004, 22:46 | ||||||||
2 p0s0l
Носом тыкать обязательно, поскольку иначе юзер вообще может быть не в курсе какие исключения могут при вызове функции полететь. В Яве механизм прекрасно работает. 2 achmed
2 p0s0l
2 achmed
Ребята, спасибо за интересную раскладку! |
| Автор: Fantasist 14.4.2004, 00:46 | ||
Здесь я бы согласился, но это пока не отвечает духу С++. После недолгой работы с Java я понял что фича очень стоящая. Она заранее заставляет задуматься о грамотной иерархии обработки ошибок, да и действиетльно выглядит гораздо нагляднее. Всем четко известно, что ловить, и все обязаны это ловить. Повышает стабильность. Но все-таки это не в стиле языков подобных С++. Даже если взять только исторические причины, то очень много старого кода оказалось бы невозможно использовать при добавлении такой фичи. Java все-таки отдельный разговор (был, во всяком случае, пока не появился С#) . |
| Автор: sergejzr 14.4.2004, 01:09 | ||
К сожалению это действительно так! Примерно как с телевизорами. Eщё много лет будем юзать ужасные PAL/SECAM, хотя современная технология позволяет значительные расширения разрешаюшей способности, итд,итп. Вообще изменение стандарта дело нелёгкое из за хвостов. А ЯВА была написана с нуля и к счастью концептуально, хотя казалось бы главной задачей был именно интероперабилитет. Совершенно согласен, что не надо из Си++ делать ЯВУ, но кое чему стоило бы поучиться. |
| Автор: achmed 14.4.2004, 07:50 |
| стандарт предусматривает спецификацию исключений, но не обязывает реализовывать. http://www.codeproject.com/useritems/stdexceptionspec.asp |
| Автор: mr.DUDA 14.4.2004, 09:50 | ||
Если будет добавлена поддержка свойств на уровне синтаксиса языка - это будет просто рулез !!! Под свойствами я имею ввиду:
("новые" ключевые слова выделены курсивом) В C# и ManagedC++ это действительно рульная фича, вот если бы в стандарте С++ было такое |
| Автор: Hearse 15.4.2004, 03:05 |
| По поводу использования MMX(SSE) - было бы приятно, если бы в STL включили стороннюю библиотеку типа Intel Small Matrix Library. По поводу перегрузки с помощью overload, в старых версиях компиляторов оное ключевое слово было, однако отказались, посчитав избыточным. Пусть лучше компилятор выводит статистику для перегруженных функций типа func1 - n overloads func2 - m overloads и т.д. |
| Автор: sergejzr 15.4.2004, 23:48 | ||||
Ну так меня почти устраивает. Вот только жаль..
|