![]() |
Модераторы: LSD Страницы: (144) « Первая ... 85 86 [87] 88 89 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Вообще-то в шарпе используется аналог RAII — using. http://msdn.microsoft.com/ru-ru/library/yh598w02.aspx Как и в Java 7 теперь. Я уже писал об этом, но чукча не читатель. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
k0rvin |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
А потом снимаем розовые очки и выясняем, что в Паскале куча способов отстрелить себе ногу. Расскажи мне, куда я записал число 123: http://ideone.com/XpEm4g http://ideone.com/qeETZM 1.
=>
2.
=>
Язык с арифметикой указателей не может быть более безопасным, чем другой такой же. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||||
|
|||||||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: 1 Всего: 5 |
Можно еще прикольней сделать: http://ideone.com/0Zzipl
-------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Не может, но нужна она реже. Что выше и показано. Да и мой наезд, что писать TMyClass * MyClass просто глупо, когда в 99.99% случаев нужна именно ссылка, не просто так возник, запросто ведь можно пропустить указатель.
Атари, а что не так? В США любили писать на плюсах, ну теперь пишут на Бейсике, или Delphi с фигурными скобками (C#). Почему-то GC не из регионов широкого распространения Delphi идет. И не надо путать техническую защищенность (контроль границ массива, которого нет в плюсах) с распространенностью. В целом сравнение сложности плюсов и Delphi, описание первого талмуд, для второго можно уложиться в сотню страниц и можно работать, еще сотня для тех, кто копает глубже. Шарп есть ни что иное, как попытка сделать из плюсов Delphi. А Атари в одном прав, для Delphi сейчас самое полезное было бы добавить синтаксического сахара и, возможно, расширить стандартную библиотеку сотней часто встречающихся функций, которые обычно, можно и так легко реализовать. Радикального повышения производительности не будет, зато понтов прибавится. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Bother |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 13.4.2013 Репутация: нет Всего: нет |
В 99% случаев объект в куче не нужен. Что значит "пропустить указатель"? Статическая типизация тебе на что?
есть. Используй метод at в коллекциях stl. То, что ты любишь нести безосновательную чушь мы уже давно поняли - по делу что-нибудь будет? Провокация? Лол. В дельфи тебя заставляют(не провоцируют) создавать объекты в куче без автоматического управления, и это без сомнения глупо и опасно. С# копировал концепцию Java, в которую объекты на стеке не входят. Потом туда воткнули структуры, для повышения производительности. Собственно, больше они там не для чего не нужны(по идее они обычно не выглядывают за пределы внутренней реализации). И asio и Qt'шные сокеты используют буферы, для которых нельзя сделать опасное переполнение. И давай - запили асинхронный сервер на дельфях, мышка ты наша. ![]() Это сообщение отредактировал(а) Bother - 2.5.2013, 18:18 |
|||
|
||||
Athari |
|
||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 27.6.2007 Где: Казань, Россия Репутация: 1 Всего: 1 |
@Beltar
Эта статистика верна только для твоего дельфового болота.
Не пропустишь. Синтаксис обращения к их членам разный (. vs ->).
Ха-ха-ха, то есть шарп внезапно стал православным дельфи, но с богомерзкими скобками? Ну что ж, прогресс, прогресс. ![]() ![]() ![]() Но вообще "дельфовые" ссылки (указатели с запрещённой арифметикой) присутствуют во многих языках. И если обращаться к истории, то шарп возник из-за того, что Sun не дал MS накручивать в JVM крутые фичи. MS послала Sun с его джавой и начала пилить свой язык -- по определению создателей "возвращение в Java всего хорошего, что есть в C++" (Java -- это "выпиливание из C++ всего лишнего, плюс добавление безопасности и религии"). Потом уже начали хватать вкусняшки изо всех языков, но изначально это именно гибрид Java и C++.
Не понял, к чему это было сказано. Для справки: в плюсах контроль границ присутствует в зависимости от используемых контейнеров и их методов. (И STL -- это часть языка, так что не надо про "встроенность".)
Синтаксическим сахаром не обойтись. Такие вещи как асинхронное программирование, генераторы итераторов, динамический тип, деревья выражений и прочее, требуют весьма нехилой логики. @Bother
Структуры были с первой версии. |
||||||||||||
|
|||||||||||||
Beltar |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
А я где-то говорил, что шарп идейно плох в целом? Шарп это Delphi или даже скорее VB, испорченный сишным (скорее даже жабьим) синтаксисом и GC.
Это как? Просто поддержка итераторов, что и в Delphi давно есть, или оно само будет создавать итератор для любой заданной структуры данных без участия программиста? Или опять будет как с управлением памятью, перебей руками все ссылки, а оно за тебя Free сделает?
Это что? А то варианты боян, RTTI в Delphi всегда была хорошая. Кстати, похоже, утверждение, что Delphi для игр AAA-класса не пригодна просто ложь, 3,14**** и провокация. Если кто-то назовет "Act of War", которая была самой крутой RTS 2005-го года, не AAA-класса, то я в него не то, что камень, бомбу кину. Но мне тут инфа попалась, что у нее экзешник содержит, как и у всех дельфовых прог раздел RC Data. А в нем: в DVCLAL: // <SIGNATURE> - Licence is valid - Delphi Client/Server Suite (Enterprise) Помимо этого там еще куча DFM'ок унаследованных от TForm. У вышеупомянутой Эадор в этом разделе стоит C++ Builder, он же у вполне себе не второсортной "XIII век". Хотя билдер вроде не быстрее Delphi. Age of Wonders в свое время реализовала интересную концепцию, пошаговую стратегию с правом одновременного хода, для сценариев на 8-12 игроков, весьма полезная штука, т. к. не надо было ждать, пока каждый ход завершит. И вполне себе это тащила на железе 99-го года. Delphi так же не помешала Katauri реализовать RTS-режим в их "Космических рейнджерах". Потом они перешли на плюсы, но не могу сказать, что King's Bounty быстрая игра, а их MMORPG Royal Quest на которую я убил порядочно времени, вообще поражала ошибками, которые по всем законам ООП просто невозможны, не должна правильно спроектированная программа допускать такого влияния модулей друг на друга. В общем в США могут что угодно делать на своих плюсах, там где на Delphi пишут, на ней добивались результатов не хуже. По крайней мере, для стратегий Delphi точно пригодна. ![]() -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||
|
|||||||
Athari |
|
||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 27.6.2007 Где: Казань, Россия Репутация: 1 Всего: 1 |
@Beltar
Ладно, шут с тобой, в пользу GC ты не веришь. Но вред-то в нём какой? Расскажи мне о такой своей задаче, где GC будет узким местом (ну то есть будет потреблять больше 10% CPU), а ручное управление памятью -- нет (меньше 10%). Для информации: создание и удаление в куче -- это тоже недешёвая операция; это одна из причин, почему сишники так неровно дышут к созданию объектов в стеке, хоть и не главная. И, если честно, я вообще таких задач не знаю, так что можешь даже не пытаться. Применяя местную тактику дельфистов: ручное управление памятью тебе не нужно.
Yield. На нём реализованы LINQ и прочие вкусности. Да, кстати, не беспокойся о скорости. Сам не проверял, но по слухам JIT компилятор наконец-то научили раскручивать самые частые случаи в обычные циклы, так что стоимость нулевая.
Это когда ты пишешь "foo.Bar", а тип переменной foo может быть любой -- главное, чтобы было такое свойство, и его результат подходил в выражении. Это используется для поддержки языков с динамической типизацией, но и по отдельности полезно: удобные отражения, мультиметоды (но это так, довесок).
Если очень захотеть, "ААА" можно и на ассемблере написать. Вопрос в стоимости разработки. Ну и игре 8 лет; одна игра в десятилетие (за всю историю дельфи?) -- это не статистика. В общем и целом, исключение подтверждает правило. Разработка ААА игр чуть менее, чем полностью подмята под собой плюсами. Для остальных языков остаются только "инди".
Ну вот, даже тут не дельфи. ![]() Вот смотри, ты смог назвать одну "ААА" игру (я уже не помню стандарты восьмилетней давности, поэтому судить сложно, но ладно, приму на веру), несколько игр среднего пошиба и "инди". А теперь сравним с тем же шарпом. Игр среднего пошиба -- сотни; инди-игр -- тысячи. Наверное, это что-то говорит об удобстве платформы? Ещё раз поставлю акцент: принципиальная возможность не интересует никого, кроме фанатиков. Серьёзных производителей игр и прочего софта интересует цена: цена разработчиков, цена поиска разработчиков, скорость разработки, скорость достижения приемлемого качества, наличие готовых библиотек, наличие инструментов и прочее, и прочее. Чем больше ты сможешь сэкономить, чем быстрее выложишь свой товар на прилавок -- тем больше доход. И если ты умудряешься жить без "ненужных" фич, то в игровой индустрии вся эта "магия" и "шаманство" нужны позарез. |
||||||||||
|
|||||||||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 14 Всего: 459 |
Зная это кодегировцы поставили лучший менеджер кучи, который в несколько раз быстрее того, что использует VS C++ . Насколько я помню, пути дебага сводят new к HeapAlloc в конечном итоге. Действительно, когда объект создается в функции и в ней же умирает, то дергать кучу как бы не очень хорошо. Но, если взять True Way C++ (STL/Boost) с использованием для строк наследников base_string<> , векторов как классов для работы с массивами, всяческих stringstream для форматирования и конвертаций, то куча там также прет из всех дыр. Контейнеры/строки С++ в любом случае дернут кучу, даже если мы создали временную строчку в функции. Не берусь говорить за всех, но в моей практике как объекты среднего размера и создаются чаще всего в куче, поскольку часто их время жизни не определено. Статическими, обычно получаются либо большие объекты выполняющие роль неймспесов (синглтоны) или маленькие объекты типа - команды. Но совсем другое дело язык С . Он действительно шикарен. В его нише делфи выглядит, действительно, уныло. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Ну теперь началось, что можно и на ассемблере написать. О том, как разработка сложного ПО решается на плюсах, мы уже насмотрелись, сами плюсы вытесняются шарпом.
За все время существования платформы? А то событийных игр выходит в год 2-4 шт в каждом жанре. А что там в среднем классе вроде того же Эадора, который просто перерос масштаб инди-игры, мне сложно оценивать. Но точно можно сказать, что писать такую игрушку лучше на том, чем умеешь, не заморачиваясь на плюсы (кстати, сколько AAA-игр сделанных на плюсах просто безбожно тормозит на ровном месте? У той же WoT самый мерзкий движок из всех мной виденных.). Что собственно и делают. Или в конструкторе игр, а тут лидирует дельфовый Game Maker. Вопрос был не об этом вообще-то, а о том, что якобы игру ААА-класса в Delphi\Билдере сделать вообще нельзя из-за низкой производительности. Однако таковые нашлись. Добавлено через 12 минут и 3 секунды
Логично, в условиях США делать будут только на плюсах, однако в РФ да и много где в Европе дельфовый разработчик не редкость. Собственно все перечисленные игры были выпущены в Европе.
А для этого обязательна поддержка сопрограмм?
Вирт его синтаксически усовершенствованным ассемблером назвал. Хотя некоторые ошибкогенерирующие от опечаток конструкции все равно надо лечить. Но в его нише любой язык высокого уровня выглядит уныло. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||||||
|
|||||||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
>>type Ptr = ^Integer; а зачем такое писать? В Delphi есть тип Variant. Может быть любым типом или объектом. |
|||
|
||||
Athari |
|
||||||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 27.6.2007 Где: Казань, Россия Репутация: 1 Всего: 1 |
@Alexeis
Как я уже сказал, мерянье скоростью new/delete бессмысленно, потому что приложений, для которых это критично, очень мало. Увеличение скорости работы с памятью на 100%, если работы с памятью в приложении 4%, даст общий прирост производительности на 2%. @Beltar
Ты опять путаешь сложность. Корпоративный софт и крупная веб-разработка перебрались на шарп (и джаву; в разных соотношениях). Из игр реально перебрались только инди. Крупный коробочный софт, крупные игры -- как были на плюсах, так и остаются, никуда плюсы не вытесняются. Крупные игры тоже могли бы переползти, но экспоненциальный рост производитльности застрял, технология топчется на одном месте. Поэтому у производителей ААА игр возникает вполне естественное желание выжимать все соки из уже имеющегося железа. А это плюсы.
Штука любопытная, но как много на нём коммерчески успешных игр? Я вон не так давно на стиме появился, на распродажах всяких инди-игрушек и местами чего более крупного нахватал. Я любитель платформенных игрушек, и гейм-мейкер тут позволяет теоретически должен хорошо себя показывать, но что-то среди купленных мной игр дофига дотнета, дофига нативных игрушек, немного джавы -- и пока только одна гейм-мейкеровая игрушка (Stealth Bastard Deluxe -- графика убитая, но геймплей сносный).
Эту проблему ты сам придумал. Тебе много раз твердили, что под дельфи элементарно не хватает инструментария.
Дельфовых разрабов найти можно, но разрабов на плюсах, шарпе и джаве -- на порядки больше в любой точке мира. Это значит, что поиск сильно упрощается. Да и среди плюсовиков на порядок проще найти того, кто разбирается в разработке игр, потому что на плюсах в день появляется больше игр, чем на дельфи за год. Это означает, что не нужно обучать с нуля, то есть экономия. Это значит, что если кто-то уволится, то замену не придётся искать месяцами, то есть снижение рисков.
Насколько понимаю, да. Понятно, что для написания класса итератора можно использовать стандартные средства, но код будет ужасным и нечитаемым. Весь смысл yield в том, чтобы код был чистым и понятным. Добавлено через 9 минут и 5 секунд @Akella
Я не дома, проверить не могу. Можно написать так? (На синтаксические ошибки внимания не обращать. Тип переменных и результатов функций принципиален.)
|
||||||||||||||||
|
|||||||||||||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 4 Всего: 161 |
В чем особая забористость этого подхода против try finally? Запись на пару строчек компактнее? ![]() Это сообщение отредактировал(а) Zloxa - 3.5.2013, 15:41 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Нет, TCheckBox просто так, наверное нельзя. Даже не приходило в голову.
Здесь можно использовать TObject вместо Variant. Ну как-то так:
С Variant`ом можно так:
|
||||
|
|||||
Beltar |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 2 Всего: 7 |
Нет, не в этом дело. Просто PC сейчас становится не основной платформой, игры тащат на консоли, где, обычно, нет ничего кроме плюсового компилятора. Эти же консоли своим медленным обновлением тормозят развитие персоналок потому что суют на них одни и те же модели, ожидаю что в будущем спрос на сверхмощные видеокарты и SLI-системы может упасть, вроде уже есть такая тенденция. При этом сами проци со времени P-4 неплохо проэвоолюционировали, Core Duo по удельной производительности с 1 ядра рвет P-4 как тузик грелку, у следующей Sandy Bridge рывок тоже весьма конкретный. Память тоже частоту наращивает. DX9 была принципиально однопоточной библиотекой, по сути все эти Core Quad пустая трата денег были, если сервер на нем не поднимать. А DX11 еще только входит в силу. Впрочем все основные задачи для типовых игр вроде шутеров или RTS можно считать уже давно решенными, т. е. игра будет нормально работать, если просто не делать ее через задницу. Мне тут попадался вопрос, можно ли на шарпе делать игровой проект, там была ифа, что в Unreal Engine скрипты в 30 раз медленнее основного кода работают, и это допустимо. Скорость разработки сейчас на первый план выходят, остальное железо вытащит. Понтовые шутеры же вроде "крузиса" выходят 1-2 раза в год. А 10000 полигонов на танчег в какой-нибудь C&C 10 это так для рекламы, на практике разницы даже при приближении не заметишь. Кстати в Bioshock Infinite (Unreal Engine) я особой разницы между максимальной и минимальной графикой вообще не заметил, По крайней мере, в детальности моделей.
Какого инструментария, а как 15 лет назад люди писали не имея современных продвинутых средств? У вас претензия по сути одна, что Delphi детский конструктор, который ни на что больше не годен, кроме как компоненты склеивать. Однако каждый раз оказывается, что во всех сферах применения находятся вполне качественные программы на Delphi.
А кто их знает. На сайте выставка достижений. И почему обязательно коммерчески успешных? Я вон сейчас в Lost Snowmen играл, она халявная, наши ребята с redsys.ru сделали. Думаю подавляющее большинство таких игр бесплатны.
Дельфовых разрабов много знаю, плюсовых меньше, так что странна вера ваша.
Нет, потому что у варианта конечная таблица типов. Вопрос не в этом, написать-то можно много, но иногда лучше этого не делать. Так что интересно для начала узнать, что предполагается достичь таким приведением теплого к мягкому.
Inc(P); приведет к увеличению адреса на размер типа на который указывает указатель. Я правда не понял, что ты хочешь показать. Есть языки в которых ногу прострелить нельзя (VB), но нельзя и еще много чего, есть языки в которых без стрельбы по ногам никак (Си, Си++, хотя последний и пытается выставить дело так, будто стрельбы нет), а есть Паскаль, где стрельба по ногам возможна, но лишь при крайней необходимости. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||||||||
|
|||||||||||||
![]() ![]() ![]() |
Правила ведения Религиозных войн | |
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Религиозные войны | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |