> К сведению Викинга MSVCPP6 полностью соответсвует стандарту ISO/ANSI.
MSVC6 начали продавать 2 сентября 1998 года (http://msdn.microsoft.com/visualc/prodinfo/qa.asp). Стандарт был утвержден 28 сентября того же года (http://www.ncits.org/cplusplus.htm). Хотя вряд-ли черновая и финальная версии сильно отличались.
> Если кто-то считает что знает С++ может себя проверить на www.brainbench.com - там очень хорошие вопросы.
На мой взгляд это не показатель. Приятно конечно завесить всю стену сертификатами, но они дают весьма приблизительное представление о квалификации программиста.
Это смотря чьи данные: если читать PRы Sun, может оказаться что Java уже давно всех вытеснила :)
А если серьезно, возможно наступление Явы и к лучшему. Хоть сам язык в чем-то ограничен, он не дает начинающим (коих в нашем деле большинство) такого простора для ляпов и нелепых глюков, как C++.
пишу на C++ и Java. Java - это убожество для декстопов, еще ни разу не видел законченного продукта. Что JBuilder 3.5 что JDeveloper 3.1 - такие уродливые приложения, слов просто нет. Отладка - ужас, интерфейс корявый.
80% ошибок уходит на поиск правильно пути для классов. причем на мобильных устройств и определить-то невозможно что случилось.
В общем на Java или аплеты писать или мобиьные устройства снабжать, десктоп-приложения на это делать нельзя.
Отличий много. Где-то в недрах microsoft.com погребен white paper по C#, плюс по usenet ползут самые жуткие слухи.
Начать с того, что якобы *все* объекты программы будут автоматически инкапсулироваться в COM-объекты. Не знаю, относится ли это к примитивным типам вроде char *, но кросплатформенность это рубит на корню. В C# обещают garbage collection (что есть хорошо). IDE (MSDS 7) будет использовать свой собственный формат для исходников (*не* ASCII), но это неподтверженный слух. Множественное наследование, в отличие от Явы, останется, но неясно насколько им можно будет пользоваться (в MFC, как известно, множественное наследование запрещено).
В "КГ" пару месяцев назад была подробная статейка про С# (http://www.nestor.minsk.by/kg/archive/index.html > Программирование > 'C# - ...')
"По сравнению с такими языками, как Microsoft Visual Basic, разработка эквивалентных приложений на C и C++ зачастую требует намного больше времени. Именно поэтому разработчики искали язык, который обеспечивал бы лучший баланс между мощью и продуктивностью. Идеальным решением были бы быстрая разработка и возможность доступа ко всей функциональности низлежащей платформы.
Решение этой проблемы от Microsoft — язык C#. Он сочетает в себе продуктивность Visual Basic и мощь C++. C# будет являться частью Visual Studio 7.0. C# не имеет собственной библиотеки классов. Он будет, наравне с другими языками, обеспечивать доступ к Next Generation Windows Services (платформа.NET), включая общую библиотеку классов.
Современный дизайн C# устраняет многие ошибки программирования на C++. Каждый объект в C# является COM-объектом. Аналогично, программы на C# могут естественным образом использовать существующие COM-объекты. При необходимости C# позволяет делать вызовы различных API. Структура языка позволяет компонентам C# становиться Web-сервисами, доступными через Internet."
Вик: нельзя, т.к. в C/C++ невозможно определять вложенные функции.
Твой пример является частным случаем т.н. лексического замыкания (lexical closure). Однако поводов для гордости паскалистам тут мало, т.к. *общий* случай замыкания Паскаль не поддерживает, т.е. ты не можешь вернуть процедуру b с захваченной переменной a из процедуры a.
В C++ кошерный путь работы с состоянием - запихнуть его в объект (который, кстати, может быть реализован через замыкание в языке с нормальной поддержкой оных).
Еще пару вещей хотелось бы видеть в С++. Например, оператор switch, который работал бы не только с константнымии выражениями. Если кто-то знает почему язык в данном случае так реализован, выскажите, пожалуйста свое мнение. Еще интересно было бы задавать массивы не с константными размерами. Может "привязать" бы к массиву определенную переменную, отвечающую за размерность?
Скачал недавно осходник ПГП. Много интересного, правда, еще во многом надо разобраться. В архиве также есть свободные для использования исходники программ, позволяющие компрессировать информацию, а также JPEG трансформация...
> Например, оператор switch, который работал бы не только с константнымии выражениями. Если кто-то знает почему язык в данном случае так реализован, выскажите, пожалуйста свое мнение.
Потому что:
a) в большинстве случаев такой формы case вполне достаточно;
b) переключатель со статическими условиями легче понимать;
c) так проще реализовать компиляцию.
> Еще интересно было бы задавать массивы не с константными размерами. Может "привязать" бы к массиву определенную переменную, отвечающую за размерность?
Все уже сделано за вас - надо только скачать нужную библиотеку. Такая штука обычно называется adjustable array, и ее реализация есть в STL.
Вам бы хороший проектик в кл/серв. да на клиентов с 10 и усикались бы вы со своим С хоть с плюсами, хоть с забором. Да ещё в хорошие временные рамочки поставить и хорошую комиссию по приёмке организовать.
P.S. Все равно не понимаю, что можно обсуждать о C/C++. Разве что недостатки :)
Тем кто ищет работу за рубежом может пригодиться.
Если кто-то считает что знает С++ может себя проверить на www.brainbench.com - там очень хорошие вопросы.
MSVC6 начали продавать 2 сентября 1998 года (http://msdn.microsoft.com/visualc/prodinfo/qa.asp). Стандарт был утвержден 28 сентября того же года (http://www.ncits.org/cplusplus.htm). Хотя вряд-ли черновая и финальная версии сильно отличались.
> Если кто-то считает что знает С++ может себя проверить на www.brainbench.com - там очень хорошие вопросы.
На мой взгляд это не показатель. Приятно конечно завесить всю стену сертификатами, но они дают весьма приблизительное представление о квалификации программиста.
А если серьезно, возможно наступление Явы и к лучшему. Хоть сам язык в чем-то ограничен, он не дает начинающим (коих в нашем деле большинство) такого простора для ляпов и нелепых глюков, как C++.
80% ошибок уходит на поиск правильно пути для классов. причем на мобильных устройств и определить-то невозможно что случилось.
В общем на Java или аплеты писать или мобиьные устройства снабжать, десктоп-приложения на это делать нельзя.
У вас получается противоречие - с одной стороны "Java - это убожество для декстопов", с другой - "десктоп-приложения на это делать нельзя.
"
Ну так вот: вашему CPP скоро конец...
Начать с того, что якобы *все* объекты программы будут автоматически инкапсулироваться в COM-объекты. Не знаю, относится ли это к примитивным типам вроде char *, но кросплатформенность это рубит на корню. В C# обещают garbage collection (что есть хорошо). IDE (MSDS 7) будет использовать свой собственный формат для исходников (*не* ASCII), но это неподтверженный слух. Множественное наследование, в отличие от Явы, останется, но неясно насколько им можно будет пользоваться (в MFC, как известно, множественное наследование запрещено).
А программы на C# будет машинным кодом или как в Java? И останутся ли там необъектные глобальные функции и переменные?
В "КГ" пару месяцев назад была подробная статейка про С# (http://www.nestor.minsk.by/kg/archive/index.html > Программирование > 'C# - ...')
"По сравнению с такими языками, как Microsoft Visual Basic, разработка эквивалентных приложений на C и C++ зачастую требует намного больше времени. Именно поэтому разработчики искали язык, который обеспечивал бы лучший баланс между мощью и продуктивностью. Идеальным решением были бы быстрая разработка и возможность доступа ко всей функциональности низлежащей платформы.
Решение этой проблемы от Microsoft — язык C#. Он сочетает в себе продуктивность Visual Basic и мощь C++. C# будет являться частью Visual Studio 7.0. C# не имеет собственной библиотеки классов. Он будет, наравне с другими языками, обеспечивать доступ к Next Generation Windows Services (платформа.NET), включая общую библиотеку классов.
Современный дизайн C# устраняет многие ошибки программирования на C++. Каждый объект в C# является COM-объектом. Аналогично, программы на C# могут естественным образом использовать существующие COM-объекты. При необходимости C# позволяет делать вызовы различных API. Структура языка позволяет компонентам C# становиться Web-сервисами, доступными через Internet."
Насчет глобальных функций не помню, но по идее должны остаться.
В Паскале возможна такая реализация:
procedure a(a:integer);
procedure b;
begin
a:=a+3;
end;
begin
b;
a:=a+3;
end;
то есть вложенные процедуры, благодаря которым "дочерняя" процедура имеет доступ к локальным переменным "родительской" процедуры.
Существует ли возможность осуществить подобное в С++?
Твой пример является частным случаем т.н. лексического замыкания (lexical closure). Однако поводов для гордости паскалистам тут мало, т.к. *общий* случай замыкания Паскаль не поддерживает, т.е. ты не можешь вернуть процедуру b с захваченной переменной a из процедуры a.
В C++ кошерный путь работы с состоянием - запихнуть его в объект (который, кстати, может быть реализован через замыкание в языке с нормальной поддержкой оных).
Потому что:
a) в большинстве случаев такой формы case вполне достаточно;
b) переключатель со статическими условиями легче понимать;
c) так проще реализовать компиляцию.
> Еще интересно было бы задавать массивы не с константными размерами. Может "привязать" бы к массиву определенную переменную, отвечающую за размерность?
Все уже сделано за вас - надо только скачать нужную библиотеку. Такая штука обычно называется adjustable array, и ее реализация есть в STL.
Давай переменным короткие неосмысленные идентификаторы, чтобы меньше набирать приходилось. В С++ это нормально - посмотри хотя бы на название языка.