| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Религиозные войны > Почему все любят С++? |
| Автор: TP@MB@Y 11.7.2005, 19:35 |
| Сорри если не туда запостил топик Вобщем мне жутко интересно, чем лучше C++ того же паскаля? Думаю всем здесь известно, что настоящий программист составляет и реализует свои алгоритмы, и в зависимости от специфики задачи выбирает удобную в плане реализации среду программирования. Конечно, существует такой сильный фактор, как "к чему в детстве приучили". Я например начинал с паскаля и сейчас отдаю ему предпочтение (читай Delphi). Кто то начинал с Си и сейчас например предпочитает Билдер Дельфям. А ктооо тооо (тут полагается сделать зловещую паузу Так вот. Вопрос заключается в следущем: ЧЕМ кардинально отличается С++ от паскаля? Конкретные примеры есть? |
| Автор: Domestic Cat 11.7.2005, 19:41 |
| Это в религиозные войны. Кстати, к примеру, я жутко не люблю С++, так что слово "все" лишнее... |
| Автор: Void 11.7.2005, 20:06 | ||||||
Во-первых, как правильно заметил Domestic Cat, этот провокационный вопрос надо в Религиозные войны
В принципе, это так. Но, во-первых, число языков, которые можно знать на высоком профессиональном уровне, довольно ограничено. Во-вторых, большую, подчас решающую роль играет наличие поддержки этой среды для данной платформы, готовых библиотек, квалификация остальных разработчиков в команде... Все не так просто.
Ну я учил
Отличий масса... На мой взгляд, наиболее существенное отличие языка - наличие шаблонов и автоматических объектов. Именно из этого проистекают наиболее важные на мой взгляд практические различия. Ну и некоторый синтаксический сахар в виде перегрузки операторов. Это из преимуществ. А из недостатков (опять же на языковом уровне) - отсутствие модульности. Кстати, "все" его действительно не любят. Сейчас, пожалуй, даже больше тех, кто его не любит. Правда, C++ они чаще противопоставляют Java и .NET, а не Паскаль/Delphi. |
| Автор: TP@MB@Y 11.7.2005, 20:31 |
| Со словом "все" я действительно поторопился. Я хотел сказать, что большинство программистов (особенно продвинутых) восхваляют Си. По поводу шаблонов и перегрузки операторов: действительно это делает Си более мощным языком, но мне например кажется, что эти "вкусности" мало испоьзуются и являются экзотикой (хотя это конечно же ИМХО) А вообще мне лично Си ненравится из-за его "закорючности" в синтаксисе: фигурные скобки, амперсенты, звездочки... =) Вобщем если сравнивать с тем же паскалем (хотя он создавался как учебный язык программирования для студентов), то у первого код намного читабельнее чем у Си. PS я не против переноса темы в "Религиозные войны" |
| Автор: Domestic Cat 11.7.2005, 20:40 |
| Не путай Си и С++ - в С нет шаблонов и это вообще чисто процедурный язык. |
| Автор: Mayk 11.7.2005, 20:49 | ||||
Паскаль vs C?
В паскале нет шаблонов. Это раз. В паскале нет циклов. Это два(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у в пору бится в конвульсиях. Кстати, сколько операционных систем написано на паскале?
Ну, например, я. Это был единственный нормальный ЯВУ на ZX спеки 48кб. Все остальные не могли быть нормальными, так как им негде было размещать свое толстое тело. Бейсик был просто вшит. ЗЫ. МОДЕРАТОРЫ, перенесите тему в религиозные войны. |
| Автор: Void 11.7.2005, 20:49 | ||||||
Я сейчас буду занудой... Без шаблонов современный C++ невозможен в принципе. На шаблонах держится практически вся стандартная библиотека C++. Без перегрузки операторов невозможно прозрачно сэмулировать числовые, векторные и матричные типы, умные указатели.
Синтаксис - исключительно дело вкуса. Когда вы найдете у языка существенные практические преимущества, вы быстро забудете про эстетические качества синтаксиса
Для новичка - да. А для опытного программиста поддержка кода на них одинакова по сложности, имхо. P.S. Как и многим здесь присутствующим, мне наперед известны почти все аргументы и контраргументы, которые сейчас пойдут в дело. И все-таки мне почему-то еще интересны язковые войны |
| Автор: Earnest 11.7.2005, 21:10 |
| Mayk, полностью поддерживаю! И еще добавлю: шаблоны С++ сделали возможным реализацию концепций обобщенного программирования. Да, в С++ нет объектов типа "метакласс", порождающих классы. Но с помощью шаблонов это прекрасно эмулируется - достаточно почитать Александреску или посмотреть в boost. Причем, все это (в отличие от супер-высокоуровневых языков типа Smalltalk) абсолютно бесплатно (в смысле производительности)! Потому что все навороты кода беследно исчезают в момент компиляции. Таким образом, ИМХО, наиболее мощное свойсво С++, отличающее его от всех существующих языков программирования, это то, что он позволяет писать очень высокоуровневые и выразительные программы, и при этом получать очень производительный код. |
| Автор: simanyay 11.7.2005, 21:15 |
| Но лучше всего Java |
| Автор: TP@MB@Y 11.7.2005, 21:36 |
| Mayk Сдаюсь! Вы просто разбомбили меня аргументами Теперь я кажется получил довольно полный ответ на мой вопрос. PS Говоря "Си" я подразумевал С++ PSS Ну на самом деле я "войны" не хотел, а просто удовлетворил свой интерес Хеппи энд |
| Автор: chipset 11.7.2005, 21:52 |
| Эй, эй! Ну я люблю C++ А почему? А патамушта и свобода и удобно программировать! Хочешь, на чисто Сишных функциях дрова кодь, а не хочешь, с 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ь написать? |
| Автор: TP@MB@Y 12.7.2005, 00:48 |
| Vadim999 1) Я конечно не компетентен в этом вопросе (программирование осей), но почему нет? 2) Допустим нельзя написать ось на дельфи (в чем я сомневаюсь). Но разве это ОГРОМНЫЙ МИНУС С осями разобрались. |
| Автор: Kurt 12.7.2005, 01:01 | ||
Писать под не-Windows системы. Kylix не в счет - он тока под *.nix и уже не развивается. |
| Автор: Alex 12.7.2005, 01:04 |
| Если брать прикладные задачи, то разницы на чем их реализовывать на С++ или Delphi нет ни какой |
| Автор: S.A.P. 12.7.2005, 01:09 | ||
Добавлено @ 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 реализованы лучше и дают больше возможностей.
Чипсет, а я С++ вообще не признаю, он постепенно уйдет на третий план, в системное программирование и в игры (где я его и признаю). Потом, мы ж не в ресторане, чтобы смотреть ассортимент. Ну много С++ библиотек. Ну и Java библиотек немало. В Java пользуют в основном несколько гуи библиотек, и в С++ то же самое.
Вот именно... |
| Автор: Void 12.7.2005, 06:49 | ||||
Не передергивайте
А также в платформы, где кроме C/C++ ничего нет и не предвидится. Тут я согласен. Чем больше прикладного софта будет написано на управляемых средах, тем лучше и для программистов, и для юзеров. |
| Автор: Domestic Cat 12.7.2005, 07:06 | ||
Почему? |
| Автор: vladgri 12.7.2005, 08:12 | ||||
| Вообще то не корректно сравнивать Delphi c C++ (общим названием) быстрее уж Delphi vs MSVC++ и (или) ObjectPascal vs C++ (Pascal vs C).
Есть FreePascal.
На 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 ) |
| Автор: Void 12.7.2005, 08:19 | ||
| Та-ак, что ты мы опять скатываемся в C++ vs Java, а про автора темы забыли TP@MB@Y Практически все, что можно сделать в C++, можно сделать в Delphi, и наоборот. Вопрос лишь в том, в какой геморрой это выльется Как уже говорилось, в Delphi нет шаблонов и автоматических объектов. Из этого следует, что на Delphi принципиально невозможно создать умный указатель. А вручную освобождать память при создании сложного графа объектов (напимер, узлы AST в трансляторе) - это... Наглядная демонстрация возможностей C++ - это STL (про Boost я пока молчу C++ - это своеобразный констуктор "сделай все сам". Шаблоны (+ иногда препроцессор) позволяют вводить в язык сущности, которые он изначально не поддерживает, причем с высокой эффективностью в рантайме (но, увы, как правило, ценой времени компиляции). Конечно, с LISP C++ в этой области не тягатся, но большинство мейнстримных языков (и Delphi в том числе) вообще не обладают такими способностями. Пример - создание анонимных функций (лямбда-функций). С помощью STL и библиотеки Boost.Lambda мы можем написать так:
Эта строчка вставит элементы из контейнера in в конец контейнера out, прибавив к каждому из них x. Этот пример также демонстрирует использование замыкания (closure) - ведь x берется из контекста вызова. Можно такое сделать в Delphi? Сомневаюсь |
| Автор: vladgri 12.7.2005, 08:39 | ||
Пример автоматических объектов на Delphi. http://rsdn.ru/File/41945/autoObj.rar |
| Автор: Void 12.7.2005, 09:44 | ||
Пардон, не сразу заметил пост... Параметром дженерика может быть только тип. Дженерики нельзя явно специализировать, нет и частичной специализации. Параметр дженерика сам не может быть дженериком (т.е. нельзя написать class<T<U>, V>). Невозможен SFINAE (substitution failure is not an error). vladgri Ах да... читал ведь ту ветку, мог бы вспомнить... Зачет Предложение всем: давайте отходить от отрицательной аргументации: ваш XXX так не может, а вот YYY... Особенно когда имеете о XXX поверхностное представление. Вот например я только что с автоматическими объектами в Delphi лажанулся |
| Автор: vladgri 12.7.2005, 11:48 | ||||
Единственный аргумент это отсутствие типизации.
Ни в одном форуме отрицательно не высказывался ни о каком языке програмирования. Мне кажется все они имеют право на существование. Если какой либо из ЯП, помог реализовать свои мысли хотябы одному програмисту, то это хороший ЯП. 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, 12:37 | ||||
To Perchilla
http://www.compuphase.com/small.htm
|
| Автор: S.A.P. 12.7.2005, 12:43 |
| vladgri во во Вон в последних дельфях и прегрузка операций появилась и шаблоны можно организовать. |
| Автор: Ch0bits 12.7.2005, 15:09 |
| Ооо!!! Как ШЫ++ хвалят! Щас ВСЁ брошу и кинусь ставить старую недобрую VS6 и давай кодить троянов как в старые недобрые времена. C# на помойку! |
| Автор: S.A.P. 12.7.2005, 15:14 |
| Vadim999 ты ето... рекламу в подписи то подправь |
| Автор: Се ля ви 12.7.2005, 16:55 | ||
у меня он после Си++ вызывает ассоциацию такую - он просто деревянный. Видели какую-нибудь деревянную избу? Вот если её сравнить со зданием эры Hi-Tech, то это и будет похоже на сравнение С++ и Object Pascal . Не, это кароче не серьёзно. Кроме того, не забываем, что Дельфи как самостоятельный проект позорно слили, подложив его под dotNET в последней версии - Паскаль, годный для сердцевины Enterprise-приложений, теперь существует лишь как диалект MSIL`а, более привычный для приверженцев Дельфи и на этом поле у меня боооольшие сомнения, что он долго выдержит конкуренцию с C#`м и не скатится на уровень Visual Basic`а... А вообще-то, если рассматривать классические Паскаль и Си, то Си - вообще считается языком среднего, а не высокого уровня - и именно в этом его уникальность. Т.е. он более низкоуровневый, чем Паскаль. Если не прибегать к ассемблерным вставкам, а использовать чистые возможности языка, то на Си можно работать с аппаратурой на гораздо более низком уровне - насколько я знаю, на нём даже драйвера без применения асма иногда пишут. Да и код в итоге получается компактнее и екзешник аналогичный меньше ресурсов ест - т.е. гораздо более широкие возможности оптимизации. |
| Автор: S.A.P. 12.7.2005, 17:25 | ||
Се ля ви щас тебе покажут какой - нибудь DDK для дельфи Споры бесспыслены |
| Автор: Void 12.7.2005, 19:35 | ||||||||||||
Немаловажный, однако. Хотя, конечно, это гораздо лучше, чем ничего.
Это совсем не к вам относилось
Интересно... Не имею возможности плотно с ними познакомится, но складывается впечатление, что авторы действительно выжали из языка что могли
А что, есть такие?
В смысле, дженерики?
Отнюдь, в них хоть и не рождается истина, но зато пробуждается любознательность. Если в итоге хоть один человек повнимательнее присмотрится к C++ или какому-нибудь другому языку - флеймили не зря |
| Автор: S.A.P. 12.7.2005, 19:51 | ||
|
| Автор: rsm 12.7.2005, 22:04 | ||
Я присматриваюсь Давайте будем спорить о графических либах для С++ - глядишь что-нить реально хорошее отыщется, польза будет! З.Ы. О бесплатности и возможности писать коммерческий софт: очень важно, чтобы библиотека была бесплатная (ну нету у меня пары килобаксов на Qt! Примечание о VCL: насколько мне помнится, лицензия на пробную версию Дельфи разрешает писать шароварный софт. Так что можно условно считать VCL бесплатной - раз в месяц переустановить Дельфи это не проблема. |
| Автор: vladgri 13.7.2005, 06:11 | ||
To rsm
Посмотри http://sourceforge.net/projects/wxformbuilder/ и (мне больше нравиться) http://sourceforge.net/projects/wxdsgn |
| Автор: Void 13.7.2005, 12:21 | ||||
Вообще, сам факт, что какая-то фича вводится в язык отдельным препроцессором, меня совершенно не коробит. Я бы с удовольствием признал наличие в такой custom Delphi шаблонов, если бы не одна проблема - диагностика ошибок в шаблонном коде. Она достаточно хреновая и в нынешних плюсах, а тут не будет вообще никакой. А значит практическая ценность подобных наворотов - околонулевая. Сделать же нормальную диагностику, не интегрировавшись с компилятором - нереально.
А законна ли такая переустановка сама по себе? А GUI для C++ - действительно больной вопрос... Я не испытывал в такой библиотеке очень уж острой необходимости, но пока все что я видел не очень впечатляет. (Qt еще не пробовал. Сейчас докачиваю Qt4 opensource edition, но без VS я вряд ли проживу. Наверное, придется забить и доставать ломаную коммерческую версию |
| Автор: vladgri 13.7.2005, 13:21 | ||
Цитата (Void @ 13.7.2005, 12:21)
Ну почему же так жестко ? Отладка шаблона производится на тестовом примере, причем в Pascal большинство ошибок (в основном синтаксических) определяется на этапе компиляции. К примеру при испытании http://www.sourceforge.net/projects/dpp32`а я написал и оладил темплейт Auto_Object |
| Автор: CosmoMan 13.7.2005, 16:15 |
| Я программировал сначала на QБейсике, потом на С++ и после него перещел на pascal и Delphi. На мой взгляд нельзя говорить о том, что Delphi не идет ни в какое сравнение с С++. Проблема заключается в том, что в C++ реализовано намного больше возможностей для программирования. При этом С++ обладает очень запутанным синтаксисом и логикой программирования. Изучать его очень долго и трудно, а для начинающих написание приложений в нем превращается в настоящее мучение: указатели на указаеть указателем погоняет. Непонятные ошибки непонятно откудо появляеются. Delphi же обладает более понятным интерфейсом и упрощенной алгоритмической логикой. При этом он конечно очень проигрывает по гибкости C++, однако его намного быстрее можно изучить и писать программы быстро и легко. Самый логичный язык - это С++. С точки зрения логики алгоритма это самый лутший язык в своем роде. Читаемость - это сложный вопросс. Ибо если ты в нем программируеш достаточно давно, то после этого читаемость ObjectPascal окажется более запутанной. Но сначало нужно понять Delphi. Я считаю, что термин "ГУРУ" трудно отнести к программисту в Delphi. Даже достигнув совершенства в Delphi, ты всё равно поймеш, что программисты на С++ круче, т.к. они программируют на С++. Итак, Delphi - это язык программирования для программистов, которые хотят создавать прикладные программы не вдаваясь в тонкости архитектуры ОС , компьютера, пердставления данных и компилятора. Они стеснены узкими рамками компилятора. Вот почему многие операционыые сисетмы написаны на С++ (UNIX). Программируя на С++ ты ощущаеш близость к коду и ты подчти ни чем не ограничен. Это как программирование на ассемблере. НО это все можно достигнуть лиш годами практики программирования на С++. Delphi для профессиональных порграммистов, С++ для ГУРУ. Заранее приношу извенения, если когото обидел. Но это моё мнение. Лично я программирую в Delphi 7 и он мне нравится. В С++ я разбирался очень долго и это дело бросил до поры до времени. |
| Автор: batigoal 13.7.2005, 17:02 | ||
А вот с этим я не согласен (в пользу Java). |
| Автор: TP@MB@Y 13.7.2005, 18:24 | ||||
Void Хм... Навороченность языка С++ действительно делает его очень мощным. НО Вот например для меня разобраться в чужом коде на асемблере намного сложнее, чем написать эту программу самому (попутно изучив проблемы поставленой задачи и ее реализации). Тоже самое с "умными" операторами С++: если мне понадобиться в реализации моей задачи что-то похожее, то проще будет написать самому, чем искать в хелпах и разбираться и подгонять под уже существующую "сущность". |
| Автор: Void 13.7.2005, 19:32 | ||||||
Что ж, очень рад TP@MB@Y
Во-первых, показанные здесь "навороты" реализуются библиотеками, написанными на чистом C++. C++ сам по себе, как язык - ничего этого не дает. Я хочу лишь сказать что шаблоны вместе с перегрузкой операторов позволяют сделать код более высокоуровневым, и понятным, повысить повторное использование кода, повысить его надежность.
Возможно, вы так и поступите. Но для меня и миллионов других C++-программистов легче будет воспользоваться именно хорошо известными и широко распространенными библиотеками (Boost), и конечно же стандартной библиотекой (которая сейчас имеет тенденцию к серьезному расширению). К тому же в Delphi вы, надо полагать, не задумываясь пользуетесь теми сотнями компонентов, которые входят в стандартную поставку, пользуетесь справкой - так почему же вы не признаете code reuse в C++? Синтаксис вам кажется "заумным" - но это лишь от непривычки. Нет, у всего есть предел, в C++ тоже можно наворотить чудовищные и малопонятные конструкции там где можно обойтись локальным велосипедом. Но, поверьте, приведенный код к этому случаю не относится |
| Автор: rsm 13.7.2005, 20:28 | ||||||||
Первая программа весьма интересная, посмотрю ее подробнее. А вторую уже видел - сплошное глюкалово
А кто докажет, что я ставлю Дельфи второй раз?
Это который VC++ 2003 Toolkit? Или что-то другое? Если другое, напиши пожалуйста УРЛ. Добавлено позже Ага, кажись сам http://lab.msdn.microsoft.com/express/visualc/default.aspx. 500 Мб... Мне это никогда не скачать
Мда, вот так всегда - столь мощный язык и так незаслуженно пролетает аки фанера над Парижем |
| Автор: Void 13.7.2005, 21:08 | ||||
Это потому что туда впихнули невпихуемое: 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 обсуждение.
Что ничуть не мешает создавать на C++ самые навороченные GUI |
| Автор: TP@MB@Y 13.7.2005, 22:11 |
| Void Ну я все понимаю, просто раздражает то, что некоторые работадатели ставят задачу + ставят жесткое условие касательно языка программирования |
| Автор: 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); } |
| Автор: batigoal 13.7.2005, 22:41 |
| Вообще-то нечто подобное можно на любом языке написать |
| Автор: Петрович 13.7.2005, 23:27 |
| Мне ближе мнение CosmoMan. Кроме того, хочу добавить от себя. Сам достаточно давно программировал и на pascal'е и на C. Но, всегда в C были проблемы с читабельностью. Например. мне подслеповатому всегда было легко перепутать { и [ на некоторых мониторах (давно это было). Семантическая нагрузка на отдельные символы в C СУЩЕСТВЕННО выше, и в случае элементарных описок, легко получить синтаксически правильную, но неправильную семантически конструкцию. И вылавливать такие ошибкипотом не так легко. Более того, если на C не программировал месяца два, три, то потом, неделю как минимум глаза и мозги настраиваешь. А уж то что на C можно так код написать, что даже твой напарник без поллитра не разберется! Так, постепенно, мои интересы перемещались в область Pascal. С тех пор много воды утекло. Теперь я пишу практически только на Delphi. Хотя, как мне кажется, у меня не вызывает трудностей чтение не слишком замороченных кодов даже на C++. Холтя конечно напрягает В принципе, все что я сказал о C, еще в большей степени относится и к C++. Что же касается возможностей этих языков, то тут я даже спорить не хочу. Скажу лишь что Windows рождалась на Pascal'е. А из своего опыта, могу сказать, что еще в бытность ПЯ, лично принимал непосредственное участие в разработке сетевой операционной системы для встроенных систем, управляющих целым комплексом боевого оборудования. Так вот в этом комплексе, только BIOS компов был написан на ассемблере. Остальное, начиная от ядра ОС и до прикладнгого ПО писалось на pascal'e, правда несколько расширенном (OMSI Pascal). Добавлено @ 23:29 Впротчем, я бы не отказался кое что позаимствовать из C++ в Delphi |
| Автор: CosmoMan 14.7.2005, 10:55 | ||
Полностью согласен, множественное наследлвание например. По моему С++ надо много взять из Делфи, чтобы стать более удобным. |
| Автор: Петрович 14.7.2005, 11:24 | ||||
А мне кажется что использование интерфейсов даже удобнее. Мне лично прежде всего не хватает того, что бы выражение присваивания имело значение. Просто надоело писать подобное:
Ну еще хотелось-бы что бы в блоке 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 | ||
Что-то я совсем рассеянный стал - второй пост уже в этой теме мимо глаз пропустил... А конкретные причины можно? Я вот кроме наличия GC, избавляющего от написания деструкторов, delete, etc ничего не вижу. Мне кажется, что функциональный язык вроде OCaml или Haskell по краткости и логике записи алгоритмов порвет на тряпки и плюсы и яву. А OCaml скорее всего еще попутно порвет Java по скорости. |
| Автор: Domestic Cat 15.7.2005, 21:24 | ||
А по скорости разработки ПО, поддержке и читаемости кода? |
| Автор: Void 16.7.2005, 09:33 | ||
Напомню, речь шла исключительно об алгоритмике. Конечно, писать на них бизнес-приложения было бы довольно странно, но, думаю, в определенных областях они могут конкурировать с Java по всем трем параметрам (научное, математическое ПО, например). На Винграде нужен апологет функциональных языков |
| Автор: batigoal 16.7.2005, 09:48 | ||
Возьмешься? |
| Автор: Void 16.7.2005, 10:22 |
| Lamer George Не знаю |
| Автор: Се ля ви 16.7.2005, 14:21 | ||
Smalltalk и то не смог пробиться в копоративную среду, хотя уж на что хороший язык! Сейчас Python пытается, но шансов не много, хотя язык сам по себе замечательный. Мне кажется, ты не понимаешь, что тормоза, даже если они и есть, могут легко ликвидироваться наращиванием аппаратной части - как чаще всего и делается, и на первый план выходит скорость разработки ПО, требующая библиотек на все случаи жизни - было бы не так - все бы на ассемблере до сих пор писали идеальные быстроработающие алгоритмы. Просто посчитай стоимость компьютерного железа и почасовую оплату опытного программиста - и поймёшь, что гораздо выгоднее купить больше памяти и лучше процессор, чем мучиться с самостоятельным написанием кучи библиотек, необходимых для написания Информационных Систем. Именно по-этому рулят платформы, а не языки. И именно по-этому существуют только 2 настоящих конкурента на корпоративном рынке - .NET, в библиотеки которой вливает тонны денег Microsoft, и J2EE, поддерживаемая не только SUN, но и созданным ей большим сообществом из сотен других крупных компаний, а сейчас ещё и OpenSource`никами. Это тяжёлая ломка, когда понимаешь, что на самом деле оптимальный, вылизанный код нужен только тебе одному и больше никому, но через это рано или поздно пройти придётся. Дело, канешь, твоё - можешь тратить время в пустую, но подумай вот о чём - человек, с точки зрения животных - слаб, медлителен и неэффективен - а между тем доминирует на Земле, да как доминирует! Иные гораздо более эффективные, чем он, по животным меркам, - в красной книге или уже вообще истреблены только потому, что многим его представителям нравится шкура с их трупов. Так же и с языками - эпоха языков прошла, теперь время платформ. Уже не важно, какой ты хороший язык - важно, что бы он позволял использовать всю мощь платформы, был массовым и простым. Дольше, независимее свех держался Delphi, но, как платформа, не выстоял и он - прибился к .NET`у. Python поступил хитрее, его разработчики написали компиляторы для обеих популярных платформ. Сейчас ситуация напоминает холодную войну, гонку вооружений (библиотек) и прочее между двумя самыми популярными платформами - J2EE и .NET, всё остальное - практически не востребовано, приложения на других языках напоминают экзотических зверушек в зоопарке, заповеднике или на воле, куда ещё не добрался человек и они доживают свой век на всё время немилосердно сокращающейся территории... Особнячком стоит гигант С++, бывший некогда практически безраздельный правитель, последний оплот оптимального кода без GC, прочно занимая нишу приложений, где высокая производительность и надёжность критична. Последний, совершеннейший в своём роде динозавр... Да, он был крут, силён и могуч, и он уходит вместе со своей эпохой. Да, он рулил безраздельно на корпоративной арене, но время неминуемо утекает - на нём уже пишутся фундаментальные, универсальные вещи, которые так и норовят закрыться, ошетиневшись внешними интерфейсами, что бы лечь в основу платформ-гигантов, превращая своих программистов в подобие сантехников, приходящих только если поломалось что-то из того, что они написали... Постепенно, хотя и очень медленно, он выдавится и из этих областей платформами-гигантами. Пока виртуальные машины представляют собой нашлёпки над операционными системами - он ещё может давать какой-то выигрыш производительности и надёжности за счёт отсутствия GC, но когда они устоятся, станут по-надёжнее и их реализуют на уровне операционных систем - его позиции сильно пошатнутся даже там, где он царствовал безраздельно с незапамятных времён, в самом сердце крушащейся империи... Когда же виртуальные машины будут частично или полностью реализованы аппаратно, С++ сдаст последние оплоты и окончательно уйдёт в историю, останется лишь партизанить там, где нет больших денег и гиганты просто побрезгуют туда из-за этого лезть с ним биться - в болотах программирования... .NET уже взяла курс на перетягивание бывших С++`ников к себе и, похоже, немного обгоняет в этом Java - именно по-этому в C# хуже чем в Java реализован механизм отлова исключений - лозунг здесь "можем немного пожертвовать удобством языка, только бы по-больше разработчиков переманить" - опять же, заметь, они жертвуют языком, а вместе с тем и платформой, т.е. где-то и возможностями исключительно ради переманивания разработчиков - т.е. вопрос стоит прямо противоположно тому, как его ставишь ты - теперь не язык должен быть хорошим, а языком можно пожертвовать где-то, что бы людям было удобнее переходить, меньше приходилось переучиваться - вот она, другая эпоха! Маркетинг наступает и бъёт чистую алгоритмию. Именно этим я объясняю, помимо обширной рекламной компании, немного большее количество .NET`чиков по сравнению с Java`истами. Вобщем, любить можно какие угодно языки, но давайте думать реалистичнее - что нужно рынку, а что нет. Какие специалисты понадобятся в перспективе, а какие - со времянем не будут нужны никому?... Я вот, лично, хотел бы быть среди первых |
| Автор: Void 16.7.2005, 20:38 | ||
| Се ля ви Хороший пост. Но ты меня неправильно понял - мои взгляды ни в чем радикально не отличаются от вышеизложенных. Дело в том, что многим людям хочется считать любимый язык, будь то Java, C++ или C#, лучшим во всем - в том числе и в таких абстрактных категориях, как читаемость, эффективность, лаконичность. А я указываю на то, что это не так, и что мейнстрим - мейнстримом, а объективность - объективностью. Кстати, быстродействие вовсе не было ключевым моментом моего поста. Наоборот. Погоня за байтами и тактами мне давно не интересна (хотя в индустрии были, есть и останутся области, где вычислительных мощностей не хватает всегда). Мне нет существенной разницы, во что там компилируется язык - нативные коды, MSIL или байткод Java. Речь идет преимуществах декларативного подхода над императивным, там где его оказывается возможным применять - это преимущество внеплатформенно. И если завтра тот же OCaml переедет на .NET (собственно, это уже сделано - см. F#) - суть от этого не поменяется.
Правила наследования в C# ничем не отличаются от таковых в Java. Просто синтаксис наследования класса и реализации интерфейса одинаковый: class Foo : Bar, IBaz вместо class Foo extends Bar implements IBaz. Учите матчасть, товарищи |
| Автор: simanyay 16.7.2005, 20:50 | ||||||||
Не понял причём тут синтаксис. Множественного наследования в C# нет, потому следующий код не скомпилируется
Также как не скомпилируется и этот код
Причём тут синтаксис?
Никогда не понимал этой фразы. Объясните кто-нибудь, пожалуйста. |
| Автор: Irokez 16.7.2005, 20:55 | ||
учите математическую часть |
| Автор: Mayk 16.7.2005, 21:02 |
| - бред автора вызванный невнимательностью и чтением по диагонали - |
| Автор: batigoal 16.7.2005, 21:06 | ||
Материальную Добавлено @ 21:07 Mayk Ничего не понял в твоем коде. |
| Автор: simanyay 16.7.2005, 21:17 | ||
Mayk, я привёл пример и написал, что он не скомпилируется. В этом примере я попытался использовать множественное наследование классов. Раз я написал, что он не скомпилируется, следовательно в Java нет множественного наследования классов. Вот.
А что за материальная часть? |
| Автор: Mayk 16.7.2005, 21:19 |
| simanyay Упс. Извеняюсь, тормозим-с, читаем через строчки. Всё, иду спать. Всё равно не вменяем. |
| Автор: batigoal 16.7.2005, 21:26 | ||
Это выражение употребляют в армии и подобных структурах. "Материальная часть автомата Калашникова". Только не спрашивай у меня, где у него духовная часть. Материальная часть - любое имущество. |
| Автор: simanyay 16.7.2005, 21:30 | ||
Ёптыть, какие корни... |
| Автор: batigoal 16.7.2005, 21:36 |
| Это я под влиянием своего текущего поста в ЖЖ. |
| Автор: Void 16.7.2005, 22:11 |
| Синтаксис Java/C# и этимологию слова "матчасть" разобрали? А по сабжу кто-нибудь выскажется? Мы ж, как никак, в религиозных войнах |
| Автор: batigoal 16.7.2005, 22:24 | ||
Да что там высказываться-то? Почему все любят С++? Так не люблю я его, вот и не знаю, почему его любят. Воюйте на здоровье. |
| Автор: simanyay 16.7.2005, 22:28 |
| Да и никто его не любит. Делают вид |
| Автор: Void 16.7.2005, 22:29 |
| Lamer George Нет. В религиозных войнах сабж - это то, на чем остновилась дискуссия, которая через 10 постов всегда уезжает от заголовка темы |
| Автор: batigoal 16.7.2005, 22:29 |
| simanyay Тогда давай дальше про матчасть Добавлено @ 22:30 Void Ну выходной, блин |
| Автор: Domestic Cat 16.7.2005, 22:33 |
| Про функциональные и декларативные языки - в отдельный тред пжалста. А здесь будем считать кто С++ не любит |
| Автор: chipset 16.7.2005, 22:38 | ||
Ты опечатался. |
| Автор: Void 16.7.2005, 22:42 | ||
Ага, это я тут, бездельник, которому потрепаться охота, тему подымаю Domestic Cat Которая из этих симпатичных рожиц олицетворяет нелюбителей C++ Все, ушел спать |
| Автор: S.A.P. 17.7.2005, 03:08 |
| Я люблю C++ и буду биться до последнего И не надо рассказывать байки про аппаратную реализацию "виртуальных" машин. К тому времени, когда это возможно настанет, независимых платформ будет так много, что мы опять придем к еще более ужасному разграничению, уже на аппаратном уровне |
| Автор: Domestic Cat 17.7.2005, 03:15 | ||
Ну-ну... Чего-то не видно что рулит К тому же достаточно аппаратного ускорения и машинного кода... Да и посмотрим что ты скажешь лет через 5, когда все будут на лонгхорне и НЕТ, а на плюсах под винду будут писать только хоббисты. |
| Автор: S.A.P. 17.7.2005, 03:28 |
| Domestic Cat договорились Добавлено @ 03:32 Не будем забывать, что у нас еще C++0x на подходе |
| Автор: Domestic Cat 17.7.2005, 05:21 | ||
А микрософт одобрил ? |
| Автор: chipset 17.7.2005, 05:42 | ||
У МС есть такая штука как C++/CLI. В нём и фичи доната, и С++ не ободран как в mc++ ;) |
| Автор: Domestic Cat 17.7.2005, 05:47 |
| Дык есть то есть, но реклама то на всех сайтах какая? |
| Автор: Mayk 17.7.2005, 09:28 | ||||||||||
Даа. Рано я вчера спать ушел, столько интересного пропустил.
А что нам микрософт? Они ведь и яву не жалуют.
Я видел несколько IDE и текстовых редакторов. Возьмём vim(это не IDE, но я его неброшупотомучтоонхороший), VS60, Borland Builder, NetBeans, vs2003. По скорости всех рвёт, разумеется, VIM, благо он редактор, а не IDE. На втором месте идут билдер и 6ая вязанка, а вот в самом конце плетутся NetBeans и vs2003. Разве тормоза - рулез? Что есть рулез?
Кстати, а какой процессор появится первым? Ставлю на MIX(ассемблер Кнута). Он наиболее изучен.
Лонгхорну еще выйти надо. А он очень не торопится. К тому же надо прибавить еще лет 10, пока предприятия снесут DOS, 9x, 2k, XP и поставят лонгхорн. Скорее выйдет какая нибудь 3rd party OS, которая порвёт всех на части и загребёт себе половину рынка ОСей.
Ну вот вы, дважисты, и займитесь тем, чтобы изничтожить .NET под корень |
| Автор: simanyay 17.7.2005, 11:32 | ||
Хочешь удивлю? Visual Studio .NET написана на плюсах |
| Автор: Mayk 17.7.2005, 11:36 | ||||
Странно. Я где-то читал что на .net. Хотя ладно, 6ая вязанка всё-равно быстрее. А вим, который на чистых сях всех вообще рвёт в прах.
Я и так коплю на AMD64 |
| Автор: simanyay 17.7.2005, 11:41 | ||||
Посуди сам. Почти одновременно, с выходом .NET Framework появилась студия. Если студия написана на C#, то не думаю, что первая студия использовала незаконченный фрэймворк. А придерживать продукт, в данном случае .NET Framework, не в стиле Microsoft. VIm конечно классный редактор, но лично мне нужна полноценная IDE.
Ну и где тогда проблема тормозов? У меня на AMD64 3.4+ (1Gb RAM) всё вышеперечисленное летает. Иногда NetBeans притормаживает, но тут виноват медленный винт. |
| Автор: Mayk 17.7.2005, 12:10 | ||||
Во-всяком случае .net там использован. Док-во, например: ildasm e:\Program Files\Microsoft Visual Studio .NET 2003\Common7\ide\Microsoft.VSDesigner.dll не бьет по рукам
В текущем Celeron'е на 1700Mhz |
| Автор: Kurt 17.7.2005, 12:42 |
| VS не на .NET написана?.. Хмм... А кто-нить пробовал удалить из системы Framework, а потом запустить VS? Будет работать? (я серьезно спрашиваю - сам не эксперементировал) |
| Автор: simanyay 17.7.2005, 14:25 |
| А как вы думаете будет работать VS .NET без .NET? Компиляторы, виртуальные машины и прочее ведь во фрэймворке, а среда разработки без всего этого стафа не будет работать. |
| Автор: Domestic Cat 17.7.2005, 18:15 | ||
Источник 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 | ||
У меня 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 | ||||
На этом приимущесва билдера заканчиваются.
Добавлено @ 19:55 Скупайте акции борланда. |
| Автор: batigoal 19.7.2005, 22:23 |
| По этому вопросу stron может ситуацию изнутри осветить |
| Автор: RA 19.7.2005, 22:53 |
| Lamer George А он в борланде ? |
| Автор: S.A.P. 19.7.2005, 23:09 | ||
|
| Автор: CosmoMan 20.7.2005, 08:16 | ||||
Согласен
Не знал. Обязательно попробую. |
| Автор: 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:19 | ||||
| >>После таких фраз принято добавлять ИМХО. Потому что это имхо чистой воды. Наверное вы не видели исходников HL2.. а вот я видел (только видел их у меня нет) Но я туту же обратил внимание, что не используется ни boost ни stl, ни ещё чего лишнего... размеется Q1,2,3 были написаны также без применения вышеозначенных библиотек. Так что это никакое не имхо...
Это тоже не имхо, тут бесполезно спорить... факт
ИМХО есть только во здесь.. |
| Автор: Mayk 20.7.2005, 15:55 | ||
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 | ||
Дык в Delphi такое дает ОЧЕНЬ оптимизированный код. |
| Автор: S.A.P. 21.7.2005, 03:20 | ||||||||
CosmoMan А я даже и не заметил сразу, вот и верь после этого. А ты зачем в C++ трехмерный массив сделал, когда по условию двумерный требуется? Да еще лишних строк понавтыкал
Ощути разницу. Можно даже так
сколько преимуществ в маленьком примере: 1. Операция следования 2. Объявление и инициализация переменных в програмном блоке 3. Инкрементирование 4. Результат операции присваивания 5. Циклы!!! Хотя мне болше по душе
|
| Автор: batigoal 21.7.2005, 09:06 | ||
К вопросу о читабельности кода |
| Автор: Retro 21.7.2005, 09:26 | ||
А что? |
| Автор: batigoal 21.7.2005, 09:29 | ||
Да вот туговато как-то воспринимается. |
| Автор: Mayk 21.7.2005, 09:29 | ||
Вот это не будет работать правильно, так как array определен лишь внутри тела цикла, которое весьма тривиально: {} |
| Автор: batigoal 21.7.2005, 09:32 |
| Вот видите - уже труднообнаружимые ошибки |
| Автор: ManiaK 21.7.2005, 10:35 |
| Lamer George Я понял! Java - это как новая религия! Распространяется при зарождении быстро, причём тут же обрастает толпой воодушевлённых фанатиков, которые пойдут на всё лишь бы перетащить на свою сторону по-больше народу! Не выйдет |
| Автор: batigoal 21.7.2005, 10:39 | ||
Уже вышло |
| Автор: Mayk 21.7.2005, 10:40 | ||||||
И пророк есть:
Ну не знаю. Я может к ним перейду - у них нет десятка библиотек для оконного интерфейса. Только пока не могу понять как в java прочитать строку с клавы. В сях просто: fgets. А в java к.з. Поэтому сижу на сях. |
| Автор: ManiaK 21.7.2005, 10:41 | ||
Где? Си++шников стало меньше - не спорю. Но ушли-то только те, кто особо ничего и не достиг в Си++. У нас остался надёжный контингент |
| Автор: batigoal 21.7.2005, 10:43 | ||||
Если проблема только в этом - переходи
Ну дык косность мышления и все такое |
| Автор: ManiaK 21.7.2005, 10:44 |
| Mayk ты не системщик, как я понял, - потому уйдёшь без вопросов Всё, что не касается критичности в скорости и железа скоро на 99% захавают языки вроде Java. Я считаю это и логичным и правильным. А всё остальное... ну на Java драйвера не попишешь |
| Автор: Mayk 21.7.2005, 10:50 | ||
Дрова пишут на плюсах? |
| Автор: ManiaK 21.7.2005, 10:57 | ||
P.S. Кстати, я когда настроение совпадает со свободным временем пишу компилятор Си для PIC-контроллеров с надеждой, что когда-нибудь доведу его хотя б до урезанного Си++ |
| Автор: Mayk 21.7.2005, 11:09 | ||
| ManiaK В Си нет тормознутых шаблонов, нет классов, нет stl, нет исключений, нет строгой проверки типов указателей(ненавижу (char*)malloc()) Вообщем нет того, чего в дровах и не нужно. В С++ эти понятия(особенно классы) являются основными.
Удачи |
| Автор: ManiaK 21.7.2005, 11:26 | ||||||||
Mayk объясни, каким таким способом "чистые" классы (без шаблонов, без ....) хуже структур+набора функций (Си)? Не вижу тут ни капли проигрыша Си++ перед Си. Си++ тем и лучше, что он более обобщенный язык, на нём можно написать всё то, что напишешь на Си, только в более красивой форме.
Ты не представляешь себе жизнь в Си++ без STL?
Они, насколько знаю, не тормознутые, а немного увесистые - получится кода больше (и то не всегда). После компиляции все шаблоны становятся обычными классами.
Это атавизм языка Си.
|
| Автор: S.A.P. 21.7.2005, 13:12 | ||
Дык а нафига, когда все что нужно сделать - это динамический массив |
| Автор: CosmoMan 21.7.2005, 14:12 | ||
Атавизм - человеческий признак, который является генетически унаследованным от животных, однако в нормальном состоянии не проявляется в фенотипе. В случаи нарушений в процессе формирования зародыша могут проявляется в виде хвостатости, многососковости, волосатостью, наличия жаберных щелей и т.п. у новорожденного. Рудимент - человеческий признак, который является генетически унаследованым от животных, однако в фенотипе проявляется как рецесивный признак: "гусиная кожа", апендикс и т.д. Как понять атавизм языка??? Или тогда может рудимент языка? А на Паскале тоже ДРОВА писать мпожно...на встроенном ассемблере. А что лутчше - выучить С++ или (Паскаль & ассемблер)? |
| Автор: Петрович 21.7.2005, 14:33 | ||||
Лучше выучить и то и другое. Добавлено @ 14:43
Например, в процессе развития языка, некоторые языковые конструкции оставляют для совместимости со старыми программами. Вот их-то обычно и называют аттавизмами. Пожалуй, рудимент более применим в данном случае. Хотя конечно нельзя в данном контексте понимать этот сленговый термин буквально. Вообще то, в английском языке очень часто новые сущьности называют существующими уже словами с близким смыслом, или даже просто созвучными словами. Взять тотже термин "folder" - "папка". Если привести точное определение слова folder, то наверное тоже будет не совсем понятно какое оно имеет отношение к тому что им обозначают в компьютерном сленге. Но, это уже область филологии а не программирования |
| Автор: ManiaK 21.7.2005, 18:43 | ||
Дык помимо этого надо ещё интерфейс для системы обеспечить. На паскале его обеспечишь? А покажите тогда мне хоть одну Pascal-ную операционку... |
| Автор: CosmoMan 21.7.2005, 19:06 | ||
Ну почему все, кого я не встречаю ставят этот тезис, что мол "ну линукс же написан на С++". Да, написан. А толку с этого. Кому она нужна.
Ты какой итерфейс имееш ввиду - если пользовательский, то С++ его просто супер обеспечивает. Только на Паскале его можно написать в двое быстрее. А вообще если честно, то меня С++ не привлекает только чисто из-за его сложности. Синтаксис в полне нормальный, но его изучить - это просто титаническая задача. Я пытался, синтаксис я знаю, но не могу понять многоие операции в С++, а также очень продвинутые вложенные конструкции, которыми изобилуют многие конструкции исходников того же ядра Linux. Но будем пытатся. |
| Автор: S.A.P. 21.7.2005, 19:52 | ||||
|
| Автор: Kagor 21.7.2005, 21:14 | ||
|
| Автор: Петрович 21.7.2005, 21:48 | ||
Ну уж совсем то придераться не надо. Наверняка человек имел ввиду Pascal-подобные языки, в том числе и Delphi. |
| Автор: Петрович 21.7.2005, 22:04 |
| Кстати, об операционных системах. Лично знаком с двумя написанными на Pascal-подобных языках. Одна специализированная сетевая OS для наземного коммандно-измерительного комплекса. Сам лично учавствовал в ее создани еще в конце 80-х. За долго до появления Linux'а, как впротчем и C++ Вторая, создавалась на языках MODULA-2 и Oberon, для платформы Кронос. К сожалению, платформа Кронос не смогла получить широкого распространения. Соответственно, данная ОС тоже умерла вместе с ней. Так вот. То что для Linux'а нельзя написать драйвер на каком-то из языков, совсем не означает что этот язык не пригоден для создания операционных систем. А то можно договориться до странных вещей. Вот например могу смело утверждать что язык C++ это фигня, поскольку на нем нельзя написать программу для моего Nokia 6610. А вот JAVA это круто - на нем можно |
| Автор: simanyay 21.7.2005, 22:09 |
| Такое ощущение, что 99% заданий для программиста это написать операционную систему |
| Автор: RA 21.7.2005, 22:20 | ||||
ага и программ для мобилы. Добавлено @ 22:21
Петрович ну ты ветеран |
| Автор: simanyay 21.7.2005, 22:36 |
| RAdmin, а сл-но все задачи программиста сводятся к написанию операционной системы для мобилы |
| Автор: Void 21.7.2005, 22:46 | ||||||
| Ой, сколько тут без меня понаписали... Отсюда и далее ИМХО.
В каком месте они тормознутые? Разве макросы могут быть тормознутыми? Или ты имеешь в виду долгую компиляцию? Ну это скорее проблема современных компиляторов. К тому же простой шаблонный код (как в STL, например) компилируется очень быстро.
Я фигею, честное слово Нет, если использовать язык как "высокоуровневый ассемблер", то может быть так оно и есть... Но тогда при чем тут вообще C++?
Это только с непривычки. После пары месяцев практики любой реальный код (демки вроде того куплетиста, что ты приводил - это нереальный код В общем, C++ был, есть и будет есть. Причины: 1) гигабайты работающего промышленного кода на C++, который надо будет поддерживать еще очень долго; 2) задачи, где необходима бескомпромиссная производительность - отмазки в виде аппаратных реализаций VM пока не катят. А учить лучше всего C#/Java (как основные промышленые языки на сегодняшний и, наверное, завтрашний день), C++ (как средство вправления мозгов, утомленных рантаймом) и какой-нибудь функциональный и/или логический язык (как средство вправления мозгов в сторону повышения абстракции). Dixi |
| Автор: S.A.P. 21.7.2005, 22:50 | ||
|
| Автор: RA 21.7.2005, 22:57 |
| Мда, прочитанные критерии выбора языка вызывають лоль, симпатизирыю только одному критерию (УДОБСТВО). А так к общему числу приимущественных языков хочу добавить один из лутших в мире, и имя ему QBasic Спросите почему? Да потому что это один из самых безобидных языков программирования (для изготовления мал-варе не годится) |
| Автор: Void 21.7.2005, 22:58 | ||
Ну и кого сейчас интересует, сколько будет весить программа, 100 или 20 Кб? Разве что вирус писать |
| Автор: ManiaK 21.7.2005, 23:49 | ||||||
| Perchilla на счёт Паскаля/Дельфи погорячился. Я его, конечно, не люблю (Майк тут уже писал за что его Сишники не любят), но достоинств его как сильного языка не отрицаю. Я б хотел вернуться к того с чего начали, мы ж не во флейме Начали мы с этого:
Закончили как обычно:
1. Не спорю, написать операционку на Паскале можно. Но ответьте на вопрос: почему таковых нет в массовом употреблении в наше время, а не в каких-то там 80-х? 2. Главное достоинство Си++ - его потрясающая способность подстраиваться под задачи.
То, что до сих пор организация интерфейса пользователя в Си++ - задача более сложная, чем в языках вроде Си#, Java (не говоря уже о Дельфи) - указывает только на одно: не написано ещё удобных библиотек к нему. Много раз уже повторял тем же Явленцам: к указателям никто особой любви не питает даже среди Си++шников, но Си++ даёт возможность подумать над ними один раз, а дальше пользоваться кодом, в котором вы даже не будете подозревать, что пользуетесь указателем. Ява не даёт такой свободы. Он говорит: у меня есть набор инструментов, на основе них могёшь делать, что хотишь. А больше - ни-ни! Простите, а на чём написаны эти базовые инструменты?.. |
| Автор: bel_nikita 22.7.2005, 00:20 |
| Народ, а Delphi стандартизирован кем-либо или это только детище Borland? З.Ы.: А вот, С/С++ - стандартизирован |
| Автор: S.A.P. 22.7.2005, 00:25 |
| bel_nikitaВпрочем Жаба без Сана тоже мало куда продвинется |
| Автор: bel_nikita 22.7.2005, 00:29 | ||
Perchilla
Но вопрос в том, что: Delphi стандартизирован? |
| Автор: Mayk 22.7.2005, 04:59 | ||||||
Давай разберём по пунктам. 1) Инкапсуляция. Дрова и так инкапсулированы сами в себе. Они довольно самодостаточны, чтобы жить. 2) Наследование. И от чего наследоваться драйверу? Разве что от абстрактного класса. А чему наследоваться от драйвера?? Сложно придумать. 3) Полиморфизм. Ну дрова вообще-то просто имплементируют базовый объект.Они ничего по сути не изменяют, они просто делают. Ну и к чему всё это?
Я себе даже Си без qsort/hsearch/printf представляю. Только зачем такое безобразие? Если есть библиотека - то её надо бы использовать.
"Немного увесистые"?! Время компиляции увеличивается в разы! |
| Автор: simanyay 22.7.2005, 07:47 |
| По поводу Java: без Sun Java проживёт прекрасно. В отличие от всяких Delphi за Java стоят такие гиганты, как IBM, BEA, Oracle, etc., которые просто напросто возьмут сий замечательный язык под своё крыло, в случае чего. Более того скажу, что IBM только этого и ждёт, ИМХО Так что господа, выбор очевиден: Java. |
| Автор: ManiaK 22.7.2005, 08:39 | ||||||||||||
Давай
Первое. Не очень понял, что ты этим хотел сказать. С дровами надо как-то общаться, чтобы управлять устройствами. Один из вариантов - драйвера как Slave, ядро оськи - как Master. Второе и главное! Не цепляйся к дровам - ими область применимости Си++ не заканчивается. Есть ещё одна огромнейшая сфера - встроенные системы...
Вот пример:
Опять же, одиними драйверами ограничиваться глупо.
Думаю и так понятно. Где надо - используй, где не надо - не используй. Свобода выбора!..
И что? Зато летают они не медленнее обычных классов и даже обычных функций/структур из Си. А для компиляции можно и машину лучше поставить и компилятор по-лучше взять. Главное, чтоб у клиента летало. |
| Автор: Mayk 22.7.2005, 10:39 | ||||||||
То, что инкапсуляция рулит в большем объеме. В малом - нет. get/set'ы не люблю.
Ну не знаю. Видел только сишные. Да и то мельком.
Во-первых я не вижу что-бы что-то наследовалось от GF440MXDrv. Во-вторых запись с callback'ами не намного длиннее, даже короче.
То, что в один и тот же участок времени ты меньшее число раз успеешь собрать и запустить и, значит, протестировать. Значит, меньшее число отлавленных багов в единицу времени. |
| Автор: fevdokimov 22.7.2005, 10:55 | ||
[quote] на Delphi не уверен, но на OBERON уже написана |
| Автор: CosmoMan 22.7.2005, 10:57 |
| И пришли таким образом к выводу, что С++ (пусть Си) - язык ниского уровня, годный для написания драйверов, встроенных сисем, ядер операционок. Пользовательский интерфейс пусть пишется на Delphi, Javа и С#. C++ для одних целей, ObjectPascal & Java для других. Cогласен, что на Pascal & Asm сложнее написать оперционку, чем на Си |
| Автор: DENNN 22.7.2005, 11:23 | ||
Не надо обобщать |
| Автор: Петрович 22.7.2005, 12:12 | ||||||||||
На самом деле, это лишь свидетельствует об наиболее вероятной области применения тех или иных языков. А вообще то, я не верю что "не написано ещё удобных библиотек к нему". Просто наверное их слишком много, и среди них нет абсолютного лидера. Да и область распространения C++ куда шире (в смысле платформ). Что соответственно не позволяет иметь универсальную библиотеку на все случаи жизни. С Delphi проще. Тут только для Windows и Linux.
Ну... Это уж слишком. Во первых, Borland жил, Borland жив, Borland будет жить. Шутка А если серьезно, то смерть Borlan'да совершенно не означает смерть Delphi. Как ни странно, эфект может даже быть обратным. В конце концов, кто вспомнит авторов и поставщиков компиляторов для Cobol'а? А вот язык до сих пор существует. Хотя, молодежь о таком и не слыхивала. И слава богу Чтоже касается стандартизации, для Delphi это не имеет существенного значения поскольку на сегодняшний день, компиляторы под него поставляет лишь одна группа разработчиков (Borland). Т.е. его можно считать стандартизированным - см.описание языка. Вопрос стандартизации очень существенен для C и C++. Это для них существуют куча постащиков, и поэтому крайне важно добиться их совместимости на уровне входного языка.
Да, да. Лично я считаю что C++ своей популярности обязан прежде огромным распространением C на момент появления C++. Ведь именно от него он и родился. А если даже быть более точным, то C++, это язык C, который расширен в соответствии с велением времени (ООП). А вот почему C популярен был (и есть)? Думаю, что прояснить это, поможет небольшой экскурс в историю. Ведь кому как не мне, старому седому аксакалу, не порассказывать байки о том как я в сибири яй..... Ой забылся Что ж, да простят меня модераторы, Начнем. В 70-е годы, в эру "больших" (IBM и т.п.) и особенно "средних" (DEC PDP, и т.п.) машин, большинство высших учебных заведений было оборудовано именно ими. Особенно в США. Более того, уже тогда они объединялись в глобальные сети (тогда это еще не называлось Internet). Так вот, именно в те времена, для удобного использования имеющихся ресурсов и была создана ОС UNIX. А вот для ее создания, как раз и были созданы языки, сначала B, а затем и сам C. Студенты вообще не любят стандартных решений ОС UNIX получилась весьма удачной. Именно по этому она и живет по сей день, и даже реинкарнировалась в виде Linux'а. Но, вернемся к основной теме лекции Естественно, поскольку сама она была написана на C, то именно этот язык и стал основным при разработке программ под эту ОС. Как следствие, преподавание программирования и смежных дисциплин, тоже стало вестись на примерах языка C. А открытые исходные тексты UNIX'а позволяли любому программеру еще и повышать свой уровень. Ну и какому языку программирования будет отдавать предпочтение программист закончивший такое учебное заведение? А какому языку программирования будет обучать преподаватель закончивший такое учебное заведение? .... Ответ очевиден. (это Вам на домашнее задание Ну а в завершение лекции, немножко о последующих событиях. Некоторые наверное уже их застали и сами. Позже, появились "персоналки", причем тогда еще даже не "завязанные" в сеть. Их пользователями становились не профессианалы-компьютерщики (какому профессионалу интересен программируемый калькулятор Но, поскольку кагорта потребителей быстро росла, и среди них стали появляться доморощенные программисты, им нужен был язык. Ну не на птичем-же языке ассемблера будут писать домохозяйки. Да и C для них был неоправданно сложен. Так и родился всеми любимый Basic Время не стояло на месте, персоналки становились мощнее, а потребности больше. Но как и прежде, UNIX не мог предложить дружественного интерфейса для рядового пользователя. Вот так и родился Windows. Но, это уже другая история Причем, еще до прихода C на персоналки, было создано великое множество его реализация и расширений. В общем бардак. Благо во время одумались, и таки застандартизировали его. Правда, как всегда было много противников большинство из которых справидливо считали что стандарт это смерть. Хорошо что они ошибались. Теперь, при наличии мощных, многопроходных оптимизирующих компиляторов, все богатство низкоуровневых возможностей языка C принципе без надобности. Но, стандарт есть стандарт. Да и привычки чего стоят. Вот кажется и вся история появления, и распространения языка C, естественно в кратком изложении Ну и на последок отмечу что в США, самой компьтиризированной стране, до недавнего времени, наиболее распространенными языками программирования были именно C, C++ и Basic-подобные языки. А вот Delphi, насколько я знаю, распространен там очень слабо. Почему, теперь я думаю Вам и самим это ясно. В последнее же время, на арену борьбы за души программистов, стало выходить множество других языков, а порою даже не языков а вообще не понятно чего P.S. В своей лекции я специально не затронул историю Delphi - тема то не о нем Добавлено @ 12:17
Я уже писал выше про ось на Pascal-е. Что же касается Delphi - не вижу препятствий кроме двух: 1. А зачем? 2. Кто это будет оплачивать? Добавлено @ 12:21 А еще, про то что можно а что нельзя, хотя и не совсем в тему. А знаете ли Вы, что компиляторы большинства языков, особенно серьезных, пишутся именно на этих-же языках, методом раскрутки? Это позволяет сразу же и проводить их тестирование и отладку. Так, практически изначально компиляторы C писались на C, Pascal'я на Pascal'е и т.п. |
| Автор: ManiaK 22.7.2005, 14:07 | ||
Петрович - ЦАРЬ!..
Неужели C# трансляторы написаны на C#? |
| Автор: Петрович 22.7.2005, 14:22 | ||||
т.е. не всех. Что касается C#, то про него не скажу, не знаю. |
| Автор: ManiaK 22.7.2005, 14:29 |
| Хотя чем чёрт не шутит, можт лет через пять создадут такой комп, который будет интерпретаторы щёлкать как орехи |
| Автор: Poseidon 22.7.2005, 15:08 | ||
Пусть не в тему, простите уж. Но вот всегда хотелось узнать, это как? Вопрос по моему сродни такому: "Что появилось ранше: яйцо или курица?". Как можно написать компилятор на том языке, для каторого пишется компилятор? Чем тогда этот компилятор компилировался? |
| Автор: ManiaK 22.7.2005, 15:40 | ||||
Мне так кажется это примерно так: написали на стороннем языке наипростейшую версию копилятора языка нового. А потом по-нарастающей, всё сложней и сложней до полной версии. |
| Автор: Петрович 22.7.2005, 22:29 | ||
Да да. Именно так. Именно поэтому такой способ и называется "метод раскрутки". |
| Автор: TP@MB@Y 23.7.2005, 10:47 |
| Хех. Сегдня всю ночь не мог заснуть и в итоге решил поближе познакомиться с С++ Для этого буду пытаться написать пошаговую игрушку типа Дисайпелс(со смесью хирос). Так вот, хотел поинтересоваться: у меня тут на выбор Visual C++6, Visual C++6.5 Update или мне нужно просто С++? Чем они отличаются? Если я собираюсь писать игру, то мне нужно юзать ОпенЖеЛе или ДиректорИкс, т.е. мне достаточно будет подключить их библиотеки и визуальные классы из Visual C++ мне не понадобятся? |
| Автор: Poseidon 23.7.2005, 15:46 |
| TP@MB@Y, думаю этот вопрос лучше было бы задать в специализированном разделе, там больше сишников крутится, они тебе подскажут и покажут |
| Автор: batigoal 23.7.2005, 18:29 | ||
С++ - это язык. Он один. А у тебя - среды разработки. На тот момент, когда я еще писал на Си, последней была Visual Studio 2003. |
| Автор: TP@MB@Y 24.7.2005, 18:25 |
| Poseidon Догадываюсь... просто хотелось "не отходя от кассы" Lamer George Ну я про среду и спрашиваю. С++ он и в африке С++ |
| Автор: chipset 29.7.2005, 10:39 | ||||||
Ну-ну. А потом ждать полтора часа пока выползет аутокомплит в Eclipse. Нафиг такое щастя.
Да.
Если уже неплохо знаешь C++ - используй 2003. Если только учишь: FAR+VC++Toolkit. |
| Автор: chipset 29.7.2005, 10:52 | ||||||||||||||||
Ты проводил измерения?
Ну там не совсем макросы.
Ты о чём?
Надо использовать то что удобно.
Ну-ну. Добавлено @ 10:54
Это зависит от прямоты рук программиста и нужд заказчика. |
| Автор: Domestic Cat 29.7.2005, 18:17 | ||
|
| Автор: Void 29.7.2005, 19:13 | ||||
Можно я за Mayk отвечу?
С т.з. кодогенератора - чисто текстовая подстановка (вот тут, отвечая, я имел в виду быстродействие скомпилированной программы). |
| Автор: chipset 29.7.2005, 22:26 | ||
Athlon 1800+/512 MB А что, для комфортной работы Dual P4 и 2GB нужно? НАФИК ТАКОЕ, вижуал студия летает... |
| Автор: Domestic Cat 30.7.2005, 03:26 |
| Ну не надо передергивать, разница во времени небольшая. |
| Автор: chipset 30.7.2005, 09:27 | ||
Между 386 и A1800? Добавлено @ 09:27 Кстати на 386 программы на Java вообще не запустяться никоим разом. |
| Автор: Domestic Cat 30.7.2005, 09:37 | ||
Ты че действительно не понял к чему был мой пост? |
| Автор: chipset 30.7.2005, 22:42 | ||
Да вот такой я тупой, и телепатией ну никак ещё так хорошо не овладел... |
| Автор: Domestic Cat 30.7.2005, 23:55 |
| Ух ох. Вот к чему си приводит... |
| Автор: ManiaK 31.7.2005, 19:27 |
| Domestic Cat встану в защиту Чипса У меня - P4 2000 (2400), 256 Мег оперативки. Первый пуск проги "Охотник" стал последним, т.к., несмотря на отличную идею и неплохую реализацию, за исключением одного момента, ... короче у меня постоянно возникала мысль: "А не перепутал ли я комп? Не сел ли я с перепою на свой старенький 166, что рядом стоит?". Ей богу, проги написанные на Си++ работают на 166 так же, как Java на моём "новом" (заметь: конфигурация последнего уже давно оставляет желать лучшего). |
| Автор: Void 31.7.2005, 19:38 |
| ManiaK Встану посередине |
| Автор: Domestic Cat 31.7.2005, 22:16 | ||
Аналогично, единственно различие что я замечаю - скорость запуска. Во всем остальном абсолютно не отличается от С++- и прочих программ. Вот Azureus сейчас у меня запущен - если б он грузился на секунду быстрее, отличить от нативного приложения было бы оченьтрудно. |
| Автор: S.A.P. 31.7.2005, 22:30 |
| Разрешите мне опять в пример привести эклипсу Спасибо |
| Автор: Domestic Cat 31.7.2005, 22:33 | ||
Это к разработчикам пожалуйста. У меня виндозе, написанная на си, глючит как хзчто, но я ж не спрашиваю тут почему и из-за чего. |
| Автор: simanyay 1.8.2005, 08:29 | ||
Нет, это ваш глюк. Во первых надо покупать нормальные не no name компы, а во вторых надо чуть-чуть поменять строчечку в параметрах запуска, для вашей оперативки. Eclipse 3.0.1 на рабочем Celeron 2Ghz, 512Mb RAM немного притормаживало, а Eclipse 3.1 вообще не тормозит. Я фигею, сколько можно болтать об одном и том же, блин. Ясен перец, что если вы купили материнку от дядюшки Ляо, то даже 512 метров оперативки будет работать на 30-40% медленее, чем должна. |
| Автор: ManiaK 1.8.2005, 08:45 |
| simanyay ты шота несдержанный стал |
| Автор: Kagor 1.8.2005, 09:03 | ||
|
| Автор: ManiaK 1.8.2005, 09:14 | ||
Вы, конечно, скажете, зачем же сидеть на таком старье, на что я вам отвечу: подождите Longhorn. Память всегда найдут, чем завалить, какого бы объёма она ни была. |
| Автор: DENNN 1.8.2005, 12:29 | ||
Почему то я не секунды не сомневаюсь что ты прав |
| Автор: Петрович 1.8.2005, 12:53 | ||
Я так понимаю лейбак производителя влияет только на java? А не подскажете-ли как такого добиться в обычной, например Delphi программе? |
| Автор: Void 1.8.2005, 16:20 | ||
Симаняй, не передергивай. Скорость работы памяти не зависит ТАК от чипсета (в случае интегрированного MC у А64 она от него вообще не зависит). К тому же ППС и латентность в нашем случае - дело десятое, тебя же не смущает, что на серверах используют DDR333 или даже 266, да еще и регистровую ECC? Я не призываю покупать noname, просто аргументация не та. |
| Автор: chipset 1.8.2005, 16:25 | ||||
Я не про глюки. Я про тормоза. Тормозит не Виндоза, тормозят программы, которые кстати, некоторые, написаны на, не побоюсь этих матюков Java или .NET.
А может лучше от Sun'a сервер заказать, шоб уж точно не тормозило? |
| Автор: Kagor 1.8.2005, 18:03 | ||||
|
| Автор: simanyay 1.8.2005, 20:26 | ||||||||||
Старею
Конечно скорость меньше. Но это "меньше" есть плата за переносимость.
А вы не подскажете как мне запустить скомпилированную в Delphi программу в Linux и Solaris? Читайте выше.
Здрасьте. При плохой шине, производительность понижается процентов на тридцать. Проверенно собственноручными тестами на мат. плате noname и белой плате.
Не, надо каждую новую версию по 3-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 | ||
Платы, процессоры, набор логики, набор тестовых приложений, ОС - в студию. Не верю © |
| Автор: Domestic Cat 1.8.2005, 20:46 | ||
Собственноручно тестировал на старом своем Celeron 400 / 128 mb - отличие было только во времени загрузки. |
| Автор: simanyay 1.8.2005, 20:48 | ||
Не верь. Я логи не веду. Когда-то занимался сборкой нескольких ПК и для себя тестировал. А за отчётами - идите на iXBT и подобные. |
| Автор: Void 1.8.2005, 20:52 | ||||
Ну хотя бы скажи, чем тестировал. Если мерял ППС в Sandra или ей подобных - корреляция с реальной производительностью, того, к нулю стремится.
Именно потому что я часто бываю на iXBT и подобных, я и накинулся на это утверждение. |
| Автор: simanyay 1.8.2005, 20:57 | ||
Ubuntu Memory Testing. |
| Автор: Петрович 1.8.2005, 21:41 | ||||||
Во первых, я так и не понял как лейбак производителя мамы сказывается на кроссплатформенности приложений? А во вторых, как часто вы пишите программы для работы в нескольких платформах? Наверное это специфика. Лично я свой хлеб только на платформе Windows зарабатываю. И вроде как хватает. По крайней мере пока. У меня в багаже, за 20 лет программирования, есть лишь одно кроссплатформенное приложение. Оно делалось для работы под DOS и под UNIX. Поэтому, в принципе не могло быть чисто кроссплатформенным А так, в принципе, не принципиально
А вот это как посмотреть. Лично у меня, при сегодняшнем уровне знания java, было-бы наоборот. |
| Автор: Kagor 1.8.2005, 21:56 | ||
|
| Автор: chipset 2.8.2005, 03:21 | ||
Однозначно. |
| Автор: JekaZZ 12.10.2005, 17:18 | ||||||||||
| С++ имеет более понятный для понимания синтаксис. Приведу пример. Я однажды спросил у одного программиста Delphi, изменится ли значение переменной i в данном случае:
Он говорит "Нет". И он прав.Тогда я спрашиваю, а изменится ли содержимое i в данном случае:
Он говорит "Да". И он прав. А вот почему так - он не знает. Потому что из синктасиса паскаля (далфи) невозможно понять, что передается в функцию-значение переменной или ссылка на нее. В С++ такой бы проблемы не возникло, так как для изменения переменной внутрь функции должен передаваться указатель и прототип ее будет следующий:
Знак "*" и говорит об указателе. Если же переменная передается по ссылке
то компилятор предупредит об этом. А чтобы он этого не делал, надо писать
Тогда однозначно переменная не меняется внутри функции. И никаких неопределенностей!!! Еще момент.Паскалевский компилятор для i:=i+1 создаст точно такой же машинный код - возмет из памяти переменную, поместит ее в регистр, потом прибавит к ней 1 и поместит обратно в память (проверено). Компилятор С++ сделает это одной командой процессора - прибавит 1 к значению в памяти. И записывается на с++ гораздо короче i++; |
| Автор: Mayk 12.10.2005, 18:24 | ||
Это зависит от компилятора. Не думаю, что в стандарте паскаля есть какие-либо оговорки о генерации кода. ах, да. На паскале еще есть inc(i); |
| Автор: Void 12.10.2005, 18:37 | ||||
Надо же, какая тема всплыла...
Ну, это уже проблемы тупизны компилятора и/или его создателей
...пока мы пишем вот такие примеры в пять строчек... |
| Автор: Mayk 12.10.2005, 18:39 | ||
|
| Автор: Void 12.10.2005, 18:49 | ||
| Mayk Ур-ра, провокация удалась Собственно, все зависит от задачи... Уродливый код можно написать на чем угодно. Но выведение типов, соответствие образцу (pattern-matching), кортежи и списки на уровне языка - ИМХО, есть рулез. Это относится не только к MLоидам (OCaml), но и к Haskell, даже к Nemerle. Просто именно с OCaml я знаком ближе всего.
Киньте в меня камень, кому непонятно, что этот код делает P.S. Может отдельную веточку откроем: "Императивное программирование vs. функциональное - заведемся конкретЪно"? |
| Автор: LSD 12.10.2005, 18:52 | ||
А почему не используешь fun это по мему наглядней? |
| Автор: Void 12.10.2005, 18:57 | ||||
Ключеовое слово fun в OCaml используется для введения анонимных ф-ций (лямбда ф-ций) с одним или нескольким аргументами. Здесь его всунуть негде
Ах да, забыл еще - ф-ции как first class values и карринг. |
| Автор: Mayk 12.10.2005, 19:07 | ||||||||||
Дыкть
Так, Сча будем угадывать.
btree и 'а могут быть либо пустыми, либо состоять из пар 'a и 'a, btree и 'a или просто быть btree.
Если что-то вставляется в пустоту, то вернется Node(аргумент-инсерта, empty, empty) Если же добавляется в узел (обозначенны y наверное?, то вернется узел), то вернется такой узел, что x будет добавлен в одну из веток Сильно наврал?
Do it |
| Автор: Void 12.10.2005, 19:14 | ||||||||
Чуть-чуть не так
Только тут все наглядно и типобезопасно. Компилятор сам введет указатели, там где нужно (тип-то рекурсивный).
Тут все правильно Причем, надо заметить, ф-ция insert полиморфна - она будет работать для btree с любыми типами 'a.
Счас, только вступительный призыв для флеймеров накатаю |
| Автор: DragonFire 15.10.2005, 21:24 |
| А я вообще не согласен с этим утверждением. Я люблю Delphi, а значит уже не все... |
| Автор: Mayk 15.10.2005, 21:31 | ||
Ты бы еще примерчики накатал |
| Автор: LSD 15.10.2005, 23:11 | ||||
Ну-ну Какое значение получит переменная с, после такого вычисления:
Добавлено @ 23:13 Просьба тем кто уже участвовал в этой дискусси не писать |
| Автор: DeadSoul 15.10.2005, 23:17 |
| LSD, топором можно рубить дрова, а можно убивать людей. Твой пример из второй серии |
| Автор: LSD 15.10.2005, 23:22 | ||
Убивать можно и голыми руками, и что? Инструмент должен быть безопасен для того кто его использует (для этого и предназначенны всякие защятные кожухи на реальных инструментах), то же самое и язык программирования. Не должно быть там таких выкрутасов. P.S. Ты так и не ответил на вопрос. |
| Автор: DeadSoul 15.10.2005, 23:26 | ||
Навскидку: неопределенное поведение Подумав: отрыв рук тому, кто такое написал. P.S. В каком распространненном языке это невозможно(Delphi,C#,Java)? |
| Автор: Дрон 15.10.2005, 23:30 | ||
| LSD Это пока единственная неоднозначность, что я видел.
Знаешь Ferrari F40. Спортивная машина, так вот в ней нет никаких электронных наворотов в плане управления -- фактически оставляет водителя наедине с дорогой. Так же и С++, если у программиста не хватает ума, чтобы не писать такие вещи -- так пусть лучше на VB пишет А вообще многие тут не понимают, что С++ это уже далеко не a = b + c, а библиотеки вроде STL. Вот где настоящий С++ Добавлено @ 23:31 LSD Кстати, готов предположить, что такое можно написать и в Java и в C# и в других Си-подобных языках. |
| Автор: LSD 15.10.2005, 23:33 | ||||
Насчет неопределенного поведения ты прав А ТТП оставим на усмотрение твоей совести
В Pascal нельзя такой финт ушами провернуть. |
| Автор: DeadSoul 15.10.2005, 23:33 | ||||
Пожайлуста:
P.S. Данная неоднозначность - некоторый пережиток прошлого. |
| Автор: Дрон 15.10.2005, 23:37 | ||||
| DeadSoul Это из той же серии -- неизвестный порядок вычисления выражения. Добавлено @ 23:38
Правильно. И значит там нельзя написать что-то вроде:
|
| Автор: DeadSoul 15.10.2005, 23:39 | ||
Мой пример более "жизненный". Это с = a*b - 36 / (a=(b+2)) явно надуманный |
| Автор: LSD 15.10.2005, 23:42 | ||||||
У ассемблера еще меньше ограничений, но ты же не будешь писать большой проект на асме? Или C++ это язык для маленьких проектов?
Я говорю только о синтаксисе языка.
Конечно, ведь возможность написания таких конструкций определяется синтаксисом языка. А раз они унаследовали его от Си, то и те же траблы и там будут. |
| Автор: Дрон 15.10.2005, 23:43 | ||||||||
Согласен. Но чтобы такого небыло нужно просто завести себе некоторые правила стиля и их соблюдать. Например, хороший способ избежать недоразумений -- это писать не:
а
Только я им всё равно не пользуюсь, т.к. всё таки читается это гораздо сложнее Добавлено @ 23:45
Хех... Я же сказал, что С++ это совсем не то, что думает большинство. Загляни в код любой большого (ну, пара мегабайт текстисходников) проекта на С++ и ты очень сильно удивишься Когда я вперые такой проект увидел -- я сначала даже синтаксиса не понял! Там всё СОВСЕМ другое. |
| Автор: S.A.P. 16.10.2005, 00:25 | ||
а что тут неоднозначного, никак понять не могу... Аж проверить заставили ! |
| Автор: batigoal 16.10.2005, 09:17 | ||
А какой результат? 1 2 ? |
| Автор: Void 16.10.2005, 09:25 | ||||
Ну, в общем-то, никто не гарантирует, что компилятор не сгенерирует в этом месте код для форматирования винчестера Mayk
Да с удовольствием, только нелегкое это дело - показывать на примерах малознакомый большинству язык Неплохие примеры можно найти в: официальном 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 | ||
вот, вот, а потом кто-то о хорошей читаемости будет доказывать... |
| Автор: LSD 16.10.2005, 10:05 | ||||
Windows - достаточно большой проект? А вообщее, повторюсь еще раз, это не имеет никакого отношения к синтаксису. Да можно просто отказаться от использования "плохих" конструкций языка, но тогда зачем они в нем?
Как это никто не гарантирует??? Помимо синтакисса у языка есть семантика, и именно она и определяет что будет делать тот или иной код. |
| Автор: Void 16.10.2005, 11:30 | ||
UB, оно UB и есть. |
| Автор: DeadSoul 16.10.2005, 12:12 | ||
http://rsdn.ru/Forum/Message.aspx?mid=1424298 |
| Автор: Дрон 16.10.2005, 15:23 | ||||
Ну, давайте тогда скажем: С++ -- отличный язык с плохим синтаксисом "Плохие" конструкции нужны для того, чтобы умные люди могли из них извлекать выгоду, а идиоты не становились программистами. В реальных проектах вообще и мысли ни у кого не возникнет, чтобы что-то из приведённого выше написать. Там каждый метод состоит из вызовов других методов, которые состоят обычно из десятка другого простейших(!) операций. Писать cout << i++ уже плохо, поскольку здесь мы одновременно выводим в поток и обновляем данные, что по-хорошему должно быть разделено.
А оно разве не на Си написано? |
| Автор: LSD 16.10.2005, 17:25 | ||||
Ага, у кого даже подпись подобная была. Типа "крутые" программеры, не ошибаются, не имеют плохих привычек в написании кода и не существуют Человек слаб, и ему свойственно ошибаться и лениться. Я знал людей которые утверждали, что Си лучше паскаля, тем что там операторные скобки пишутся фигурными скобками, а в паскале begin/end. Это дескать очень долго набирать.
Оно??? Ты советовал заглянуть в код любой большого (ну, пара мегабайт текстисходников) проекта на С++ вот я спросил, винда подойдет? |
| Автор: En_t_end 16.10.2005, 17:41 | ||
LSD
Вот именно... хоть часто пишут C++/C, но вот обратное C/C++ - не верно. Windows я так смею утверждать написана на низкоуровневом C. |
| Автор: LSD 16.10.2005, 17:44 | ||
Windows большой, и помимо ядра у него много что есть. |
| Автор: S.A.P. 16.10.2005, 17:57 | ||||
Да, у меня 1 2 получилось, компилил на MinGW и не увидел ничего в этом странного. Правда потом, как DeadSoul дал ссылку на RSDN, решил проветить на Visual C++, получилось 22 Кстати, тот же MinGW в этом коде
выводит все же 4, как и VC. Хотя если бы следовал предыдущему правилу, должно было быть 3. Надо стандарт рыть, смотреть. |
| Автор: Void 16.10.2005, 18:12 | ||||
Не надо. Изменение любой переменной более одного раза между двумя точками следования ведет к неопределенному поведению По этой же причине неверны конструкции вроде:
и т. д. |
| Автор: Дрон 16.10.2005, 20:30 | ||||
Как-то так сложилось, что о Windows я говорю в среднем роде. Мне тут уже сказали, что на самом деле правильно будет в женском... Но мне пофиг Добавлено @ 20:35
Это не только набирать дольше, но и читать трудно Да ладно вам спорить-то. Тут дело привычки, я после бейсика очень долго к Си привыкал... Теперь, наоборот, вид бейсиковского кода сильно шокирует... С++ просто один из многих языков... Как там кто-то давным давно сказал: "С++ -- самый худший из объекто ориентированных языков, но остальные ещё хуже". Поэтому на сабжевый вопрос я бы ответил: так уж сложилось исторически. |
| Автор: 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="окна"="окно"*n=>windows это полное ОНО.
На себе натерпелся. |
| Автор: Петрович 17.10.2005, 16:48 | ||
Мдя. Может С++ ты и знаешь. А вот с русским, у тебя облом. |
| Автор: DeadSoul 17.10.2005, 20:14 | ||
En_t_end, я ссылку на rsdn давал. Ты сколькими компилятора прогнал этот пример? |
| Автор: S.A.P. 17.10.2005, 20:41 | ||
|
| Автор: JekaZZ 19.10.2005, 21:21 | ||||||
Это уже на совести програмера. Присвоение прямо в вычислениях (как в этом случае для 'a') сделано не для
а для удобства в (например):
и т.п. |
| Автор: maksr 30.1.2006, 21:22 |
| Разве С процедурный язык? |
| Автор: LSD 30.1.2006, 21:29 |
| А какой же? |
| Автор: maksr 30.1.2006, 21:39 | ||||
Это - процедура.
И это тоже. А другие примеры процедур есть? |
| Автор: Void 30.1.2006, 21:45 | ||
maksr
В Си весь код организуется в процедуры (в данном контексте нет никакой разницы между процедурами и функциями). В Си нет классов и объектов. Так какой это язык? Добавлено @ 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 |
| Процедурный. |
| Автор: 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 |
| 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++ ? |
| Автор: Sun 1.2.2006, 13:11 |
| stdio? На С. |
| Автор: maksr 1.2.2006, 14:47 |
| Как такое может быть? На Языке не имеющим I/O написать, I/O Cтандартную для большинства компьютеров? Хотя может я ошибаюсь! Как можно написать процедуру для вывода сообщения на дисплей без stdio ? |
| Автор: Sun 1.2.2006, 15:02 | ||
А что такое по твоемому IO? Это обращение к портам процессора. К прерываниям BIOS. Для того чтобы постоянно не писать один и тот же код, вводится дополнительный уровень абстракции - операционная система, которая берет на себя типовые системные операции. В том числе операции ввода-вывода. В stdio просто идет обращение к системным вызовам. Понятно что они разные для разных OS, поэтому и реализация stdio будет разная, но интерфейс будет одним и тем же. Хорошая статья, как написать реальный "Hello Wrold!" не требующий операционной системы. http://www.naydicursy.com/course-nccourse1884787.htm |
| Автор: maksr 1.2.2006, 15:38 |
| IMHO Это интерфейс для работы с файлами, памятью и т.п |
| Автор: Sun 1.2.2006, 15:45 |
| Этот интерфейс называется BIOS (Basic Input Output System). Фактически это набор подпрограмм выполняющих типовые операции с устройствами подключеными к процессору. Язык С не умеет работать напрямую с регистрами процессора и вызывать прерывания. Для этих целей используется ассемблер. Поэтому часть ядра ОС, как ни крути, пишется на ассемблере. |
| Автор: kolesnle 10.4.2013, 11:04 | ||
Почти полностью солидарен! Только по моему там есть препроцессор, типа $include или еще как. Но я его все-равно жутко ненавижу! |
| Автор: Beltar 10.4.2013, 12:39 | ||||||||||
| В Паскале есть дженерики. Касательн цикла for, то http://forum.vingrad.ru/forum/topic-361800/kw-c++-си++/60.html#
В Паскале сейчас вообще-то можно писать и так: int8, int16, int32. Ну и как обычно пошла песня про то, что писать видите ли долго. Сразу выдает быдлокодера.
А пишущим на Паскале он нужен?
По этому поводу была такая статья http://www.delphikingdom.com/asp/viewitem.asp?catalogid=346 писалась как ответ на указанный в начале монументальный труд.
Оно, конечно, минус, но даже не третьестепенный.
Написавший это болен. Скорее наоборот в Си++ нет нормального строкового типа, что признают даже его ярые адепты, есть только жалкая попытка имитировать функциональность ANSIString с помощью классовой обертки над гнилым PChar. При этом эта самая обертка вывалится нафиг, как только придется написать что-то вроде "ab"+"cd", потому что тут не классы у которых перегружена конкатенация, а пичары. Я даже не знаю каким идиотом надо быть, чтобы не понимать этого. В общем, как обычно, придирки что в Паскале нет какой-то хрени, нужной раз в год, или не нужной вообще, но при этом мило забываются такие подсудные вещи плюсов, как присваивание в операторе if, совершенно неюзебельный switch, нет понимания, что же такое цикл for, замалчивается отсутствие в плюсах вложенных функция, классовых ссылок и виртуальных конструкторов. Замлчивается просто несопоставимое с Паскалем время компиляции, что при работе одному в режиме проверил-не работает-исправил довольно серьезный недостаток. Про строки, это действительно нечто, достойно того, чтобы повторить это еще раз. В целом C++ призводит вид типичного языка внешне привлекательного для начинающих, которые в первую очередь видят то, что буковок вроде поменьше писать, но потом оказывается, что за этой простотой скрывается дьявол и не прочитав пару тысяч страниц руководств писать на плюсах невозможно. |
| Автор: Akella 10.4.2013, 13:01 | ||
+1 Добавлено через 8 минут и 41 секунду а толку... в глазах рябит от знаков препинания, не язык, а brainfack какой-то Добавлено через 9 минут и 7 секунд Вот название бредовое. ВСЕ не могут любить C++. |
| Автор: k0rvin 10.4.2013, 17:53 |
Во-первых, дженерики и шаблоны — разные вещи. Во-вторых, даже дженерики в паскале недоделаны (во всяком случае в делфи), один товарищ приводил пример, найду – выложу. В-третьих, зачем же так некропостить? =)) |
| Автор: Beltar 10.4.2013, 18:33 |
| И что такого полезного можно нашаблонить в плюсах, помимо того, что дают дженерики? |
| Автор: kolesnle 10.4.2013, 19:02 | ||
Нет? Напиши. Ну во первых не в операторе, а в инструкции, а во вторых : "Каким дебилом надо быть, чтобы присваивать в инструкции if" Наоборот, более юзабельный. Range-based for пожалуйста посмотреть c++11 лямбда что это?! Огромная проблема сэмулировать? http://habrahabr.ru/post/64369/ Ну и ответ на минусы плюсами: кроссплатформенность, с помощью библиотек можно добиться гораздо большего, чем с помощью дельфей, http://habrahabr.ru/post/140357/, auto, shared_ptr, initializer_list и еще много-много-много-много |
| Автор: Beltar 10.4.2013, 19:21 | ||||||
В том-то и отличие между тобой и сишником, который с горя пишет if (5==N), спотыкаясь на чтении, лишь бы хотя бы в частном случае сравнения с константой компилятор подстелили соломку.
Кстати, я как раз описание этого стандарта открыл. Вот что приведено в педивикии:
У меня один вопрос, ребят, вы вообще понимаете, что это отборная трава? При этом элементарный функционал вида вещественных констант в Паскале был поди в первой версии Вирта. Надо в раздел по Паскалю перепостить, народ поржет. |
| Автор: kolesnle 10.4.2013, 19:31 |
был и в C++. Это функции вычисляемые на этапе компиляции ввели. Какой-то странный пример в педивикии |
| Автор: Beltar 10.4.2013, 19:44 | ||
Функция вычисляемая на этапе компиляции является константой. Ваш Кэп. |
| Автор: kolesnle 10.4.2013, 19:52 |
| Да все-равно ввели уже. Теперь delphi точно хуже C++, хотя бы из-за синтаксиса(я не про begin |
| Автор: Beltar 10.4.2013, 20:17 |
| Мне так и не показали ни одного серьезного преимущества в синтаксисе, свистелки и перделки вроде множественного присваивания никак не отменяют наличия конструкций в которых опечатки легко приводят к необнаруживаемым компиляторам ошибкам и отсутствием читабельности, как класса. |
| Автор: kolesnle 10.4.2013, 21:36 |
| Что по твоему серьезно? |
| Автор: Beltar 10.4.2013, 23:27 |
| Что-то резко снижающее объем работы и повышающее читабельность. Способность обнаружить ошибку еще на этапе компиляции. |
| Автор: k0rvin 11.4.2013, 05:19 | ||||
http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx
|
| Автор: k0rvin 11.4.2013, 05:42 | ||||||
http://ideone.com/ct8xTq В то время как в любом другом языке с дженериками это работает. Добавлено @ 05:50
Угу, поржет. Над тобой. При чем тут вещественные константы? Ты понимаешь, что в С++ теперь можно константно инициализировать практически что угодно? Например:
Раньше такое можно было шаблонами делать, теперь вот просто функциями. Повтори-ка на Паскале, поржем. Добавлено через 11 минут и 8 секунд
Кэп может продолжать считать значения этих констант на бумажке/калькуляторе каждый раз, когда они ему нужны. Или у Кэпа текстовый файлик с их значениями? =) |
| Автор: kolesnle 11.4.2013, 07:58 |
Да, да ! Давайте поржем все дружно ! |
| Автор: Beltar 11.4.2013, 08:12 | ||||||
И как же я без этого жил-то...
Не вижу ни одного сообщения компилятора относящегося к выражению. Что и неудивительно, т. к. какие там у Free Pascal'я глюки я не знаю, а вот в Delphi
Нормально компилируется. Минут 5 вдумчивого топтания батонов и вот вам набросок связного списка (Болт на утечки), по крайней мере, именно такая идея для такого шаблона первой пришла в голову. |
| Автор: Beltar 11.4.2013, 08:36 | ||
Мы вроде не о решетке говорим. По поводу функций, как констант, понимаешь в чем проблема, можно представить себе использование констант вида a+b и задавать этим, например, размер массива, или что-то в этом духе, но нет никакого смысла подсчитывать на этапе компиляции сверхсложное выражение, на худой конец, посчитай один раз при инициализации программы, да конечно, это лишняя работа в рун-тайм, вот только размер этой лишней работы рассыпается в пыль. Т. е. добавляется фича, которая нужна раз в 100 лет (хотя можно было бы и в Паскале без изменения синтаксиса вообще прикрутить использование стандартных функций для инициализации констант, но никто бы этого не заметил), и прибавки от нее на копейку, при этом сделать те же нормальные строки от которых пользы на миллион, или вменяемую модульность хотя бы на уровне паскалевских юнитов, вместо убогого механизма инклюдов, который, кстати, в Паскале тоже есть, но применяется весьма ограниченно, все никак не соберутся. Так куда идет C++? В сторону наращивания фич для over 9000 частных случаев. |
| Автор: kolesnle 11.4.2013, 08:48 |
Добавили только позарез нужное. Не думаю, что в дальнейшем будут что-то добавлять из ключевых слов/синтаксиса. Только библиотеку будут совершенствовать. Чем тебя не устраивают инклюды? Они лучше паскалевских юнитов |
| Автор: Akella 11.4.2013, 09:37 | ||||
ну 4 года назад были недоделаны, да, когда их внедряли ну теперь-то всё ок Добавлено через 9 минут и 42 секунды
Там речь идёт о Pascal (fpc) (fpc 2.6.2) это freePascal (Lazarus) Кстати, на Lazarus можно писать кросплатформенные приложения. Современный Delphi и Lazarus похожи, очень. Но есть всё равно различия. И некоторые разработчики компонент выпускают версии и для Lazarus в том числе. |
| Автор: Akella 11.4.2013, 10:02 | ||
Что это за .... зачем оно такое? Delphi - это крисвый, изящный язык программирования. Легко читаемый. Даже если есть, то для чего такое, что оно даёт, какие приимущества? |
| Автор: Beltar 11.4.2013, 10:28 | ||||
Механизм инклюдов не предполагает никакого контроля видимости и повторного использования кроме набрасывания дефайнов. Про взаимную видимость, которая есть в Delphi, если модули прописывать в секции implamentation я уж молчу. Кроме того, юнит, это не просто кусок текста, это строго отформатированный элемент компиляции со списком экспорта. Или ты думаешь, что в Борланд такие дураки были, что ввели юниты в BP 4, когда инклюды, как самый примитивный способ реализации многофайловых исходников уже давно были? Кстати, как инклюдами предполагается разруливать ситуацию, когда в них есть одноименные идентификаторы? В юнитах коллизия разрешается явно, последний перечисленный юнит имеет приоритет, при обращении без спецификации юнита. А еще в юнитах есть такие интересные секции, как initialization и finalization, ну и четкое разделение, что на экспорт, а что внутреннее, т. е. юнит даже в обычном Паскале обеспечивал работу, похожую на ООП.
Возможность сэкономить одну микросекунду при запуске посчитав какую-то хрень при компиляции. |
| Автор: k0rvin 11.4.2013, 12:52 | ||||
Вообще слова Map/Dictionary в названиях классов намекают на ассоциативные массивы. Ну да ладно, похоже пофиксили. Как будто делфийские дженерики сильно отличаются от шарповых.
Уменьшение нагрузки на рантайм, при этом никакого изменения кода, кроме добавления 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 | ||
Добавление слова constexpr перед определением функции -- это ущерб читабельности? o_O' |
| Автор: Akella 11.4.2013, 14:52 |
| я в общем про тот код |
| Автор: k0rvin 11.4.2013, 15:05 | ||
Он не имеет отношения к обсуждаемой фиче. Вот то же самое на паскале:
|
| Автор: Beltar 11.4.2013, 15:37 | ||||||
Я не знаю на что намекают названия классов, а вот структура данных, которая содержит ссылку на объект своего собственнного типа намекает как раз на связный список. Для ассоциативных массивов (оказывается такая очевида штука, как массив из структур с полем идентификатором даже название крутое имеет.
Кстааати, 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 по этому поводу так и говорит:
И в общем-то правильно, нефиг вводить всякую фигню, когда в языке уже давно есть способ решения проблемы типа перегрузка функций и RTTI. |
| Автор: Akella 11.4.2013, 15:49 | ||||
так это другое дело |
| Автор: k0rvin 11.4.2013, 16:07 | ||||
Нет, рекурсивных структур данных полно и без связных списков, те же деревья в частности в данном случае. О, да ты любитель рантайм-кастов, значит. Это одно и то же.
[DCC Error] Unit1.pas(22): E2530 Type parameters not allowed on global procedure or function |
| Автор: Beltar 11.4.2013, 18:06 | ||
Ну всунь в класс, как раз в духе .NET. |
| Автор: Akella 11.4.2013, 21:35 | ||
|
| Автор: LSD 12.4.2013, 12:49 | ||
Замечательный язык, не кода а песня
|
| Автор: Athari 25.4.2013, 19:09 | ||
Если уж говорить о замечательном очевидном синтаксисе, то вот примеры:
Хотя, конечно, так никто не делает. Если только на конкурс по обфускации. |
| Автор: catr 17.6.2013, 05:41 | ||
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 | ||
Всяк кулик свое болото хвалит. |
| Автор: drkot 4.9.2013, 02:56 | ||
Простите, за наивный вопрос, но можно пример практической задачи где подобный механизм необходим? И второе, вычисления производятся на этапе компиляции или выполнения? чем? |
| Автор: k0rvin 4.9.2013, 18:30 | ||||
Это механизм не для решения непосредственно каких-то конкретных прикладных задач, а способ выполнять некоторые вычисления на этапе компиляции (например инициализация сложных статических объектов, когда эта инициализация не зависит от рантайма конечно), что снижает нагрузку на рантайм и улучшает читаемость и самодокументирование кода.
Конечно на этапе компиляции в этом и смысл. |
| Автор: drkot 4.9.2013, 21:25 | ||
меня интересует реальный пример когда это необходимо и целесообразно, так как представить куда можно применить данный механизм не могу.
Вы только что сказали что данный механизм не нужен, осторожнее, Вас могут понять буквально. могу заблуждаться, но в С есть достаточно мощный препроцессор, который без труда можно заточить под формирование констант на этапе сборки. Ведь раз сделали данное расширение языка, значит оно кому-то очень нужно. Или не нужно? Может его так, для прикола сделали? В чем необходимость данного нововведения? |
| Автор: k0rvin 4.9.2013, 22:00 | ||||||||
Нет, я только что сказал, что этот инструмент для для решения конкретных прикладных задач, а общая фича языка. Такая же как сonst например или классы.
Построить таблицу области значений функции, соответствия символов кодировок например, основываясь на исходном статически известных массивах символов алфавита. Типа такого:
не напрягая этим рантайм.
Заблуждаешься, в С примитивный препроцессор, который практически только и умеет что простую текстовую подстановку кода. При этом никаких особых вычислений в compile-time не сделать. Шаблоны С++ позволяют некоторые простые вещи вычислить во время компиляции, но они несколько громоздки в написании и их почти нельзя запихнуть в объектник, только в заголовочный файл. Как всегда: плюсовики фапают на скорость. =) |
| Автор: drkot 5.9.2013, 04:08 | ||||||||
определитесь, пожалуйста, он для или не для. озвученные Вами механизмы решают непосредственно очень конкретные задачи. И то что их часто применяют говорит о высокой целесообразности, а не о том, что это последнее обычно в голове бывает, зачастую еще и с шестью лапками... используйте меньше сленга по возможности. Зачем? Где это используется? Если функция непрерывна, то в этом мало смысла, если же она дискретна, то является математически простой и смысла ее загонять в константу нет. А если функция о 20-ти параметрах? и каждый принимает хотя бы три значения. Сколько будет весить константа? Как? Хочу пример функции которая создаст массив подстановок для перекодирования koi-7 в utf-8. Ну или хоть какой-то... Перекодировка подстановками делается т.к. в процессе написания аналитической функции есть риск, что пупок развяжется...
одного не могу понять, что делает функция make_table? Собственно Вы и так передали на вход таблицу перекодировки, зачем с ней еще что-то делать? ИМХО: судя по цитате Вы любите Си за необходимость решать простые вещи, через очень сложное место...
возможно... но что-то мне подсказывает, что Си это не язык, а конструктор Вашего языка... или это всего лишь профанация, порожденная отдельными личностями? и брызги по поводу великого препроцессора Си это так, ППР? Расширять функционал препроцессора не пробовали? не спорю, подстановки быстрее вычислений (причем любых). но роль данного механизма в make_table("привет", "БНОПНЯ") более чем сомнительна, так как смысла функции (действий) в данном примере нет. а использование предварительно вычисленных значений функций, попахивает лабами 5-го класса... "распечатаете значение функции y=2*x где x = 0,1 - 10"... Там же где используется статичный базис (простейшее crcXX, mdX) функции вычисления базисных констант математически сложны, требуют не дюжего количества кода и вычисления могут длится не то что часами, а даже неделями. Учитывая что компиляция и так не ракета, применение вычисляемых констант затормозит ее еще больше... Думаю найдутся таланты вычисляющие число Пи на этапе компиляции... |
| Автор: k0rvin 5.9.2013, 06:54 | ||||||||||
Опечатка, правильно «не для».
Например?
Создает (например хеш)-таблицу символ первого алфавита -> символ второго алфавита (или две таблицы для обоих направлений) во время компиляции, для быстрого поиска. Алфавит известен, от рантайма не зависит, так почему бы не сделать это во время компиляции? Некоторые языки имеют литералы для хешь-таблиц, C++ — нет, и кроме хеш-таблиц есть и другие структуры данных, различных видов деревья, например, на каждую структуру литералов не напасешься.
Не знаю, что за личности, но препроцессор Си туп как пробка. Конечно с его помощью реализованы объекты GObject в GTK, но, насколько я знаю, там такой ад и каша из макросов, что лучше б они этого не делали.
Если область определения известна на этапе компиляции, то почему бы не сделать функцию y константным выражением. Какая постановка задачи, такое и решение. =) Естественно в реальной жизни y должна быть обычной функцией, т.к. данные будут поступать в рантайме, но речь-то не об этом.
Это уже другой вопрос, таланты всегда были и будут. |
| Автор: ТарасАтавин 16.9.2013, 10:26 | ||||
|
| Автор: Exiousle 27.9.2013, 11:44 |
| Где это написано? Или я не все, или С++ любят НЕ все |