Форум » Media » Прога » Ответить

Прога

Bloodiness: Тут есть пргограммизды или кодеры? Если идея принципиально новой игры :3

Ответов - 179, стр: 1 2 3 4 5 6 7 8 9 All

Archi: Bloodiness Вас ждут тонны кирпичей. Ждите.

рыцарь: 2 тонны

c4tnt: Ога, ждут, однозначно


Bloodiness: >> 2 тонны >> Ога, ждут, однозначно Жду с нетерпением. А по теме будут только смайлофажить? -___-

c4tnt: Ну в частности я являюсь программистом SD, и тут ещё кое-кто присутствует кроме меня из кодеров

Bloodiness: >> Ну в частности я являюсь программистом SD, и тут ещё кое-кто присутствует кроме меня из кодеров Прошу просвятите заодно, что есть SD.

c4tnt: Total Conversion для дум3. Запиливаем всякие нововведения типа хабов, воды и прочего.

Bloodiness: >> Total Conversion для дум3. Запиливаем всякие нововведения типа хабов, воды и прочего. Сильно! Где исходники нашли? Или их открыли уже О_о?

Archi: Bloodiness пишет: Сильно! Где исходники нашли? Или их открыли уже О_о? так ведь СДК же.

Bloodiness: Ладно. Ну я зато знаю уже к чьей помощи нельзя прибегать.

c4tnt: Ну тогда ждём остальных кодеров, которые тут точно есть

Archi: Bloodiness пишет: Если идея принципиально новой игры :3 объясните как понимать.

Bloodiness: >> объясните как понимать. Понимайте пока буквально :3 А помощь c4tnt не нужна, ибо совсем другой уровень.

marat: а на каком языке то хоть? а то за месяцок могу си выучить)

Archi: marat пишет: а на каком языке то хоть? а то за месяцок могу си выучить)

marat: да хоть за день, вот только лнь одолевает, же!

Bloodiness: >> количество смайликов на сантиметр зашкаливает Да ну не смешно же. Си простой язык. Языковые конструкции за три дня изучаются. Только есть одна проблема - если хотите написать что-то большое - не хватайтесь за Си. Си неудобен. Ручной контроль памяти смешная штука.

marat: Bloodiness пишет: Только есть одна проблема - если хотите написать что-то большое - не хватайтесь за Си. за что же схватиться?

Bloodiness: >> за что же схватиться? А вот это уже от ваших целей зависит.

marat: Bloodiness пишет: А вот это уже от ваших целей зависит. допустим я решил сделать "самую крутую игру на свете с супер графикой и прочей фигатой"

Bloodiness: >> допустим я решил сделать "самую крутую игру на свете с супер графикой и прочей фигатой" В таком случае лучше сразу убиваться головой об стенку :3 Это не возможно.

marat: Bloodiness пишет: убиваться головой об стенку это новый язык. сокращенно угос.

рыцарь: marat а ты знаешь его?

marat: рыцарь пишет: marat а ты знаешь его? обижаааешь...*стук-стук-стук*

рыцарь: marat я не кого не обижаю ,а ты действительно знаешь язык, который дает возможность игры делать?

marat: рыцарь пишет: marat я не кого не обижаю ,а ты действительно знаешь язык, который дает возможность игры делать? *facepalm*

Archi: Это пиздос, товарисчи. Даже с моими хуевыми знаниями программирования я точно могу сказать что Си на данный момент самый оптимальный вариант, а то что кто то там собирается его выучить за 3 дня, ну дерзайте, я потом посмотрю что вы сделаете. И сделаете ли вообще. marat давай! Сделай движок для игры.

[nya]Kawaii: пишите на хтмл текстовые как-то так -_^

рыцарь: Archi 4 звезды круто

Bloodiness: >> Это пиздос, товарисчи. Даже с моими хуевыми знаниями программирования я точно могу сказать что Си на данный момент самый оптимальный вариант Си - оптимальный вариант? Да, знания программирования у вас ни к черту. >> то что кто то там собирается его выучить за 3 дня, ну дерзайте, я потом посмотрю что вы сделаете. И сделаете ли вообще. Много ума для этого не нужно. Я осилил Си ровно за столько. Можно писать всякую хрень с оглядкой на документацию. >> давай! Сделай движок для игры. RevenentX, к слову, пишет кроссплатформенный движок на Сях. Даже меня хотел в это втянуть. Но я не люблю си, ибо стандартная библиотека там бедная как тамбовские бомжи.

c4tnt: Интересно, таки зачем вам стандартная библиотека для изготовления ядра игры?

Bloodiness: >> Интересно, таки зачем вам стандартная библиотека для изготовления ядра игры? >> таки зачем вам >> вам Лол, при чем тут я?

c4tnt: сабж: RevenentX, к слову, пишет кроссплатформенный движок на Сях. Даже меня хотел в это втянуть. Но я не люблю си, ибо стандартная библиотека там бедная как тамбовские бомжи.

Bloodiness: >> сабж: Я таки писал, что разрабатываю ядро игры на Си? Я таки писал, что в Си библиотека убога, потому что в ней не хватает функций для разработки ядра игры? Нет же. В Си стандартная библиотека убога сама собой, не важно для каких целей. Если хотите дальше поспрашивать, то свяжитесь с автором, ибо я там никаким боком не затесался. Вот проект на гуглокоде: http://code.google.com/p/rxengine/ там же и контактная информация.

c4tnt: Ну да впрочем дело не в этом. Было бы уважительно к будущим кодерам всё же указать, на каком языке планируется разработка

Bloodiness: >> Ну да впрочем дело не в этом. Было бы уважительно к будущим кодерам всё же указать, на каком языке планируется разработка Я хотел сперва найти хотя бы людей, которые этим занимаются, а с ними решить все в личной переписке. Нялсо на язык стоит только одно ограничение: лишь бы не убожественное цепепе! На Си просто, даже проект небольшой поднять стоит кучу усилий и часов отладки. Мои проги на Си часто сегфолтятся -___-. Я пишу всякую хрень на Python и Java. До сих пор есть идея писать все на Java с нативными методами на Си, чтобы максимально эффективно использовать готовые структуры данных на Java (хотя придется свои писать) и сэкономить процессорное время благодаря относительной быстроте Си.

c4tnt: Ну может тут кто-то умеет писать без ошибок доступа к памяти и на си?

Bloodiness: >> Ну может тут кто-то умеет писать без ошибок доступа к памяти и на си? Ох. Чего уж там уметь? Это очень просто. Ошибки к обращению вызываются чаще невменяемыми конструкциями на Си, которые приходится писать, ибо как ни крути, некоторые вещи в Си можно сделать только через задницу. А простые вещи может написать любая кодящая обезьянка.

c4tnt: Мои проги на Си часто сегфолтятся Ох. Чего уж там уметь? Это очень просто и этот человек называет меня непоследовательным и нелогичным???

Bloodiness: >> и этот человек называет меня непоследовательным и нелогичным??? Если это не получается у меня с первого раза, это вовсе не значит, что это архисложно. Это лишь говорит о том, что я невнимателен к деталям. Последний сегфолт был вызван выражением: printf("%s\n", (char**)(list_gd(st, j)->container)); // Вкусняшки, правда?

c4tnt: Интересно, что же в этом list_gd(st, j)->container такого, что к нему такой каст приделали...

Bloodiness: >> Интересно, что же в этом list_gd(st, j)->container такого, что к нему такой каст приделали... Не мне вам говорить, что сделать динамически расширяемый односвязный список на Си для любых типов данных та ещё головная боль.

c4tnt: тут, конечно, ещё большой вопрос, надо ли оно... А если произвольный, но только на однотипные данные, то тут шаблоны в дело вступают и нет проблем. А если всё же произвольный для многих типов, то тут в любом языке крэшеопасно если не тот тип попался и придётся делать RTTI самостоятельно.

Bloodiness: >> А если произвольный, но только на однотипные данные, то тут шаблоны в дело вступают и нет проблем. В си есть шаблоны, О_о desu? >> А если всё же произвольный для многих типов, то тут в любом языке крэшеопасно если не тот тип попался Не в любом. Во вменяемых языках всегда есть instanceof и try\catch блоки.

c4tnt: Ну так и в сях исключения тоже есть же А инстанс можно и ручками прикрутить за счёт шаблонов и макросов хотя бы. Если интересно, можешь скачать д3-сдк и взять мастеркласс у Кармака И да, в плюсовом си есть шаблоны и классы и объекты и дофига всякого. Только лямбды ещё нету.

Bloodiness: >> Ну так и в сях исключения тоже есть же А инстанс можно и ручками прикрутить за счёт шаблонов и макросов хотя бы. Если интересно, можешь скачать д3-сдк и взять мастеркласс у Кармака Я же говорил что нормальные фичи в Си делаются через задницу. >> И да, в плюсовом си есть шаблоны и классы и объекты и дофига всякого. Только лямбды ещё нету. Too slow... Уже есть в стандарте c++0x. Пруфлинк: http://habrahabr.ru/blogs/cpp/89494/ Но не забывайте, что Си++ убогое перегруженное говно, на котором с удовольствием могут кодить только окончательные.

Archi: Bloodiness пишет: Но не забывайте, что Си++ убогое перегруженное говно, на котором с удовольствием могут кодить только окончательные. А теперь объясните чем он хуже Си. Желательно с подробностями.

c4tnt: ну мы про 0x и D не говорили вроде. Но вообще C++ как бы расширение си и относиться к нему логичнее всего именно как к расширению стандарта. А на счёт перегруженности - может си++ и перегружено в компил-тайме, но зато ява, питон, и прочее VM семейство перегружено в рантайме, что хуже для нас, как программистов высокопроизводительных приложений, т.е. игр.

Bloodiness: >> А теперь объясните чем он хуже Си. Желательно с подробностями. 1. Излишней перегруженностью и запутанностью. Нахрена множественное наследование? Нахрена лямбды? Нахрена ущербный синтаксис? Нахрена тратить уйму времени на реализацию элементарных вещей? 2. Си++ уже не нужен. Сейчас на них пишутся в основном игрушки. Крупные компании уделяют больше внимания языкам высокого уровня, такими как C# и Java. Не скажу за всех, но консалтинговые точно. Такой компании как правило лучше нанять программиста с высокой продуктивностью, чем упоротого плюситса, генерирующего 10000 строк быдлокода в месяц. Ушла эра дельфи, уйдет и эра плюсов, смиритесь.

Bloodiness: >> ну мы про 0x и D не говорили вроде. Вы поставили в один ряд совершенно другой язык (D) и новый стандарт плюсов (0x). >> Но вообще C++ как бы расширение си и относиться к нему логичнее всего именно как к расширению стандарта. Страуструп все испортил!11 Т__т >> А на счёт перегруженности - может си++ и перегружено в компил-тайме, но зато ява, питон, и прочее VM семейство перегружено в рантайме, что хуже для нас, как программистов высокопроизводительных приложений, т.е. игр. Тут можно спорить до посинения. Код на высокоуровневых языках пишется быстрее и проще. А Java обгоняет С++ по производительности в битовых операциях и еще в некоторых дисциплинах. Не забывайте, есть JIT для явы, есть и для питона.

c4tnt: да, народ не понимает принципиально группы языков программирования по их назначению... Бывают языки высокоабстрактные - ява, шарп, ещё много чего. Бывают языки с низким уровнем абстракции - ассемблер, си, плюсы те же. У каждой группы разное назначение. А Java обгоняет С++ по производительности в битовых операциях и еще в некоторых дисциплинах. пруф, или вы таки сравнивали сишный код без SSE\MMX и явовский с этими возможностями? Так не честно

Archi: Bloodiness пишет: Нахрена лямбды? c4tnt пишет: Только лямбды ещё нету. ВП... Bloodiness пишет: Нахрена ущербный синтаксис? Нахрена тратить уйму времени на реализацию элементарных вещей? Епт, опять ВП!? Bloodiness пишет: Сейчас на них пишутся в основном игрушки Интересно, а мы тут что собрались делать?! О_о В общем кроме странных и непонятных фактов ничего годного тут нету. Жаль, я был о вас лучшего мнения. А смотреть на то, что в компаниях используют си шарп и яву, ну это уже слишком брутально, это не показатель того что си++ не нужен. Странно, но ядро линукса написано на Си... И это наталкивает на странные мысли. Bloodiness пишет: Ушла эра дельфи, уйдет и эра плюсов, смиритесь. Дельфи появилась в 1995 году, а с++ в 1985. А си вообще в начале 70...

c4tnt: Дэльфи - это вообще тяжёлый случай, не поддающийся лечению... Вы поставили в один ряд совершенно другой язык (D) и новый стандарт плюсов (0x). Да, мы про них не говорим и в этом плане они на равных

Bloodiness: >> Бывают языки с низким уровнем абстракции - ассемблер, си, плюсы те же. >> У каждой группы разное назначение. Чудно что хоть в чем-то у нас совпадают мнения ^___^. Да группы языков существуют, но четкого разделения между ними нет. Асм и си нужны, ибо кто тогда будет микроконтроллеры клепать? Я просто смотрю с точки зрения возможного будущего прикладного программиста. Я вижу что языки высокого уровня отвоевывают свое. И в геймдеве тоже. У "Ил штурмовик" логика игры на Java написанна. Вот с этой точки мне чрезвычайно видно что пора упаковывать прах С++ в сфере прикладного программирования. P.S> годный языкосрач спор о ЯП!

Archi: Bloodiness пишет: P.S> годный языкосрач спор о ЯП! двачую

c4tnt: У "Ил штурмовик" логика игры на Java написанна. У д3 половина логики выполняется на виртуальной машине, в анрил встроен забыл какой, но тоже скриптовый язык... В ку3 вообще был вариант выполнения всей логики на VM. В Zdoom наконец... И что теперь? PS. Годный, утраиваю

Bloodiness: >> ВП... Вы выигрываете мехового слоупока! Не читать ссылки и посты и писать бред - это так весело! ^__^ >> Интересно, а мы тут что собрались делать?! О_о В общем кроме странных и непонятных фактов ничего годного тут нету. Жаль, я был о вас лучшего мнения. А смотреть на то, что в компаниях используют си шарп и яву, ну это уже слишком брутально, это не показатель того что си++ не нужен. Ладно. Погодите. Я исключу этот факт, не смотря что эти компании перешли на языки высокого уровня с тех же плюсов по доброй воле. Так. Исключил. С++ не нужен! >> Странно, но ядро линукса написано на Си... И это наталкивает на странные мысли. Ох майн щет. Я люблю Си. Я ненавижу плюсы. Причем тут линукс я не понял. Линус Торвальдс ведь студент и мудак. >> Дельфи появилась в 1995 году, а с++ в 1985. А си вообще в начале 70... Logical error!

Bloodiness: >> пруф, или вы таки сравнивали сишный код без SSE\MMX и явовский с этими возможностями? Так не честно Кей Хорстманн гарантируе!

c4tnt: Ох майн щет. Я люблю Си. Я ненавижу плюсы. Определиться пора бы, любишь или нет...

Archi: Bloodiness пишет: Logical error! дададад, с++ не умрет. Дельфи умер через промежуток времени, который с++ уже пережил. Bloodiness пишет: Я люблю Си Ненене, только недавно говорилось что то совсем обратное! c4tnt пишет: В Zdoom наконец... это вы о чем, собсно?

Archi: Bloodiness пишет: Кей Хорстманн гарантируе! Этого как бы недостаточно ^_^'

Bloodiness: >> Да, мы про них не говорим и в этом плане они на равных Вы точно не путаете такие слова как "стандарт" и "язык"? Стандарт, значит что он утвержден и является официальной частью языка.

c4tnt: Ну какая разница, не говорим о новом стандарте или не говорим о расширении старого... Не говорим же. В Zdoom наконец... А что у вас там в вадниках лежит как не код для виртуальной машины, встроенной в игру?

Bloodiness: >> Определиться пора бы, любишь или нет... >> Ненене, только недавно говорилось что то совсем обратное! Я вам не хочу объяснять очевидные вещи, которые в принципе уже оглашались. Не выдерайте фразу из контекста, а то софистов тут развелось. >> дададад, с++ не умрет. Дельфи умер через промежуток времени, который с++ уже пережил. Дельфи можно. Он еще более редкостное говно. К слову С++ жив еще благодаря куче уже написанного кода, от которого трудно отказаться. Но ничего, откажутся.

Bloodiness: >> Этого как бы недостаточно ^_^' Пожалуйста найди ссылку на книгу сам. Я тебе подскажу: Восьмое издание, глава 13 "Коллекции", страница 713, подзаголовок "Реализация решета Эратосфена". ADDED: Простите, забыл название >____< "Java2. Том первый. Основы."

c4tnt: Просто суть в том, что правильно написаные на си битовые операции получаются оптимальными и в ассемблерной развёртке (по крайней мере где-то в недрах хабра был пример memcpy на битовых операциях, ничуть не уступающий ассемблерному). Как ява может физически обрабатывать данные быстрее си в этом случае - непонятно. Даже если JIT дал идеальный код, то эффект должен был быть равным.

Bloodiness: >> Просто суть в том, что правильно написаные на си битовые операции получаются оптимальными и в ассемблерной развёртке (по крайней мере где-то в недрах хабра был пример memcpy на битовых операциях, ничуть не уступающий ассемблерному). Как ява может физически обрабатывать данные быстрее си в этом случае - непонятно. Даже если JIT дал идеальный код, то эффект должен был быть равным. Спору нет. Но во-первых: Си, а не Си++. А во-вторых я не стремлюсь доказать, что ява быстрее Сей. Я пытаюсь доказать что язык высокого уровня окупается в первую очередь скоростью разработки, а уже во вторую очередь, возможно, и скоростью работы, если алгоритм писался не в полном бреду и нормальным программистом, который знаком с понятием оптимизация.

Bloodiness: >> Ну какая разница, не говорим о новом стандарте или не говорим о расширении старого... >> Не говорим же. Не надо приводить в действие ваши грязные софистские приёмчики! Мы говорим об языке С++ явно подразумевая его стандарт, который принят официально.

c4tnt: Ну и если VM\JIT тоже писался таким же вменяемым программистом. Пример с книгой доказывает, что возможно обратное. PS Ну мы ещё о апельсинах не говорим, их тоже в этот строй никак?

Archi: Bloodiness пишет: Спору нет. Но во-первых: Си, а не Си++. А во-вторых я не стремлюсь доказать, что ява быстрее Сей. Я пытаюсь доказать что язык высокого уровня окупается в первую очередь скоростью разработки, а уже во вторую очередь, возможно, и скоростью работы, если алгоритм писался не в полном бреду и нормальным программистом, который знаком с понятием оптимизация. В чем собсно и проблема современной хуиты движков. Берем почти любой двиг, он оказывается недопиленным, не оптимизированным, но выдает вполне качественную картинку вместе с низким фпс на мощных компах. Весь мир катится в жопу из-за таких мудил, которые просто напросто стараются сделать побыстрее, пренебрегая ошибками, пренебрегая оптимизацией. Можно опять же сказать про кризис. Первая версия тормозила очень и очень, с патчами они вроде слегка заштопали...

Bloodiness: >> Ну мы ещё о апельсинах не говорим, их тоже в этот строй никак? Пr'остите. Это слишком не в тему. Пусть вы и пытаетесь вывернуться, указав якобы на неверное утверждение в моём псто, но делаете это крайне неумело, неуместно. Это в общем-то не к месту. Если принят 0x, значит лямбды, ненужные в плюсах, в них все же есть. А говорить что их нету - первый симптом ФГМ. >> В чем собсно и проблема современной хуиты движков. Берем почти любой двиг, он оказывается недопиленным, не оптимизированным, но выдает вполне качественную картинку вместе с низким фпс на мощных компах. Весь мир катится в жопу из-за таких мудил, которые просто напросто стараются сделать побыстрее, пренебрегая ошибками, пренебрегая оптимизацией. Можно опять же сказать про кризис. Первая версия тормозила очень и очень, с патчами они вроде слегка заштопали... Не надо! Вы пытаетесь представить все не в том свете, пользуясь фактами, которые не имеют отношения к теме! Недопиленные двиги - проблема программистов, а не ЯП. Если у программиста руки из нестандартного места, то что уж тут. Движки пишутся на языках, не относящихся к высокоуровневым. Потом, стараются побыстрее сделать и делают на спех, а я веду речь о том, что грамотновыверенного, отлаженного и оптимизированного кода на языках высокого уровня можно добится быстрее, чем на тех, на которых писались эти быдлодвижки.

c4tnt: Если принят 0x, значит лямбды, ненужные в плюсах А они там так уж и не нужны? Ну а не нужны - не юзай, нагрузки на VM\JIT это не создаёт за неимением оных я веду речь о том, что добится грамотновыверенного, отлаженного и оптимизированного кода на языках высокого уровня можно добится быстрее Откуда такая уверенность, вы ведь даже не знаете, что фактически делают те команды, которые вы исользуете. А знает только автор VM

Bloodiness: >> Ну и если VM\JIT тоже писался таким же вменяемым программистом. Пример с книгой доказывает, что возможно обратное. О Б-же! Я не скажу за свой VM\JIT, так как это openjdk, но вы сомневаетесь в Sun? Стандартная библиотека языка просто великолепна, реализация обработчиков событий в Swing тоже неплоха. Я сомневаюсь, что люди написавшие эти эффективные части библиотеки криво написали VM и JIT.

c4tnt: Я сомневаюсь, что люди написавшие эти эффективные части библиотеки криво написали VM и JIT. А если это были просто разные отделы? В VM однозначно случаются ошибки, это факт. Но свои исправить можно, а VM-ные только после долгих бесед с автором той VM, в которой косяк... Да и найти его сложнее. И ещё, раз уж тема заходила про бизнес и программы для него. Если вы серьёзно считаете, что кому-то кроме банков важно быстродействие и стабильность программы, то это однозначное заблуждение. Примеры вокруг, тысячи их. Да и банкам важна в основном стабильность. А остальным - лишь бы работало и правильно считало деньги, всё

Archi: Bloodiness пишет: Не надо! Вы пытаетесь представить все не в том свете, пользуясь фактами, которые не имеют отношения к теме! Недопиленные двиги - проблема программистов, а не ЯП. Если у программиста руки из нестандартного места, то что уж тут. Движки пишутся на языках, не относящихся к высокоуровневым. Потом, стараются побыстрее сделать и делают на спех, а я веду речь о том, что добится грамотновыверенного, отлаженного и оптимизированного кода на языках высокого уровня можно добится быстрее, чем на тех, на которых писались эти быдлодвижки. Значит крайтек написали хуйню, а не движок! И у этой хуйни не может быть наград... Жаль, что их не отберут, в смысле награды не отберут. И да, Какими данными вы пользуетесь, говоря что что то будет сделано быстрее, а что то медленнее, причем качество будет одинаковым? Надеюсь это не собственные выводы.

Bloodiness: >> А они там так уж и не нужны? Ну а не нужны - не юзай, нагрузки на VM\JIT это не создаёт за неимением оных Да не нужны. Хотите лямбы - бегом учить хаскел. Не надо замусоривать и так уже забитый ненужными конструкциями Си++. >> Откуда такая уверенность, вы ведь даже не знаете, что фактически делают те команды, которые вы исользуете. А знает только автор VM Лол! Я весь в аплодисментах вам. Вся фишка языков в том, что вы не заморачиваетесь во внутренней реализации и контроле памяти, а пишите именно реализацию алгоритма! Что как-раз и делает VM более крашеустойкой и безопасной. Сишник может ненароком опечатку поставить, например в тех же if(x == 0) и вся программа скатится в говно, а искать такую ошибку в тонне кода - извольте. В ява уже предусмотрели эту фичу: использовать в качестве условия можно только boolean-тип. Тоже относится к неявным ссылкам. А VM делает то, что вы ей скажете. Как она это делает вас не должно интересовать. А если интересует то пишите сразу на асме! А то кто знает, какую фишку выкинет компилятор в ассемблерном коде!

Archi: Bloodiness пишет: использовать в качестве условия можно только boolean-тип Это правда?! Bloodiness пишет: Как она это делает вас не должно интересовать Быдлокодеров - не должна...

c4tnt: А на яве иногда случаются вполне адекватные наборы инструкций, которые внезапно рушат всё. Это да, веселее. Или внезапно производительность независимых команд, поставленых в одном порядке одна, а в другом - совсем другая. И от чего это зависит - никто не знает. Сишник может ненароком опечатку поставить, например в тех же if(x == 0) и вся программа скатится в говно От этого есть одно хорррррошее средство

Bloodiness: >> И ещё, раз уж тема заходила про бизнес и программы для него. Если вы серьёзно считаете, что кому-то кроме банков важно быстродействие и стабильность программы, то это однозначное заблуждение. Примеры вокруг, тысячи их. Да и банкам важна в основном стабильность. А остальным - лишь бы работало и правильно считало деньги, всё В сранной рашке все веселее: http://my-tribune.blogspot.com/2010/07/blog-post_08.html >> Значит крайтек написали хуйню, а не движок! И у этой хуйни не может быть наград... Жаль, что их не отберут, в смысле награды не отберут. И да, Какими данными вы пользуетесь, говоря что что то будет сделано быстрее, а что то медленнее, причем качество будет одинаковым? Надеюсь это не собственные выводы. Это, конечно субъективно, но близко к истине. Я писал связанный список на лиспе и на Си. Лисп понравился больше. Там еще прикольные штучки есть. Советую найти литературу и просто почитать исходники на лиспе. Там правда забавно. На питонах уже все давно реализовано за вас. Если вы хотите написать быстро нужную утиль, например соединялку с ssh по серверу на Qt4, то добро пожаловать в секту! http://habrahabr.ru/blogs/python/52217/ Еще вкусняшки: http://habrahabr.ru/blogs/python/73643/ http://habrahabr.ru/blogs/python/76548/ Для gnome апплеты делаются не многим сложнее и не многим медленее.

Bloodiness: >> Это правда?! Правда, конечно же ) >> Быдлокодеров - не должна... Не вырывайте из контекста! Быдлокодеры есть для любого языка программирования.

Bloodiness: >> А на яве иногда случаются вполне адекватные наборы инструкций, которые внезапно рушат всё. Это да, веселее. Или внезапно производительность независимых команд, поставленых в одном порядке одна, а в другом - совсем другая. И от чего это зависит - никто не знает. Дак не пишите эти наборы инструкций. Такие же есть и на Си и на плюсах. Мне нравится в яве человеческая реализация потоков, а не чудобред как в С++. Кстати, обидно, но в питоне потоки недопилены, и то, что в яве есть обыденность в питоне приходится реализовывать самостоятельно.

c4tnt: интересно, на каком языке были созданы все эти стандартные библиотеки? Кстати, странное замечание про потоки. Это не является частью языка C++, там нет встроенных потоков

Bloodiness: >> интересно, на каком языке были созданы все эти стандартные библиотеки? Все библиотеки для питона написаны на питоне. Только некоторые классы и каркасы на Си. У Си, кстати, неплохая интеграция с питоном. >> Кстати, странное замечание про потоки. Это не является частью языка C++, там нет встроенных потоков Прикладные программисты и разработчики клиент-серверных приложений разочарованы вашим ответом. В Си++ нет потоков по стандартом, а это плохо. Я вообще думал, что хотя бы такую полезную штуку они прикрутят. Ан нет! Они пошли прикручивать никому не нужные плюсовые лямбды! ADDED: Прошу прощения. Библиотеки GUI написаны на Си, так как это стандартные системные. В питоне просто сишные биндинги к ним.

c4tnt: Пока нету чётких и стандартизированных именно аппаратных потоков, скорее всего в C не будет такого, как появится в железе, так и в си появится. В С-компиляторах для CUDA есть встроенное, конечно.

Bloodiness: >> В С-компиляторах для CUDA есть встроенное, конечно. А вот с ними знаком. Видел презентацию на местной конференции. Неплохо. Мне понравилось.

Archi: Может таки вернемся к САБЖУ? именно тому, который в самом начале. Итак, вопросец. Что же вы собираетесь сделать?

c4tnt: Вот в этом и дело - каждому высокоуровневому языку нужна опора на библиотеки. А движок игры по сути тоже набор библиотек, сверху как раз все адекватные разработчики уже давно (с 1998 вроде) ставят именно язык скриптового типа, какой именно - это уже их выбор. Тот самый DarkBasic - это как раз сферовакуумная реализация такого подхода. Внутре неонка C++, а снаружи скрипты логики. Поэтому выводы о том, что геймдев куда-то там переползает с си на основе того, что в ИЛ2 логика вынесена в скрипты, достаточно преждевременны. PS. В общем C\C++ предназначен для работы с железом и требует брутальных челябинских программёров

Bloodiness: >> Итак, вопросец. Что же вы собираетесь сделать? Простую 2D игру для гиков. Мне нужна только помощь с графикой && выводом на экран && обработкой игровых событий. Масштабы не грандиозные, но игра планируется оригинальная.

Bloodiness: >> Вот в этом и дело - каждому высокоуровневому языку нужна опора на библиотеки. А движок игры по сути тоже набор библиотек, сверху как раз все адекватные разработчики уже давно (с 1998 вроде) ставят именно язык скриптового типа, какой именно - это уже их выбор. Тот самый DarkBasic - это как раз сферовакуумная реализация такого подхода. Внутре неонка C++, а снаружи скрипты логики. Поэтому выводы о том, что геймдев куда-то там переползает с си на основе того, что в ИЛ2 логика вынесена в скрипты, достаточно преждевременны. Соглашусь, что в этом направлении я нагородил хуйню был неправ.

Archi: Интересно. Мне бы тоже в последнее время не помешал подобный движок, правда я сам постараюсь сделать это все на Си + ОпенГЛ. А вообще 2д игру можно было бы сделать и на Win32API, но это какбэ не рекомендуется. И да - все совету лучше у с4тнт, он не тролль, если надо - всегда поможет.

c4tnt: Простую 2D игру для гиков. Мне нужна только помощь с графикой && выводом на экран && обработкой игровых событий. Масштабы не грандиозные, но игра планируется оригинальная. Ну тогда тебе нет никаких причин отказываться от си, а прибинженный к игре питон, в котором будет логика, пойдёт игре только на пользу. Логику как раз тогда сможешь делать в своё удовольствие, если все массовые операции упихать в ядро, то о производительности логики можно сильно не заботиться

Bloodiness: >> Интересно. Мне бы тоже в последнее время не помешал подобный движок, правда я сам постараюсь сделать это все на Си + ОпенГЛ. В данном направлении выбор правильный. Я не смотрю в сторону низкоуровневых языков, ибо мне там по сути крутой физдвижок не нужен, достаточно того, что я перечислил. Остальное берется банальным расчетом. >> А вообще 2д игру можно было бы сделать и на Win32API Не надо, не надо, не напоминайте Т___т Win32API ужас, повергающий в уныние. К тому же зря вы предлагаете это человеку сидящему на никсах. Языки Python и Java в свое время выбрал, ибо они кросс-платформенные. >> И да - все совету лучше у с4тнт, он не тролль, если надо - всегда поможет. Кому, как не мне знать, что он не тролль :3

Archi: Bloodiness пишет: Не надо, не надо, не напоминайте Т___т Win32API ужас, повергающий в уныние. К тому же зря вы предлагаете это человеку сидящему на никсах. Языки Python и Java в свое время выбрал, ибо они кросс-платформенные. Так ведь эта, мучатся меньше больше! Bloodiness пишет: Кому, как не мне знать, что он не тролль :3 ви забираете свои слова обратно?

Bloodiness: >> Ну тогда тебе нет никаких причин отказываться от си, а прибинженный к игре питон, в котором будет логика, пойдёт игре только на пользу. Логику как раз тогда сможешь делать в своё удовольствие, если все массовые операции упихать в ядро, то о производительности логики можно сильно не заботиться Боюсь, что 1. Нужно чтение документации по либам для графики и прочего для Си, чтобы написать свое ядро. Не оптимально. Я смотрю в сторону явы: на яве уже есть готовые библиотеки для игровой графики (как 2D, так и 3D). 2. Логика игры проста как три копейки, но есть проблема с расчетами в плане игровой физики. Тут как ни крути, Python и Java могут отставать в производительности от Си. Опять же есть мысль прикрутить натив методы к яве. 3. Питон вообще хорошая мысль, но я сомневаюсь. Я бы с удовольствием написал всю игру на PyGame, скорее всего даже не заботясь о производительности, ибо местами может выручить медленная сглаженная анимация, которая может значительно упростить расчеты. Но тут идет такая проблема, как установка игры на компьютере конечного пользователя. Хочется сделать игру доступной на всех операционных системах.

Bloodiness: >> ви забираете свои слова обратно? Невозможно забрать свои слова обратно, но я сожалею о сказанном. Но местами он не пренебрегает грязными софисткими приемчиками!

Archi: Bloodiness пишет: Хочется сделать игру доступной на всех операционных системах. и даже макос? :3 Кого то мне это напоминает. Bloodiness пишет: Нужно чтение документации по либам для графики и прочего для Си, чтобы написать свое ядро. кстати, ГЛ вполне рисует и 2д графику. Bloodiness пишет: Но местами он не пренебрегает грязными софистскими приемчиками! Таки все мы такие!

Bloodiness: >> и даже макос? :3 Кого то мне это напоминает. Пофиг на макозасранцев. Мысль в том, чтобы игра была доступна подвендой без проблем. Радостный убунтоид, скачав игру, сделает sudo apt-get install python-pygame, а вот виндузятник впадет в непролазный ступор. >> кстати, ГЛ вполне рисует и 2д графику. Да-да-да. Мою нехоть можно характеризовать так: мне лень лезть в GL. >> Таки все мы такие! Ну ведь мы не где-нибудь, а на ABP!

Archi: Bloodiness пишет: Да-да-да. Мою нехоть можно характеризовать так: мне лень лезть в GL. линуксоиды тоже юзают же! А вот как написать программу на си и сделать ее фапабельной на линуксе, я , к сожалению, не знаю. Как то можно, но как... Bloodiness пишет: Ну ведь мы не где-нибудь, а на ABP! НЪТ! Это свободный форум же!

c4tnt: 1. Да, это вообще сложноустранимый шаг. 2. Физику и прочую массовку, по типу коллижн-детекта, внутрь ядра приходится сейчас пихать. Боюсь, что на яве сделать это быстро нереально. 3. http://docs.python.org/extending/embedding.html

c4tnt: А по поводу GL и графики - не знаю, как с остальными графическими длл, но на уровне движка GL выглядит очень даже удобно. Фигуры рисуются по вершинам, экран и сами фигуры можно быстро вращать и трансформировать средствами видеокарты. Наложение текстур и освещение есть и в 2д и в 3д режимах, можно использовать свои варианты освещения, но это расширение гл. Легко потом расширить до 3д или сделать небольшое 3д в самой игре, но это уже от игры зависит. С физикой есть варианты - можно взять готовую или реализовать самостоятельно. Не так уж и страшен там чёрт...

Bloodiness: >> А по поводу GL и графики - не знаю, как с остальными графическими длл, но на уровне движка GL выглядит очень даже удобно. Фигуры рисуются по вершинам, экран и сами фигуры можно быстро вращать и трансформировать средствами видеокарты. Наложение текстур и освещение есть и в 2д и в 3д режимах, можно использовать свои варианты освещения, но это расширение гл. Легко потом расширить до 3д или сделать небольшое 3д в самой игре, но это уже от игры зависит. С физикой есть варианты - можно взять готовую или реализовать самостоятельно. Не так уж и страшен там чёрт... Физику скорее всего придется самому писать. Физику описать я в состоянии, а вот вести работу с графикой для меня трудно, так как требует постигать библиотеки к языкам, к которым у меня не лежит душа. >> 3. http://docs.python.org/extending/embedding.html Ссылка полезная, но я вел речь о доступности самой библиотеки PyGame, которую придется конечному пользователю ставить вручную.

c4tnt: нет, я в том плане, что питон можно в качестве интерпретатора скрипта встроить как для linux, так и для win Виндовый блендер, к примеру, за собой таскает встроенного питона и некоторое количество вкомпилированных библиотек. Вроде хватает для жизни. Кстати, GL есть и под питона вроде, можно сначала там освоиться

Bloodiness: >> Кстати, GL есть и под питона вроде, можно сначала там освоиться У себя нашел Beginning Game Development with Python and Pygame - From Novice to Professional [Will McGugan] (2007): CHAPTER 12 Setting the Scene with OpenGL Подтверждаю. Спасибо. Надеюсь не забью и почитаю :3

DXZ: Archi пишет: Bloodiness Вас ждут тонны кирпичей. Ждите. Ждём пока кирпичи ждут пока мы ждём пока кирпичи ждут пока...

Kpa66: scratch.mit.edu

Bloodiness: >> scratch.mit.edu Ваш псто так же глуп и бессмыслен, как и три смайлика в нем.

Archi: Bloodiness Как прогресс? Не желаете поделиться с нами?

Bloodiness: Ох. О каком прогрессе может идти речь? Я опять таки скажу: я не владею ни одним из языков, которые бы подошли для подобной разработки, на необходимом уровне. По сути есть вот сколько проблем: Написать автомат для обработки текстовых формул (игра имеет отношение к матану). По сути половину я уже написал на Си, но там есть один нюанс, а именно... Написать структуры данных для хранения этих самых формул и их вычисления (при рандомном количестве переменных). Ох. Я не придумал как это можно реализовать на Си. Задумка была написать бинарное дерево, а вот хрен с два. Написать простейший физдвиг. Колижон детекшон, три закона Ньютона плюс феньки. Это пишется проще простого. Написать вывод графики. It's impossible for me. Что я написал, написал давно еще до того, как я стал тут топикстартером. Иначе говоря - написал я только загрузчик tga на яве, но он к игре отношения не имеет. Пока я отложил идею. Возможно в будущем напишу на Pygame, если поборю лень.

marat: Bloodiness обратись к dierg'у! может он поможет. он в чате в цкайпе есть.

c4tnt: Написать автомат для обработки текстовых формул (игра имеет отношение к матану). По сути половину я уже написал на Си, но там есть один нюанс, а именно... могу дать если надо, только позже чутка, в августе. Написать структуры данных для хранения этих самых формул и их вычисления (при рандомном количестве переменных). Ох. Я не придумал как это можно реализовать на Си. Задумка была написать бинарное дерево, а вот хрен с два. В общем тоже не вижу проблемы - дин-аллок и p-коды по типу скриптовых Написать простейший физдвиг. Колижон детекшон, три закона Ньютона плюс феньки. Это пишется проще простого. Вот уж где матан попрёт то. Это действительно не так просто, как выглядит. Написать вывод графики. It's impossible for me. Ну а тут GL, GL и ещё раз GL...

Archi: Bloodiness пишет: Написать вывод графики. No problems же. Bloodiness пишет: Написать простейший физдвиг. Колижон детекшон, три закона Ньютона плюс феньки. Это пишется проще простого. Омг. А вот это уже сложно для меня... Bloodiness пишет: Написать структуры данных для хранения этих самых формул и их вычисления (при рандомном количестве переменных). Ох. Я не придумал как это можно реализовать на Си. Задумка была написать бинарное дерево, а вот хрен с два. Да вроде тоже ничего особо сложного. Хотя сам не сделаю, да. Bloodiness пишет: Написать автомат для обработки текстовых формул (игра имеет отношение к матану). По сути половину я уже написал на Си, но там есть один нюанс, а именно... А именно?!!!??

Archi: c4tnt пишет: Ну а тут GL, GL и ещё раз GL... Именно же!

Bloodiness: >> могу дать если надо, только позже чутка, в августе. Да у меня уже есть алгоритм. Могу на python нарисовать, потом просто нужно будет портировать на Си. А можно и не портировать :3 >> В общем тоже не вижу проблемы - дин-аллок и p-коды по типу скриптовых Ой, да беда писать это на Си. Вот на жабке проще простого. На питонах мне хватит класса в 30 строк. >> Вот уж где матан попрёт то. Это действительно не так просто, как выглядит. >> Омг. А вот это уже сложно для меня... Вы никак сговорились. У меня геймдевелопер знакомый, не знающий даже элементарного курса физики, пишет двиги на Си с плюсами. Мне хватит лишь почитать что предлагают опытные кодеры игрушек да написать систему обработки событий. Три закона Ньютона + колижон детекшон для двумерных объектов я думаю не сложен. Тем более объекты в большинстве случаев лишь прямоугольники. Матана там нет, как ни ищи. Нужно просто грамотно оптимизировать. >> Да вроде тоже ничего особо сложного. Хотя сам не сделаю, да. На Си это будет 2-3 структуры + 5-6 функций для работы с ними. Я представляю какую кашу из кода будут они представлять. >> А именно?!!!?? А именно следующий пункт же.

Archi: Bloodiness пишет: А именно следующий пункт же. facepalm мне... Bloodiness пишет: На Си это будет 2-3 структуры + 5-6 функций для работы с ними. Я представляю какую кашу из кода будут они представлять. главное понимать что написано и чтобы работало, разве нет? Bloodiness пишет: Вы никак сговорились Почти))) Но я высказал свое личное мнение, так как интегралов еще толком не знаю и высчитывать физику мне будет не так то просто.

Bloodiness: >> главное понимать что написано и чтобы работало, разве нет? Нужно чтобы было, во-первых, читабельно и презентабельно, во-вторых, тщательно прокомментированно. Если в яве я бы не потерялся в тоннах кода, благодаря встроенному javadoc в нетбинсе, то в Сях ой-вей. Любой тяжелый проект потребует перечитывать структуры и комментарии к ним, дабы вспомнить какими я к ним там функции определил. Сталкивался уже с подобным, очень неприятно. А работать должно определенно. LSD мне поможет! http://habrahabr.ru/blogs/arbeit/99345/ >> Почти))) Но я высказал свое личное мнение, так как интегралов еще толком не знаю и высчитывать физику мне будет не так то просто. Интегралы не нужны в проектах типа игрушек. Это вам не моделировать гравитационное взаимодействие 1.4 * 1013 тел, где без знаний в динамике сплошных сред не обойтись(я не осилил). А тут так. Ерундень.

Archi: Bloodiness пишет: LSD мне поможет! http://habrahabr.ru/blogs/arbeit/99345/ ок. Bloodiness пишет: Интегралы не нужны в проектах типа игрушек. Это вам не моделировать гравитационное взаимодействие 1.4 * 1013 тел, где без знаний в динамике сплошных сред не обойтись(я не осилил). А тут так. Ерундень. ну если так, то вполне возможно.

c4tnt: Интегралы не нужны в проектах типа игрушек. Это вам не моделировать гравитационное взаимодействие 1.4 * 1013 тел, где без знаний в динамике сплошных сред не обойтись(я не осилил). А тут так. Ерундень. Хо ))) ну вот получает у нас произвольная выпуклая 2д фигурка импульс. после этого она очевидно начинает вращаться вокруг центра масс и получает некоторое ускорение. Для того, чтобы найти вращательный момент, нужно знать центр масс фигуры и её тензор инерции. Оба считаются интегрированием по этой фигуре, в данном случае - по плоскости будет. Я представляю какую кашу из кода будут они представлять. зачем сразу кашу??? а не нравится API-стиль - используй плюсовые классы.

Bloodiness: >> Для того, чтобы найти вращательный момент, нужно знать центр масс фигуры и её тензор инерции. Оба считаются интегрированием по этой фигуре, в данном случае - по плоскости будет. Да, про вращение я не подумал, но обстановки это не меняет. Центр масс считать у любой плоской фигуры просто, даже исключая тот факт, что практически все игровые объекты я представлял квадратами. Потом; относительно тензора инерции(мы привыкли называть его осевым моментом инерции), это достаточно просто. Этим я не занимался(да и честно я подзабыл уже основные принципы вращательного движения), но я не считаю что это ой-вей как сложно. Мне достаточно найти технической литературы или дождаться механики на первых курсах. Для всех объектов момент инерции можно рассчитать заранее на бумаге или в Wolfram Mathematica. Остальное не сложно. >> зачем сразу кашу??? а не нравится API-стиль - используй плюсовые классы. Так называемый API-стиль никак, кроме кашей, назвать нельзя. Один неймспейс подразумевает присобачивание к именам функций префиксов. Мне это не нравится, я привык работать с пакетами. Мне так же не нравится невозможность импортить из заголовков те функции, переменные и структуры, которые нужны мне. Вот например мне нужна расширяемая структура, которую я могу создать на ходу. Для malloc мне нужно знать размер. Я обычно выношу его в константу, но нигде кроме как того заголовка, где все функции для работы с ней, она не нужна. В конце концов подобного хлама накапливается много, а я сторонник чистого кода. Плюсовые классы это та еще потеха. Под плюсы я не буду писать даже под дулом пистолета.

c4tnt: Один неймспейс подразумевает Сделай много неймспейсов Для malloc мне нужно знать размер Use ++, Luke. Там есть sizeof и new Плюсовые классы это та еще потеха. Под плюсы я не буду писать даже под дулом пистолета. ну и чем же они радикально отличаются от остальных, если не использовать наследование (а зачем оно здесь?) и динамическую типизацию (а она то здесь зачем?) P.S. Вполне согласен - для статичных форм можно и предварительно посчитать тензор и центр масс. Но неужели там действительно будут только простые и одинаковые формы? Вопрос коллижн-детекта тоже не особо однозначен - во первых continious или нет. Во вторых это нужно сделать быстро, а в третьих нужно находить точки соприкосновения тел и делать это весьма быстро - тут уже придётся придумывать наиболее подходящую структуру для хранения объектов. P.P.S. Это будет случаем не игра про сражение двух запрограммированных роботов?

Bloodiness: >> Use ++, Luke. Там есть sizeof и new Свое отношение к плюсам я уже высказал. В Си тоже есть sizeof. >> ну и чем же они радикально отличаются от остальных, если не использовать наследование и динамическую типизацию Тем, что на других языках писать приятно и удобно, а на Си++ это убожество! Блоки private, public и protected не доставляют, по мне лучше объявить все поля перед объявлением методов дабы повысить читабельность. Нет интерфейсов, а они бы пригодились. Наследование не уверен, что совсем не нужно. Объекты по сути все одинаковы, поэтому можно написать базовый абстрактный класс(даже скорее всего надо). Упаси Б-г писать это на Си++ через их виртуальные функции и прочую ненужную лабуду. Там синтаксис страшен. В конце будет та же каша, только с классами! >> P.S. Вполне согласен - для статичных форм можно и предварительно посчитать тензор и центр масс. Но неужели там действительно будут только простые и одинаковые формы? Вопрос коллижн-детекта тоже не особо однозначен - во первых continious или нет. Во вторых это нужно сделать быстро, а в третьих нужно находить точки соприкосновения тел и делать это весьма быстро - тут уже придётся придумывать наиболее подходящую структуру для хранения объектов. Да, объекты весьма однообразны. С колижон детекшон не разбирался, но да это будет самая неприятная часть. Но по сути аналитгеометрия та же. >> P.P.S. Это будет случаем не игра про сражение двух запрограммированных роботов? Не. То боян, а вот та идея - небоян. Она коллективная. Вообщем раз уж далее нет смысла не рассказывать про суть, то вот она: У нас есть игровое поле, на котором расположены блоки. Пусть будут передвигаемые(вес фиксирован) и статичные. Ну для экспрессии можно добавить еще и те, которые взрываются если мгновенное изменение импульса будет более какой-то величины. У нас есть корабль(или нечто другое с двигателями), ради казуальности(если это слово вообще тут применимо) можно сделать бесконечный запас топлива. Корабль умеет перемещаться по горизонтали и вертикали(очевидно же!). А наша цель - доставить корабль в точку назначения. А вот самая фишка заключается в том, как нужно довести корабль. Нужно написать две функции, описывающие зависимость силы тяги от времени по X и Y. Сила тяги может уйти в минус - тело будет двигаться в противоположную сторону. Вот в этом весь фан!

c4tnt: игра для любителей интегрировать и дифференцировать? Блоки private, public и protected не доставляют, по мне лучше объявить все поля перед объявлением методов дабы повысить читабельность. А в чём суть проблемы? Можно же несколько блоков в одном классе делать если надо. Наследование не уверен, что совсем не нужно. В самом ядре наследование врядли нужно, не верю, что физика настолько похожа на рендер и контроллер питона и скриптов... А логику игры я уже предлагал сделать на питоне, к чему нет никаких препятствий. через их виртуальные функции и прочую ненужную лабуду Виртуальные функции нужны только во вполне определённых случаях. Хотя в языках с RTTI ещё круче - там просто все функции виртуальные. PS У меня геймдевелопер знакомый, не знающий даже элементарного курса физики KNOW HOW: Заходишь на геймдев и читаешь статью про солверы. Можно даже не читать и просто скоммуниздить код

Bloodiness: >> игра для любителей интегрировать и дифференцировать? Просто для гиков. Интегрированием там мало чего можно добыть. Нужно взять интеграл от ускорения, скорости и только потом получить координату. А теперь вспомним, что на поле стоят преграды влияющие на траекторию в значительной степени. >> А в чём суть проблемы? Можно же несколько блоков в одном классе делать если надо. Я никогда не писал самостоятельные классы под плюсы и не хочу этим заниматься. Как ни крути, читабельность будет на нуле. >> В самом ядре наследование врядли нужно, не верю, что физика настолько похожа на рендер и контроллер питона и скриптов... А логику игры я уже предлагал сделать на питоне, к чему нет никаких препятствий. Тогда уж стоит всю игру писать на питоне. А насчет наследования не знаю, не думал об архитектуре. Просто намек был на абстрактный GameObject какой-нибудь. ADDED: >> KNOW HOW: Заходишь на геймдев и читаешь статью про солверы. Можно даже не читать и просто скоммуниздить код Нет, это не его метод. Фрилансер, пишущий статьи на wincode, думаю не будет так делать.

c4tnt: Кусочек дума... Вроде всё вполне читабельно class idPhysics_Base : public idPhysics { public: CLASS_PROTOTYPE( idPhysics_Base ); idPhysics_Base( void ); ~idPhysics_Base( void ); void Save( idSaveGame *savefile ) const; void Restore( idRestoreGame *savefile ); public: // common physics interface void SetSelf( idEntity *e ); void SetClipModel( idClipModel *model, float density, int id = 0, bool freeOld = true ); idClipModel * GetClipModel( int id = 0 ) const; int GetNumClipModels( void ) const; void SetMass( float mass, int id = -1 ); float GetMass( int id = -1 ) const; void SetContents( int contents, int id = -1 ); int GetContents( int id = -1 ) const; .... .... Нет, это не его метод. И даже статью не посмотрит ??? PS. Прошу прощения, но отступы в коде навернумшись, но они там были PPS. Мысль игры любопытная, но надо сделать это вкусным. А то я игрушку Gravity с клавиатуры то еле прохожу, а тут всё ещё брутальнее будет.

Bloodiness: >> И даже статью не посмотрит ??? Может и посмотрит :3 Я не интересовался такими подробностями. >> Кусочек дума... Вроде всё вполне читабельно Это остров в море. Но кусок подобран неплохо. Я не нашел к чему придраться. :3 Синтаксис плюсов мне в целом не понятен. Куча интуитивно непонятных вещей: двоеточие как указатель наследования, вот эти float GetMass( int id = -1 ) const; мне тоже не ясны. Я не буду утверждать что в питоне все понятнее, особенно многострочные рекурсивные лямбды. Но местами код выглядит презентабельнее. >> Мысль игры любопытная, но надо сделать это вкусным. А то я игрушку Gravity с клавиатуры то еле прохожу, а тут всё ещё брутальнее будет. Это родилось из идеи предсказать функцию по графику.

c4tnt: Но кусок подобран неплохо. Долго выбирать не пришлось - там все интерфейсные классы такие, да и неинтерфейсные тоже. float GetMass( int id = -1 ) const; float - тип GetMass - название функции (метода) int id - параметр = -1 - значение по умолчанию, метод можно будет вызывать без этого параметра const - константный метод, он не изменяет данные класса. Это можно не указывать если не планируется потом использовать константные рид-онли указатели. Фактически просто отмечает, что этот метод можно использовать даже если класс доступен только на чтение.

Bloodiness: Си++ подвергнут критике не зря. Более того, для меня ничего не значат таки такие вещи, как "константные рид-онли указатели" и "класс доступен только на чтение". Указатели не очень хорошая штука все же. Вот сюда же : http://habrahabr.ru/blogs/google/100171/ Я с ним не согласен по поводу Java, так как мне она показалась не сложной и дружелюбной.

c4tnt: явовские объекты не выносят мозг? любая AJAX библиотека по моему делает это на ура питон тоже иногда выглядит озадачивающе... Вот так, например: [pre]def average_vertexcolors(mesh): vertexcolors = {} vcolor_add = lambda u, v: [u[0]+v[0], u[1]+v[1], u[2]+v[2], u[3]+v[3]] vcolor_div = lambda u, s: [u[0]/s, u[1]/s, u[2]/s, u[3]/s] for i, f in enumerate(mesh.faces): # get all vcolors that share this vertex if not i%100: Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Finding Shared VColors") col = f.col for j in xrange(len(f)): index = f[j].index color = col[j] r,g,b = color.r, color.g, color.b vertexcolors.setdefault(index, []).append([r,g,b,255]) i = 0 for index, value in vertexcolors.iteritems(): # average them if not i%100: Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Averaging Vertex Colors") vcolor = [0,0,0,0] # rgba for v in value: vcolor = vcolor_add(vcolor, v) shared = len(value) value[:] = vcolor_div(vcolor, shared) i+=1 return vertexcolors [/pre]

Bloodiness: Ви берете специально такие исходники :3 Я, честно говоря, готов некоторым кодерам отрезать пальцы по локоть за то, что порой код выкладывают нечитаемый как в вашем примере. Я привык писать с расчетом на то, что через какое-то время в код не заглянет страждующий и не спросит: "Какой мудак это писал?" Могу выложить свои исходники, у меня где-то валялась Conway's Game of Life на питоне. В яве вынесли мозг только wildcard types. Ох я не курю их до сих пор.

c4tnt: это - кусочек блендера. И эти скрипты там процентов на 40 выглядят так. Остальное чуть лучше

c4tnt: [pre]v = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,\ 28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,58,59,60,61,62,63,64,91,92,93,94,96,\ 123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,\ 151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,\ 171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,\ 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,\ 211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,\ 231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254] [/pre] из соседнего скрипта. Не знаю, для чего такой список, но уже страшно...

Bloodiness: Могу представить. В модуле scipy есть штука для решения линейных систем. Нужно только матрицу сдать. Один мой знакомый физик ( :3 ) забивал в списки странные матрицы, которые выверял по законам Кирхгофа, дабы рассчитать цепь. И не такое может понадобится. У себя нашел: [pre2]# The most fucking awesome codestyle: (lambda stack: [ token.isdigit() and (stack.append(float(token)) or True) or (stack.append( { '+': float.__radd__, '-': float.__rsub__, '*': float.__rmul__, '/': float.__rdiv__ } [token] (stack.pop(), stack.pop()))) for token in raw_input('>>> ').split() ] and stack) ([]) [0][/pre2] О, это моя гордость. Калькулятор ОПЗ в одну лямбду.

c4tnt: В общем губит людей не пиво... нельзя же из за отдельных интересных личностей считать синтаксис языка программирования ужасным. Это я к тому, что и на яве и на питоне и на си можно вполне писать красиво при некотором желании.

Bloodiness: >> Это я к тому, что и на яве и на питоне и на си можно вполне писать красиво при некотором желании. К Си++ я все равно не склоняюсь. Вон те же книги. У меня есть Липпмана книга "Весь C++ от азов до совершенства" в 1к страниц в конце которой написано: "Ололо, теперь вы знаете Си++ trollface.jpg". И CoreJava Кея Хорстманна в 800 страниц, в которой после 300 страниц написано: "А теперь вы знаете Java, дак давайте же писать программы!" Си++ требует опять же полного погружения в свои дебри, ибо любая неосторожность в виде неправильно перегруженного оператора (перегрузка, к слову, почти не нужна) или ошибочка при работе с указателем утопит программиста в море отладки. Мне просто лень тратить время на изучение этого языка. Уж лучше Lisp, уж лучше Lisp. По поводу читабельности программ - да, криворукие близорукие кодеры всегда вставят ложку дегтя. У любого языка есть такие почитатели. Вот только у Си++ их больше, в связи с любовью писать в своем "неповторимом" стиле.

Archi: Bloodiness пишет: Си++ требует опять же полного погружения в свои дебри, ибо любая неосторожность в виде неправильно перегруженного оператора (перегрузка, к слову, почти не нужна) или ошибочка при работе с указателем утопит программиста в море отладки. То есть... вы хотите сверхвысокоуровневый язык программирования? Зато, если подумать, там можно найти все что надо. Ведь не начал же ты писать программу на питоне или яве? А почему? Только не говорите мне что просто лнь. Было очень серьезное препятствие, по всей видимости.

Bloodiness: >> То есть... вы хотите сверхвысокоуровневый язык программирования? Я хочу удобный язык программирования. В Си я увидел удобство, но он немного ограничен, хотя для такого языка это не критично. Си++ я считаю неудобным и уже тысячу раз об этом заикался. >> Ведь не начал же ты писать программу на питоне или яве? А почему? Только не говорите мне что просто лнь. Во-первых, действительно лнь; во-вторых, на питоне или яве я не стал писать ибо боялся, что скорость игры будет убита мат-расчетами. Представьте, что нужно для каждого момента считать кастомную функцию - а значит разворачивать бинарное дерево операторов. Снова и снова. Если за питон я еще не так сильно боюсь, ибо он проверен временем + можно поставить psycho, то за яву я так сказать не могу. Выходит: ява кроссплатформенная, но проблемы со скоростью; питон кроссплатформенный, но проблемы с последующим распространением (тащить библиотеку pygame, и, если делать exe, размер программы перевалит за 40Мб). Т___т!

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

Bloodiness: >> Си++ не убивает скорость, не требует сторонних библиотек Си++ убивает скорость разработки. >> Да, его надо знать глубже чем хочется. Лнь надо перебороть. Ради чего? Ради того, чтобы забить себе голову ненужным мне языком? Вся глубина Си++ - это плата за ошибки, которые иногда допускает программист. А она порой слишком велика. Учить Си++ ради того, чтобы написать игрушку я не хочу, а написать прикладное на Си++ - головная боль, и на этом месте я обойдусь питоном и явой.

Archi: Ну в таком случае думаю лучше написать на питоне... Идея мне нравится, хотелось бы увидеть это наяву) И да, я конечно ламер, но нельзя ли обрезать библиотеку?

Bloodiness: >> И да, я конечно ламер, но нельзя ли обрезать библиотеку? Это называется скоммуниздить исходники. :3 Не к каждой такое прокатит. Да и местами библиотека содержит кучу связанных элементов. У pygame должны быть share objects на Си.

Archi: Bloodiness пишет: если делать exe, размер программы перевалит за 40Мб вот к этому

Bloodiness: С pygame не прокатит, предвижу.

c4tnt: Вся глубина Си++ - это плата за ошибки, которые иногда допускает программист. Вся тормознутость явы имеет те же корни, так что тут простой выбор. Или глубина или тормоза. И таки да. Как так неудачно можно перегрузить оператор в сях, чтобы это вызвало тонны отладки???

Archi: Bloodiness пишет: С pygame не прокатит, предвижу. ну... кто знает, кто знает c4tnt пишет: И таки да. Как так неудачно можно перегрузить оператор в сях, чтобы это вызвало тонны отладки??? довольно закономерный вопрос))

Bloodiness: >> И таки да. Как так неудачно можно перегрузить оператор в сях, чтобы это вызвало тонны отладки??? В Москве нам давали небольшой тест по проге. Последним заданием давались шесть программ на разных ЯП, в каждой была ошибка, характерная для определенного ЯП. В яве было использование == вместо .equals() для сравнения двух Integer. В сях была штука с перегрузкой операторов. Оригинала теста у меня конечно же нет, но собака там зарылась в том, что перегруженный оператор обладал не тем приоритетом, которым бы хотелось или что-то в этом роде. >> Вся тормознутость явы имеет те же корни, так что тут простой выбор. С тормозами бороться проще. Оптимизация, JIT и мнемоизация(недавно прочитал об этом методе, понравилось) спасут. Да тут еще на помощь приходит профилировщик. Иными словами, у явы уже сотни готовых решений для прикладного программирования. В Си++ конечно есть Qt, но команда Qt, как я слышал, написала слишком много велосипедов. Си++ не предоставляет удобную работу. Я пытался по WorldCpp написать простую прогу с сокетами - хрен там валялся. Проблемы с кодировкой + сама по себе немного дебильная реализация сокетов, которую я не осилил, ибо про себя сказал: "Да пошло оно к чертям!" - И перелез на питон. Как вы например реализуете парсер того же няша на Си++?

c4tnt: парсер, прошу прощения, кого???? С тормозами бороться проще. Чтобы бороться с тормозами, нужна адекватная поддержка со стороны языка. Ни разу не слышал об выровнянном выделении памяти в яве, например. Да и возможности специализировать контейнер тоже нету там, в си она есть, поскольку контейнер пишешь сам. JIT - это всё же злое колдунство, как и любой другой процесс компиляции. Да ещё и сама компиляция занимает некоторое время, а большие программы могут компилироваться довольно долго. Мнемонизация - это, я так понимаю, p-коды. Тут скорее если в скриптовом языке этого нет, то его можно сразу считать нехорошим и негодным в плане быстродействия.

Bloodiness: >> парсер, прошу прощения, кого???? Teh Задание: написать прогу, которая в качестве аргумента принимает число, а возвращает псто с няша соответствующего указанному числу. http://nya.sh/ >> Чтобы бороться с тормозами, нужна адекватная поддержка со стороны языка. Ни разу не слышал об выровнянном выделении памяти в яве, например. Да и возможности специализировать контейнер тоже нету там, в си она есть, поскольку контейнер пишешь сам Вот отсюда и вылетают ошибки. Оно не нужно. Лучше уж предоставить распределение памяти виртуальной машине. >> Да ещё и сама компиляция занимает некоторое время, а большие программы могут компилироваться довольно долго. Это же JIT. От размера программы ничего не зависит. >> Мнемонизация - это, я так понимаю, p-коды. Не знаю, что есть р-коды, но вероятнее всего нет.

c4tnt: Нда... ТЗ, бессмысленное и беспощадное... Вот быстренько налуркал мини-терминал на сях: http://tehnofil.ru/?id=91 Оно не нужно Да, с тормозами бороться не нужно, пусть они нейтрализуют закон Мура и всё будет хорошо От размера программы ничего не зависит. Реальность с вами не согласна А что есть мнемонизация?

Bloodiness: >> Нда... ТЗ, бессмысленное и беспощадное... Мне пригодилось некогда. >> Вот быстренько налуркал мини-терминал на сях: Вот один из примеров, когда я смотрю на код и говорю: "Так пишут только мудаки!" Невменяемые конструкции в примере детектед. Типичный стиль любого плюсиста. >> Да, с тормозами бороться не нужно, пусть они нейтрализуют закон Мура и всё будет хорошо Вы же написали очевидный бред. Я все вел к тому, что бороться с тормозами нужно путем оптимизации, а не рассчитывать на то, что пара сотен лишних миллисекунд ничего не решают. Нужно писать эффективные алгоритмы, а не отмазываться тем, что "мне не дают управление памятью, поэтому все это тормозит!" У явы есть куча рекомендаций по использованию тех или иных структур данных в зависимости от ситуации, а так же несколько правил при разработке десктопных приложений. Конечно находятся те, кто не придерживается их, но им нужно отрывать руки с корнем. >> Реальность с вами не согласна Еще один бред же. JIT не компилирует всю программу, он лишь переводит некоторые циклы и прочие повторяющиеся блоки кода в машинный код, дабы увеличить производительность. Долгая компиляция - это удел больших программ на Си++. >> А что есть мнемонизация? Способ, позволяющий уменьшить время на сложные расчеты, путем заимствования куска оперативной памяти. Например нам нужно написать очень точный синус. Для этого будем считать рядами(пока забьем на то, что готовое решение уже есть в стандартной библиотеке). Расчет рядов - дело трудоемкое. Синус периодичен. Сперва снимем период с аргумента, а потом сделаем так: заводим хештаблицу вида (число;результат), проверяем есть ли там уже этот аргумент в качестве ключа - если нет, считаем и заносим в таблицу, иначе извлекаем из таблицы готовый результат, экономя время.

пожиратель кошек: Зачем объяснять китайцу, что палочками есть неудобно?

Bloodiness: >> Зачем объяснять китайцу, что палочками есть неудобно? Кстати солидарен. Ваши попытки убедить меня, что ява неудобна и тормознута, а Си++ венец творения бессмысленны. Я же сказал, что писать на ней не собираюсь.

Archi: Bloodiness пишет: Ваши попытки убедить меня, что ява неудобна и тормознута, а Си++ венец творения бессмысленны. Я же сказал, что писать на ней не собираюсь. фейспалм же! Какая жаль... Причем явно вот такой.

Bloodiness: >> фейспалм же! Какая жаль... "Какая жаль", но вместо чего-то аргументированного я опять получаю в ответ какую-то ерундень.

Archi: Bloodiness пишет: "Какая жаль", но вместо чего-то аргументированного я опять получаю в ответ какую-то ерундень. Ну ессно, я же ламер. Просто вижу поверхность, а глубже забираться лнь. PS ламер пока. Может быть скоро буду кем то другим... может быть любителем)

Bloodiness: Ну я так сказал, ибо речь о плюсах завел первым не я. Мне тут упорно доказывают, что надо писать на плюсах. А я упорно отказываюсь. ADDED: Ламерство - не преступление. Все начинали дилетантами.

Archi: Bloodiness пишет: Ну я так сказал, ибо речь о плюсах завел первым не я. Мне тут упорно доказывают, что надо писать на плюсах. А я упорно отказываюсь. Не надо, а лучше было бы. Думаю для такого приложения не будет проблем и не будет допущено ошибок. Пусть и время разработки повышенное... Зато, не надо думать как подключать библиотеку или управлять тормознутостью. Ну оптимально же, это очевидно. Bloodiness пишет: Ламерство - не преступление. Все начинали дилетантами. Дада... а я так сказать пытаюсь рассуждать.

c4tnt: Ваши попытки убедить меня, что ява неудобна и тормознута, а Си++ венец творения бессмысленны. Где я утверждал то, что выделено красным??? JIT не компилирует всю программу, он лишь переводит некоторые циклы и прочие повторяющиеся блоки кода в машинный код, дабы увеличить производительность. Но милый кай, ведь у тебя будет в игре фреймцикл, который должен прокручиваться с частотой не менее 60 Hz чтобы злобные геймеры не закидали помидорами... А внутри него будет находиться вся физика, которую нельзя задать изначально и вся графика и даже вся логика - наверняка это весьма большой кусок кода? Или JIT скомпилирует только некоторые места в нём?

Bloodiness: >> Не надо, а лучше было бы. Думаю для такого приложения не будет проблем и не будет допущено ошибок. Пусть и время разработки повышенное... Зато, не надо думать как подключать библиотеку или управлять тормознутостью. Ну оптимально же, это очевидно. В Си++ библиотеки подгружаются просто автоматом. Тормознутостью управлять надо и там и там. Просто в Си++ все сопряженно с головной болью, которую я испытывать не хочу. И это отнюдь не оптимально. ADDED: >> Где я утверждал то, что выделено красным??? Это гипербола. По сути весь диалог ведет к этому. Уж кому как не вам должно быть понятно, что инструмент мной уже выбран, и сколонять меня в сторону другого - бесполезное занятие. К слову, вы знакомы с другими ЯП, отличными от Си/Си++? >> Но милый кай, ведь у тебя будет в игре фреймцикл, который должен прокручиваться с частотой не менее 60 Hz чтобы злобные геймеры не закидали помидорами... А внутри него будет находиться вся физика, которую нельзя задать изначально и вся графика и даже вся логика - наверняка это весьма большой кусок кода? Или JIT скомпилирует только некоторые места в нём? Вы думаете я так хорошо знаком с технической частью? Ошибаетесь. Я не в курсе как поведет себя JIT в этой ситуации, я лишь знаю для чего он нужен. Очевидно, что некоторые участки будут скомпилированны по ходу. А какие именно я не знаю.

Archi: Bloodiness пишет: В Си++ библиотеки подгружаются просто автоматом. Тормознутостью управлять надо и там и там. Просто в Си++ все сопряженно с головной болью, которую я испытывать не хочу. И это отнюдь не оптимально. ну что же тогда делать? Давайте изобретем оптимальный ЯП чтоле

c4tnt: В Си++ библиотеки подгружаются просто автоматом. Без STD в си с плюсами и без оных вполне возможно писать и требовательные игры так и пишут частенько PS. Посмотрел импорт думовской гейм-длл. Там есть только KERNEL32 и всё PPS. Знакомы и видели там те же самые прелести, что и в си. Следовательно читабельность кода зависит не от языка а от программиста, а значит нет смысла вешать всех собак на язык программирования. Я просто говорю о том, что адекватное и быстрое ядро для игры проще сделать на си, нежели на яве или питоне

Bloodiness: >> ну что же тогда делать? Давайте изобретем оптимальный ЯП чтоле Зачем писать велосипед? Python уже есть.

c4tnt: Зачем писать велосипед? Python уже есть. а с какой скоростью на нём будет осуществляться скиннинг модели джоинтов так на сто?

Bloodiness: >> а с какой скоростью на нём будет осуществляться скиннинг модели джоинтов так на сто? Профилируйте. Я не знаю. Вы сперва ответьте на все мои вопросы, прежде чем задавать ваши провокационные. ADDED: >> что адекватное и быстрое ядро для игры проще сделать на си Я сказал что-то против? Я за Си. Этот ЯП у меня не вызывает неприязни.

c4tnt: Ладно, вопросы так вопросы. 1. Зачем объяснять китайцу, что палочками не удобно? Затем, что в этот раз китайцу попался борщ вместо риса. 2. Вы думаете я так хорошо знаком с технической частью? Откуда мне это знать??? 3. Я сказал что-то против? Я за Си. Плюсы - это просто расширение возможностей си. Если виртуальные функции не используются, то они не попадут в результат. Если не используются классы, то они тоже не попадут в результат. Если код подходит для си компилятора, то разница нулевая, был ли использован компилятор C или C++. Но в C++ есть то, что поможет убрать сишную избыточность кода, почему бы это не использовать? 4. а с какой скоростью на нём будет осуществляться скиннинг модели джоинтов так на сто? Скрипт из блендера тратит на это около четверти секунды. Для игры это миллиарды световых лет. Отворматировал тот примерчик красиво - за что там отрывать руки то? [pre]#include <stdio.h> #include <string.h> #include <winsock2.h> #include <windows.h> #define PORT 31337 // Порт, через который идет подключение к серверу....21,80,25,110 и т.п. #define SERVERADDR "127.0.0.1" // Адрес сервера int main ( int argc, char* argv [ ] ) { char buff [ 1024 ] ; printf ( "TCP Client \n" ); if ( WSAStartup ( 0x202, ( WSADATA * ) &buff [ 0 ] ) ) { printf ( " WSAStart error %d \n ", WSAGetLastError ( ) ); return -1; } SOCKET my_sock ; my_sock=socket ( AF_INET, SOCK_STREAM, 0 ); if ( my_sock < 0 ) // { printf (" Socket ( ) error %d \n ", WSAGetLastError ( ) ); return -1; } sockaddr_in dest_addr ; dest_addr.sin_family=AF_INET; //инет коннектинг dest_addr.sin_port=htons ( PORT ); //порт HOSTENT *hst; // хост if ( inet_addr ( SERVERADDR ) !=INADDR_NONE ) dest_addr.sin_addr=inet_addr ( SERVERADDR) ; else if ( hst=gethostbyname ( SERVERADDR ) ) ( ( unsigned long * ) &dest_addr.sin_addr ) [ 0 ] = ( ( unsigned long ** ) hst->h_addr_list ) [ 0 ] [ 0 ] ; else { printf ( " invalid address %s \n ", SERVERADDR ) ; closesocket ( my_sock ) ; WSACleanup ( ) ; return -1; } if (connect ( my_sock, ( sockaddr * ) &dest_addr, sizeof ( dest_addr ) ) ) { printf (" Connect error %d \n ", WSAGetLastError ( ) ); return -1; } printf (" Соединение с %s успешно установлено \n\ Type quit for quit \n\n" , SERVERADDR ); int nsize; while ( ( nsize = recv ( my_sock, &buff[0], sizeof ( buff ) -1,0 ) ) !=SOCKET_ERROR ) { buff[ nsize ] =0; printf ( " S=>C: %s ", buff ) ; printf ( "S<=C: " ) ; fgets ( &buff [ 0 ] , sizeof ( buff ) -1, stdin ); if ( !strcmp ( &buff [ 0 ], "quit \n " ) ) { printf ( " Exit " ); closesocket ( my_sock ); WSACleanup ( ) ; return 0; } send ( my_sock, &buff [ 0 ], nsize, 0 ) ; } printf ( " Recv error %d \n", WSAGetLastError ( ) ); closesocket ( my_sock ) ; WSACleanup ( ) ; return -1; } [/pre]

