Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Религиозные войны > Почему все любят С++?


Автор: TP@MB@Y 11.7.2005, 19:35
Сорри если не туда запостил топик smile

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

Конечно, существует такой сильный фактор, как "к чему в детстве приучили". Я например начинал с паскаля и сейчас отдаю ему предпочтение (читай Delphi). Кто то начинал с Си и сейчас например предпочитает Билдер Дельфям. А ктооо тооо (тут полагается сделать зловещую паузу smile ) учил в детстве бэйсик....

Так вот. Вопрос заключается в следущем: ЧЕМ кардинально отличается С++ от паскаля? Конкретные примеры есть?

Автор: Domestic Cat 11.7.2005, 19:41
Это в религиозные войны. Кстати, к примеру, я жутко не люблю С++, так что слово "все" лишнее... smile

Автор: Void 11.7.2005, 20:06
Во-первых, как правильно заметил Domestic Cat, этот провокационный вопрос надо в Религиозные войны smile

Цитата(TP @ 11.7.2005, 21:35)
Вобщем мне жутко интересно, чем лучше C++ того же паскаля? Думаю всем здесь известно, что настоящий программист составляет и реализует свои алгоритмы, и в зависимости от специфики задачи выбирает удобную в плане реализации среду программирования.

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

Цитата(TP @ 11.7.2005, 21:35)
А ктооо тооо (тут полагается сделать зловещую паузу smile ) учил в детстве бэйсик....

Ну я учил smile К счастью, прогноз Дейкстры не оправдался smile Я полностью излечился smile

Цитата(TP @ 11.7.2005, 21:35)
Так вот. Вопрос заключается в следущем: ЧЕМ кардинально отличается С++ от паскаля? Конкретные примеры есть?

Отличий масса... На мой взгляд, наиболее существенное отличие языка - наличие шаблонов и автоматических объектов. Именно из этого проистекают наиболее важные на мой взгляд практические различия. Ну и некоторый синтаксический сахар в виде перегрузки операторов. Это из преимуществ. А из недостатков (опять же на языковом уровне) - отсутствие модульности.

Кстати, "все" его действительно не любят. Сейчас, пожалуй, даже больше тех, кто его не любит. Правда, C++ они чаще противопоставляют Java и .NET, а не Паскаль/Delphi.

Автор: TP@MB@Y 11.7.2005, 20:31
Со словом "все" я действительно поторопился. Я хотел сказать, что большинство программистов (особенно продвинутых) восхваляют Си.

По поводу шаблонов и перегрузки операторов: действительно это делает Си более мощным языком, но мне например кажется, что эти "вкусности" мало испоьзуются и являются экзотикой (хотя это конечно же ИМХО)

А вообще мне лично Си ненравится из-за его "закорючности" в синтаксисе: фигурные скобки, амперсенты, звездочки... =) Вобщем если сравнивать с тем же паскалем (хотя он создавался как учебный язык программирования для студентов), то у первого код намного читабельнее чем у Си.

PS я не против переноса темы в "Религиозные войны" smile

Автор: Domestic Cat 11.7.2005, 20:40
Не путай Си и С++ - в С нет шаблонов и это вообще чисто процедурный язык.

Автор: Mayk 11.7.2005, 20:49
Паскаль vs C? smile Усё. Счас начнется(а кончится всё фразой, что каждой задаче - свои инструменты).
Цитата(TP @ 11.7.2005, 20:35)

Так вот. Вопрос заключается в следущем: ЧЕМ кардинально отличается С++ от паскаля? Конкретные примеры есть?

В паскале нет шаблонов. Это раз.
В паскале нет циклов. Это два(for i := 10 downto 0 это не цикл, while(*i++=*j++) - вот пример цикла. for(iter i = collection->begin(); i->value != desired_value && i != collection->end(); ++i) - вот пример цикла)
В паскале очень длинный, запутанный, я б даже сказал, дурацкий синтаксис. Это три(integer вместо int, begin вместо { и end вместо }, then вместо <тут пусто>).
В паскале указатели просто смешны. Мне НУЖЕН указатель на статическую переменную. Я НЕ хочу вызывать операции по удалению объектов в ручную. Я НЕ хочу обращаться к тормознутому менеджеру памяти(выделение в стеке гораздо быстре). И если компилятор имеет на этот счёт иное мнение, то я имею топку в которую полетит шибко умный компилятор. Это четыре. И это приговор.
В паскале нет препроцессора. Это пять(кстати за это я не люблю яву, с#)
В паскале очень тупые ветвления(then, наличие ';', отсутствие ';') это пять с копейками
В паскале нет оператара присваивания. Это шесть с копейками(a:=b это операция присваивания. a=b=c=d=e=f=g=someFunction(h) - вот это оператор присваивания в своей красе).
В паскале синтаксис очень похож на basic'овский. Это шесть с копейками. С ОЧЕНЬ ВЕСОМЫМИ копейками
В паскале очень тупая библиотека. На си создания дубликата участка памяти я запишу в одно выражение memcpy(malloc(len),src,len); В паскале getmem НЕ возвращает значение. А устанавливает переданный ей pointer.
В си есть циклы, операторы присваивания, препроцессор, stdlib функции которой возвращают то что им положено возвращать.
В си++ есть классы. Паскалевскому stringу в пору бится в конвульсиях.

Кстати, сколько операционных систем написано на паскале? smile

Цитата(TP @ 11.7.2005, 20:35)
учил в детстве бэйсик

Ну, например, я. Это был единственный нормальный ЯВУ на ZX спеки 48кб. Все остальные не могли быть нормальными, так как им негде было размещать свое толстое тело. Бейсик был просто вшит.

ЗЫ. МОДЕРАТОРЫ, перенесите тему в религиозные войны.

Автор: Void 11.7.2005, 20:49
Цитата(TP @ 11.7.2005, 22:31)
По поводу шаблонов и перегрузки операторов: действительно это делает Си более мощным языком, но мне например кажется, что эти "вкусности" мало испоьзуются и являются экзотикой (хотя это конечно же ИМХО)

Я сейчас буду занудой... smile Не Си, а C++. Это разные языки.
Без шаблонов современный C++ невозможен в принципе. На шаблонах держится практически вся стандартная библиотека C++.
Без перегрузки операторов невозможно прозрачно сэмулировать числовые, векторные и матричные типы, умные указатели.

Цитата(TP @ 11.7.2005, 22:31)
А вообще мне лично Си ненравится из-за его "закорючности" в синтаксисе: фигурные скобки, амперсенты, звездочки... =)

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

Цитата(TP @ 11.7.2005, 22:31)
общем если сравнивать с тем же паскалем (хотя он создавался как учебный язык программирования для студентов), то у первого код намного читабельнее чем у Си.

Для новичка - да. А для опытного программиста поддержка кода на них одинакова по сложности, имхо.

P.S. Как и многим здесь присутствующим, мне наперед известны почти все аргументы и контраргументы, которые сейчас пойдут в дело. И все-таки мне почему-то еще интересны язковые войны smile

Автор: Earnest 11.7.2005, 21:10
Mayk, полностью поддерживаю!
И еще добавлю: шаблоны С++ сделали возможным реализацию концепций обобщенного программирования. Да, в С++ нет объектов типа "метакласс", порождающих классы. Но с помощью шаблонов это прекрасно эмулируется - достаточно почитать Александреску или посмотреть в boost. Причем, все это (в отличие от супер-высокоуровневых языков типа Smalltalk) абсолютно бесплатно (в смысле производительности)! Потому что все навороты кода беследно исчезают в момент компиляции.
Таким образом, ИМХО, наиболее мощное свойсво С++, отличающее его от всех существующих языков программирования, это то, что он позволяет писать очень высокоуровневые и выразительные программы, и при этом получать очень производительный код.

Автор: simanyay 11.7.2005, 21:15
Но лучше всего Java smile

Автор: TP@MB@Y 11.7.2005, 21:36
Mayk
Сдаюсь! Вы просто разбомбили меня аргументами smile

Теперь я кажется получил довольно полный ответ на мой вопрос.

PS Говоря "Си" я подразумевал С++ smile

PSS Ну на самом деле я "войны" не хотел, а просто удовлетворил свой интерес smile

Хеппи энд smile

Автор: chipset 11.7.2005, 21:52
Эй, эй! Ну я люблю C++ smile
А почему? А патамушта и свобода и удобно программировать! Хочешь, на чисто Сишных функциях дрова кодь, а не хочешь, с GC и мета-программированием высокоуровневую хрень программируй. Если стоит выбор .NET или C++, тут и думать не надо, C++ конечно. Ни под .NET ни под Java нету такого хорошего ассортимента, к примеру http://www.geocities.com/SiliconValley/Vista/7184/guitool.html..
Я думаю все фичи Джавы уже давно реализованы в виде многочисленных бустов, и прочего http://www.trumphurst.com/cpplibs/cpplibs.phtml, а в Джава нету тех фич которые есть C++, и не будет, ибо это ограниченный язык, не универсальный, и сравнивать их нехорошо.
Джаву я признаю только в веб-программировании.
PS. http://groups-beta.google.com/group/comp.lang.c++.moderated/browse_thread/thread/c5a22f9a1010e258/7d04dba1e42cff0d

Автор: TP@MB@Y 11.7.2005, 23:44
Ну ладно. Тогда задам такой дурацкий вопрос: что можно сделать на С++, чего нельзя сделать на дельфи? Я про конкретную задачу, а не про внутреннее описание всяких там шаблонов и перегрузку оперторов.

Автор: Ch0bits 12.7.2005, 00:13
А чё на Delphi можно OSь написать? smile
smile smile smile

Автор: TP@MB@Y 12.7.2005, 00:48
Vadim999
1) Я конечно не компетентен в этом вопросе (программирование осей), но почему нет?

2) Допустим нельзя написать ось на дельфи (в чем я сомневаюсь). Но разве это ОГРОМНЫЙ МИНУС smile Ведь оси пишутся не каждым вторым программистом. Абсолютное большинство программистов пишут программы под оси, а не оси. (Хотя я могу узко понимать этот вопрос, ведь оси пишутся не только под ПиСи, но и под всякие мобилы...).

С осями разобрались. smile Что еще нельзя на дельфи?

Автор: Kurt 12.7.2005, 01:01
Цитата
Что еще нельзя на дельфи?

Писать под не-Windows системы. Kylix не в счет - он тока под *.nix и уже не развивается.

Автор: Alex 12.7.2005, 01:04
Если брать прикладные задачи, то разницы на чем их реализовывать на С++ или Delphi нет ни какой

Автор: S.A.P. 12.7.2005, 01:09
Цитата(chipset @ 11.7.2005, 21:52)
Джаву я признаю только в веб-программировании.
кстати Гугль написан на Си, так что от туда мы тоже отъели большой кусок пирога smile
Добавлено @ 01:13
Дельфи поносить не будем, потому что на ней тоже написано много хороших программ: Total Commander, мой любимый PHP Expert Editor и даже Dev CPP .

Автор: vadims 12.7.2005, 01:25
ИМХО: Вопрос абсолютно некорректен

Все разговоры на тему предпочтения тех или иных языков могут звучать только так - "есть задача ... на каком языке оптимальнее ее решать ?"
И не забывать большое значение при выборе имеет личный опыт и субъективные конкретного программиста

Иначе это аналогично - "Что лучше москвич или жигули, что лучше витамин А или витамин C ?" или "Почему ты любишь именно свою маму ?"

Автор: Domestic Cat 12.7.2005, 01:55
Цитата
Таким образом, ИМХО, наиболее мощное свойсво С++, отличающее его от всех существующих языков программирования, это то, что он позволяет писать очень высокоуровневые и выразительные программы, и при этом получать очень производительный код.


Да ладно, generics в Java и .NET реализованы лучше и дают больше возможностей.

Цитата
Ни под .NET ни под Java нету такого хорошего ассортимента, к примеру GUI либ..
Я думаю все фичи Джавы уже давно реализованы в виде многочисленных бустов, и прочего барахла, а в Джава нету тех фич которые есть C++, и не будет, ибо это ограниченный язык, не универсальный, и сравнивать их нехорошо.
Джаву я признаю только в веб-программировании.


Чипсет, а я С++ вообще не признаю, он постепенно уйдет на третий план, в системное программирование и в игры (где я его и признаю).
Потом, мы ж не в ресторане, чтобы смотреть ассортимент. Ну много С++ библиотек. Ну и Java библиотек немало. В Java пользуют в основном несколько гуи библиотек, и в С++ то же самое.

Цитата
и прочего барахла

Вот именно...

Автор: Void 12.7.2005, 06:49
Цитата(Domestic @ 12.7.2005, 03:55)
Да ладно, generics в Java и .NET реализованы лучше и дают больше возможностей.

Не передергивайте smile Это настолько разные вещи, что сравнивать их так некорректно. У дженериков есть констрейнты, и они не убивают модульность, но на них невозможно метапрограммирование. (А констрейнты (aka concepts) будут в C++09... надеюсь smile )
Цитата(Domestic @ 12.7.2005, 03:55)
Чипсет, а я С++ вообще не признаю, он постепенно уйдет на третий план, в системное программирование и в игры (где я его и признаю).

А также в платформы, где кроме C/C++ ничего нет и не предвидится. Тут я согласен. Чем больше прикладного софта будет написано на управляемых средах, тем лучше и для программистов, и для юзеров.

Автор: Domestic Cat 12.7.2005, 07:06
Цитата(Void @ 11.7.2005, 21:49)
У дженериков есть констрейнты, и они не убивают модульность, но на них невозможно метапрограммирование.

Почему?


Автор: vladgri 12.7.2005, 08:12
Вообще то не корректно сравнивать Delphi c C++ (общим названием) быстрее
уж Delphi vs MSVC++ и (или) ObjectPascal vs C++ (Pascal vs C).
Цитата
Писать под не-Windows системы. Kylix не в счет - он тока под *.nix и уже не развивается.

Есть FreePascal.
Цитата
А чё на Delphi можно OSь написать?

На Pascale.
FreePascal
http://toro.sourceforge.net/
http://delphine.sourceforge.net/documentation.php?filename=README
http://sourceforge.net/projects/nucle-os/
Turbo Pascal
http://sourceforge.net/projects/perix/
http://erams.sourceforge.net/
Больше аргументов против Delphi, в теме я не заметил. Кроме как (begin end плохо {} foreva ) smile


Автор: Void 12.7.2005, 08:19
Та-ак, что ты мы опять скатываемся в C++ vs Java, а про автора темы забыли smile

TP@MB@Y
Практически все, что можно сделать в C++, можно сделать в Delphi, и наоборот. Вопрос лишь в том, в какой геморрой это выльется smile Вот вам пара примеров:

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

Наглядная демонстрация возможностей C++ - это STL (про Boost я пока молчу smile ). Познакомьтесь с ней поближе. То что у Delphi нет, не было и не предвидится адекватного ответа STL, для меня - главный минус языка. Минус настолько серьезный, что, имхо, Паскаль идет лесом даже в признанной своей вотчине - олимпиадах.

C++ - это своеобразный констуктор "сделай все сам". Шаблоны (+ иногда препроцессор) позволяют вводить в язык сущности, которые он изначально не поддерживает, причем с высокой эффективностью в рантайме (но, увы, как правило, ценой времени компиляции). Конечно, с LISP C++ в этой области не тягатся, но большинство мейнстримных языков (и Delphi в том числе) вообще не обладают такими способностями. Пример - создание анонимных функций (лямбда-функций). С помощью STL и библиотеки Boost.Lambda мы можем написать так:
Код
std::transform(in.begin(), in.end(), std::back_inserter(out), _1 + x);

Эта строчка вставит элементы из контейнера in в конец контейнера out, прибавив к каждому из них x. Этот пример также демонстрирует использование замыкания (closure) - ведь x берется из контекста вызова. Можно такое сделать в Delphi? Сомневаюсь smile

Автор: vladgri 12.7.2005, 08:39
Цитата
Как уже говорилось, в Delphi нет шаблонов и автоматических объектов. Из этого следует, что на Delphi принципиально невозможно создать умный указатель.

Пример автоматических объектов на Delphi.
http://rsdn.ru/File/41945/autoObj.rar

Автор: Void 12.7.2005, 09:44
Цитата(Domestic @ 12.7.2005, 09:06)
Цитата (Void @ 11.7.2005, 21:49)
У дженериков есть констрейнты, и они не убивают модульность, но на них невозможно метапрограммирование.

Почему?

Пардон, не сразу заметил пост...
Параметром дженерика может быть только тип. Дженерики нельзя явно специализировать, нет и частичной специализации. Параметр дженерика сам не может быть дженериком (т.е. нельзя написать class<T<U>, V>). Невозможен SFINAE (substitution failure is not an error).

vladgri
Ах да... читал ведь ту ветку, мог бы вспомнить... Зачет smile Но аргументы WolfHound остаются в силе smile

Предложение всем: давайте отходить от отрицательной аргументации: ваш XXX так не может, а вот YYY... Особенно когда имеете о XXX поверхностное представление. Вот например я только что с автоматическими объектами в Delphi лажанулся smile Лучше так: XXX может так, и это полезно потому что [...]. А что вы в таких случаях делаете с YYY? smile

Автор: vladgri 12.7.2005, 11:48
Цитата
Ах да... читал ведь ту ветку, мог бы вспомнить... Зачет smile Но аргументы WolfHound остаются в силе smile

Единственный аргумент это отсутствие типизации.

Цитата
Предложение всем: давайте отходить от отрицательной аргументации: ваш XXX так не может, а вот YYY... Особенно когда имеете о XXX поверхностное представление. Вот например я только что с автоматическими объектами в Delphi лажанулся smile Лучше так: XXX может так, и это полезно потому что [...]. А что вы в таких случаях делаете с YYY? smile


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

To Void
Попытки реализации STL в Delphi есть.
1. DSL
http://www.partow.net/programming/dsl/
2. DeCAL
http://sourceforge.net/projects/decal/
http://gurin.tomsknet.ru/delphidecal.html



Автор: S.A.P. 12.7.2005, 12:30
Цитата(vladgri @ 12.7.2005, 11:48)
Попытки реализации STL в Delphi есть.
Ну ребята, так спорить не возможно. Я сейчас че хочешь из широких штатин достану, хоть компилятор языка C++ в байт кот и че тогда? Жабу на помойку?

Автор: vladgri 12.7.2005, 12:37
To Perchilla
Цитата
хоть компилятор языка C++ в байт кот и че тогда?

http://www.compuphase.com/small.htm
Цитата
the Small language
==================
Small is a simple, typeless, 32-bit extension language with a C-like syntax.
The Small compiler outputs P-code (or bytecode) that subsequently runs on an
abstract machine. Execution speed, stability, simplicity and a small footprint
were essential design criterions for both the language and the abstract
machine.

Автор: S.A.P. 12.7.2005, 12:43
vladgri во во smile .
Вон в последних дельфях и прегрузка операций появилась и шаблоны можно организовать.

Автор: Ch0bits 12.7.2005, 15:09
Ооо!!! Как ШЫ++ хвалят! Щас ВСЁ брошу и кинусь ставить старую недобрую VS6 и давай кодить троянов как в старые недобрые времена.
C# на помойку!
smile smile smile

Автор: S.A.P. 12.7.2005, 15:14
Vadim999 ты ето... рекламу в подписи то подправь smile .

Автор: Се ля ви 12.7.2005, 16:55
Цитата(Mayk @ 11.7.2005, 20:49)
В паскале очень длинный, запутанный, я б даже сказал, дурацкий синтаксис.

у меня он после Си++ вызывает ассоциацию такую - он просто деревянный. Видели какую-нибудь деревянную избу? Вот если её сравнить со зданием эры Hi-Tech, то это и будет похоже на сравнение С++ и Object Pascal . Не, это кароче не серьёзно.

Кроме того, не забываем, что Дельфи как самостоятельный проект позорно слили, подложив его под dotNET в последней версии - Паскаль, годный для сердцевины Enterprise-приложений, теперь существует лишь как диалект MSIL`а, более привычный для приверженцев Дельфи и на этом поле у меня боооольшие сомнения, что он долго выдержит конкуренцию с C#`м и не скатится на уровень Visual Basic`а...

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

Автор: S.A.P. 12.7.2005, 17:25
Цитата
Если не прибегать к ассемблерным вставкам, а использовать чистые возможности языка, то на Си можно работать с аппаратурой на гораздо более низком уровне - насколько я знаю, на нём даже драйвера без применения асма иногда пишут


Се ля ви щас тебе покажут какой - нибудь DDK для дельфи smile


Споры бесспыслены smile .

Автор: Void 12.7.2005, 19:35
Цитата(vladgri @ 12.7.2005, 13:48)
Единственный аргумент это отсутствие типизации.

Немаловажный, однако. Хотя, конечно, это гораздо лучше, чем ничего.
Цитата(vladgri @ 12.7.2005, 13:48)
Ни в одном форуме отрицательно не высказывался ни о каком языке програмирования.
Мне кажется все они имеют право на существование. Если какой либо из ЯП, помог реализовать
свои мысли хотябы одному програмисту, то это хороший ЯП.

Это совсем не к вам относилось smile Вам наоборот большое спасибо за интересные ссылки.
Цитата(vladgri @ 12.7.2005, 13:48)
Попытки реализации STL в Delphi есть.

Интересно... Не имею возможности плотно с ними познакомится, но складывается впечатление, что авторы действительно выжали из языка что могли smile
Цитата
It was made to fill in the void that some Object Pascal programmers who have had the pleasure of using C++'s STL may feel after they return to their mother language.

А что, есть такие? smile
Цитата(Perchilla @ 12.7.2005, 14:43)
Вон в последних дельфях и прегрузка операций появилась и шаблоны можно организовать.

В смысле, дженерики?
Цитата(Perchilla @ 12.7.2005, 19:25)
Споры бесспыслены smile .

Отнюдь, в них хоть и не рождается истина, но зато пробуждается любознательность. Если в итоге хоть один человек повнимательнее присмотрится к C++ или какому-нибудь другому языку - флеймили не зря smile

Автор: S.A.P. 12.7.2005, 19:51
Цитата(Void @ 12.7.2005, 19:35)
В смысле, дженерики?
где то видел пример: пишутся модули с шаблонами как в C++, а перед компиляцией все прогоняется перлом, приводя в нормальный вид. Фигня конечно, но зато у дельфистов есть аргумент: мол вот у нас тоже шаблоны есть smile .

Автор: rsm 12.7.2005, 22:04
Цитата(Void @ 12.7.2005, 21:35)
Если в итоге хоть один человек повнимательнее присмотрится к C++

Я присматриваюсь smile Лично для меня счет пока что не в пользу С++ только из-за отсутствия хорошей графической библиотеки а-ля VCL. Из всех библиотек, которые смотрел (Qt, wxWidgets, WTL, MFC, Fox, ATL и еще несколько мелких), больше всего понравились Qt и wxWidgets. Однако Qt поставляется по строгой лицензии (шаровары с ней не попишешь), а у wxWidgets нет хорошего бесплатного (!) редактора форм. Сейчас качаю VCF, посмотрим, ху из зыс...

Давайте будем спорить о графических либах для С++ - глядишь что-нить реально хорошее отыщется, польза будет! smile

З.Ы. О бесплатности и возможности писать коммерческий софт: очень важно, чтобы библиотека была бесплатная (ну нету у меня пары килобаксов на Qt! smile), с хорошим редактором форм и, конечно, содержала побольше готовых классов и графических контролов.
Примечание о VCL: насколько мне помнится, лицензия на пробную версию Дельфи разрешает писать шароварный софт. Так что можно условно считать VCL бесплатной - раз в месяц переустановить Дельфи это не проблема.

Автор: vladgri 13.7.2005, 06:11
To rsm
Цитата
а у wxWidgets нет хорошего бесплатного (!) редактора форм.

Посмотри
http://sourceforge.net/projects/wxformbuilder/
и (мне больше нравиться)
http://sourceforge.net/projects/wxdsgn

Автор: Void 13.7.2005, 12:21
Цитата(Perchilla @ 12.7.2005, 21:51)
где то видел пример: пишутся модули с шаблонами как в C++, а перед компиляцией все прогоняется перлом, приводя в нормальный вид. Фигня конечно, но зато у дельфистов есть аргумент: мол вот у нас тоже шаблоны есть smile .

Вообще, сам факт, что какая-то фича вводится в язык отдельным препроцессором, меня совершенно не коробит. Я бы с удовольствием признал наличие в такой custom Delphi шаблонов, если бы не одна проблема - диагностика ошибок в шаблонном коде. Она достаточно хреновая и в нынешних плюсах, а тут не будет вообще никакой. А значит практическая ценность подобных наворотов - околонулевая. Сделать же нормальную диагностику, не интегрировавшись с компилятором - нереально.
Цитата(rsm @ 13.7.2005, 00:04)
Примечание о VCL: насколько мне помнится, лицензия на пробную версию Дельфи разрешает писать шароварный софт. Так что можно условно считать VCL бесплатной - раз в месяц переустановить Дельфи это не проблема.

А законна ли такая переустановка сама по себе? smile Вообще, сколько я знаю, цены на Professional и Enterprise версии Delphi и Builder просто запредельные - не дешевле той же Qt. А Personal имеет серьезные ограничения на коммерческое использование. В то же время VS Express раздают бесплатно, и без лицезионных ограничений...

А GUI для C++ - действительно больной вопрос... Я не испытывал в такой библиотеке очень уж острой необходимости, но пока все что я видел не очень впечатляет. (Qt еще не пробовал. Сейчас докачиваю Qt4 opensource edition, но без VS я вряд ли проживу. Наверное, придется забить и доставать ломаную коммерческую версию smile ).

Автор: vladgri 13.7.2005, 13:21
Цитата (Void @ 13.7.2005, 12:21)
Цитата
Вообще, сам факт, что какая-то фича вводится в язык отдельным препроцессором, меня совершенно не коробит. Я бы с удовольствием признал наличие в такой custom Delphi шаблонов, если бы не одна проблема - диагностика ошибок в шаблонном коде. Она достаточно хреновая и в нынешних плюсах, а тут не будет вообще никакой. А значит практическая ценность подобных наворотов - околонулевая. Сделать же нормальную диагностику, не интегрировавшись с компилятором - нереально.


Ну почему же так жестко ?
Отладка шаблона производится на тестовом примере, причем в Pascal большинство ошибок
(в основном синтаксических) определяется на этапе компиляции. К примеру при испытании
http://www.sourceforge.net/projects/dpp32`а я написал и оладил темплейт Auto_Object smile с типизацией smile за 10 минут.

Автор: CosmoMan 13.7.2005, 16:15
Я программировал сначала на QБейсике, потом на С++ и после него перещел на pascal
и Delphi.

На мой взгляд нельзя говорить о том, что Delphi не идет ни в какое сравнение с С++.
Проблема заключается в том, что в C++ реализовано намного больше возможностей для программирования.
При этом С++ обладает очень запутанным синтаксисом и логикой программирования. Изучать
его очень долго и трудно, а для начинающих написание приложений в нем превращается в
настоящее мучение: указатели на указаеть указателем погоняет. Непонятные
ошибки непонятно откудо появляеются.

Delphi же обладает более понятным интерфейсом и упрощенной алгоритмической логикой.
При этом он конечно очень проигрывает по гибкости C++, однако его намного быстрее можно изучить
и писать программы быстро и легко.

Самый логичный язык - это С++. С точки зрения логики алгоритма это самый лутший язык в своем роде.
Читаемость - это сложный вопросс. Ибо если ты в нем программируеш достаточно давно, то
после этого читаемость ObjectPascal окажется более запутанной.
Но сначало нужно понять Delphi. Я считаю, что термин "ГУРУ" трудно отнести к программисту
в Delphi. Даже достигнув совершенства в Delphi, ты всё равно поймеш, что программисты на С++
круче, т.к. они программируют на С++.
Итак, Delphi - это язык программирования для программистов, которые хотят создавать
прикладные программы не вдаваясь в тонкости архитектуры ОС , компьютера,
пердставления данных и компилятора. Они стеснены узкими рамками компилятора.
Вот почему многие операционыые сисетмы написаны на С++ (UNIX). Программируя на С++
ты ощущаеш близость к коду и ты подчти ни чем не ограничен. Это как программирование на
ассемблере. НО это все можно достигнуть лиш годами практики программирования на С++.

Delphi для профессиональных порграммистов, С++ для ГУРУ.
Заранее приношу извенения, если когото обидел. Но это моё мнение.
Лично я программирую в Delphi 7 и он мне нравится. В С++ я разбирался очень долго
и это дело бросил до поры до времени.
smile

Автор: batigoal 13.7.2005, 17:02
Цитата(CosmoMan @ 13.7.2005, 17:15)
Самый логичный язык - это С++. С точки зрения логики алгоритма это самый лутший язык в своем роде.

А вот с этим я не согласен (в пользу Java).

Автор: TP@MB@Y 13.7.2005, 18:24
Цитата(Void @ 12.7.2005, 08:19)
C++ - это своеобразный констуктор "сделай все сам". Шаблоны (+ иногда препроцессор) позволяют вводить в язык сущности, которые он изначально не поддерживает, причем с высокой эффективностью в рантайме (но, увы, как правило, ценой времени компиляции). Конечно, с LISP C++ в этой области не тягатся, но большинство мейнстримных языков (и Delphi в том числе) вообще не обладают такими способностями. Пример - создание анонимных функций (лямбда-функций). С помощью STL и библиотеки Boost.Lambda мы можем написать так:
Код
std::transform(in.begin(), in.end(), std::back_inserter(out), _1 + x);

Эта строчка вставит элементы из контейнера in в конец контейнера out, прибавив к каждому из них x. Этот пример также демонстрирует использование замыкания (closure) - ведь x берется из контекста вызова. Можно такое сделать в Delphi? Сомневаюсь smile

Void

Хм... Навороченность языка С++ действительно делает его очень мощным. НО smile Все эти "навороты" тоже программировались, чтобы они были доступны в использовании. Понимаете? И начем же они программировались? А это уже не важно, потому как точно не на С++ (так как С++ - это и есть эти навороты). И вы хотите сказать что все эти "умные" операторы и функции нельзя реализовать на другом языке? Звучит глупо.

Вот например для меня разобраться в чужом коде на асемблере намного сложнее, чем написать эту программу самому (попутно изучив проблемы поставленой задачи и ее реализации). Тоже самое с "умными" операторами С++: если мне понадобиться в реализации моей задачи что-то похожее, то проще будет написать самому, чем искать в хелпах и разбираться и подгонять под уже существующую "сущность".

smile

Автор: Void 13.7.2005, 19:32
Цитата(vladgri @ 13.7.2005, 15:21)
Ну почему же так жестко ?
Отладка шаблона производится на тестовом примере, причем в Pascal большинство ошибок
(в основном синтаксических) определяется на этапе компиляции. К примеру при испытании
Delphi language Preprocessor`а я написал и оладил темплейт Auto_Object smile с типизацией smile за 10 минут.

Что ж, очень рад smile Но ведь есть еще ошибки неправильного использования шаблона. Обращаясь к той же STL - допустим, передали мы в std::sort bidirectional iterator вместо random-access. В нынешнем C++ (без констрейнтов) мы получим несколько маловнятных сообщений, но они в конце-концов приведут нас к источнику ошибки - точке инстанциирования шаблона. Что будет делать препроцессор? И есть еще одна проблема - надо убедить дельфистов, что шаблоны им нужны smile

TP@MB@Y
Цитата(TP @ 13.7.2005, 20:24)
Хм... Навороченность языка С++ действительно делает его очень мощным. НО smile Все эти "навороты" тоже программировались, чтобы они были доступны в использовании. Понимаете? И начем же они программировались? А это уже не важно, потому как точно не на С++ (так как С++ - это и есть эти навороты). И вы хотите сказать что все эти "умные" операторы и функции нельзя реализовать на другом языке? Звучит глупо.

Во-первых, показанные здесь "навороты" реализуются библиотеками, написанными на чистом C++. C++ сам по себе, как язык - ничего этого не дает. Я хочу лишь сказать что шаблоны вместе с перегрузкой операторов позволяют сделать код более высокоуровневым, и понятным, повысить повторное использование кода, повысить его надежность.
Цитата(TP @ 13.7.2005, 20:24)
Вот например для меня разобраться в чужом коде на асемблере намного сложнее, чем написать эту программу самому (попутно изучив проблемы поставленой задачи и ее реализации). Тоже самое с "умными" операторами С++: если мне понадобиться в реализации моей задачи что-то похожее, то проще будет написать самому, чем искать в хелпах и разбираться и подгонять под уже существующую "сущность".

Возможно, вы так и поступите. Но для меня и миллионов других C++-программистов легче будет воспользоваться именно хорошо известными и широко распространенными библиотеками (Boost), и конечно же стандартной библиотекой (которая сейчас имеет тенденцию к серьезному расширению). К тому же в Delphi вы, надо полагать, не задумываясь пользуетесь теми сотнями компонентов, которые входят в стандартную поставку, пользуетесь справкой - так почему же вы не признаете code reuse в C++? Синтаксис вам кажется "заумным" - но это лишь от непривычки. Нет, у всего есть предел, в C++ тоже можно наворотить чудовищные и малопонятные конструкции там где можно обойтись локальным велосипедом. Но, поверьте, приведенный код к этому случаю не относится smile

Автор: rsm 13.7.2005, 20:28
Цитата(vladgri @ 13.7.2005, 08:11)
Посмотри wxFormBuilder и (мне больше нравиться) wxWindows Dialog Designer

Первая программа весьма интересная, посмотрю ее подробнее. А вторую уже видел - сплошное глюкалово smile

Цитата(Void @ 13.7.2005, 14:21)
А законна ли такая переустановка сама по себе?

А кто докажет, что я ставлю Дельфи второй раз? smile

Цитата(Void @ 13.7.2005, 14:21)
В то же время VS Express раздают бесплатно, и без лицезионных ограничений...

Это который VC++ 2003 Toolkit? Или что-то другое? Если другое, напиши пожалуйста УРЛ.
Добавлено позже
Ага, кажись сам http://lab.msdn.microsoft.com/express/visualc/default.aspx. 500 Мб... Мне это никогда не скачать smile Будем юзать VC++ 2003 Toolkit.

Цитата(Void @ 13.7.2005, 14:21)
А GUI для C++ - действительно больной вопрос...

Мда, вот так всегда - столь мощный язык и так незаслуженно пролетает аки фанера над Парижем smile

Автор: Void 13.7.2005, 21:08
Цитата(rsm @ 13.7.2005, 22:28)
Ага, кажись сам нашел. 500 Мб... Мне это никогда не скачать smile Будем юзать VC++ 2003 Toolkit.

Это потому что туда впихнули невпихуемое: MSDN Express и еще что-то...
Народ раздобыл нормальные ссылки:
http://download.microsoft.com/download/2/4/8/248670bf-07cd-4996-bb57-136064541bfc/Ixpvc.exe (65 Мб).
При установке будет немножко ругаться, но работать будет, вроде лечится распаковкой бутстрапера того же VC++ в каталог установки.
http://rsdn.ru/forum/Message.aspx?mid=1140530&only=1 обсуждение.

Цитата(rsm @ 13.7.2005, 22:28)
Мда, вот так всегда - столь мощный язык и так незаслуженно пролетает аки фанера над Парижем

Что ничуть не мешает создавать на C++ самые навороченные GUI smile

Автор: TP@MB@Y 13.7.2005, 22:11
Void

Ну я все понимаю, просто раздражает то, что некоторые работадатели ставят задачу + ставят жесткое условие касательно языка программирования smile

Автор: CosmoMan 13.7.2005, 22:14
Насчет читабельности кода С. Можети сходу сказать, что делает эта программа? У меня она какимто загадочным образом выводила куплеты
с текстом.

#include <stdio.h>
main (int t, int _,char *a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)): 1,t<_ ? main(t+1,_,a):3,main(-94,-27+t,a)&&t==2\
?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?
main(_,t,"@n'+,#'/*s{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n\
{n+,/+#n+,/# ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!\
/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!\
/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/\
w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}\
#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):
main(-65,_,a+1):
main((*a=='/')+t,_,a+1):
0<t?main(2,2,"%s")
:*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-0;m .vpbks,fxntdCeghiry"
),a+1);
}
smile

Автор: batigoal 13.7.2005, 22:41
Вообще-то нечто подобное можно на любом языке написать smile

Автор: Петрович 13.7.2005, 23:27
Мне ближе мнение CosmoMan.
Кроме того, хочу добавить от себя.
Сам достаточно давно программировал и на pascal'е и на C.
Но, всегда в C были проблемы с читабельностью. Например. мне подслеповатому всегда было легко перепутать { и [ на некоторых мониторах (давно это было). Семантическая нагрузка на отдельные символы в C СУЩЕСТВЕННО выше, и в случае элементарных описок, легко получить синтаксически правильную, но неправильную семантически конструкцию. И вылавливать такие ошибкипотом не так легко. Более того, если на C не программировал месяца два, три, то потом, неделю как минимум глаза и мозги настраиваешь.
А уж то что на C можно так код написать, что даже твой напарник без поллитра не разберется!
Так, постепенно, мои интересы перемещались в область Pascal.
С тех пор много воды утекло. Теперь я пишу практически только на Delphi. Хотя, как мне кажется, у меня не вызывает трудностей чтение не слишком замороченных кодов даже на C++. Холтя конечно напрягает smile.
В принципе, все что я сказал о C, еще в большей степени относится и к C++.

Что же касается возможностей этих языков, то тут я даже спорить не хочу. Скажу лишь что Windows рождалась на Pascal'е.
А из своего опыта, могу сказать, что еще в бытность ПЯ, лично принимал непосредственное участие в разработке сетевой операционной системы для встроенных систем, управляющих целым комплексом боевого оборудования. Так вот в этом комплексе, только BIOS компов был написан на ассемблере. Остальное, начиная от ядра ОС и до прикладнгого ПО писалось на pascal'e, правда несколько расширенном (OMSI Pascal).



Добавлено @ 23:29
Впротчем, я бы не отказался кое что позаимствовать из C++ в Delphi smile

Автор: CosmoMan 14.7.2005, 10:55
Цитата
Впротчем, я бы не отказался кое что позаимствовать из C++ в Delphi

Полностью согласен, множественное наследлвание например.

По моему С++ надо много взять из Делфи, чтобы стать более удобным.

Автор: Петрович 14.7.2005, 11:24
Цитата(CosmoMan @ 14.7.2005, 11:55)
множественное наследлвание например.

А мне кажется что использование интерфейсов даже удобнее. smile
Мне лично прежде всего не хватает того, что бы выражение присваивания имело значение. Просто надоело писать подобное:
Код

  a := x*4-y;
  b := a;
  c := a;
Причем, если a,b, и c свойства объекта, то порой еще и доп.переменную приходится объявлять (дабы избежать побочных эффектов).
Ну еще хотелось-бы что бы в блоке begin end можно было бы объявлять локальные переменные.

Это в основном...

Автор: chaos 14.7.2005, 12:09
не много не в тему)) ну все же
меня допустим воротит от редактора текстов от Borland(Delphi, CBuilder v5,6) по сравнению VC++6.0
может быть я не умею ими пользоваться, не нашел табулирования выделенного блока текста, перевод из верхнего регистра и обратно все с тем же выделенным блоком текста, различные переходы к бегинам ендам, закладки не по русски как-то ставятся(через контектное меню)

Автор: Alex 14.7.2005, 12:45
chaos http://vingrad.ru/DELPHI-ART-002204

Автор: CosmoMan 14.7.2005, 14:43
Вы не знаете, чем друг от друга отличаются компиляторы в
Borland C++ Builder 6, Microsoft Visual C++ и GCC.

Там библиотеки чемто оличаются?

Автор: Void 15.7.2005, 21:11
Цитата(Lamer @ 13.7.2005, 19:02)
Цитата (CosmoMan @ 13.7.2005, 17:15)
Самый логичный язык - это С++. С точки зрения логики алгоритма это самый лутший язык в своем роде.

А вот с этим я не согласен (в пользу Java).

Что-то я совсем рассеянный стал - второй пост уже в этой теме мимо глаз пропустил... smile

А конкретные причины можно? Я вот кроме наличия GC, избавляющего от написания деструкторов, delete, etc ничего не вижу.
Мне кажется, что функциональный язык вроде OCaml или Haskell по краткости и логике записи алгоритмов порвет на тряпки и плюсы и яву. А OCaml скорее всего еще попутно порвет Java по скорости.

Автор: Domestic Cat 15.7.2005, 21:24
Цитата(Void @ 15.7.2005, 12:11)
OCaml или Haskell


А по скорости разработки ПО, поддержке и читаемости кода?

Автор: Void 16.7.2005, 09:33
Цитата(Domestic @ 15.7.2005, 23:24)
А по скорости разработки ПО, поддержке и читаемости кода?

Напомню, речь шла исключительно об алгоритмике. Конечно, писать на них бизнес-приложения было бы довольно странно, но, думаю, в определенных областях они могут конкурировать с Java по всем трем параметрам (научное, математическое ПО, например).

На Винграде нужен апологет функциональных языков smile У C++ такие есть, у Java есть, с .NET как-то не очень... А вот у всего остального - нет! (Или они просто помалкивают? smile ) От человека, активно пропагандирующего какую-то концепцию, язык, технологию, есть реальная польза в расширении кругозора, при условии что он не просто фанатствует, а приводит реальные доводы, ссылки, статьи - даже если в целом его выводы по поводу XXX не совсем адекватны.

Автор: batigoal 16.7.2005, 09:48
Цитата(Void @ 16.7.2005, 10:33)
На Винграде нужен апологет функциональных языков

Возьмешься? smile

Автор: Void 16.7.2005, 10:22
Lamer George
Не знаю smile Вот сейчас с OCaml потихоньку разбираюсь. Пока нравится. Что из этого выйдет - посмотрим.

Автор: Се ля ви 16.7.2005, 14:21
Цитата(Void @ 15.7.2005, 21:11)
функциональный язык вроде OCaml или Haskell по краткости и логике записи алгоритмов порвет на тряпки и плюсы и яву. А OCaml скорее всего еще попутно порвет Java по скорости.

Smalltalk и то не смог пробиться в копоративную среду, хотя уж на что хороший язык! Сейчас Python пытается, но шансов не много, хотя язык сам по себе замечательный.

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

Просто посчитай стоимость компьютерного железа и почасовую оплату опытного программиста - и поймёшь, что гораздо выгоднее купить больше памяти и лучше процессор, чем мучиться с самостоятельным написанием кучи библиотек, необходимых для написания Информационных Систем. Именно по-этому рулят платформы, а не языки. И именно по-этому существуют только 2 настоящих конкурента на корпоративном рынке - .NET, в библиотеки которой вливает тонны денег Microsoft, и J2EE, поддерживаемая не только SUN, но и созданным ей большим сообществом из сотен других крупных компаний, а сейчас ещё и OpenSource`никами.

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

Дело, канешь, твоё - можешь тратить время в пустую, но подумай вот о чём - человек, с точки зрения животных - слаб, медлителен и неэффективен - а между тем доминирует на Земле, да как доминирует! Иные гораздо более эффективные, чем он, по животным меркам, - в красной книге или уже вообще истреблены только потому, что многим его представителям нравится шкура с их трупов.
Так же и с языками - эпоха языков прошла, теперь время платформ. Уже не важно, какой ты хороший язык - важно, что бы он позволял использовать всю мощь платформы, был массовым и простым. Дольше, независимее свех держался Delphi, но, как платформа, не выстоял и он - прибился к .NET`у. Python поступил хитрее, его разработчики написали компиляторы для обеих популярных платформ.
Сейчас ситуация напоминает холодную войну, гонку вооружений (библиотек) и прочее между двумя самыми популярными платформами - J2EE и .NET, всё остальное - практически не востребовано, приложения на других языках напоминают экзотических зверушек в зоопарке, заповеднике или на воле, куда ещё не добрался человек и они доживают свой век на всё время немилосердно сокращающейся территории...

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

Постепенно, хотя и очень медленно, он выдавится и из этих областей платформами-гигантами. Пока виртуальные машины представляют собой нашлёпки над операционными системами - он ещё может давать какой-то выигрыш производительности и надёжности за счёт отсутствия GC, но когда они устоятся, станут по-надёжнее и их реализуют на уровне операционных систем - его позиции сильно пошатнутся даже там, где он царствовал безраздельно с незапамятных времён, в самом сердце крушащейся империи... Когда же виртуальные машины будут частично или полностью реализованы аппаратно, С++ сдаст последние оплоты и окончательно уйдёт в историю, останется лишь партизанить там, где нет больших денег и гиганты просто побрезгуют туда из-за этого лезть с ним биться - в болотах программирования...

.NET уже взяла курс на перетягивание бывших С++`ников к себе и, похоже, немного обгоняет в этом Java - именно по-этому в C# хуже чем в Java реализован механизм отлова исключений - лозунг здесь "можем немного пожертвовать удобством языка, только бы по-больше разработчиков переманить" - опять же, заметь, они жертвуют языком, а вместе с тем и платформой, т.е. где-то и возможностями исключительно ради переманивания разработчиков - т.е. вопрос стоит прямо противоположно тому, как его ставишь ты - теперь не язык должен быть хорошим, а языком можно пожертвовать где-то, что бы людям было удобнее переходить, меньше приходилось переучиваться - вот она, другая эпоха! Маркетинг наступает и бъёт чистую алгоритмию. Именно этим я объясняю, помимо обширной рекламной компании, немного большее количество .NET`чиков по сравнению с Java`истами.

Вобщем, любить можно какие угодно языки, но давайте думать реалистичнее - что нужно рынку, а что нет. Какие специалисты понадобятся в перспективе, а какие - со времянем не будут нужны никому?... Я вот, лично, хотел бы быть среди первых smile

Автор: Void 16.7.2005, 20:38
Се ля ви
Хороший пост. Но ты меня неправильно понял - мои взгляды ни в чем радикально не отличаются от вышеизложенных.

Дело в том, что многим людям хочется считать любимый язык, будь то Java, C++ или C#, лучшим во всем - в том числе и в таких абстрактных категориях, как читаемость, эффективность, лаконичность. А я указываю на то, что это не так, и что мейнстрим - мейнстримом, а объективность - объективностью.

Кстати, быстродействие вовсе не было ключевым моментом моего поста. Наоборот. Погоня за байтами и тактами мне давно не интересна (хотя в индустрии были, есть и останутся области, где вычислительных мощностей не хватает всегда). Мне нет существенной разницы, во что там компилируется язык - нативные коды, MSIL или байткод Java. Речь идет преимуществах декларативного подхода над императивным, там где его оказывается возможным применять - это преимущество внеплатформенно. И если завтра тот же OCaml переедет на .NET (собственно, это уже сделано - см. F#) - суть от этого не поменяется.

Цитата
именно по-этому в C# оставлено путающее множественное наследование

Правила наследования в C# ничем не отличаются от таковых в Java. Просто синтаксис наследования класса и реализации интерфейса одинаковый: class Foo : Bar, IBaz вместо class Foo extends Bar implements IBaz. Учите матчасть, товарищи smile

Автор: simanyay 16.7.2005, 20:50
Цитата(Void @ 16.7.2005, 22:38)

Правила наследования в C# ничем не отличаются от таковых в Java. Просто синтаксис наследования класса и реализации интерфейса одинаковый: class Foo : Bar, IBaz вместо class Foo extends Bar implements IBaz.


Не понял причём тут синтаксис. Множественного наследования в C# нет, потому следующий код не скомпилируется
Код

class Mom {
}

class Dad {
}

class Son: Mom, Dad {
}


Также как не скомпилируется и этот код
Код

class Mom {
}

class Dad {
}

class Son extends Mom, Dad {
}


Причём тут синтаксис?


Цитата(Void @ 16.7.2005, 22:38)
Учите матчасть, товарищи


Никогда не понимал этой фразы. Объясните кто-нибудь, пожалуйста.

Автор: Irokez 16.7.2005, 20:55
Цитата(simanyay @ 16.7.2005, 20:50)
Никогда не понимал этой фразы. Объясните кто-нибудь, пожалуйста.

учите математическую часть smile

Автор: Mayk 16.7.2005, 21:02
- бред автора вызванный невнимательностью и чтением по диагонали -

Автор: batigoal 16.7.2005, 21:06
Цитата(Irokez @ 16.7.2005, 21:55)
учите математическую часть

Материальную
Добавлено @ 21:07
Mayk
Ничего не понял в твоем коде.

Автор: simanyay 16.7.2005, 21:17
Mayk, я привёл пример и написал, что он не скомпилируется. В этом примере я попытался использовать множественное наследование классов. Раз я написал, что он не скомпилируется, следовательно в Java нет множественного наследования классов. Вот. smile

Цитата(Lamer @ 16.7.2005, 23:06)
Материальную

А что за материальная часть?

Автор: Mayk 16.7.2005, 21:19
simanyay
Упс. Извеняюсь, тормозим-с, читаем через строчки.
Всё, иду спать. Всё равно не вменяем.

Автор: batigoal 16.7.2005, 21:26
Цитата(simanyay @ 16.7.2005, 22:17)
А что за материальная часть?

Это выражение употребляют в армии и подобных структурах. "Материальная часть автомата Калашникова". Только не спрашивай у меня, где у него духовная часть. smile
Материальная часть - любое имущество.

Автор: simanyay 16.7.2005, 21:30
Цитата(Lamer @ 16.7.2005, 23:26)

Это выражение употребляют в армии и подобных структурах. "Материальная часть автомата Калашникова". Только не спрашивай у меня, где у него духовная часть. smile
Материальная часть - любое имущество.


Ёптыть, какие корни...

Автор: batigoal 16.7.2005, 21:36
Это я под влиянием своего текущего поста в ЖЖ. smile

Автор: Void 16.7.2005, 22:11
Синтаксис Java/C# и этимологию слова "матчасть" разобрали? smile
А по сабжу кто-нибудь выскажется? Мы ж, как никак, в религиозных войнах smile

Автор: batigoal 16.7.2005, 22:24
Цитата(Void @ 16.7.2005, 23:11)
А по сабжу кто-нибудь выскажется? Мы ж, как никак, в религиозных войнах

Да что там высказываться-то? Почему все любят С++? Так не люблю я его, вот и не знаю, почему его любят. Воюйте на здоровье. smile

Автор: simanyay 16.7.2005, 22:28
Да и никто его не любит. Делают вид smile

Автор: Void 16.7.2005, 22:29
Lamer George
Нет. В религиозных войнах сабж - это то, на чем остновилась дискуссия, которая через 10 постов всегда уезжает от заголовка темы smile Вот Се ля ви эмоциональное послание написал, я, сам того не желая, попал в роль адвоката ФЯ smile

Автор: batigoal 16.7.2005, 22:29
simanyay Тогда давай дальше про матчасть smile
Добавлено @ 22:30
Void
Ну выходной, блин smile Не хочу про С++.

Автор: Domestic Cat 16.7.2005, 22:33
Про функциональные и декларативные языки - в отдельный тред пжалста.
А здесь будем считать кто С++ не любит smile smile

Автор: chipset 16.7.2005, 22:38
Цитата(Domestic @ 16.7.2005, 12:33)
А здесь будем считать кто С++ не любит smile smile

Ты опечатался.

Автор: Void 16.7.2005, 22:42
Цитата(Lamer @ 17.7.2005, 00:29)
Ну выходной, блин smile Не хочу про С++.

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

Domestic Cat
Которая из этих симпатичных рожиц олицетворяет нелюбителей C++ smile

Все, ушел спать smile

Автор: S.A.P. 17.7.2005, 03:08
Я люблю C++ и буду биться до последнего smile .

И не надо рассказывать байки про аппаратную реализацию "виртуальных" машин. К тому времени, когда это возможно настанет, независимых платформ будет так много, что мы опять придем к еще более ужасному разграничению, уже на аппаратном уровне smile . Поэтому будет единый машинный код, а пока есть машинный код, C++ рулит, а всякие Жабы с пончиками - донатами курят в сторонке.

Автор: Domestic Cat 17.7.2005, 03:15
Цитата(Perchilla @ 16.7.2005, 18:08)
Поэтому будет единый машинный код, а пока есть машинный код, C++ рулит, а всякие Жабы с пончиками - донатами курят в сторонке.

Ну-ну... Чего-то не видно что рулит smile
К тому же достаточно аппаратного ускорения и машинного кода... Да и посмотрим что ты скажешь лет через 5, когда все будут на лонгхорне и НЕТ, а на плюсах под винду будут писать только хоббисты. smile

Автор: S.A.P. 17.7.2005, 03:28
Domestic Cat договорились smile .
Добавлено @ 03:32
Не будем забывать, что у нас еще C++0x на подходе smile .

Автор: Domestic Cat 17.7.2005, 05:21
Цитата(Perchilla @ 16.7.2005, 18:28)
Domestic Cat договорились smile .
Добавлено @ 18:32
Не будем забывать, что у нас еще C++0x на подходе smile .

А микрософт одобрил ? smile

Автор: chipset 17.7.2005, 05:42
Цитата(Domestic @ 16.7.2005, 19:21)
А микрософт одобрил ? smile

У МС есть такая штука как C++/CLI. В нём и фичи доната, и С++ не ободран как в mc++ ;)

Автор: Domestic Cat 17.7.2005, 05:47
Дык есть то есть, но реклама то на всех сайтах какая? smile Visual Studio .NET.

Автор: Mayk 17.7.2005, 09:28
Даа. Рано я вчера спать ушел, столько интересного пропустил.
Цитата(Domestic @ 17.7.2005, 06:21)
А микрософт одобрил ?

А что нам микрософт? Они ведь и яву не жалуют.

Цитата(Domestic @ 17.7.2005, 04:15)
Ну-ну... Чего-то не видно что рулит

Я видел несколько IDE и текстовых редакторов. Возьмём vim(это не IDE, но я его неброшупотомучтоонхороший), VS60, Borland Builder, NetBeans, vs2003. По скорости всех рвёт, разумеется, VIM, благо он редактор, а не IDE. На втором месте идут билдер и 6ая вязанка, а вот в самом конце плетутся NetBeans и vs2003. Разве тормоза - рулез? Что есть рулез?

Цитата(Perchilla @ 17.7.2005, 04:08)
И не надо рассказывать байки про аппаратную реализацию "виртуальных" машин.

Кстати, а какой процессор появится первым? Ставлю на MIX(ассемблер Кнута). Он наиболее изучен.

Цитата(Domestic @ 17.7.2005, 04:15)
Да и посмотрим что ты скажешь лет через 5, когда все будут на лонгхорне и НЕТ

Лонгхорну еще выйти надо. А он очень не торопится. К тому же надо прибавить еще лет 10, пока предприятия снесут DOS, 9x, 2k, XP и поставят лонгхорн. Скорее выйдет какая нибудь 3rd party OS, которая порвёт всех на части и загребёт себе половину рынка ОСей.
Цитата(Domestic @ 17.7.2005, 06:47)
Дык есть то есть, но реклама то на всех сайтах какая? smile Visual Studio .NET.

Ну вот вы, дважисты, и займитесь тем, чтобы изничтожить .NET под корень smile

Автор: simanyay 17.7.2005, 11:32
Цитата(Mayk @ 17.7.2005, 11:28)

Я видел несколько IDE и текстовых редакторов. Возьмём vim(это не IDE, но я его неброшупотомучтоонхороший), VS60, Borland Builder, NetBeans, vs2003. По скорости всех рвёт, разумеется, VIM, благо он редактор, а не IDE. На втором месте идут билдер и 6ая вязанка, а вот в самом конце плетутся NetBeans и vs2003. Разве тормоза - рулез? Что есть рулез?


Хочешь удивлю? Visual Studio .NET написана на плюсах smile А вообще компы надо нормальные брать.

Автор: Mayk 17.7.2005, 11:36
Цитата(simanyay @ 17.7.2005, 12:32)
Visual Studio .NET написана на плюсах

Странно. Я где-то читал что на .net. Хотя ладно, 6ая вязанка всё-равно быстрее. А вим, который на чистых сях всех вообще рвёт в прах.
Цитата(simanyay @ 17.7.2005, 12:32)
А вообще компы надо нормальные брать.

Я и так коплю на AMD64 smile

Автор: simanyay 17.7.2005, 11:41
Цитата(Mayk @ 17.7.2005, 13:36)
Странно. Я где-то читал что на .net. Хотя ладно, 6ая вязанка всё-равно быстрее. А вим, который на чистых сях всех вообще рвёт в прах.


Посуди сам. Почти одновременно, с выходом .NET Framework появилась студия. Если студия написана на C#, то не думаю, что первая студия использовала незаконченный фрэймворк. А придерживать продукт, в данном случае .NET Framework, не в стиле Microsoft.
VIm конечно классный редактор, но лично мне нужна полноценная IDE.

Цитата(Mayk @ 17.7.2005, 13:36)
Я и так коплю на AMD64 smile


Ну и где тогда проблема тормозов? У меня на AMD64 3.4+ (1Gb RAM) всё вышеперечисленное летает. Иногда NetBeans притормаживает, но тут виноват медленный винт.

Автор: Mayk 17.7.2005, 12:10
Цитата(simanyay @ 17.7.2005, 12:41)
Посуди сам. Почти одновременно, с выходом .NET Framework появилась студия. Если студия написана на C#, то не думаю, что первая студия использовала незаконченный фрэймворк. А придерживать продукт, в данном случае .NET Framework, не в стиле Microsoft.

Во-всяком случае .net там использован. Док-во, например:
ildasm e:\Program Files\Microsoft Visual Studio .NET 2003\Common7\ide\Microsoft.VSDesigner.dll
не бьет по рукам
Цитата(simanyay @ 17.7.2005, 12:41)
Ну и где тогда проблема тормозов?

В текущем Celeron'е на 1700Mhz

Автор: Kurt 17.7.2005, 12:42
VS не на .NET написана?.. smile
Хмм... А кто-нить пробовал удалить из системы Framework, а потом запустить VS? Будет работать? (я серьезно спрашиваю - сам не эксперементировал)

Автор: simanyay 17.7.2005, 14:25
А как вы думаете будет работать VS .NET без .NET? Компиляторы, виртуальные машины и прочее ведь во фрэймворке, а среда разработки без всего этого стафа не будет работать.

Автор: Domestic Cat 17.7.2005, 18:15
Цитата
Visual Studio .NET is written in COM

Источник
http://www.codeproject.com/dotnet/SMRefactorAddinArticle.asp

Автор: Void 17.7.2005, 19:12
Mayk
Страшно дивлюсь, где ты увидел тормоза VS 2003 по сравнению с Билдером. 6-й билдер у меня грузится раза в четыре дольше, и в работе тормозит страшно. К VS в плане быстродействия вообще никаких нареканий. (Cel-1400/512 MB - даже не low-end по нынешним временам). А за ее удобство и нормальный компилятор я готов простить и чуть меньшую, чем у VC6, скорость работы.

Автор: Mayk 17.7.2005, 19:36
Цитата(Void @ 17.7.2005, 20:12)
512 MB

У меня 384. Билдер грузится быстрее. Хотя они все тормоза.