Bloodiness: Опять таки вы преувеличиваете. 1. Игрушку эту можно написать и на питоне. 2. А таки не так хорошо с ней знаком. 3. Си++ никому не нужное, кроме геймдева, расширение. А вы все же проигнорировали один из моих вопросов. Ну что ж. Я повторюсь. Вы знакомы с каким либо ЯП, кроме Си/Си++? ADDED: >> char* >> if ( WSAStartup ( 0x202, ( WSADATA * ) &buff [ 0 ] ) ) Плюсисты опять не знают ставить ли звездочку с пробелом или без. Я же говорю для них не писаны стандарты. Вторая строка выглядит как говно. Я бы расстрелял. >> ( ( unsigned long * ) &dest_addr.sin_addr ) [ 0 ] = ( ( unsigned long ** ) hst->h_addr_list ) [ 0 ] [ 0 ] ; Кеп комментирует только определенные участки кода. Хлоп-хлоп. Это тоже по читабельности чуть выше брейнфака. >> if (connect ( my_sock, ( sockaddr * ) &dest_addr, sizeof ( dest_addr ) ) ) Codestyle такой codestyle. Питонщики негодуют. Даже PEP рекомендует не выделять скобки пробелами ибо это опять же чушь. Как обычно пихать в if выражения дабы снизить читабельности в разы. Fi-i-i-ine! >> while ( ( nsize = recv ( my_sock, &buff[0], sizeof ( buff ) -1,0 ) ) !=SOCKET_ERROR ) Это к примечанию выше. Такое выражение внутри цикла вызывает желание оторвать руки.

c4tnt: тут: http://freed00m.forum24.ru/?1-3-0-00000016-000-140-0#122 Кстати да, поставим вопрос иначе. Чем C лучше C++?

Bloodiness: Вы игнорируете мой вопрос.

c4tnt: PPS. Знакомы и видели там те же самые прелести, что и в си. Нид моар? Вот, к примеру, ява-скрипт от программистов одной достаточно уважаемой конторы: http://css.yandex.net/css/images/r10/_images.js

Bloodiness: >> Нид моар? Я задал вопрос, ожидая конкретного ответа. >> Вот, к примеру, ява-скрипт от программистов одной достаточно уважаемой конторы: Слышали про такую штуку как обфускация кода? http://www.kalinin.ru/programming/cpp/09_07_01.shtml а за 9 лет ничего не изменилось.

c4tnt: Слыхали, и даже делали обратную операцию вручную. По поводу статьи - лично я придерживаюсь варианта C++ - это си с плюшками, а всяческие идеологии мне не особо интересны. Ну может я тоже получу сегодня ответы?

Bloodiness: >> Ну может я тоже получу сегодня ответы? А на все ваши вопросы я ответил, вот только вы на мои отвечали изворачиваясь. Ксо жалению сейчас довольно поздно, если будут еще вопросы, я продолжу дискуссию завтра. ADDED: Вопросы идеологии в статье не рассматривались. Вы видимо просто невнимательно читали.

c4tnt: Конечно же, проблемы, связанные с ошибками в компиляторах, проявляются очень редко. Собственно поэтому можно уже сейчас оценить круг задач, которые лучше решать при помощи C++, чем C (при наличии, конечно же, хороших навыков программирования в обоих языках): это практически все программы, от которых не требуется беспрерывная работа 24 часа в сутки. Оттуда. Или игра будет крутиться сутками? Кроме компилятора, большую сложность при программировании на C++ вызывает использование STL. Несомненно, библиотека шаблонов очень удобна и полезна, но это в идеале. К примеру, очень часты случаи, когда смена поставляемой с компилятором STL на STLport, приводит к тому, что программа начинает работать стабильнее. Про использование STL в играх я уже говорил - оно криво, не надо этого делать. А на ошибки компилятора я не натыкался уже так давно... Вот пример потенциальной ошибки - исключение, возникшее в конструкторе класса. Класс после такого нельзя ни использовать ни корректно удалить. Но ведь исключения на самом деле - это именно исключительная ситуация. Я не знаю, зачем некоторые погромисты используют исключения как стандартный способ исполнения программы. Ошибка два - синглтон мейерса в многопоточных системах. Но существует мнение, что синглтон на самом деле сам по себе - одна большая ошибка... while ( ( nsize = recv ( my_sock, &buff[0], sizeof ( buff ) -1,0 ) ) !=SOCKET_ERROR ) Внимание - вопрос! Как было бы красивше?

Bloodiness: >> Оттуда. Или игра будет крутиться сутками? Вырывать абзац из контекста привычный софистский прием. В той статье написано не многозначно, что Страуструп вместо того, чтобы сделать свой язык с блекджеком, начал усложнять уже готовый, да и с процедурным подходом. И сейчас продолжают усложнять. Идея фейловая изначально. >> Но ведь исключения на самом деле - это именно исключительная ситуация. Забивать на обработку исключительных ситуаций? Очень смешно. Раз. >> Я не знаю, зачем некоторые погромисты используют исключения как стандартный способ исполнения программы. Вам не доводилось встречаться с такими ситуациями, когда ввод неправильный? Или еще что-нибудь испорченно? try/catch в девяти случаях из десяти используется для того, чтобы записать что-то полезное в лог, что может потом пригодится при отлове багов выполнения. Вообще я не понял шутка это сейчас была или нет. Наверное да. >> Внимание - вопрос! Как было бы красивше? Никак. Конструкции в Си++ настолько убоги от рождения, что все время будут выглядеть так. Но Цикл сделать в do/while. nsize присваивать какую-то шнягу внутри. -1 и 0 вынести в константы с именами, которые хоть что-то прояснят в этом убогом выражении. SOCKET_ERROR это вообще убийство. Опять же нет, чтобы взять нормальный человеческий try/catch плюсисты сделали какое-то говно. Хорстманн писал, чем нехороши функции, признак ошибки которых есть некое значение возврата. Нет, я бы еще понял, если бы программист писал это чисто для себя, но это, блджад, пример работы с сотеками! Если бы там были выполнены хотя бы те четыре пункта, что я назвал, было бы хоть капельку читабельнее. И не надо мне сейчас писать, что мол это все криворукие программисты, ибо вы сами подкинули мне этот пример и сами спросили как было бы читабельнее - значит для вас это типичный codestyle. Значит я не ошибался и плюсисты плюют на соглашения и читабельность. Два. Я искренне боюсь, что у вас Си++ головного мозга. Городская поликлиника имени тов. Керригана и Ричи принимает всех желающих с 8:30 до 16:00.

c4tnt: Внимание - вопрос! Как было бы красивше? Не обязательно в си, в чём угодно, но именно с указанной функцией Вообще я не понял шутка это сейчас была или нет. Наверное да Увы.. это была не шутка. У некоторых отдельных товарищей исключение используется вполне штатно... Вот и сейчас... try-catch - это как бы блок отлова исключений. Функция доступа к сокету может вообще в норме крутиться в вечном цикле, пока наконец не подключится. То есть получаем использование исключений в штатном режиме? SOCKET_ERROR это вообще убийство. Опять же нет, чтобы взять нормальный человеческий try/catch плюсисты сделали какое-то говно. Хорстманн писал, чем нехороши функции, признак ошибки которых есть некое значение возврата. Пиши гневное письмо в микрософт - это их творчество.

Bloodiness: Я раскрыл ваш секрет. Знаете, люди видят не глазами, но мозгом. Причем наш здравый смысл уберегает наш мозг от того, чего нам видеть не следует. Вот и вас ваш здравый смысл уберегает от прочтения самых колких в вашу сторону абзацев. >> Увы.. это была не шутка. У некоторых отдельных товарищей исключение используется вполне штатно... А разве вы не должны, программируя класс, предоставить другим возможность обработать исключение так, как им это хочется? Использовать исключения по назначению как раз то, что нужно. >> Не обязательно в си, в чём угодно, но именно с указанной функцией Как я понял в проге реализуется следующее: [pre2] #!/usr/bin/env python #-*- coding:utf-8 -*- from socket import socket from socket import error as SocketError from socket import timeout as SocketTimeout connection = socket() # а это сокет. connection_props = ('localhost', 10999) # параметры соединения. buffersize = 1024 # совершенно ненужная константа. # Не будем забывать, что сервер может забить на нас. connection.settimeout(10) # 10 секунд должно хватить, да? # Пытаемся подключиться: try: # Следующая строчка собственно и осуществяет подключение. connection.connect(connection_props) except SocketError, error: # Может случиться так, что "Connection Refused". print error.strerror exit(1) # Пытаемся провернуть передачу/прием данных: try: while True: nsize = connection.recv(buffersize) print 'Мы получили', nsize nsize = raw_input('Отправляем: ') if nsize == 'quit': break connection.send(nsize) except SocketTimeout, timeout: # Такое тоже случается. Вышло время ожидания. print str(timeout) except SocketError, error: # Если соединение было разорванно во время работы. print error.strerror finally: connection.close() [/pre2]

c4tnt: а теперь той же питоновской функцией делаем проверку возможности подсоединения к порту от 0 до 65536 (сканер портов) и получаем прекрасный пример программы, которая 95% своей жизни проводит внутри исключения, ведь так? Или это хорошо? nsize = connection.recv(buffersize) print 'Мы получили', nsize nsize = raw_input('Отправляем: ') Как бы nsize в оригинале был размером полученного пакета, но пофиг... nsize = connection.recv(buffersize) << здесь наверняка происходит выделение памяти под эту самую nsize, хотя в питоне строки константные и там выделение памяти вообще внезапная операция. Будем считать, что connection.recv(buffersize) выделяет каждый раз фиксированную строку по размеру входящего пакета. В сишном коде буфер один на всё и он выделяется только один раз, здесь - в каждом цикле один alloc? Выделение памяти - операция достаточно долгая, поэтому питон и тормозит.

Bloodiness: >> а теперь той же питоновской функцией делаем проверку возможности подсоединения к порту от 0 до 65536 (сканер портов) и получаем прекрасный пример программы, которая 95% своей жизни проводит внутри исключения, ведь так? Или это хорошо? А чем это плохо? В яве это нехорошо, ибо генерация исключения дорогая операция. Ладно. Специально для таких назойливых как вы: [pre2] #!/usr/bin/env python #-*- coding:utf-8 -*- from socket import socket availports = list() tmp = socket() x = 0 while x <= 65536: if not tmp.connect_ex(('localhost', x)): availports.append(x) tmp.close() tmp = socket() x = x + 1 for x in availports: print x [/pre2] Но это моя быдлоподелка. Уже есть готовые решения: http://www.coderholic.com/python-port-scanner/ и вариант с многопоточностью: http://code.activestate.com/recipes/286240-python-portscanners/ >> питон тормозит. Опять фигню сморозили.

c4tnt: not tmp.connect_ex(('localhost', x)) Но это же другая функция???

Bloodiness: >> Но это же другая функция??? Я поражен вашей внимательностью, сэр.

c4tnt: и кстати да, аналога того кода тоже с использованием recv из WSA, но более красивого по причине смены ЯП до сих пор нету.



полная версия страницы