Автор: simanyay 17.7.2005, 19:53
1024. Builder не грузил, но студия грузится максимум за 3 секунды. Eclipse 3.1 - секунд 10 (и то из-за медленного винта, поскольку обновляет базу javadoc'ов)

Автор: Kagor 17.7.2005, 21:04
512Mb, разницы особо не заметил.

P.S. Правда, после сдачи последний лабы, снес Билдер к едрене фене.

Автор: CosmoMan 19.7.2005, 18:24
У меня Celeron 1999MGg 768 MB RAM
Странно, но Билдер (Думаю имеется в виду Borland C++Builder 6) загружается немного быстрее, чем
Borland Delphi 7. А MSVC вообще в 3 раза быстрее.

(отредактировано модератором bagira)

Автор: Петрович 19.7.2005, 18:58
Не знаю как у билдера. Но у Delphi скорость загрузки ОЧЕНЬ сильно зависит от числа включенных пакетов. Если не включать не нужные в проекте пакеты то крузится очень быстро.

Автор: RA 19.7.2005, 19:52
Цитата(CosmoMan @ 19.7.2005, 18:24)
Странно, но Билдер (Думаю имеется в виду Borland C++Builder 6) загружается немного быстрее, чем
Borland Delphi 7


На этом приимущесва билдера заканчиваются. smile



Цитата


Borland несёт убытки и меняет исполнительного директора
Компания Borland Software объявила, что убытки во втором квартале 2005 финансового года будут больше запланированных. Предположительно, прибыль компании составит 65-67 миллионов долларов (потери 24-26 центов на акцию). Ранее прогнозировалась прибыль в размере 70-73 миллионов долларов и потери в размере 19-21 цента на акцию. Второй квартал у Borland заканчивается второго августа.
 
Также было объявлено, что Дейл Фуллер, президент и исполнительный директор Borland, оставляет свой пост. Его временно замещает Скотт Арнольд, до настоящего момента занимавший пост исполнительного вице-президента и директора по операциям. Фуллер, впрочем, останется членом совета директоров. Причиной проблем, как утверждается, стали неблагоприятные условия для расходов компании в Европе. Курс акций Borland на данный момент составляет 6 долларов 70 центов.




Добавлено @ 19:55
Скупайте акции борланда. smile

Автор: batigoal 19.7.2005, 22:23
По этому вопросу stron может ситуацию изнутри осветить smile

Автор: RA 19.7.2005, 22:53
Lamer George А он в борланде ?

Автор: S.A.P. 19.7.2005, 23:09
Цитата(RAdmin @ 19.7.2005, 22:53)
Lamer George А он в борланде ?
да, на сколько мне известно.

Автор: CosmoMan 20.7.2005, 08:16
Цитата
На этом приимущесва билдера заканчиваются.

Согласен

Цитата
Но у Delphi скорость загрузки ОЧЕНЬ сильно зависит от числа включенных пакетов.

Не знал. Обязательно попробую.

Автор: batigoal 20.7.2005, 09:35
Perchilla
Да. В российском.

Автор: Sniper 20.7.2005, 14:47
Я СИ тоже НЕ люблю, но по долгу службы приходится писать (VC++ .NET 2002)
не люблю я его в первую очередь из-за идиотского синтаксиса, который после 8 лет Delphi кажется действительно идиотским... также не люблю его за его *.h файлы

Каардинально отличается от паскаля СИ тем, что в нем есть шаблоны, которые все хвалят, но ниодна нормальная компания (главное словосочетание здесь ниодна нормальная, а не компания =) их не применяет... ещё есть STL.. но так как в Pascal шаблонов нет, то и STL нет по определению...

Автор: batigoal 20.7.2005, 14:49
Цитата(Sniper @ 20.7.2005, 15:47)
Каардинально отличается от паскаля СИ тем, что в нем есть шаблоны, которые все хвалят, но ниодна нормальная компания (главное словосочетание здесь ниодна нормальная, а не компания =) их не применяет... ещё есть STL.. но так как в Pascal шаблонов нет, то и STL нет по определению...

После таких фраз принято добавлять ИМХО. Потому что это имхо чистой воды.

Автор: Sniper 20.7.2005, 15:19
>>После таких фраз принято добавлять ИМХО. Потому что это имхо чистой воды.
Наверное вы не видели исходников HL2.. а вот я видел (только видел их у меня нет)
Но я туту же обратил внимание, что не используется ни boost ни stl, ни ещё чего лишнего...
размеется Q1,2,3 были написаны также без применения вышеозначенных библиотек.
Так что это никакое не имхо...

Цитата(Lamer @ 20.7.2005, 11:49)
есть STL.. но так как в Pascal шаблонов нет, то и STL нет по определению...

Это тоже не имхо, тут бесполезно спорить... факт

Цитата(Lamer @ 20.7.2005, 11:49)
Каардинально отличается от паскаля СИ тем, что в нем есть шаблоны, которые все хвалят

ИМХО есть только во здесь..

Автор: Mayk 20.7.2005, 15:55
Цитата(Sniper @ 20.7.2005, 16:19)
Q1,2,3

q1 и 2 не могли использовать stl/boost, так как были написаны на Си без плюсов(исходники ку1-2 можно скачать на ftp.idsoftware.com). Ку3 афаик тоже. В сдк-шке во-всяком случае только сишные файлы.

Автор: CosmoMan 20.7.2005, 16:21
Мне в C++ не нравится то, что необходимо постоянно отслеживать операции с указателями. Для того, чтобы объявить двумерный динамический массив в с++, надо написать:

int ***m = new int **[2];
for(int i=0;i<1;i++)
{
m[i] = new int *[1];
for(int j=0;j<1;j++)
{
m[i][j] = new int [1];
}
}
delete[]m;
А вот для любителей С:

a=(long ***)calloc(10,sizeof(long **));
for(int i=0;i<10;i++)
{
a[i]=(long ***)calloc(10,sizeof(long *));
for(int j=0;j<5;j++)
{
a[i][j]=(long *)calloc(5,sizeof(long ));
}
}

в Object Pascal:
var m :array of array of Integer; //мне так больше нравится
bagin
SetLength(m,10);
for i := 1 to 10 do SetLength(m[i],10);
SetLength(m,0); //освободили память
end;//тут и понимать ни чего не надо

Все! А потом работаеш как с обычным массивом! А не с указателями.

Автор: S.A.P. 20.7.2005, 16:26
CosmoMan зато у тебя будет приличная оптимизация, а если не устраивает такой "изврат", юзай контейнеры.

Автор: Петрович 20.7.2005, 20:05
Цитата(Perchilla @ 20.7.2005, 17:26)
CosmoMan зато у тебя будет приличная оптимизация, а если не устраивает такой "изврат", юзай контейнеры.

Дык в Delphi такое дает ОЧЕНЬ оптимизированный код.

Автор: S.A.P. 21.7.2005, 03:20
Цитата(CosmoMan @ 20.7.2005, 16:21)
int ***m = new int **[2];
for(int i=0;i<1;i++)
{
m[i] = new int *[1];
for(int j=0;j<1;j++)
{
m[i][j] = new int [1];
}
}
delete[]m;
А вот для любителей С:

a=(long ***)calloc(10,sizeof(long **));
for(int i=0;i<10;i++)
{
a[i]=(long ***)calloc(10,sizeof(long *));
for(int j=0;j<5;j++)
{
a[i][j]=(long *)calloc(5,sizeof(long ));
}
}


CosmoMan А я даже и не заметил сразу, вот и верь после этого. А ты зачем в C++ трехмерный массив сделал, когда по условию двумерный требуется? Да еще лишних строк понавтыкал smile

Код

int** array = new int*[M];
for (int a = 0; a<M; array[a++] = new int[N]){};

Ощути разницу.

Можно даже так
Код

for (int a = 0, int **array = new int*[M] ; a<M; array[a++] = new int[N]){}

сколько преимуществ в маленьком примере:
1. Операция следования
2. Объявление и инициализация переменных в програмном блоке
3. Инкрементирование
4. Результат операции присваивания
5. Циклы!!!

Хотя мне болше по душе
Код

std::vector<std::vector<int>> array;

smile

Автор: batigoal 21.7.2005, 09:06
Цитата
for (int a = 0, int **array = new int*[M] ; a<M; array[a++] = new int[N]){}


К вопросу о читабельности кода smile

Автор: Retro 21.7.2005, 09:26
Цитата(Lamer @ 21.7.2005, 09:06)
К вопросу о читабельности кода smile

А что? smile

Автор: batigoal 21.7.2005, 09:29
Цитата(Retro @ 21.7.2005, 10:26)
А что? smile

Да вот туговато как-то воспринимается. smile

Автор: Mayk 21.7.2005, 09:29
Цитата

for (int a = 0, int **array = new int*[M] ; a<M; array[a++] = new int[N]){}

Вот это не будет работать правильно, так как array определен лишь внутри тела цикла, которое весьма тривиально: {}

Автор: batigoal 21.7.2005, 09:32
Вот видите - уже труднообнаружимые ошибки smile

Автор: ManiaK 21.7.2005, 10:35
Lamer George Я понял! smile
Java - это как новая религия! Распространяется при зарождении быстро, причём тут же обрастает толпой воодушевлённых фанатиков, которые пойдут на всё лишь бы перетащить на свою сторону по-больше народу!
Не выйдет smile

Автор: batigoal 21.7.2005, 10:39
Цитата(ManiaK @ 21.7.2005, 11:35)
Не выйдет smile

Уже вышло smile

Автор: Mayk 21.7.2005, 10:40
Цитата(ManiaK @ 21.7.2005, 11:35)
Java - это как новая религия! Распространяется при зарождении быстро, причём тут же обрастает толпой воодушевлённых фанатиков, которые пойдут на всё лишь бы перетащить на свою сторону по-больше народу!

И пророк есть:
Цитата(GoodBoy @ 3.3.2005, 19:49)

О, великий Domestic Cat http://www.sign-forum.ru/images/smiles/mol.gif


Цитата(ManiaK @ 21.7.2005, 11:35)
Не выйдет smile

Ну не знаю. Я может к ним перейду - у них нет десятка библиотек для оконного интерфейса. Только пока не могу понять как в java прочитать строку с клавы. В сях просто: fgets. А в java к.з. Поэтому сижу на сях.

Автор: ManiaK 21.7.2005, 10:41
Цитата(Lamer @ 21.7.2005, 11:39)
Уже вышло

Где? Си++шников стало меньше - не спорю. Но ушли-то только те, кто особо ничего и не достиг в Си++. У нас остался надёжный контингент smile

Автор: batigoal 21.7.2005, 10:43
Цитата(Mayk @ 21.7.2005, 11:40)
Только пока не могу понять как в java прочитать строку с клавы. В сях просто: fgets. А в java к.з. Поэтому сижу на сях.

Если проблема только в этом - переходи smile

Цитата(ManiaK @ 21.7.2005, 11:41)
Си++шников стало меньше - не спорю. Но ушли-то только те, кто особо ничего и не достиг в Си++. У нас остался надёжный контингент smile

Ну дык косность мышления и все такое smile

Автор: ManiaK 21.7.2005, 10:44
Mayk ты не системщик, как я понял, - потому уйдёшь без вопросов smile
Всё, что не касается критичности в скорости и железа скоро на 99% захавают языки вроде Java. Я считаю это и логичным и правильным. А всё остальное... ну на Java драйвера не попишешь smile контроллеры с Java-машинами есть, но подходят они только там, где не считают каждую копейку - в ограниченный партиях.

Автор: Mayk 21.7.2005, 10:50
Цитата(ManiaK @ 21.7.2005, 11:44)
ну на Java драйвера не попишешь

Дрова пишут на плюсах? smile. АФАИК дрова в основном пишутся на сях, а это разные языки.

Автор: ManiaK 21.7.2005, 10:57
Цитата(Mayk @ 21.7.2005, 11:50)
АФАИК дрова в основном пишутся на сях, а это разные языки.

smile Не смеши! Си++ от Си немногим отличается (в плане скорости и возможностей). Си++ просто даёт возможность задействовать врожденноразвитую часть мозга - объектное мышление. Да, там есть достаточно много средств, которые иногда трудно, а иногда вообще невозможно использовать при писании прог для микросхемок. Но даже если этими средствами не пользоваться, Си++ всё равно значительно удобнее. То, что до сих пор Си++ для мелкосхем, поддерживающих Си, скорее исключение, чем правило - лишь банальная экономия денег. Действительно, зачем разрабатывать Си++ компилятор, если Си обойдётся во много раз дешевле? Однако принципиально я не вижу ограничений для использования этого языка.
P.S. Кстати, я когда настроение совпадает со свободным временем пишу компилятор Си для PIC-контроллеров с надеждой, что когда-нибудь доведу его хотя б до урезанного Си++ smile

Автор: Mayk 21.7.2005, 11:09
ManiaK
В Си нет тормознутых шаблонов, нет классов, нет stl, нет исключений, нет строгой проверки типов указателей(ненавижу (char*)malloc()) Вообщем нет того, чего в дровах и не нужно. В С++ эти понятия(особенно классы) являются основными.

Цитата(ManiaK @ 21.7.2005, 11:57)
P.S. Кстати, я когда настроение совпадает со свободным временем пишу компилятор Си для PIC-контроллеров с надеждой, что когда-нибудь доведу его хотя б до урезанного Си++ smile

Удачи smile

Автор: ManiaK 21.7.2005, 11:26
Mayk объясни, каким таким способом "чистые" классы (без шаблонов, без ....) хуже структур+набора функций (Си)? Не вижу тут ни капли проигрыша Си++ перед Си. Си++ тем и лучше, что он более обобщенный язык, на нём можно написать всё то, что напишешь на Си, только в более красивой форме.

Цитата(Mayk @ 21.7.2005, 12:09)
нет stl

Ты не представляешь себе жизнь в Си++ без STL?

Цитата(Mayk @ 21.7.2005, 12:09)
нет тормознутых шаблонов

Они, насколько знаю, не тормознутые, а немного увесистые - получится кода больше (и то не всегда). После компиляции все шаблоны становятся обычными классами.

Цитата(Mayk @ 21.7.2005, 12:09)
ненавижу (char*)malloc()

Это атавизм языка Си.

Цитата(Mayk @ 21.7.2005, 12:09)
Удачи

smile

Автор: S.A.P. 21.7.2005, 13:12
Цитата(Mayk @ 21.7.2005, 09:29)
Вот это не будет работать правильно, так как array определен лишь внутри тела цикла, которое весьма тривиально: {}


Дык а нафига, когда все что нужно сделать - это динамический массив smile . Выше ж пример есть smile .

Автор: CosmoMan 21.7.2005, 14:12
Цитата
Это атавизм языка Си.

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

Рудимент - человеческий признак, который является генетически унаследованым от животных, однако в фенотипе проявляется как рецесивный признак: "гусиная кожа", апендикс и т.д.
Как понять атавизм языка??? Или тогда может рудимент языка?

А на Паскале тоже ДРОВА писать мпожно...на встроенном ассемблере.
А что лутчше - выучить С++ или (Паскаль & ассемблер)? smile
smile

Автор: Петрович 21.7.2005, 14:33
Цитата(CosmoMan @ 21.7.2005, 15:12)
А что лутчше - выучить С++ или (Паскаль & ассемблер)?

Лучше выучить и то и другое.

Добавлено @ 14:43
Цитата(CosmoMan @ 21.7.2005, 15:12)
Как понять атавизм языка??? Или тогда может рудимент языка?

Например, в процессе развития языка, некоторые языковые конструкции оставляют для совместимости со старыми программами. Вот их-то обычно и называют аттавизмами. Пожалуй, рудимент более применим в данном случае. Хотя конечно нельзя в данном контексте понимать этот сленговый термин буквально.
Вообще то, в английском языке очень часто новые сущьности называют существующими уже словами с близким смыслом, или даже просто созвучными словами. Взять тотже термин "folder" - "папка". Если привести точное определение слова folder, то наверное тоже будет не совсем понятно какое оно имеет отношение к тому что им обозначают в компьютерном сленге.
Но, это уже область филологии а не программирования smile


Автор: ManiaK 21.7.2005, 18:43
Цитата(CosmoMan @ 21.7.2005, 15:12)
А на Паскале тоже ДРОВА писать мпожно...на встроенном ассемблере.

smile
Дык помимо этого надо ещё интерфейс для системы обеспечить. На паскале его обеспечишь? А покажите тогда мне хоть одну Pascal-ную операционку...

Автор: CosmoMan 21.7.2005, 19:06
Ну почему все, кого я не встречаю ставят этот тезис, что мол "ну линукс же написан на С++". Да, написан. А толку с этого. Кому она нужна.

Цитата
Дык помимо этого надо ещё интерфейс для системы обеспечить

Ты какой итерфейс имееш ввиду - если пользовательский, то С++ его
просто супер обеспечивает. Только на Паскале его можно написать в двое быстрее.

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

Автор: S.A.P. 21.7.2005, 19:52
Цитата(ManiaK @ 21.7.2005, 18:43)
А покажите тогда мне хоть одну Pascal-ную операционку...
щас покажут тебе такого зверя, да еще провозгласят лучшей операционкой smile .

Цитата(CosmoMan @ 21.7.2005, 19:06)
Ты какой итерфейс имееш ввиду - если пользовательский, то С++ его
просто супер обеспечивает. Только на Паскале его можно написать в двое быстрее.
покажи как на паскале интерфейсы пишутся. Turbo Vision чтоли? smile .

Автор: Kagor 21.7.2005, 21:14
Цитата(CosmoMan @ 21.7.2005, 20:06)
ну линукс же написан на С++"
Ни Си. smile

Автор: Петрович 21.7.2005, 21:48
Цитата(Perchilla @ 21.7.2005, 20:52)
Цитата (CosmoMan @ 21.7.2005, 19:06)
Ты какой итерфейс имееш ввиду - если пользовательский, то С++ его
просто супер обеспечивает. Только на Паскале его можно написать в двое быстрее.

покажи как на паскале интерфейсы пишутся. Turbo Vision чтоли?  .

Ну уж совсем то придераться не надо. Наверняка человек имел ввиду Pascal-подобные языки, в том числе и Delphi.

Автор: Петрович 21.7.2005, 22:04
Кстати, об операционных системах. Лично знаком с двумя написанными на Pascal-подобных языках. Одна специализированная сетевая OS для наземного коммандно-измерительного комплекса. Сам лично учавствовал в ее создани еще в конце 80-х. За долго до появления Linux'а, как впротчем и C++ smile.
Вторая, создавалась на языках MODULA-2 и Oberon, для платформы Кронос. К сожалению, платформа Кронос не смогла получить широкого распространения. Соответственно, данная ОС тоже умерла вместе с ней.

Так вот. То что для Linux'а нельзя написать драйвер на каком-то из языков, совсем не означает что этот язык не пригоден для создания операционных систем.

А то можно договориться до странных вещей. Вот например могу смело утверждать что язык C++ это фигня, поскольку на нем нельзя написать программу для моего Nokia 6610. А вот JAVA это круто - на нем можно smile

Автор: simanyay 21.7.2005, 22:09
Такое ощущение, что 99% заданий для программиста это написать операционную систему smile

Автор: RA 21.7.2005, 22:20
Цитата(simanyay @ 21.7.2005, 22:09)
Такое ощущение, что 99% заданий для программиста это написать операционную систему

ага и программ для мобилы. smile
Добавлено @ 22:21

Цитата
Сам лично учавствовал в ее создани еще в конце 80-х. За долго до появления Linux'а, как впротчем и C++


Петрович ну ты ветеран smile

Автор: simanyay 21.7.2005, 22:36
RAdmin, а сл-но все задачи программиста сводятся к написанию операционной системы для мобилы smile

Автор: Void 21.7.2005, 22:46
Ой, сколько тут без меня понаписали... smile

Отсюда и далее ИМХО.
Цитата(Mayk @ 21.7.2005, 13:09)
В Си нет тормознутых шаблонов,

В каком месте они тормознутые? Разве макросы могут быть тормознутыми? Или ты имеешь в виду долгую компиляцию? Ну это скорее проблема современных компиляторов. К тому же простой шаблонный код (как в STL, например) компилируется очень быстро.
Цитата(Mayk @ 21.7.2005, 13:09)
нет строгой проверки типов указателей

Я фигею, честное слово smile Народ со страшной силой борется за строгую типизацию, недостаточно строгая типизация едва ли не главный аргумент противников C++, а тут и такая не нравится... smile (Кстати, а нафига вообще в C++ malloc?)

Нет, если использовать язык как "высокоуровневый ассемблер", то может быть так оно и есть... Но тогда при чем тут вообще C++?

Цитата(CosmoMan @ 21.7.2005, 21:06)
А вообще если честно, то меня С++ не привлекает только чисто из-за его сложности. Синтаксис в полне нормальный, но его изучить - это просто титаническая задача. Я пытался, синтаксис я знаю, но не могу понять многоие операции в С++, а также очень продвинутые вложенные конструкции, которыми изобилуют многие конструкции исходников того же ядра Linux.

Это только с непривычки. После пары месяцев практики любой реальный код (демки вроде того куплетиста, что ты приводил - это нереальный код smile ) на Си (а ядро Линукса - это Си, а не Си++) разбирается с налету. Рядовой Си++ код - тоже. Настоящее веселье начинается в вещах а-ля mpl или spirit, но это уже издержки попыток приспособить язык к тому, для чего он изначально не предназначен. Да и нет как правило необходимости городить такое в собственном коде.

В общем, C++ был, есть и будет есть. Причины: 1) гигабайты работающего промышленного кода на C++, который надо будет поддерживать еще очень долго; 2) задачи, где необходима бескомпромиссная производительность - отмазки в виде аппаратных реализаций VM пока не катят.
А учить лучше всего C#/Java (как основные промышленые языки на сегодняшний и, наверное, завтрашний день), C++ (как средство вправления мозгов, утомленных рантаймом) и какой-нибудь функциональный и/или логический язык (как средство вправления мозгов в сторону повышения абстракции).
Dixi smile

Автор: S.A.P. 21.7.2005, 22:50
Цитата(Void @ 21.7.2005, 22:46)
Кстати, а нафига вообще в C++ malloc?
в винде new тоже не надо smile . Если не использовать всякие приблуды сишного рантайма, программа будет легкая как пух smile .

Автор: RA 21.7.2005, 22:57
Мда, прочитанные критерии выбора языка вызывають лоль, симпатизирыю только одному критерию (УДОБСТВО).

А так к общему числу приимущественных языков хочу добавить один из лутших в мире, и имя ему QBasic smile !!!


Спросите почему? Да потому что это один из самых безобидных языков программирования (для изготовления мал-варе не годится)


Автор: Void 21.7.2005, 22:58
Цитата(Perchilla @ 22.7.2005, 00:50)
в винде new тоже не надо smile . Если не использовать всякие приблуды сишного рантайма, программа будет легкая как пух smile

Ну и кого сейчас интересует, сколько будет весить программа, 100 или 20 Кб? Разве что вирус писать smile

Автор: ManiaK 21.7.2005, 23:49
Perchilla на счёт Паскаля/Дельфи погорячился. Я его, конечно, не люблю (Майк тут уже писал за что его Сишники не любят), но достоинств его как сильного языка не отрицаю.

Я б хотел вернуться к того с чего начали, мы ж не во флейме smile

Начали мы с этого:
Цитата
Почему все любят С++?


Закончили как обычно:
Цитата(CosmoMan @ 21.7.2005, 20:06)
Только на Паскале его можно написать в двое быстрее.


1. Не спорю, написать операционку на Паскале можно. Но ответьте на вопрос: почему таковых нет в массовом употреблении в наше время, а не в каких-то там 80-х?
2. Главное достоинство Си++ - его потрясающая способность подстраиваться под задачи.
Цитата
Си++ - это скорее не язык программирования, а набор инструментов для создания ваших собственных языков" © Д. Элджер

То, что до сих пор организация интерфейса пользователя в Си++ - задача более сложная, чем в языках вроде Си#, Java (не говоря уже о Дельфи) - указывает только на одно: не написано ещё удобных библиотек к нему. Много раз уже повторял тем же Явленцам: к указателям никто особой любви не питает даже среди Си++шников, но Си++ даёт возможность подумать над ними один раз, а дальше пользоваться кодом, в котором вы даже не будете подозревать, что пользуетесь указателем. Ява не даёт такой свободы. Он говорит: у меня есть набор инструментов, на основе них могёшь делать, что хотишь. А больше - ни-ни! Простите, а на чём написаны эти базовые инструменты?..

Автор: bel_nikita 22.7.2005, 00:20
Народ, а Delphi стандартизирован кем-либо или это только детище Borland? smile И если умрет Borland, то умрет и Delphi.

З.Ы.: А вот, С/С++ - стандартизирован smile

Автор: S.A.P. 22.7.2005, 00:25
bel_nikitaВпрочем Жаба без Сана тоже мало куда продвинется smile .

Автор: bel_nikita 22.7.2005, 00:29
Perchilla
Цитата
Впрочем Жаба без Сана тоже мало куда продвинется
Возможно и так smile
Но вопрос в том, что: Delphi стандартизирован? smile

Автор: Mayk 22.7.2005, 04:59
Цитата(ManiaK @ 21.7.2005, 12:26)
Mayk объясни, каким таким способом "чистые" классы (без шаблонов, без ....) хуже структур+набора функций (Си)? Не вижу тут ни капли проигрыша Си++ перед Си. Си++ тем и лучше, что он более обобщенный язык, на нём можно написать всё то, что напишешь на Си, только в более красивой форме.

Давай разберём по пунктам.
1) Инкапсуляция. Дрова и так инкапсулированы сами в себе. Они довольно самодостаточны, чтобы жить.
2) Наследование. И от чего наследоваться драйверу? Разве что от абстрактного класса. А чему наследоваться от драйвера?? Сложно придумать.
3) Полиморфизм. Ну дрова вообще-то просто имплементируют базовый объект.Они ничего по сути не изменяют, они просто делают.
Ну и к чему всё это?
Цитата(ManiaK @ 21.7.2005, 12:26)
Ты не представляешь себе жизнь в Си++ без STL?

Я себе даже Си без qsort/hsearch/printf представляю. Только зачем такое безобразие? Если есть библиотека - то её надо бы использовать.
Цитата(ManiaK @ 21.7.2005, 12:26)
Они, насколько знаю, не тормознутые, а немного увесистые - получится кода больше (и то не всегда). После компиляции все шаблоны становятся обычными классами.

"Немного увесистые"?! Время компиляции увеличивается в разы!

Автор: simanyay 22.7.2005, 07:47
По поводу Java: без Sun Java проживёт прекрасно. В отличие от всяких Delphi за Java стоят такие гиганты, как IBM, BEA, Oracle, etc., которые просто напросто возьмут сий замечательный язык под своё крыло, в случае чего. Более того скажу, что IBM только этого и ждёт, ИМХО smile
Так что господа, выбор очевиден: Java.

Автор: ManiaK 22.7.2005, 08:39
Цитата(Mayk @ 22.7.2005, 05:59)
Давай разберём по пунктам.

Давай smile
Цитата(Mayk @ 22.7.2005, 05:59)
1) Инкапсуляция. Дрова и так инкапсулированы сами в себе. Они довольно самодостаточны, чтобы жить.

Первое. Не очень понял, что ты этим хотел сказать. С дровами надо как-то общаться, чтобы управлять устройствами. Один из вариантов - драйвера как Slave, ядро оськи - как Master.
Второе и главное! Не цепляйся к дровам - ими область применимости Си++ не заканчивается. Есть ещё одна огромнейшая сфера - встроенные системы...
Цитата(Mayk @ 22.7.2005, 05:59)
2) Наследование. И от чего наследоваться драйверу? Разве что от абстрактного класса. А чему наследоваться от драйвера?? Сложно придумать.

Вот пример:
Код

class SuperDrv// Базовый класс для драйверов
{
public:
    SuperDrv() : m_DrvID(NULL) {  }
    
    // Операции даны от балды
    vitrual int PutCh(char Ch) { return 0; }
    virtual char GetCh(char Ch) { return ' '; }
    virtual int PutStr(char* pStr) { return 0; }

    char* m_DrvID;
};

// А теперь то, шо делают производители железок: пишут свой драйвер
class GF440MXDrv : public SuperDrv// Типа драйвер для GeForce440MX
{
    GF440MXDrv() { m_DrvID = new char[10]; memcpy(m_DrvID, "GF 440 MX", 10); }

    // А здесь уже реализуем как надо, скорей всего с асм вставками
    vitrual int PutCh(char Ch) { /* ...Жуткий код.... */ }
    virtual char GetCh(char Ch) { /* ...Жуткий код.... */ }
    virtual int PutStr(char* pStr) { /* ...Жуткий код.... */ }
};

// Где-то в ядре
QArray Drivers;

// .......

Drivers[0].PutStr("Hello, World!");

Опять же, одиними драйверами ограничиваться глупо.
Цитата(Mayk @ 22.7.2005, 05:59)
3) Полиморфизм. Ну дрова вообще-то просто имплементируют базовый объект.Они ничего по сути не изменяют, они просто делают.

Думаю и так понятно. Где надо - используй, где не надо - не используй. Свобода выбора!..
Цитата(Mayk @ 22.7.2005, 05:59)
Время компиляции увеличивается в разы!

И что? Зато летают они не медленнее обычных классов и даже обычных функций/структур из Си. А для компиляции можно и машину лучше поставить и компилятор по-лучше взять. Главное, чтоб у клиента летало.

Автор: Mayk 22.7.2005, 10:39
Цитата(ManiaK @ 22.7.2005, 09:39)
Первое. Не очень понял, что ты этим хотел сказать. С дровами надо как-то общаться, чтобы управлять устройствами. Один из вариантов - драйвера как Slave, ядро оськи - как Master.

То, что инкапсуляция рулит в большем объеме. В малом - нет. get/set'ы не люблю.
Цитата(ManiaK @ 22.7.2005, 09:39)
Есть ещё одна огромнейшая сфера - встроенные системы..

Ну не знаю. Видел только сишные. Да и то мельком.


Цитата(ManiaK @ 22.7.2005, 09:39)
Вот пример:

Во-первых я не вижу что-бы что-то наследовалось от GF440MXDrv.
Во-вторых запись с callback'ами не намного длиннее, даже короче.

Цитата(ManiaK @ 22.7.2005, 09:39)
Время компиляции увеличивается в разы!
И что?

То, что в один и тот же участок времени ты меньшее число раз успеешь собрать и запустить и, значит, протестировать. Значит, меньшее число отлавленных багов в единицу времени.


Автор: fevdokimov 22.7.2005, 10:55
Цитата(Vadim999 @ 12.7.2005, 00:13)
А чё на Delphi можно OSь написать?  smile
smile  smile  smile

[quote]
на Delphi не уверен, но на OBERON уже написана smile

Автор: CosmoMan 22.7.2005, 10:57
И пришли таким образом к выводу, что С++ (пусть Си) - язык ниского уровня, годный для написания драйверов, встроенных сисем, ядер операционок.
Пользовательский интерфейс пусть пишется на Delphi, Javа и С#.

C++ для одних целей, ObjectPascal & Java для других.

Cогласен, что на Pascal & Asm сложнее написать оперционку, чем на Си

Автор: DENNN 22.7.2005, 11:23
Цитата(CosmoMan @ 22.7.2005, 10:57)
И пришли таким образом к выводу, что С++ (пусть Си) - язык ниского уровня, годный для написания драйверов, встроенных сисем, ядер операционок.

Не надо обобщать smile Это только ты пришел к такому мнению, множества же других людей с большим успехом используют плюсы и для создания интерфейсов, и для математических алгоритмов, и для 3Dграфики, и для CGI-приложений, и для ..., да собственно зачем я объясняю?

Автор: Петрович 22.7.2005, 12:12
Цитата(ManiaK @ 22.7.2005, 00:49)
1. Не спорю, написать операционку на Паскале можно. Но ответьте на вопрос: почему таковых нет в массовом употреблении в наше время, а не в каких-то там 80-х?


Цитата(ManiaK @ 22.7.2005, 00:49)
То, что до сих пор организация интерфейса пользователя в Си++ - задача более сложная, чем в языках вроде Си#, Java (не говоря уже о Дельфи) - указывает только на одно: не написано ещё удобных библиотек к нему.


smile Для полноты, не хватает вопроса "А почему за все время существования C++ не написано еще удобных библиотек к нему?" smile
На самом деле, это лишь свидетельствует об наиболее вероятной области применения тех или иных языков.
А вообще то, я не верю что "не написано ещё удобных библиотек к нему". Просто наверное их слишком много, и среди них нет абсолютного лидера. Да и область распространения C++ куда шире (в смысле платформ). Что соответственно не позволяет иметь универсальную библиотеку на все случаи жизни.
С Delphi проще. Тут только для Windows и Linux.

Цитата(bel_nikita @ 22.7.2005, 01:20)
Народ, а Delphi стандартизирован кем-либо или это только детище Borland?  И если умрет Borland, то умрет и Delphi.

Ну... Это уж слишком. Во первых, Borland жил, Borland жив, Borland будет жить. Шутка smile.
А если серьезно, то смерть Borlan'да совершенно не означает смерть Delphi. Как ни странно, эфект может даже быть обратным.
В конце концов, кто вспомнит авторов и поставщиков компиляторов для Cobol'а? А вот язык до сих пор существует. Хотя, молодежь о таком и не слыхивала. И слава богу smile.

Чтоже касается стандартизации, для Delphi это не имеет существенного значения поскольку на сегодняшний день, компиляторы под него поставляет лишь одна группа разработчиков (Borland). Т.е. его можно считать стандартизированным - см.описание языка.
Вопрос стандартизации очень существенен для C и C++. Это для них существуют куча постащиков, и поэтому крайне важно добиться их совместимости на уровне входного языка.


Цитата(ManiaK @ 22.7.2005, 00:49)
Начали мы с этого:

Цитата
Почему все любят С++?

Да, да. smile

Лично я считаю что C++ своей популярности обязан прежде огромным распространением C на момент появления C++. Ведь именно от него он и родился. А если даже быть более точным, то C++, это язык C, который расширен в соответствии с велением времени (ООП).
А вот почему C популярен был (и есть)?
Думаю, что прояснить это, поможет небольшой экскурс в историю. Ведь кому как не мне, старому седому аксакалу, не порассказывать байки о том как я в сибири яй..... Ой забылся smile
Что ж, да простят меня модераторы, Начнем.
В 70-е годы, в эру "больших" (IBM и т.п.) и особенно "средних" (DEC PDP, и т.п.) машин, большинство высших учебных заведений было оборудовано именно ими. Особенно в США. Более того, уже тогда они объединялись в глобальные сети (тогда это еще не называлось Internet). Так вот, именно в те времена, для удобного использования имеющихся ресурсов и была создана ОС UNIX. А вот для ее создания, как раз и были созданы языки, сначала B, а затем и сам C. Студенты вообще не любят стандартных решений smile. Более того, поскольку разработка изначально велась на машинах DEC PDP-11, производительность которых тогда была невелика, разработчики не могли себе позволить построения автоматически-оптимизирующих компиляторов. Они пошли другим путем. Они отдали оптимизацию программ в руки программисту. Т.е., они просто создали "высокоуровневый ассемблер" - дешево и сердито. Именно поэтому, архитектура DEC PDP-11 наложила неизгладимый отпечаток на язык C. Это и используемая восьмеричная система счисления, и операторы ++ --, базовые типы данных, и еще много чего.
ОС UNIX получилась весьма удачной. Именно по этому она и живет по сей день, и даже реинкарнировалась в виде Linux'а.
Но, вернемся к основной теме лекции smile. Так вот, ОС UNIX получилась весьма удачной. Поэтому, в максимально короткие сроки, она стала стандартом для компьютерных систем университетов и других учебных заведений. Да и альтернативы ей, как сетевой ОС, в то время практически не было.
Естественно, поскольку сама она была написана на C, то именно этот язык и стал основным при разработке программ под эту ОС. Как следствие, преподавание программирования и смежных дисциплин, тоже стало вестись на примерах языка C. А открытые исходные тексты UNIX'а позволяли любому программеру еще и повышать свой уровень.
Ну и какому языку программирования будет отдавать предпочтение программист закончивший такое учебное заведение? А какому языку программирования будет обучать преподаватель закончивший такое учебное заведение? .... Ответ очевиден. (это Вам на домашнее заданиеsmile)

Ну а в завершение лекции, немножко о последующих событиях. Некоторые наверное уже их застали и сами. smile
Позже, появились "персоналки", причем тогда еще даже не "завязанные" в сеть. Их пользователями становились не профессианалы-компьютерщики (какому профессионалу интересен программируемый калькулятор smile), а простые менеджеры, писатели, продавцы и пр. Для них, ОС UNIX была сложна и непонятна, да и не нужна. Не говоря о том, что к тому времени UNIX стала в некотором роде "монстром" которого было невозможно "затолкать" в IBM-PC (напомню: 64Kb RAM, No HDD, 360Kb FDD). Поэтому, и появились сначала ОС CP/M, а затем MS-DOS - "нечто", являющееся жалкой попыткой сделать выжимку (пятого отжима) из идей UNIX. Там, по началу, основным языком был ассемблер.
Но, поскольку кагорта потребителей быстро росла, и среди них стали появляться доморощенные программисты, им нужен был язык. Ну не на птичем-же языке ассемблера будут писать домохозяйки. Да и C для них был неоправданно сложен. Так и родился всеми любимый Basic smile. Позже, когда уже Microsoft стала прикладывать к нему руки, он стал преображаться в QBasic, Word Basic, Visual Basic, и прочие.
Время не стояло на месте, персоналки становились мощнее, а потребности больше. Но как и прежде, UNIX не мог предложить дружественного интерфейса для рядового пользователя. Вот так и родился Windows. Но, это уже другая история smile. Для нас важно только то, что к этому времени, рынком ПО для ПК заинтересовались профессионалы. Ну и как следствие, на ПК пришел C, со всеми вытекающими.
Причем, еще до прихода C на персоналки, было создано великое множество его реализация и расширений. В общем бардак. Благо во время одумались, и таки застандартизировали его. Правда, как всегда было много противников большинство из которых справидливо считали что стандарт это смерть. Хорошо что они ошибались.
Теперь, при наличии мощных, многопроходных оптимизирующих компиляторов, все богатство низкоуровневых возможностей языка C принципе без надобности. Но, стандарт есть стандарт. Да и привычки чего стоят.
Вот кажется и вся история появления, и распространения языка C, естественно в кратком изложении smile.

Ну и на последок отмечу что в США, самой компьтиризированной стране, до недавнего времени, наиболее распространенными языками программирования были именно C, C++ и Basic-подобные языки. А вот Delphi, насколько я знаю, распространен там очень слабо. Почему, теперь я думаю Вам и самим это ясно.

В последнее же время, на арену борьбы за души программистов, стало выходить множество других языков, а порою даже не языков а вообще не понятно чего smile. Это, по моему мнению, является следствием того, что традиционные языки уже с трудом удовлетворяют все возрастающим потребности пользователей, и все возрастающим возможностям современной техники. Естественно, опять активно ищутся компромиссы между прототой языка, его функцианальной мощью, способностью адаптироваться к предметной среде, мультиплатформенностью, и прочее, прочее прочее... Так рождаются языки .java, C# и др. Но, время, лучший судья. Некоторые новые языки ожидает долгая и счастливая жизнь (типа как у C), других же, легкая и быстрая смерть в почти еще зародышевом состоянии (типа как было с языком ADA). Поживем (надеюсь), увидим.

P.S. В своей лекции я специально не затронул историю Delphi - тема то не о нем smile.
Добавлено @ 12:17
Цитата(fevdokimov @ 22.7.2005, 11:55)
А чё на Delphi можно OSь написать? 

Я уже писал выше про ось на Pascal-е.
Что же касается Delphi - не вижу препятствий кроме двух:
1. А зачем?
2. Кто это будет оплачивать?

Добавлено @ 12:21
А еще, про то что можно а что нельзя, хотя и не совсем в тему.
А знаете ли Вы, что компиляторы большинства языков, особенно серьезных, пишутся именно на этих-же языках, методом раскрутки? Это позволяет сразу же и проводить их тестирование и отладку.

Так, практически изначально компиляторы C писались на C, Pascal'я на Pascal'е и т.п.

Автор: ManiaK 22.7.2005, 14:07
Петрович - ЦАРЬ!..

Цитата
Так, практически изначально компиляторы C писались на C, Pascal'я на Pascal'е и т.п.

Неужели C# трансляторы написаны на C#? smile smile

Автор: Петрович 22.7.2005, 14:22
Цитата(ManiaK @ 22.7.2005, 15:07)
Неужели C# трансляторы написаны на C#? 


Цитата
компиляторы большинства языков

т.е. не всех. Что касается C#, то про него не скажу, не знаю.

Автор: ManiaK 22.7.2005, 14:29
Хотя чем чёрт не шутит, можт лет через пять создадут такой комп, который будет интерпретаторы щёлкать как орехи smile Пока что слишком уж тормозно даже для среднего уровня сложности приложений, не говоря уже об компиляторах...

Автор: Poseidon 22.7.2005, 15:08
Цитата
А знаете ли Вы, что компиляторы большинства языков, особенно серьезных, пишутся именно на этих-же языках, методом раскрутки?

smile
Пусть не в тему, простите уж. Но вот всегда хотелось узнать, это как? Вопрос по моему сродни такому: "Что появилось ранше: яйцо или курица?". Как можно написать компилятор на том языке, для каторого пишется компилятор? Чем тогда этот компилятор компилировался?

Автор: ManiaK 22.7.2005, 15:40
Цитата(Poseidon @ 22.7.2005, 16:08)
Как можно написать компилятор на том языке, для каторого пишется компилятор? Чем тогда этот компилятор компилировался?


Цитата
А знаете ли Вы, что компиляторы большинства языков, особенно серьезных, пишутся именно на этих-же языках, методом раскрутки?


Мне так кажется это примерно так: написали на стороннем языке наипростейшую версию копилятора языка нового. А потом по-нарастающей, всё сложней и сложней до полной версии.

Автор: Петрович 22.7.2005, 22:29
Цитата(ManiaK @ 22.7.2005, 16:40)
Мне так кажется это примерно так: написали на стороннем языке наипростейшую версию копилятора языка нового. А потом по-нарастающей, всё сложней и сложней до полной версии.

Да да. Именно так. Именно поэтому такой способ и называется "метод раскрутки".

Автор: TP@MB@Y 23.7.2005, 10:47
Хех. Сегдня всю ночь не мог заснуть и в итоге решил поближе познакомиться с С++ smile
Для этого буду пытаться написать пошаговую игрушку типа Дисайпелс(со смесью хирос).

Так вот, хотел поинтересоваться: у меня тут на выбор Visual C++6, Visual C++6.5 Update или мне нужно просто С++? Чем они отличаются?

Если я собираюсь писать игру, то мне нужно юзать ОпенЖеЛе или ДиректорИкс, т.е. мне достаточно будет подключить их библиотеки и визуальные классы из Visual C++ мне не понадобятся?

Автор: Poseidon 23.7.2005, 15:46
TP@MB@Y, думаю этот вопрос лучше было бы задать в специализированном разделе, там больше сишников крутится, они тебе подскажут и покажут smile

Автор: batigoal 23.7.2005, 18:29
Цитата(TP @ 23.7.2005, 11:47)
у меня тут на выбор Visual C++6, Visual C++6.5 Update или мне нужно просто С++? Чем они отличаются?

С++ - это язык. Он один. А у тебя - среды разработки. На тот момент, когда я еще писал на Си, последней была Visual Studio 2003.

Автор: TP@MB@Y 24.7.2005, 18:25
Poseidon
Догадываюсь... просто хотелось "не отходя от кассы" smile


Lamer George
Ну я про среду и спрашиваю. С++ он и в африке С++ smile

Автор: chipset 29.7.2005, 10:39
Цитата(CosmoMan @ 22.7.2005, 00:57)
Пользовательский интерфейс пусть пишется на Delphi, Javа и С#.

Ну-ну. А потом ждать полтора часа пока выползет аутокомплит в Eclipse. Нафиг такое щастя.
Цитата(TP @ 23.7.2005, 00:47)

Если я собираюсь писать игру, то мне нужно юзать ОпенЖеЛе или ДиректорИкс, т.е. мне достаточно будет подключить их библиотеки и визуальные классы из Visual C++ мне не понадобятся?

Да.
Цитата(TP @ 23.7.2005, 00:47)

Так вот, хотел поинтересоваться: у меня тут на выбор Visual C++6, Visual C++6.5 Update или мне нужно просто С++? Чем они отличаются?

Если уже неплохо знаешь C++ - используй 2003. Если только учишь: FAR+VC++Toolkit.

Автор: chipset 29.7.2005, 10:52
Цитата(Void @ 21.7.2005, 12:46)
(Mayk @ 21.7.2005, 13:09)
В Си нет тормознутых шаблонов,

Ты проводил измерения?
Цитата(Void @ 21.7.2005, 12:46)
Разве макросы могут быть тормознутыми?

Ну там не совсем макросы.
Цитата(Mayk @ 21.7.2005, 18:59)
1) Инкапсуляция. Дрова и так инкапсулированы сами в себе. Они довольно самодостаточны, чтобы жить.

Цитата(Mayk @ 21.7.2005, 18:59)
ь.
2) Наследование. И от чего наследоваться драйверу? Разве что от абстрактного класса. А чему наследоваться от драйвера?? Сложно придумать.

Цитата(Mayk @ 21.7.2005, 18:59)

3) Полиморфизм. Ну дрова вообще-то просто имплементируют базовый объект.Они ничего по сути не изменяют, они просто делают.

Ты о чём? smile Ты сейчас о примении парадигмы ООП к ЦЕЛОМУ ПРИЛОЖЕНИЮ, а мы о использовании её в процессе написания КОДА ЛОГИКИ. Твои аргументы не катят.
Цитата(Mayk @ 21.7.2005, 18:59)
Если есть библиотека - то её надо бы использовать.

Надо использовать то что удобно.
Цитата(simanyay @ 21.7.2005, 21:47)
Так что господа, выбор очевиден: Java.

Ну-ну.
Добавлено @ 10:54
Цитата(CosmoMan @ 22.7.2005, 00:57)
И пришли таким образом к выводу, что С++ (пусть Си) - язык ниского уровня, годный для написания драйверов, встроенных сисем, ядер операционок.

Это зависит от прямоты рук программиста и нужд заказчика.

Автор: Domestic Cat 29.7.2005, 18:17
Цитата(chipset @ 29.7.2005, 01:39)
Ну-ну. А потом ждать полтора часа пока выползет аутокомплит в Eclipse. Нафиг такое щастя.

smile У тебя 386 что ль?

Автор: Void 29.7.2005, 19:13
Цитата(chipset @ 29.7.2005, 12:52)
Ты проводил измерения?

Можно я за Mayk отвечу? smile Выяснилось, что речь идет о скорости компиляции, а с этим у сложных шаблонных конструкций туго. К тому же, без явного инстанциирования или export templates нет раздельной компиляции. Увы... Хотя преимуществ шаблонов это нисколько не умаляет smile
Цитата(chipset @ 29.7.2005, 12:52)
Ну там не совсем макросы.

С т.з. кодогенератора - чисто текстовая подстановка (вот тут, отвечая, я имел в виду быстродействие скомпилированной программы).

Автор: chipset 29.7.2005, 22:26
Цитата(Domestic @ 29.7.2005, 08:17)
smile У тебя 386 что ль?

Athlon 1800+/512 MB
А что, для комфортной работы Dual P4 и 2GB нужно? НАФИК ТАКОЕ, вижуал студия летает...

Автор: Domestic Cat 30.7.2005, 03:26
Ну не надо передергивать, разница во времени небольшая.

Автор: chipset 30.7.2005, 09:27
Цитата(Domestic @ 29.7.2005, 17:26)
разница во времени небольшая.

Между 386 и A1800?
Добавлено @ 09:27
Кстати на 386 программы на Java вообще не запустяться никоим разом.

Автор: Domestic Cat 30.7.2005, 09:37
Цитата(chipset @ 30.7.2005, 00:27)
Между 386 и A1800?
Добавлено @ 00:27
Кстати на 386 программы на Java вообще не запустяться никоим разом.

Ты че действительно не понял к чему был мой пост? smile

Автор: chipset 30.7.2005, 22:42
Цитата(Domestic @ 29.7.2005, 23:37)
Ты че действительно не понял к чему был мой пост? smile

Да вот такой я тупой, и телепатией ну никак ещё так хорошо не овладел...

Автор: Domestic Cat 30.7.2005, 23:55
Ух ох. Вот к чему си приводит... smile

Автор: ManiaK 31.7.2005, 19:27
Domestic Cat встану в защиту Чипса smile
У меня - P4 2000 (2400), 256 Мег оперативки. Первый пуск проги "Охотник" стал последним, т.к., несмотря на отличную идею и неплохую реализацию, за исключением одного момента, ... короче у меня постоянно возникала мысль: "А не перепутал ли я комп? Не сел ли я с перепою на свой старенький 166, что рядом стоит?". Ей богу, проги написанные на Си++ работают на 166 так же, как Java на моём "новом" (заметь: конфигурация последнего уже давно оставляет желать лучшего).

Автор: Void 31.7.2005, 19:38
ManiaK
Встану посередине smile Java-программы лично у меня только грузятся долго. А так скорость работы что Eclipse (почти не пользуюсь), что jEdit (не откажусь, будь хоть в три раза медленне), что того же Охотника (на винте лежит - зачем, непонятно) меня вполне устраивает.

Автор: Domestic Cat 31.7.2005, 22:16
Цитата(Void @ 31.7.2005, 10:38)
ManiaK
Встану посередине smile Java-программы лично у меня только грузятся долго. А так скорость работы что Eclipse (почти не пользуюсь), что jEdit (не откажусь, будь хоть в три раза медленне), что того же Охотника (на винте лежит - зачем, непонятно) меня вполне устраивает.

Аналогично, единственно различие что я замечаю - скорость запуска. Во всем остальном абсолютно не отличается от С++- и прочих программ.
Вот Azureus сейчас у меня запущен - если б он грузился на секунду быстрее, отличить от нативного приложения было бы оченьтрудно.

Автор: S.A.P. 31.7.2005, 22:30
Разрешите мне опять в пример привести эклипсу smile . Почему в ней так медленно работает автодополнение, это глюк разработчиков? smile .

Спасибо smile .

Автор: Domestic Cat 31.7.2005, 22:33
Цитата(Perchilla @ 31.7.2005, 13:30)
Разрешите мне опять в пример привести эклипсу smile . Почему в ней так медленно работает автодополнение, это глюк разработчиков? smile .

Спасибо smile .

Это к разработчикам пожалуйста. У меня виндозе, написанная на си, глючит как хзчто, но я ж не спрашиваю тут почему и из-за чего.

Автор: simanyay 1.8.2005, 08:29
Цитата(Perchilla @ 1.8.2005, 00:30)
Разрешите мне опять в пример привести эклипсу smile . Почему в ней так медленно работает автодополнение, это глюк разработчиков? smile .

Спасибо smile


Нет, это ваш глюк. Во первых надо покупать нормальные не no name компы, а во вторых надо чуть-чуть поменять строчечку в параметрах запуска, для вашей оперативки.
Eclipse 3.0.1 на рабочем Celeron 2Ghz, 512Mb RAM немного притормаживало, а Eclipse 3.1 вообще не тормозит.

Я фигею, сколько можно болтать об одном и том же, блин.

Ясен перец, что если вы купили материнку от дядюшки Ляо, то даже 512 метров оперативки будет работать на 30-40% медленее, чем должна.

Автор: ManiaK 1.8.2005, 08:45
simanyay ты шота несдержанный стал smile У меня не noname материнка. Gigabyte SR555 или что-то в этом роде (искать лень), никаких нареканий нет. Охотник тормозит - а какой там интерфейс/функционал?? Нет, конечно у кого-то и Quake 3 на втором пне не тормозит. Требования у каждого свои...

Автор: Kagor 1.8.2005, 09:03
Цитата(ManiaK @ 1.8.2005, 09:45)
Охотник тормозит - а какой там интерфейс/функционал??
Не знаю у меня, охотник не тормозит, на Athlon Xp 1500+, 512Mb. Eclipse 3.0.2 притормаживает только при старте. smile

Автор: ManiaK 1.8.2005, 09:14
Цитата(Kagor @ 1.8.2005, 10:03)
Не знаю у меня, охотник не тормозит, на Athlon Xp 1500+, 512Mb.

Вы, конечно, скажете, зачем же сидеть на таком старье, на что я вам отвечу: подождите Longhorn. Память всегда найдут, чем завалить, какого бы объёма она ни была.

Автор: DENNN 1.8.2005, 12:29
Цитата(ManiaK @ 1.8.2005, 09:14)
подождите Longhorn. Память всегда найдут, чем завалить, какого бы объёма она ни была.

Почему то я не секунды не сомневаюсь что ты прав smile

Автор: Петрович 1.8.2005, 12:53
Цитата(simanyay @ 1.8.2005, 09:29)
Во первых надо покупать нормальные не no name компы

smile.
Я так понимаю лейбак производителя влияет только на java? А не подскажете-ли как такого добиться в обычной, например Delphi программе?
smile

Автор: Void 1.8.2005, 16:20
Цитата(simanyay @ 1.8.2005, 10:29)
Ясен перец, что если вы купили материнку от дядюшки Ляо, то даже 512 метров оперативки будет работать на 30-40% медленее, чем должна.

Симаняй, не передергивай. Скорость работы памяти не зависит ТАК от чипсета (в случае интегрированного MC у А64 она от него вообще не зависит). К тому же ППС и латентность в нашем случае - дело десятое, тебя же не смущает, что на серверах используют DDR333 или даже 266, да еще и регистровую ECC?
Я не призываю покупать noname, просто аргументация не та.

Автор: chipset 1.8.2005, 16:25
Цитата(Domestic @ 31.7.2005, 12:33)

Это к разработчикам пожалуйста. У меня виндозе, написанная на си, глючит как хзчто, но я ж не спрашиваю тут почему и из-за чего.

Я не про глюки. Я про тормоза. Тормозит не Виндоза, тормозят программы, которые кстати, некоторые, написаны на, не побоюсь этих матюков Java или .NET.
Цитата(simanyay @ 31.7.2005, 22:29)

Нет, это ваш глюк. Во первых надо покупать нормальные не no name компы, а во вторых надо чуть-чуть поменять строчечку в параметрах запуска, для вашей оперативки.

А может лучше от Sun'a сервер заказать, шоб уж точно не тормозило?

Автор: Kagor 1.8.2005, 18:03
Цитата(ManiaK @ 1.8.2005, 10:14)
Цитата(Kagor @ 1.8.2005, )
Не знаю у меня, охотник не тормозит, на Athlon Xp 1500+, 512Mb.

Вы, конечно, скажете, зачем же сидеть на таком старье, на что я вам отвечу: подождите Longhorn. Память всегда найдут, чем завалить, какого бы объёма она ни была.
ManiaK, тебя успокоит, если я скажу то, что и на 256 Mb при том же проце Хантер ведет себя также, т.е. не тормозит?

Автор: simanyay 1.8.2005, 20:26
Цитата(ManiaK @ 1.8.2005, 10:45)
simanyay ты шота несдержанный стал smile


Старею smile

Цитата(ManiaK @ 1.8.2005, 10:45)
У меня не noname материнка. Gigabyte SR555 или что-то в этом роде (искать лень), никаких нареканий нет. Охотник тормозит - а какой там интерфейс/функционал?? Нет, конечно у кого-то и Quake 3 на втором пне не тормозит. Требования у каждого свои...


Конечно скорость меньше. Но это "меньше" есть плата за переносимость.

Цитата
Я так понимаю лейбак производителя влияет только на java? А не подскажете-ли как такого добиться в обычной, например Delphi программе?


А вы не подскажете как мне запустить скомпилированную в Delphi программу в Linux и Solaris? Читайте выше.

Цитата(Void @ 1.8.2005, 18:20)

Симаняй, не передергивай. Скорость работы памяти не зависит ТАК от чипсета (в случае интегрированного MC у А64 она от него вообще не зависит). К тому же ППС и латентность в нашем случае - дело десятое, тебя же не смущает, что на серверах используют DDR333 или даже 266, да еще и регистровую ECC?


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

Цитата(chipset @ 1.8.2005, 18:25)
А может лучше от Sun'a сервер заказать, шоб уж точно не тормозило?


Не, надо каждую новую версию по 3-4 года ждать. Зато не тормозит на первых пнях smile Одно сравнение. В Eclipse реализация средств рефакторинга была введена за месяц, а в Visual Studio за 4 года. Я лучше подожду при загрузке лишние 5-10 секунд, чем 4 года дожидаясь новой версии на супер языке.
Добавлено @ 20:34
А теперь смотрим с точки зрения бизнеса на моём личном примере. Я сидел на Celeron 1.2Ghz 512Mb RAM. Eclipse тормозил, но там были средства рефакторинга + средства работы с CVS + плугин к PHP. Теперь рассматриваем варианты:
Вариант один:
- я написал с помощью выше указанных средств систему за 2 месяца и сдал раньше дедлайна, что позволило мне скопить на ноутбук с процом AMD Athlon 64 3.4+ 1Gb RAM, на котором уже вышедшая Eclipse 3.1 не тормозит вообще.

Вариант два:
- я бы писал с помощью убогих средств, которые бы не тормозили, месяца 3-4 с постоянным гемороем с синхронизацией и разными редакторами и, следовательно, не успел бы к дедлайну и не получил бы всей суммы денег (не то что премии за сдачу заранее). Какой бы у меня был комп? Может чуть лучше... Celeron 2Ghz. Зато не тормозящий софт! Счастье-то какое.

Автор: Void 1.8.2005, 20:36
Цитата(simanyay @ 1.8.2005, 22:26)
Здрасьте. При плохой шине, производительность понижается процентов на тридцать. Проверенно собственноручными тестами на мат. плате noname и белой плате.

Платы, процессоры, набор логики, набор тестовых приложений, ОС - в студию.
Не верю ©

Автор: Domestic Cat 1.8.2005, 20:46
Цитата(Kagor @ 1.8.2005, 09:03)
ManiaK, тебя успокоит, если я скажу то, что и на 256 Mb при том же проце Хантер ведет себя также, т.е. не тормозит?

Собственноручно тестировал на старом своем Celeron 400 / 128 mb - отличие было только во времени загрузки.

Автор: simanyay 1.8.2005, 20:48
Цитата(Void @ 1.8.2005, 22:36)

Платы, процессоры, набор логики, набор тестовых приложений, ОС - в студию.
Не верю ©


Не верь. Я логи не веду. Когда-то занимался сборкой нескольких ПК и для себя тестировал. А за отчётами - идите на iXBT и подобные.

Автор: Void 1.8.2005, 20:52
Цитата(simanyay @ 1.8.2005, 22:48)
Не верь. Я логи не веду.

Ну хотя бы скажи, чем тестировал. Если мерял ППС в Sandra или ей подобных - корреляция с реальной производительностью, того, к нулю стремится.
Цитата(simanyay @ 1.8.2005, 22:48)
А за отчётами - идите на iXBT и подобные.

Именно потому что я часто бываю на iXBT и подобных, я и накинулся на это утверждение.

Автор: simanyay 1.8.2005, 20:57
Цитата
Ну хотя бы скажи, чем тестировал.


Ubuntu Memory Testing.

Автор: Петрович 1.8.2005, 21:41
Цитата(simanyay @ 1.8.2005, 21:26)

Цитата

Я так понимаю лейбак производителя влияет только на java? А не подскажете-ли как такого добиться в обычной, например Delphi программе?


А вы не подскажете как мне запустить скомпилированную в Delphi программу в Linux и Solaris? Читайте выше.

Во первых, я так и не понял как лейбак производителя мамы сказывается на кроссплатформенности приложений? smile
А во вторых, как часто вы пишите программы для работы в нескольких платформах?
Наверное это специфика.
Лично я свой хлеб только на платформе Windows зарабатываю. И вроде как хватает. По крайней мере пока. У меня в багаже, за 20 лет программирования, есть лишь одно кроссплатформенное приложение. Оно делалось для работы под DOS и под UNIX. Поэтому, в принципе не могло быть чисто кроссплатформенным smile. Просто писалось на C, и большая часть портировалась.
А так, в принципе, не принципиально smile. Надо будет на java, сбацаем на java. Для нормального программера, язык не имеет принципиального значения. Изучение нового языка это вопрос времени, причем не катастрофически большого. Поэтому, при реальной необходимости не вижу препятствий.
Цитата(simanyay @ 1.8.2005, 21:26)
Вариант один:
- я написал с помощью выше указанных средств систему за 2 месяца и сдал раньше дедлайна, что позволило мне скопить на ноутбук с процом AMD Athlon 64 3.4+ 1Gb RAM, на котором уже вышедшая Eclipse 3.1 не тормозит вообще.

Вариант два:
- я бы писал с помощью убогих средств, которые бы не тормозили, месяца 3-4 с постоянным гемороем с синхронизацией и разными редакторами и, следовательно, не успел бы к дедлайну и не получил бы всей суммы денег (не то что премии за сдачу заранее). Какой бы у меня был комп? Может чуть лучше... Celeron 2Ghz. Зато не тормозящий софт! Счастье-то какое.

А вот это как посмотреть. Лично у меня, при сегодняшнем уровне знания java, было-бы наоборот. smile

Автор: Kagor 1.8.2005, 21:56
Цитата
Для нормального программера, язык не имеет принципиального значения. Изучение нового языка это вопрос времени, причем не катастрофически большого.
Полностью согласен!

Автор: chipset 2.8.2005, 03:21
Цитата

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

Однозначно.

Автор: JekaZZ 12.10.2005, 17:18
С++ имеет более понятный для понимания синтаксис.
Приведу пример. Я однажды спросил у одного программиста Delphi, изменится ли значение переменной i в данном случае:
Код

procedure ChangeI(a: integer);
begin
 a:=a+5;
end;
......
var i: integer;
begin
 i:=1;
 ChangeI(i);
end.

Он говорит "Нет". И он прав.Тогда я спрашиваю, а изменится ли содержимое i в данном случае:
Код

procedure ChangeSL(a: TStringList);
begin
 a.Add('New item');
end;
......
var i: TStringList;
begin
 i:=TStringList.Create;
 ChangeSL(i);
end.

Он говорит "Да". И он прав. А вот почему так - он не знает.
Потому что из синктасиса паскаля (далфи) невозможно понять, что передается в функцию-значение переменной или ссылка на нее.
В С++ такой бы проблемы не возникло, так как для изменения переменной внутрь функции должен передаваться указатель и прототип ее будет следующий:
Код

void ChangeI(TStringList* a);

Знак "*" и говорит об указателе. Если же переменная передается по ссылке
Код

void ChangeI(TStringList& a);

то компилятор предупредит об этом. А чтобы он этого не делал, надо писать
Код

void ChangeI(const TStringList& a);

Тогда однозначно переменная не меняется внутри функции. И никаких неопределенностей!!!

Еще момент.Паскалевский компилятор для i:=i+1 создаст точно такой же машинный код - возмет из памяти переменную, поместит ее в регистр, потом прибавит к ней 1 и поместит обратно в память (проверено). Компилятор С++ сделает это одной командой процессора - прибавит 1 к значению в памяти. И записывается на с++ гораздо короче i++;

Автор: Mayk 12.10.2005, 18:24
Цитата(JekaZZ @ 12.10.2005, 21:18)
Паскалевский компилятор для i:=i+1 создаст точно такой же машинный код - возмет из памяти переменную, поместит ее в регистр, потом прибавит к ней 1 и поместит обратно в память (проверено). Компилятор С++ сделает это одной командой процессора - прибавит 1 к значению в памяти. И записывается на с++ гораздо короче i++;

Это зависит от компилятора. Не думаю, что в стандарте паскаля есть какие-либо оговорки о генерации кода.
ах, да. На паскале еще есть inc(i); smile

Автор: Void 12.10.2005, 18:37
Надо же, какая тема всплыла... smile Пофлеймили на славу.

Цитата(JekaZZ @ 12.10.2005, 19:18)
Еще момент.Паскалевский компилятор для i:=i+1 создаст точно такой же машинный код - возмет из памяти переменную, поместит ее в регистр, потом прибавит к ней 1 и поместит обратно в память (проверено).

Ну, это уже проблемы тупизны компилятора и/или его создателей smile

Цитата(JekaZZ @ 12.10.2005, 19:18)
С++ имеет более понятный для понимания синтаксис.

...пока мы пишем вот такие примеры в пять строчек...

smile Синтаксис ML рулез... smile

Автор: Mayk 12.10.2005, 18:39
Цитата(Void @ 12.10.2005, 22:37)
Синтаксис ML рулез...

smile smile

Автор: Void 12.10.2005, 18:49
Mayk
Ур-ра, провокация удалась smile

Собственно, все зависит от задачи... Уродливый код можно написать на чем угодно. Но выведение типов, соответствие образцу (pattern-matching), кортежи и списки на уровне языка - ИМХО, есть рулез. Это относится не только к MLоидам (OCaml), но и к Haskell, даже к Nemerle. Просто именно с OCaml я знаком ближе всего.

Код

type 'a btree =
      Empty
    | Node of 'a * 'a btree * 'a btree

let rec insert x = function
      Empty -> Node(x, Empty, Empty)
    | Node(y, left, right) ->
        if x < y then Node(y, insert x left, right)
        else Node(y, left, insert x right)

Киньте в меня камень, кому непонятно, что этот код делает smile

P.S. Может отдельную веточку откроем: "Императивное программирование vs. функциональное - заведемся конкретЪно"? smile

Автор: LSD 12.10.2005, 18:52
Цитата(Void @ 12.10.2005, 19:49)
Киньте в меня камень, кому непонятно, что этот код делает

А почему не используешь fun это по мему наглядней?

Автор: Void 12.10.2005, 18:57
Цитата(LSD @ 12.10.2005, 20:52)
А почему не используешь fun это по мему наглядней?

Ключеовое слово fun в OCaml используется для введения анонимных ф-ций (лямбда ф-ций) с одним или нескольким аргументами. Здесь его всунуть негде smile А вообще, фишка очень удобная.

Цитата(Void @ 12.10.2005, 20:49)
Уродливый код можно написать на чем угодно. Но выведение типов, соответствие образцу (pattern-matching), кортежи и списки на уровне языка - ИМХО, есть рулез.

Ах да, забыл еще - ф-ции как first class values и карринг.

Автор: Mayk 12.10.2005, 19:07
Цитата(Void @ 12.10.2005, 22:49)
Ур-ра, провокация удалась

Дыкть smile

Цитата(Void @ 12.10.2005, 22:49)

Киньте в меня камень, кому непонятно, что этот код делает

Так, Сча будем угадывать.

Цитата(Void @ 12.10.2005, 22:49)

type 'a btree =
      Empty
    | Node of 'a * 'a btree * 'a btree

btree и 'а могут быть либо пустыми, либо
состоять из пар 'a и 'a, btree и 'a или просто быть btree.

Цитата(Void @ 12.10.2005, 22:49)

let rec insert x = function
      Empty -> Node(x, Empty, Empty)
    | Node(y, left, right) ->
        if x < y then Node(y, insert x left, right)
        else Node(y, left, insert x right)


Если что-то вставляется в пустоту, то вернется Node(аргумент-инсерта, empty, empty)
Если же добавляется в узел (обозначенны y наверное?, то вернется узел), то вернется такой узел, что x будет добавлен в одну из веток

Сильно наврал? smile


Цитата(Void @ 12.10.2005, 22:49)

P.S. Может отдельную веточку откроем: "Императивное программирование vs. функциональное - заведемся конкретЪно"?

Do it smile

Автор: Void 12.10.2005, 19:14
Цитата(Mayk @ 12.10.2005, 21:07)
btree и 'а могут быть либо пустыми, либо
состоять из пар 'a и 'a, btree и 'a или просто быть btree.

Чуть-чуть не так smile btree может быть либо пустым, либо состоять из тройки: элемент и два поддерева. 'a - это параметрический тип, т.е. C++-ным аналогом было бы:
Код
template <class A>
struct btree {
    btree<A> *left, *right;
    A data;
};

Только тут все наглядно и типобезопасно. Компилятор сам введет указатели, там где нужно (тип-то рекурсивный).

Цитата(Mayk @ 12.10.2005, 21:07)
Если что-то вставляется в пустоту, то вернется Node(аргумент-инсерта, empty, empty)
Если же добавляется в узел (обозначенныy, то вернется узел из (y,

Тут все правильно smile
Причем, надо заметить, ф-ция insert полиморфна - она будет работать для btree с любыми типами 'a.
Цитата(Mayk @ 12.10.2005, 21:07)
Do it

Счас, только вступительный призыв для флеймеров накатаю smile

Автор: DragonFire 15.10.2005, 21:24
А я вообще не согласен с этим утверждением.
Я люблю Delphi, а значит уже не все... smile smile smile smile

Автор: Mayk 15.10.2005, 21:31
Цитата(Void @ 12.10.2005, 23:14)
Счас, только вступительный призыв для флеймеров накатаю

Ты бы еще примерчики накатал smile сказал Майк, выкачиавя окамлу

Автор: LSD 15.10.2005, 23:11
Цитата(JekaZZ @ 12.10.2005, 18:18)
С++ имеет более понятный для понимания синтаксис.

Ну-ну smile

Какое значение получит переменная с, после такого вычисления:
Код
a=5;    
b=10;    
с = a*b - 36 / (a=(b+2));

Добавлено @ 23:13
Просьба тем кто уже участвовал в этой дискусси не писать smile

Автор: DeadSoul 15.10.2005, 23:17
LSD, топором можно рубить дрова, а можно убивать людей. Твой пример из второй серии

Автор: LSD 15.10.2005, 23:22
Цитата(DeadSoul @ 16.10.2005, 00:17)
топором можно рубить дрова, а можно убивать людей. Твой пример из второй серии

Убивать можно и голыми руками, и что?

Инструмент должен быть безопасен для того кто его использует (для этого и предназначенны всякие защятные кожухи на реальных инструментах), то же самое и язык программирования. Не должно быть там таких выкрутасов.

P.S. Ты так и не ответил на вопрос.

Автор: DeadSoul 15.10.2005, 23:26
Цитата(LSD @ 15.10.2005, 23:22)
P.S. Ты так и не ответил на вопрос.

Навскидку: неопределенное поведение
Подумав: отрыв рук тому, кто такое написал.

P.S. В каком распространненном языке это невозможно(Delphi,C#,Java)?

Автор: Дрон 15.10.2005, 23:30
LSD
Это пока единственная неоднозначность, что я видел.

Цитата(LSD @ 16.10.2005, 00:22)
Инструмент должен быть безопасен для того кто его использует

Знаешь Ferrari F40. Спортивная машина, так вот в ней нет никаких электронных наворотов в плане управления -- фактически оставляет водителя наедине с дорогой.
Так же и С++, если у программиста не хватает ума, чтобы не писать такие вещи -- так пусть лучше на VB пишет smile

А вообще многие тут не понимают, что С++ это уже далеко не a = b + c, а библиотеки вроде STL.
Вот где настоящий С++ smile

Добавлено @ 23:31
LSD
Кстати, готов предположить, что такое можно написать и в Java и в C# и в других Си-подобных языках.

Автор: LSD 15.10.2005, 23:33
Цитата(DeadSoul @ 16.10.2005, 00:26)
Навскидку: неопределенное поведение
Подумав: отрыв рук тому, кто такое написал.

Насчет неопределенного поведения ты прав smile
А ТТП оставим на усмотрение твоей совести smile

Цитата(DeadSoul @ 16.10.2005, 00:26)
P.S. В каком распространненном языке это невозможно(Delphi,C#,Java)?

В Pascal нельзя такой финт ушами провернуть.

Автор: DeadSoul 15.10.2005, 23:33
Цитата
LSD
Это пока единственная неоднозначность, что я видел.

Пожайлуста:
Код

int i=0;
std::cout<<++i<<++i;


P.S. Данная неоднозначность - некоторый пережиток прошлого.

Автор: Дрон 15.10.2005, 23:37
DeadSoul
smile

Это из той же серии -- неизвестный порядок вычисления выражения.
Добавлено @ 23:38
Цитата(LSD @ 16.10.2005, 00:33)
В Pascal нельзя такой финт ушами провернуть.

Правильно.

И значит там нельзя написать что-то вроде:

Код

int a,b,c,d;

a = b = c = d = 10;

Автор: DeadSoul 15.10.2005, 23:39
Цитата
DeadSoul
Это из той же серии -- неизвестный порядок вычисления выражения.

Мой пример более "жизненный". Это с = a*b - 36 / (a=(b+2)) явно надуманный

Автор: LSD 15.10.2005, 23:42
Цитата
Знаешь Ferrari F40. Спортивная машина, так вот в ней нет никаких электронных наворотов в плане управления -- фактически оставляет водителя наедине с дорогой.
Так же и С++, если у программиста не хватает ума, чтобы не писать такие вещи -- так пусть лучше на VB пишет

У ассемблера еще меньше ограничений, но ты же не будешь писать большой проект на асме? Или C++ это язык для маленьких проектов?


Цитата
А вообще многие тут не понимают, что С++ это уже далеко не a = b + c, а библиотеки вроде STL.
Вот где настоящий С++

Я говорю только о синтаксисе языка.


Цитата
Кстати, готов предположить, что такое можно написать и в Java и в C# и в других Си-подобных языках.

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

Автор: Дрон 15.10.2005, 23:43
Цитата(DeadSoul @ 16.10.2005, 00:39)
Мой пример более "жизненный"

Согласен.

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

Например, хороший способ избежать недоразумений -- это писать не:
Код
if (a == 5) ...

а
Код
if (5 == a) ...


Только я им всё равно не пользуюсь, т.к. всё таки читается это гораздо сложнее smile
Добавлено @ 23:45
Цитата(LSD @ 16.10.2005, 00:42)
Или C++ это язык для маленьких проектов?

Хех...

Я же сказал, что С++ это совсем не то, что думает большинство.

Загляни в код любой большого (ну, пара мегабайт текстисходников) проекта на С++ и ты очень сильно удивишься smile

Когда я вперые такой проект увидел -- я сначала даже синтаксиса не понял!
Там всё СОВСЕМ другое.

Автор: S.A.P. 16.10.2005, 00:25
Цитата(DeadSoul @ 15.10.2005, 23:33)

int i=0;
std::cout<<++i<<++i;

а что тут неоднозначного, никак понять не могу... Аж проверить заставили ! smile

Автор: batigoal 16.10.2005, 09:17
Цитата(Perchilla @ 16.10.2005, 01:25)
а что тут неоднозначного, никак понять не могу... Аж проверить заставили ! smile

А какой результат?
1 2
?

Автор: Void 16.10.2005, 09:25
Цитата(Perchilla @ 16.10.2005, 02:25)
а что тут неоднозначного, никак понять не могу...

Ну, в общем-то, никто не гарантирует, что компилятор не сгенерирует в этом месте код для форматирования винчестера smile UB, так сказать... А по факту, неизвестно, какой инкремент будет выполнен первым, и какое из измененных значений i возьмет каждый оператор <<.

Mayk
Цитата
Ты бы еще примерчики накатал

Да с удовольствием, только нелегкое это дело - показывать на примерах малознакомый большинству язык smile
Неплохие примеры можно найти в:
официальном http://caml.inria.fr/pub/docs/manual-ocaml/index.html (и его незаконченном русском http://ocaml.spb.ru/);
http://caml.inria.fr/pub/docs/oreilly-book/ "Developping Applications with Objective Caml" (русский http://shamil.free.fr/comp/ocaml/).
ML-оиды особенно сильны в: манипуляцих над сложными структурами данных, символьных вычислениях, proof assistance (ML вообще для того и разрабатывался), синтаксическом анализе и компиляции.

P.S. Пожалуйста, все дальнейшее обсуждение ФЯ - http://forum.vingrad.ru/index.php?showtopic=67161, а то в этой ветке и так много всего намешано.

Автор: Alex 16.10.2005, 09:25
Цитата(Lamer @ 16.10.2005, 10:17)
А какой результат?
1 2
?

вот, вот, а потом кто-то о хорошей читаемости будет доказывать...

Автор: LSD 16.10.2005, 10:05
Цитата
Загляни в код любой большого (ну, пара мегабайт текстисходников) проекта на С++ и ты очень сильно удивишься

Windows - достаточно большой проект? smile
А вообщее, повторюсь еще раз, это не имеет никакого отношения к синтаксису. Да можно просто отказаться от использования "плохих" конструкций языка, но тогда зачем они в нем?


Цитата(Void @ 16.10.2005, 10:25)
Ну, в общем-то, никто не гарантирует, что компилятор не сгенерирует в этом месте код для форматирования винчестера

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

Автор: Void 16.10.2005, 11:30
Цитата(LSD @ 16.10.2005, 12:05)
Как это никто не гарантирует???

UB, оно UB и есть. smile Конечно, если руководствоваться здравым смыслом, то ничего подобного здесь быть не может, и вариантов поведения не так много, но Стандарт по этому поводу ничего не говорит.

Автор: DeadSoul 16.10.2005, 12:12
Цитата(Perchilla @ 16.10.2005, 00:25)
Цитата (DeadSoul @ 15.10.2005, 23:33)

int i=0;
std::cout<<++i<<++i;


а что тут неоднозначного, никак понять не могу... Аж проверить заставили ! 

http://rsdn.ru/Forum/Message.aspx?mid=1424298

Автор: Дрон 16.10.2005, 15:23
Цитата(LSD @ 16.10.2005, 11:05)
А вообщее, повторюсь еще раз, это не имеет никакого отношения к синтаксису. Да можно просто отказаться от использования "плохих" конструкций языка, но тогда зачем они в нем?

Ну, давайте тогда скажем: С++ -- отличный язык с плохим синтаксисом smile

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

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

Писать cout << i++ уже плохо, поскольку здесь мы одновременно выводим в поток и обновляем данные, что по-хорошему должно быть разделено.

Цитата(LSD @ 16.10.2005, 11:05)
Windows - достаточно большой проект? smile

А оно разве не на Си написано?

Автор: LSD 16.10.2005, 17:25
Цитата
"Плохие" конструкции нужны для того, чтобы умные люди могли из них извлекать выгоду, а идиоты не становились программистами.

Ага, у кого даже подпись подобная была. Типа "крутые" программеры, не ошибаются, не имеют плохих привычек в написании кода и не существуют smile
Человек слаб, и ему свойственно ошибаться и лениться. Я знал людей которые утверждали, что Си лучше паскаля, тем что там операторные скобки пишутся фигурными скобками, а в паскале begin/end. Это дескать очень долго набирать.

Цитата
А оно разве не на Си написано?

Оно???
smile smile smile smile

Ты советовал заглянуть в код любой большого (ну, пара мегабайт текстисходников) проекта на С++ вот я спросил, винда подойдет?

Автор: En_t_end 16.10.2005, 17:41
LSD
Цитата(LSD @ 16.10.2005, 21:25)
проекта на С++

Вот именно... хоть часто пишут C++/C, но вот обратное C/C++ - не верно.
Windows я так смею утверждать написана на низкоуровневом C.

Автор: LSD 16.10.2005, 17:44
Цитата(En_t_end @ 16.10.2005, 18:41)
Windows я так смею утверждать написана на низкоуровневом C.

Windows большой, и помимо ядра у него много что есть.

Автор: S.A.P. 16.10.2005, 17:57
Цитата(Lamer @ 16.10.2005, 09:17)
А какой результат?
1 2

Да, у меня 1 2 получилось, компилил на MinGW и не увидел ничего в этом странного.

Правда потом, как DeadSoul дал ссылку на RSDN, решил проветить на Visual C++, получилось 22 smile .

Кстати, тот же MinGW в этом коде
Код

int a = 0;
int b = 0;
b = ++a + ++a;
std::cout<<b;


выводит все же 4, как и VC. Хотя если бы следовал предыдущему правилу, должно было быть 3.

Надо стандарт рыть, смотреть. smile

Автор: Void 16.10.2005, 18:12
Цитата(Perchilla @ 16.10.2005, 19:57)
Надо стандарт рыть, смотреть.

Не надо.
Изменение любой переменной более одного раза между двумя точками следования ведет к неопределенному поведению
По этой же причине неверны конструкции вроде:
Код
a ^= b ^= a ^= b;

и т. д.

Автор: Дрон 16.10.2005, 20:30
Цитата(LSD @ 16.10.2005, 18:25)
Оно???

Как-то так сложилось, что о Windows я говорю в среднем роде. Мне тут уже сказали, что на самом деле правильно будет в женском... Но мне пофиг smile
Добавлено @ 20:35
Цитата(LSD @ 16.10.2005, 18:25)
Я знал людей которые утверждали, что Си лучше паскаля, тем что там операторные скобки пишутся фигурными скобками, а в паскале begin/end. Это дескать очень долго набирать.

Это не только набирать дольше, но и читать трудно smile smile

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

С++ просто один из многих языков...
Как там кто-то давным давно сказал: "С++ -- самый худший из объекто ориентированных языков, но остальные ещё хуже".

Поэтому на сабжевый вопрос я бы ответил: так уж сложилось исторически.

smile

Автор: En_t_end 17.10.2005, 15:43
Цитата (DeadSoul @ 15.10.2005, 23:33)
int i=0;
std::cout<<++i<<++i;
а что тут неоднозначного, никак понять не могу... Аж проверить заставили ! 

Это не просто плохой стиль - это уродство и непортируемо сразу. И самое, что противное, что подобные вещи пытаются засунуть во все тесты по Си, это просто трясет и выводит из себя. Чтобы ответить правильно на эти вопросы нужно добавить вариант - зависет от рук создателя компилятора, но так как такого варианта нет, начинаешь ёрвничать.
Добавлено @ 15:44
b = ++a + ++a; - в ту же топку....

Автор: nikitao 17.10.2005, 16:02
Цитата
Как-то так сложилось, что о Windows я говорю в среднем роде. Мне тут уже сказали, что на самом деле правильно будет в женском... Но мне пофиг

Windows-оно т к windows="окна"="окно"*n=>windows это полное ОНО. smile
Цитата
Изменение любой переменной более одного раза между двумя точками следования ведет к неопределенному поведению

На себе натерпелся.

Автор: Петрович 17.10.2005, 16:48
Цитата(nikitao @ 17.10.2005, 17:02)
Windows-оно т к windows="окна"="окно"*n=>windows это полное ОНО. 

Мдя. Может С++ ты и знаешь. А вот с русским, у тебя облом. smile В русском языке, "окна" это они.

Автор: DeadSoul 17.10.2005, 20:14
Цитата(En_t_end @ 17.10.2005, 15:43)
Цитата (DeadSoul @ 15.10.2005, 23:33)
int i=0;
std::cout<<++i<<++i;


En_t_end, я ссылку на rsdn давал. Ты сколькими компилятора прогнал этот пример?

Автор: S.A.P. 17.10.2005, 20:41
Цитата
Мдя. Может С++ ты и знаешь. А вот с русским, у тебя облом. smile В русском языке, "окна" это они.
А система "окна" - она smile .

Автор: JekaZZ 19.10.2005, 21:21
Цитата
Какое значение получит переменная с, после такого вычисления:


Это уже на совести програмера. Присвоение прямо в вычислениях (как в этом случае для 'a') сделано не для
Код

a=5; 
b=10; 
с = a*b - 36 / (a=(b+2));


а для удобства в (например):
Код

char c;
while((c=getch()!=27))
{
      switch(c)
      .......................... и т.д.
}

и т.п.

Автор: maksr 30.1.2006, 21:22
Цитата(Domestic Cat @ 11.7.2005, 20:40 Найти цитируемый пост)

в С нет шаблонов и это вообще чисто процедурный язык.

Разве С процедурный язык? smile

Автор: LSD 30.1.2006, 21:29
Цитата(maksr @ 30.1.2006, 21:22 Найти цитируемый пост)
Разве С процедурный язык?

А какой же?

Автор: maksr 30.1.2006, 21:39
Код

main()
{
 printf("Hello World");
};

Это - процедура.

Код

inline main()
{
 printf("Hello World");
};

И это тоже.

А другие примеры процедур есть?

Автор: Void 30.1.2006, 21:45
maksr

Цитата(maksr @ 30.1.2006, 23:39 Найти цитируемый пост)
А другие примеры процедур есть?

Код

void foo() {
    puts("Hello, world!");
}


В Си весь код организуется в процедуры (в данном контексте нет никакой разницы между процедурами и функциями). В Си нет классов и объектов. Так какой это язык?
Добавлено @ 21:48
Как всегда, нелишне заглянуть в http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.

Автор: maksr 30.1.2006, 21:51
Цитата(Void @ 30.1.2006, 21:45 Найти цитируемый пост)

Так какой это язык?

Процедурный. smile Теперь понял. Спасибо! smile

Автор: chipset 31.1.2006, 07:58
http://rsdn.ru/Forum/Message.aspx?mid=1445302&only=1

Автор: Zhmur 31.1.2006, 20:47
кто такой С++?

Автор: Kagor 31.1.2006, 20:51
Цитата(Zhmur @ 31.1.2006, 21:47 Найти цитируемый пост)
кто такой С++?
http://www.google.ru/search?hs=j5y&hl=ru&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&q=define%3A+C%2B%2B&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=

Автор: maksr 1.2.2006, 00:26
А на чем написана стандартная библиотека ввода/вывода для C/C++ ? smile

Автор: Sun 1.2.2006, 13:11
Цитата(maksr @ 31.1.2006, 21:26 Найти цитируемый пост)

А на чем написана стандартная библиотека ввода/вывода для C/C++ ?

stdio? На С.

Автор: maksr 1.2.2006, 14:47
Как такое может быть? На Языке не имеющим I/O написать, I/O Cтандартную для большинства компьютеров? Хотя может я ошибаюсь!
Как можно написать процедуру для вывода сообщения на дисплей без stdio ? smile

Автор: Mayk 1.2.2006, 14:55
Цитата(maksr @ 1.2.2006, 18:47 Найти цитируемый пост)

Как можно написать процедуру для вывода сообщения на дисплей без stdio ?

Системные вызовы и прочая низкоуровневая радость.
Если ну очень интересно, то смотреть glibc.

Автор: Sun 1.2.2006, 15:02
Цитата(maksr @ 1.2.2006, 11:47 Найти цитируемый пост)

Как такое может быть? На Языке не имеющим I/O написать, I/O Cтандартную для большинства компьютеров? Хотя может я ошибаюсь!

А что такое по твоемому IO? Это обращение к портам процессора. К прерываниям BIOS. Для того чтобы постоянно не писать один и тот же код, вводится дополнительный уровень абстракции - операционная система, которая берет на себя типовые системные операции. В том числе операции ввода-вывода. В stdio просто идет обращение к системным вызовам. Понятно что они разные для разных OS, поэтому и реализация stdio будет разная, но интерфейс будет одним и тем же.

Хорошая статья, как написать реальный "Hello Wrold!" не требующий операционной системы.

http://www.naydicursy.com/course-nccourse1884787.htm

Автор: maksr 1.2.2006, 15:38
Цитата(Sun @ 1.2.2006, 15:02 Найти цитируемый пост)

А что такое по твоемому IO

IMHO Это интерфейс для работы с файлами, памятью и т.п

Автор: Sun 1.2.2006, 15:45
Цитата(maksr @ 1.2.2006, 12:38 Найти цитируемый пост)

IMHO Это интерфейс для работы с файлами, памятью и т.п

Этот интерфейс называется BIOS (Basic Input Output System). Фактически это набор подпрограмм выполняющих типовые операции с устройствами подключеными к процессору. Язык С не умеет работать напрямую с регистрами процессора и вызывать прерывания. Для этих целей используется ассемблер. Поэтому часть ядра ОС, как ни крути, пишется на ассемблере.

Автор: kolesnle 10.4.2013, 11:04
Цитата(Mayk @  11.7.2005,  20:49 Найти цитируемый пост)
В паскале нет шаблонов. Это раз.
В паскале нет циклов. Это два(for i := 10 downto 0 это не цикл, while(*i++=*j++) - вот пример цикла. for(iter i = collection->begin(); i->value != desired_value && i != collection->end(); ++i) - вот пример цикла)
В паскале очень длинный, запутанный, я б даже сказал, дурацкий синтаксис. Это три(integer вместо int, begin вместо { и end вместо }, then вместо <тут пусто>).
В паскале указатели просто смешны. Мне НУЖЕН указатель на статическую переменную. Я НЕ хочу вызывать операции по удалению объектов в ручную. Я НЕ хочу обращаться к тормознутому менеджеру памяти(выделение в стеке гораздо быстре). И если компилятор имеет на этот счёт иное мнение, то я имею топку в которую полетит шибко умный компилятор. Это четыре. И это приговор.
В паскале нет препроцессора. Это пять(кстати за это я не люблю яву, с#)
В паскале очень тупые ветвления(then, наличие ';', отсутствие ';') это пять с копейками
В паскале нет оператара присваивания. Это шесть с копейками(a:=b это операция присваивания. a=b=c=d=e=f=g=someFunction(h) - вот это оператор присваивания в своей красе).
В паскале синтаксис очень похож на basic'овский. Это шесть с копейками. С ОЧЕНЬ ВЕСОМЫМИ копейками
В паскале очень тупая библиотека. На си создания дубликата участка памяти я запишу в одно выражение memcpy(malloc(len),src,len); В паскале getmem НЕ возвращает значение. А устанавливает переданный ей pointer.
В си есть циклы, операторы присваивания, препроцессор, stdlib функции которой возвращают то что им положено возвращать.
В си++ есть классы. Паскалевскому stringу в пору бится в конвульсиях. 

Почти полностью солидарен! Только по моему там есть препроцессор, типа $include или еще как. Но я его все-равно жутко ненавижу!

Автор: Beltar 10.4.2013, 12:39
В Паскале есть дженерики.

Касательн цикла for, то http://forum.vingrad.ru/forum/topic-361800/kw-c++-си++/60.html#

Цитата

Это три(integer вместо int, begin вместо { и end вместо }, then вместо <тут пусто>).


В Паскале сейчас вообще-то можно писать и так: int8, int16, int32. Ну и как обычно пошла песня про то, что писать видите ли долго. Сразу выдает быдлокодера.

Цитата

В паскале указатели просто смешны. Мне НУЖЕН указатель на статическую переменную.


А пишущим на Паскале он нужен?

Цитата

Я НЕ хочу вызывать операции по удалению объектов в ручную. Я НЕ хочу обращаться к тормознутому менеджеру памяти(выделение в стеке гораздо быстре).


По этому поводу была такая статья http://www.delphikingdom.com/asp/viewitem.asp?catalogid=346 писалась как ответ на указанный в начале монументальный труд.

Цитата

В паскале нет оператара присваивания. Это шесть с копейками(a:=b это операция присваивания. a=b=c=d=e=f=g=someFunction(h) - вот это оператор присваивания в своей красе).


Оно, конечно, минус, но даже не третьестепенный.

Цитата

В си++ есть классы. Паскалевскому stringу в пору бится в конвульсиях. 


Написавший это болен. Скорее наоборот в Си++ нет нормального строкового типа, что признают даже его ярые адепты, есть только жалкая попытка имитировать функциональность ANSIString с помощью классовой обертки над гнилым PChar. При этом эта самая обертка вывалится нафиг, как только придется  написать что-то вроде "ab"+"cd", потому что тут не классы у которых перегружена конкатенация, а пичары.
Я даже не знаю каким идиотом надо быть, чтобы не понимать этого.

В общем, как обычно, придирки что в Паскале нет какой-то хрени, нужной раз в год, или не нужной вообще, но при этом мило забываются такие подсудные вещи плюсов, как присваивание в операторе if, совершенно неюзебельный switch, нет понимания, что же такое цикл for, замалчивается отсутствие в плюсах вложенных функция, классовых ссылок и виртуальных конструкторов. Замлчивается просто несопоставимое с Паскалем время компиляции, что при работе одному в режиме проверил-не работает-исправил довольно серьезный недостаток. Про строки, это действительно нечто, достойно того, чтобы повторить это еще раз.

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

Автор: Akella 10.4.2013, 13:01
Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
Написавший это болен. Скорее наоборот в Си++ нет нормального строкового типа, что признают даже его ярые адепты, есть только жалкая попытка имитировать функциональность ANSIString с помощью классовой обертки над гнилым PChar.

+1

Добавлено через 8 минут и 41 секунду
Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
что буковок вроде поменьше писать

а толку... в глазах рябит от знаков препинания, не язык, а brainfack какой-то

Добавлено через 9 минут и 7 секунд
Вот название бредовое. ВСЕ не могут любить C++.

Автор: k0rvin 10.4.2013, 17:53
Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
В Паскале есть дженерики.

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

Автор: Beltar 10.4.2013, 18:33
И что такого полезного можно нашаблонить в плюсах, помимо того, что дают дженерики?

Автор: kolesnle 10.4.2013, 19:02
Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
Написавший это болен. Скорее наоборот в Си++ нет нормального строкового типа

Нет? Напиши.

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
присваивание в операторе if

Ну во первых не  в операторе, а в инструкции, а во вторых : "Каким дебилом надо быть, чтобы присваивать в инструкции if"

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
совершенно неюзебельный switch

Наоборот, более юзабельный.

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
нет понимания, что же такое цикл for

Range-based for

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
вложенных функция

пожалуйста посмотреть c++11 лямбда

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
классовых ссылок 

что это?!

Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
 виртуальных конструкторов

Огромная проблема сэмулировать? http://habrahabr.ru/post/64369/
Ну и ответ на минусы плюсами: кроссплатформенность, с помощью библиотек можно добиться гораздо большего, чем с помощью дельфей, http://habrahabr.ru/post/140357/, auto, shared_ptr, initializer_list и еще много-много-много-много

Автор: Beltar 10.4.2013, 19:21
Цитата

"Каким дебилом надо быть, чтобы присваивать в инструкции if"


В том-то и отличие между тобой и сишником, который с горя пишет if (5==N), спотыкаясь на чтении, лишь бы хотя бы в частном случае сравнения с константой компилятор подстелили соломку.

Цитата

пожалуйста посмотреть c++11 лямбда


Кстати, я как раз описание этого стандарта открыл.

Вот что приведено в педивикии:

Цитата

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


int GiveFive() {return 5;}
 
int some_value[GiveFive() + 7]; // создание массива 12 целых; запрещено в C++

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

C++11 вводит ключевое слово constexpr, которое позволяет пользователю гарантировать, что или функция или конструктор объекта возвращает константу времени компиляции. Код выше может быть переписан следующим образом:
constexpr int GiveFive() {return 5;}
 
int some_value[GiveFive() + 7]; // создание массива 12 целых; разрешено в C++11

Такое ключевое слово позволяет компилятору понять и удостовериться в том, что GiveFive возвращает константу.

Использование constexpr порождает очень жёсткие ограничения на действия функции:
такая функция не может быть типа void;
тело функции должно быть вида return выражение;
выражение должно также быть константой, а также может вызывать только те функции, что также обозначены ключевым словом constexpr, или просто использовать обычные константы;
функция, обозначенная constexpr, не может вызываться до того момента, пока она не определена в текущей единице компиляции.

В предыдущей версии стандарта в константных выражениях можно было использовать переменные только целого типа или типа перечисления. В C++11 это ограничение снято для переменных перед определением которых стоит ключевое слово constexpr:
constexpr double accelerationOfGravity = 9.8;
constexpr double moonGravity = accelerationOfGravity / 6;

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

В случае необходимости конструирования константных значений из типов, определённых пользователем, конструкторы таких типов также могут быть описаны с помощью constexpr. Конструктор константных выражений, подобно константным функциям, также должен быть определён до момента первого его использования в текущей единице компиляции. У такого конструктора должно быть пустое тело, а также такой конструктор должен инициализировать члены своего типа только константами.


 smile  smile 

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

Автор: kolesnle 10.4.2013, 19:31
Цитата(Beltar @  10.4.2013,  19:21 Найти цитируемый пост)
элементарный функционал

был и в C++. Это функции вычисляемые на этапе компиляции ввели. Какой-то странный пример в педивикии

Автор: Beltar 10.4.2013, 19:44
 smile 

Код

const
  a=4.5;
  b=5;
  c=a+b;

type
  TMyArray=array[1..c] of Integer;//Ес-но не скомпилируется при a=4.5, но при a=4 вполне


Функция вычисляемая на этапе компиляции является константой. 
Ваш Кэп.

Автор: kolesnle 10.4.2013, 19:52
Да все-равно ввели уже. Теперь delphi точно хуже C++, хотя бы из-за синтаксиса(я не про begin smile)

Автор: Beltar 10.4.2013, 20:17
Мне так и не показали ни одного серьезного преимущества в синтаксисе, свистелки и перделки вроде множественного присваивания никак не отменяют наличия конструкций в которых опечатки легко приводят к необнаруживаемым компиляторам ошибкам  и отсутствием читабельности, как класса.

Автор: kolesnle 10.4.2013, 21:36
Что по твоему серьезно?

Автор: Beltar 10.4.2013, 23:27
Что-то резко снижающее объем работы и повышающее читабельность. Способность обнаружить ошибку еще на этапе компиляции.

Автор: k0rvin 11.4.2013, 05:19
Цитата(Beltar @ 10.4.2013,  18:33)
И что такого полезного можно нашаблонить в плюсах, помимо того, что дают дженерики?

http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx

Цитата

C# Generics and C++ templates are both language features that provide support for parameterized types. However, there are many differences between the two. At the syntax level, C# generics are a simpler approach to parameterized types without the complexity of C++ templates. In addition, C# does not attempt to provide all of the functionality that C++ templates provide. At the implementation level, the primary difference is that C# generic type substitutions are performed at runtime and generic type information is thereby preserved for instantiated objects. For more information, see Generics in the Run Time (C# Programming Guide).

The following are the key differences between C# Generics and C++ templates:

  • C# generics do not provide the same amount of flexibility as C++ templates. For example, it is not possible to call arithmetic operators in a C# generic class, although it is possible to call user defined operators.
  • C# does not allow non-type template parameters, such as template C<int i> {}.
  • C# does not support explicit specialization; that is, a custom implementation of a template for a specific type.
  • C# does not support partial specialization: a custom implementation for a subset of the type arguments.
  • C# does not allow the type parameter to be used as the base class for the generic type.
  • C# does not allow type parameters to have default types.
  • In C#, a generic type parameter cannot itself be a generic, although constructed types can be used as generics. C++ does allow template parameters.
  • C++ allows code that might not be valid for all type parameters in the template, which is then checked for the specific type used as the type parameter. C# requires code in a class to be written in such a way that it will work with any type that satisfies the constraints. For example, in C++ it is possible to write a function that uses the arithmetic operators + and - on objects of the type parameter, which will produce an error at the time of instantiation of the template with a type that does not support these operators. C# disallows this; the only language constructs allowed are those that can be deduced from the constraints.


Автор: k0rvin 11.4.2013, 05:42
Цитата(k0rvin @  10.4.2013,  17:53 Найти цитируемый пост)
найду – выложу

http://ideone.com/ct8xTq

В то время как в любом другом языке с дженериками это работает.

Добавлено @ 05:50
Цитата(Beltar @  10.4.2013,  19:21 Найти цитируемый пост)
У меня один вопрос, ребят, вы вообще понимаете, что это отборная трава? При этом элементарный функционал вида вещественных констант в Паскале был поди в первой версии Вирта. Надо в раздел по Паскалю перепостить, народ поржет. 

Угу, поржет. Над тобой. При чем тут вещественные константы? Ты понимаешь, что в С++ теперь можно константно инициализировать практически что угодно? Например:
Код

constexpr int fact (int x) { x < 2 ? 1 : return x * fact(x - 1); }
const fact10 = fact(10);

Раньше такое можно было шаблонами делать, теперь вот просто функциями. Повтори-ка на Паскале, поржем.

Добавлено через 11 минут и 8 секунд
Цитата(Beltar @  10.4.2013,  19:44 Найти цитируемый пост)
Функция вычисляемая на этапе компиляции является константой. 
Ваш Кэп. 

Кэп может продолжать считать значения этих констант на бумажке/калькуляторе каждый раз, когда они ему нужны. Или у Кэпа текстовый файлик с их значениями? =)

Автор: kolesnle 11.4.2013, 07:58
Цитата(k0rvin @  11.4.2013,  05:42 Найти цитируемый пост)
Повтори-ка на Паскале, поржем.

Да, да ! Давайте поржем все дружно !

Автор: Beltar 11.4.2013, 08:12
Цитата

Ты понимаешь, что в С++ теперь можно константно инициализировать практически что угодно? 


И как же я без этого жил-то...

Цитата

http://ideone.com/ct8xTq


Не вижу ни одного сообщения компилятора относящегося к выражению.
Что и неудивительно, т. к. какие там у Free Pascal'я глюки я не знаю, а вот в Delphi

Код

  TFPGMap<T,R>=class(TObject)
    F1:T;
    Next:R;
    procedure Add(V:R);
  end;

  TMyDictionary = class (TFPGMap<String, TMyDictionary>)
  end;

procedure TFPGMap<T, R>.Add(V: R);
begin
Next:=V;
end;

procedure TForm1.FormCreate(Sender: TObject);
var Root,Last:TMyDictionary;
    i:Integer;
begin
Root:=TMyDictionary.Create;
Root.F1:='0';
Last:=Root;
for i:=1 to 10 do
  begin
  Last.Add(TMyDictionary.Create);
  Last.Next.F1:=IntToStr(i);
  Last:=Last.Next;
  end;
Last:=Root;
repeat
label1.Caption:=Label1.Caption+Last.F1+' ';
Last:=Last.Next;
until Last=nil;
end;


Нормально компилируется. Минут 5 вдумчивого топтания батонов и вот вам набросок связного списка (Болт на утечки), по крайней мере, именно такая идея для такого шаблона первой пришла в голову. smile

Автор: Beltar 11.4.2013, 08:36
Цитата

The following are the key differences between C# Generics and C++ templates:


Мы вроде не о решетке говорим.

По поводу функций, как констант, понимаешь в чем проблема, можно представить себе использование констант вида a+b и задавать этим, например, размер массива, или что-то в этом духе, но нет никакого смысла подсчитывать на этапе компиляции сверхсложное выражение, на худой конец, посчитай один раз при инициализации программы, да конечно, это лишняя работа в рун-тайм, вот только размер этой лишней работы рассыпается в пыль. Т. е. добавляется фича, которая нужна раз в 100 лет (хотя можно было бы и в Паскале без изменения синтаксиса вообще прикрутить использование стандартных функций для инициализации констант, но никто бы этого не заметил), и прибавки от нее на копейку, при этом сделать те же нормальные строки от которых пользы на миллион, или вменяемую модульность хотя бы на уровне паскалевских юнитов, вместо убогого механизма инклюдов, который, кстати, в Паскале тоже есть, но применяется весьма ограниченно, все никак не соберутся.

Так куда идет C++? В сторону наращивания фич для over 9000 частных случаев.

Автор: kolesnle 11.4.2013, 08:48
Цитата(Beltar @  11.4.2013,  08:36 Найти цитируемый пост)
В сторону наращивания фич для over 9000 частных случаев.

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

Цитата(Beltar @  11.4.2013,  08:36 Найти цитируемый пост)
паскалевских юнитов

Чем тебя не устраивают инклюды? Они лучше паскалевских юнитов

Автор: Akella 11.4.2013, 09:37
Цитата(k0rvin @ 10.4.2013,  17:53)
Цитата(Beltar @  10.4.2013,  12:39 Найти цитируемый пост)
В Паскале есть дженерики.

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

ну 4 года назад были недоделаны, да, когда их внедряли
ну теперь-то всё ок

Добавлено через 9 минут и 42 секунды
Цитата(k0rvin @  11.4.2013,  05:42 Найти цитируемый пост)
http://ideone.com/ct8xTq

В то время как в любом другом языке с дженериками это работает.



Там речь идёт о Pascal (fpc) (fpc 2.6.2)

это freePascal (Lazarus)


Кстати, на Lazarus можно писать кросплатформенные приложения.
Современный Delphi и Lazarus похожи, очень. Но есть всё равно различия.
И некоторые разработчики компонент выпускают версии и для Lazarus в том числе.

Автор: Akella 11.4.2013, 10:02
Цитата(k0rvin @  11.4.2013,  05:42 Найти цитируемый пост)
код C++
constexpr int fact (int x) { x < 2 ? 1 : return x * fact(x - 1); }
const fact10 = fact(10);



Что это за .... зачем оно такое? Delphi - это крисвый, изящный язык программирования. Легко читаемый. Даже если есть, то для чего такое, что оно даёт, какие приимущества?

Автор: Beltar 11.4.2013, 10:28
Цитата

Чем тебя не устраивают инклюды? Они лучше паскалевских юнитов


Механизм инклюдов не предполагает никакого контроля видимости и повторного использования кроме набрасывания дефайнов. Про взаимную видимость, которая есть в Delphi, если модули прописывать в секции implamentation я уж молчу. Кроме того, юнит, это не просто кусок текста, это строго отформатированный элемент компиляции со списком экспорта. Или ты думаешь, что в Борланд такие дураки были, что ввели юниты в BP 4, когда инклюды, как самый примитивный способ реализации многофайловых исходников уже давно были? Кстати, как инклюдами предполагается разруливать ситуацию, когда в них есть одноименные идентификаторы? В юнитах коллизия разрешается явно, последний перечисленный юнит имеет приоритет, при обращении без спецификации юнита. А еще в юнитах есть такие интересные секции, как initialization и finalization, ну и четкое разделение, что на экспорт, а что внутреннее, т. е. юнит даже в обычном Паскале обеспечивал работу, похожую на ООП.

Цитата

Даже если есть, то для чего такое, что оно даёт, какие приимущества?


Возможность сэкономить одну микросекунду при запуске посчитав какую-то хрень при компиляции.  smile 

Автор: k0rvin 11.4.2013, 12:52
Цитата(Beltar @  11.4.2013,  08:12 Найти цитируемый пост)
набросок связного списка (Болт на утечки), по крайней мере, именно такая идея для такого шаблона первой пришла в голову.

Вообще слова Map/Dictionary в названиях классов намекают на ассоциативные массивы. Ну да ладно, похоже пофиксили.

Цитата(Beltar @  11.4.2013,  08:36 Найти цитируемый пост)
Мы вроде не о решетке говорим.

Как будто делфийские дженерики сильно отличаются от шарповых.

Цитата(Akella @  11.4.2013,  10:02 Найти цитируемый пост)
Что это за .... зачем оно такое? Даже если есть, то для чего такое, что оно даёт, какие приимущества?

Уменьшение нагрузки на рантайм, при этом никакого изменения кода, кроме добавления constexpr не нужно. Собственно в том же ФП это называется http://en.wikipedia.org/wiki/Referential_transparency_(computer_science). В будущем было бы неплохо научить компилятор плюсов определять чистые функции автоматически и соответственно лучше оптимизировать код.

Автор: Akella 11.4.2013, 13:05
Нагрузка на рантайм в этом случае, мне кажется минимальна если будет написано по другому, без этого кода. Её вообще не будет, мне кажется.

Добавлено @ 13:11
В любом случае, компилятор Delphi при сборке аппликации способен упростить выражение до константы.
Но делать то, что умеет компилятор в ущерб читаемости, не камильфо.

Автор: k0rvin 11.4.2013, 13:35
Цитата(Akella @  11.4.2013,  13:05 Найти цитируемый пост)
Но делать то, что умеет компилятор в ущерб читаемости, не камильфо.

Добавление слова constexpr перед определением функции -- это ущерб читабельности? o_O'

Автор: Akella 11.4.2013, 14:52
я в общем про тот код

Автор: k0rvin 11.4.2013, 15:05
Цитата(Akella @  11.4.2013,  14:52 Найти цитируемый пост)
я в общем про тот код 

Он не имеет отношения к обсуждаемой фиче. Вот то же самое на паскале:
Код

constexpr function Fact(x : Integer) : Integer;
begin
  if x < 2 then Fact := 1 else Fact := x * Fact(x - 1);
end;

const Fact10 = Fact(10);

Автор: Beltar 11.4.2013, 15:37
Цитата

Вообще слова Map/Dictionary в названиях классов намекают на ассоциативные массивы.


Я не знаю на что намекают названия классов, а вот структура данных, которая содержит ссылку на объект своего собственнного типа намекает как раз на связный список.  Для ассоциативных массивов (оказывается такая очевида штука, как массив из структур с полем идентификатором даже название крутое имеет. smile ) в Delphi есть заготовки вида TDictionary<string, string>.

Цитата

Как будто делфийские дженерики сильно отличаются от шарповых.


Кстааати,

C# does not support explicit specialization; that is, a custom implementation of a template for a specific type.

В твоем примере, который в FPC не компилировался, как раз и создается класс наследник под 2 заданных типа. Если это не custom implementation of a template for a specific type, то что это?
procedure Proc<T>(A: T); overload;
procedure Proc(A: String); overload;

Это что? Если вспомнить об утиной типизации, то вполне плавает, крякает и от утки не отличимо.

Собственно хелп Delphi по этому поводу так и говорит:

Цитата

Generics in Delphi are unlike templates in C++ or generic types in C#. Most notably, a type parameter cannot be constrained to a specific simple type, such as Integer, Double, String, and so forth. In cases where different types need to be expressed (including simple types), consider using overloaded functions for each needed type or use a record type such as TValue from the System.Rtti unit, which offers operators and methods for storing and querying these data types.


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

Автор: Akella 11.4.2013, 15:49
Цитата(k0rvin @ 11.4.2013,  15:05)
Цитата(Akella @  11.4.2013,  14:52 Найти цитируемый пост)
я в общем про тот код 

Он не имеет отношения к обсуждаемой фиче. Вот то же самое на паскале:
Код

constexpr function Fact(x : Integer) : Integer;
begin
  if x < 2 then Fact := 1 else Fact := x * Fact(x - 1);
end;

const Fact10 = Fact(10);

так это другое дело  smile 

Автор: k0rvin 11.4.2013, 16:07
Цитата(Beltar @  11.4.2013,  15:37 Найти цитируемый пост)
структура данных, которая содержит ссылку на объект своего собственнного типа намекает как раз на связный список.

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

Цитата(Beltar @  11.4.2013,  15:37 Найти цитируемый пост)
RTTI

О, да ты любитель рантайм-кастов, значит.


Цитата(Akella @  11.4.2013,  15:49 Найти цитируемый пост)
так это другое дело

Это одно и то же.


Цитата(Beltar @  11.4.2013,  15:37 Найти цитируемый пост)
procedure Proc<T>(A: T); overload;
procedure Proc(A: String); overload;

[DCC Error] Unit1.pas(22): E2530 Type parameters not allowed on global procedure or function

Автор: Beltar 11.4.2013, 18:06
Цитата

E2530 Type parameters not allowed on global procedure or function


Ну всунь в класс, как раз в духе .NET.

Автор: Akella 11.4.2013, 21:35
Цитата
“В C++ всего 2 вещи получились не так: начальный замысел и реализация.” — Бертран Мейер

Автор: LSD 12.4.2013, 12:49
Замечательный язык, не кода а песня smile 
Код

return (Param.Object->*(Param.Function))(Param.Param);
}

/*
как теперь не веселиться, не грустить от разных бед,
в нашем доме поселился замечательный сосед
пам-пам пам-парам-пам-пам-пам
пам-парам-пам-пам-пам
пам-парам-пам-пам
парарарарарам-пам
*/

Автор: Athari 25.4.2013, 19:09
Если уж говорить о замечательном очевидном синтаксисе, то вот примеры:

Код

void**(*d)(int&,char**(*)(char*,char**));
char(*(*f())[])()char(*(*x[3])())[5];
const char**const p;


Хотя, конечно, так никто не делает. Если только на конкурс по обфускации.

Автор: catr 17.6.2013, 05:41
Цитата(Akella @  11.4.2013,  21:35 Найти цитируемый пост)
“В C++ всего 2 вещи получились не так: начальный замысел и реализация.” — Бертран Мейер


There are only two kinds of languages: the ones people complain about and the ones nobody uses. -- Bjarne Stroustrup

Автор: k0rvin 17.6.2013, 10:43
Да че уж по одной да по одной. http://harmful.cat-v.org/software/c++/

Автор: Beltar 22.6.2013, 20:46
Цитата

There are only two kinds of languages: the ones people complain about and the ones nobody uses. -- Bjarne Stroustrup


Всяк кулик свое болото хвалит.

Автор: drkot 4.9.2013, 02:56
Цитата(k0rvin @  11.4.2013,  05:42 Найти цитируемый пост)
Угу, поржет. Над тобой. При чем тут вещественные константы? Ты понимаешь, что в С++ теперь можно константно инициализировать практически что угодно? Например:код C++1:2:constexpr int fact (int x) { x < 2 ? 1 : return x * fact(x - 1); }const fact10 = fact(10);highlightSyntax('cpp_jZThhM','cpp');Раньше такое можно было шаблонами делать, теперь вот просто функциями. Повтори-ка на Паскале, поржем.

Простите, за наивный вопрос, но можно пример практической задачи где подобный механизм необходим?
И второе, вычисления производятся на этапе компиляции или выполнения? 
Цитата(kolesnle @  11.4.2013,  08:48 Найти цитируемый пост)
Чем тебя не устраивают инклюды? Они лучше паскалевских юнитов

чем?

Автор: k0rvin 4.9.2013, 18:30
Цитата(drkot @  4.9.2013,  02:56 Найти цитируемый пост)
Простите, за наивный вопрос, но можно пример практической задачи где подобный механизм необходим?

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

Цитата(drkot @  4.9.2013,  02:56 Найти цитируемый пост)
И второе, вычисления производятся на этапе компиляции или выполнения?

Конечно на этапе компиляции в этом и смысл.

Автор: drkot 4.9.2013, 21:25
Цитата(k0rvin @  4.9.2013,  18:30 Найти цитируемый пост)
способ выполнять некоторые вычисления на этапе компиляции

меня интересует реальный пример когда это необходимо и целесообразно, так как представить куда можно применить данный механизм не могу.
Цитата(k0rvin @  4.9.2013,  18:30 Найти цитируемый пост)
механизм не для решения непосредственно каких-то конкретных прикладных задач

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

Цитата(k0rvin @  4.9.2013,  18:30 Найти цитируемый пост)
на этапе компиляции

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

Автор: k0rvin 4.9.2013, 22:00
Цитата(drkot @  4.9.2013,  21:25 Найти цитируемый пост)
Вы только что сказали что данный механизм не нужен, осторожнее, Вас могут понять буквально.

Нет, я только что сказал, что этот инструмент для для решения конкретных прикладных задач, а общая фича языка. Такая же как сonst например или классы.

Цитата(drkot @  4.9.2013,  21:25 Найти цитируемый пост)
меня интересует реальный пример когда это необходимо и целесообразно, так как представить куда можно применить данный механизм не могу.

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

static koi8r_cp1251_table = make_table("привет", "БНОПНЯ");

не напрягая этим рантайм.

Цитата(drkot @  4.9.2013,  21:25 Найти цитируемый пост)
могу заблуждаться, но в С есть достаточно мощный препроцессор, который без труда можно заточить под формирование констант на этапе сборки. 

Заблуждаешься, в С примитивный препроцессор, который практически только и умеет что простую текстовую подстановку кода. При этом никаких особых вычислений в compile-time не сделать. Шаблоны С++ позволяют некоторые простые вещи вычислить во время компиляции, но они несколько громоздки в написании и их почти нельзя запихнуть в объектник, только в заголовочный файл.


Цитата(drkot @  4.9.2013,  21:25 Найти цитируемый пост)
В чем необходимость данного нововведения?

Как всегда: плюсовики фапают на скорость. =)

Автор: drkot 5.9.2013, 04:08
Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
Нет, я только что сказал, что этот инструмент для для решения конкретных прикладных задач

Цитата(k0rvin @  4.9.2013,  18:30 Найти цитируемый пост)
Это механизм не для решения непосредственно каких-то конкретных прикладных задач

определитесь, пожалуйста, он для или не для. 
Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
Такая же как сonst например или классы

озвученные Вами механизмы решают непосредственно очень конкретные задачи. И то что их часто применяют говорит о высокой целесообразности, а не о том, что это 
Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
общая фича языка

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

Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
Построить таблицу области значений функции

Зачем? Где это используется? Если функция непрерывна, то в этом мало смысла, если же она дискретна, то является математически простой и смысла ее загонять в константу нет. А если функция о 20-ти параметрах? и каждый принимает хотя бы три значения. Сколько будет весить константа? 
Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
соответствия символов кодировок например

Как? Хочу пример функции которая создаст массив подстановок для перекодирования koi-7 в utf-8. Ну или хоть какой-то... Перекодировка подстановками делается т.к. в процессе написания аналитической функции есть риск, что пупок развяжется...
Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
1:static koi8r_cp1251_table = make_table("привет", "БНОПНЯ"); не напрягая этим рантайм.

одного не могу понять, что делает функция make_table? Собственно Вы и так передали на вход таблицу перекодировки, зачем с ней еще что-то делать?
ИМХО: судя по цитате Вы любите Си за необходимость решать простые вещи, через очень сложное место...
  
Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
Заблуждаешься, в С примитивный препроцессор, который практически только и умеет что простую текстовую подстановку кода

возможно... но что-то мне подсказывает, что Си это не язык, а конструктор Вашего языка... или это всего лишь профанация, порожденная отдельными личностями? и брызги по поводу великого препроцессора Си это так, ППР?
Расширять функционал препроцессора не пробовали?

Цитата(k0rvin @  4.9.2013,  22:00 Найти цитируемый пост)
Как всегда: плюсовики фапают на скорость.

не спорю, подстановки быстрее вычислений (причем любых). 
но роль данного механизма в make_table("привет", "БНОПНЯ") более чем сомнительна, так как смысла функции (действий) в данном примере нет.
а использование предварительно вычисленных значений функций, попахивает лабами 5-го класса... "распечатаете значение функции y=2*x где x = 0,1 - 10"... Там же где используется статичный базис (простейшее crcXX, mdX) функции вычисления базисных констант математически сложны, требуют не дюжего количества кода и вычисления могут длится не то что часами, а даже неделями.
Учитывая что компиляция и так не ракета, применение вычисляемых констант затормозит ее еще больше... Думаю найдутся таланты вычисляющие число Пи на этапе компиляции... 

Автор: k0rvin 5.9.2013, 06:54
Цитата(drkot @  5.9.2013,  04:08 Найти цитируемый пост)
определитесь, пожалуйста, он для или не для.

Опечатка, правильно «не для».

Цитата(drkot @  5.9.2013,  04:08 Найти цитируемый пост)
озвученные Вами механизмы решают непосредственно очень конкретные задачи.

Например?

Цитата(drkot @  5.9.2013,  04:08 Найти цитируемый пост)
одного не могу понять, что делает функция make_table? Собственно Вы и так передали на вход таблицу перекодировки, зачем с ней еще что-то делать?

Создает (например хеш)-таблицу символ первого алфавита -> символ второго алфавита (или две таблицы для обоих направлений) во время компиляции, для быстрого поиска. Алфавит известен, от рантайма не зависит, так почему бы не сделать это во время компиляции? Некоторые языки имеют литералы для хешь-таблиц, C++ — нет, и кроме хеш-таблиц есть и другие структуры данных, различных видов деревья, например, на каждую структуру литералов не напасешься.

Цитата(drkot @  5.9.2013,  04:08 Найти цитируемый пост)
возможно... но что-то мне подсказывает, что Си это не язык, а конструктор Вашего языка... или это всего лишь профанация, порожденная отдельными личностями? и брызги по поводу великого препроцессора Си это так, ППР?

Не знаю, что за личности, но препроцессор Си туп как пробка. Конечно с его помощью реализованы объекты GObject в GTK, но, насколько я знаю, там такой ад и каша из макросов, что лучше б они этого не делали.

Цитата(drkot @  5.9.2013,  04:08 Найти цитируемый пост)
а использование предварительно вычисленных значений функций, попахивает лабами 5-го класса... "распечатаете значение функции y=2*x где x = 0,1 - 10"...

Если область определения известна на этапе компиляции, то почему бы не сделать функцию y константным выражением. Какая постановка задачи, такое и решение. =)
Естественно в реальной жизни y должна быть обычной функцией, т.к. данные будут поступать в рантайме, но речь-то не об этом.

Цитата(drkot @  5.9.2013,  04:08 Найти цитируемый пост)
Учитывая что компиляция и так не ракета, применение вычисляемых констант затормозит ее еще больше... Думаю найдутся таланты вычисляющие число Пи на этапе компиляции...  

Это уже другой вопрос, таланты всегда были и будут.

Автор: ТарасАтавин 16.9.2013, 10:26
Цитата(TP@MB@Y @  11.7.2005,  19:35 Найти цитируемый пост)
Сорри если не туда запостил топик 

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

Конечно, существует такой сильный фактор, как "к чему в детстве приучили". Я например начинал с паскаля и сейчас отдаю ему предпочтение (читай Delphi). Кто то начинал с Си и сейчас например предпочитает Билдер Дельфям. А ктооо тооо (тут полагается сделать зловещую паузу  ) учил в детстве бэйсик....
Билдер делфям не предпочитают, билдер юзают дельфицы при необходимости работы в парах с крестанутыми и сионистами, в нем не осталось ни гибкости полноценных плюсов в плане разработки интерфейса, ни упрощённого-сокращённого паскального синтаксиса. Я тоже начинал с паскаля, а пишу на кодоблоках, так как они не навязывают мне vcl, а позволяют весь интерфей

Цитата(TP@MB@Y @  11.7.2005,  19:35 Найти цитируемый пост)
Вобщем мне жутко интересно, чем лучше C++ того же паскаля? Думаю всем здесь известно, что настоящий программист составляет и реализует свои алгоритмы, и в зависимости от специфики задачи выбирает удобную в плане реализации среду программирования. 

Конечно, существует такой сильный фактор, как "к чему в детстве приучили". Я например начинал с паскаля и сейчас отдаю ему предпочтение (читай Delphi). Кто то начинал с Си и сейчас например предпочитает Билдер Дельфям. 
Билдер не предпочитают, его юзают пасквилянты при необходимости работы в парах с сионистами и крестанутыми. В нём нет ни упрощённо-сокращённого синтаксиса делфей, ни гибкости плюсов в плане разработки интерфейса. Я тоже начинал с паскаля, а пишу на c++ на кодоблоках, так как они не навязывают мне vcl, а позволяют интерфейс писать на том же языке. Гибко и достаточно произвольно. Можно хоть direct-x для кнопок заюзать их положить в 3D прямо на главное окно, не связываясь с панелями и не страдая тенями "рельефа" этих панелей по краям. Или ещё что нибудь не стандартное сделать. Можно даже вообще отказаться от окна и весь вывод отправить на рабочий стол, а под делфой это выльется в борьбу с vcl.

Автор: Exiousle 27.9.2013, 11:44
 smile  ВСЕМ нравится С++??? ВСЕМ??? 
Где это написано?  smile 
Или я не все, или С++ любят НЕ все  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)