LINUX.ORG.RU
ФорумTalks

C++ не годится для рогаликов?


0

0

Как вы думаете, почему так мало рогаликов(игр типа ADOM, Nethack) написанных на C++ и с другой стороны так много (почти все из них) написанных на C.

С чем это связано? Ведь модель такой игры должна хорошо ложиться в принципы ООД?

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

Какие еще есть мнения у аналитиков ЛОРа?

Перемещено Die-Hard из Development


Ответ на: комментарий от Absurd

> Фиговая утиралка носа - устроит?

Не устроит. Эта утиралка породила с своё время охренительный флейм в ru.prog, так что (!фиговая).

> Да, код ядра читать можно, C++ stdlib - нет.

В код c++ stdlib уже внедрили drm, который запрещает его читать? :о)

gaa ★★
()
Ответ на: комментарий от Sectoid

>а какое на Ваш взгляд поведение в данной ситуации должно быть верным. Вы не ответили.

a > b ? a : b. std::max должен разворачиваться как-то так.

Absurd ★★★
()
Ответ на: комментарий от sergey_feo

> Мне не кажется, что удобность писать внутренности stl'я оправдывает это безобразие.

Там сэкономили пару if-ов и пару байт памяти, так что оправдывает :)

> Почему-то мне кажется, что оправданием было единообразие с конструкцией while ((c = fgetc(...)) != EOF).

Оно вполне единообразно с for (i=0; i<n; ++i) {}. Или предложишь писать как for (i=0; i<=n-1; ++i) ?

gaa ★★
()
Ответ на: комментарий от anonymous

>Это чего, тонкий намек на copy on write?

Это намек на data sharing. И здесь std::string действительно бессилен.

Sectoid ★★★★★
()
Ответ на: комментарий от gaa

>> Фиговая утиралка носа - устроит?

>Не устроит. Эта утиралка породила с своё время охренительный флейм в ru.prog, так что (!фиговая).

Ну в c.l.c++ был флейм на несколько сот мессаг, допустим ли void main() { exit(0); }. Одни говорили что это работает, другие - что это нестандартно. Типичные плюсо@бские проблемы.

>> Да, код ядра читать можно, C++ stdlib - нет.

>В код c++ stdlib уже внедрили drm, который запрещает его читать? :о)

Виляния.

Absurd ★★★
()
Ответ на: комментарий от sergey_feo

>> Привыкнуть можно ко многому. Но это не значит, что такие вещи - правильные.

"Правильность" - это оооооочень вакуумносферичное понятие =). Я уже написал выше, какой логикой руководствовались разработчики STL. begin и end - это именно то как оно переводится - начало и конец, как например начало и конец верёвки. Если тебе нужен первый и последний элемент массива (первый и последний сантиметры верёвки), то для этого есть front() и back().

Deleted
()
Ответ на: комментарий от Deleted

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

Да ладно тебе, все равно они книжки читать не будут. :Е

anonymous
()
Ответ на: комментарий от Absurd

>>> Да, код ядра читать можно, C++ stdlib - нет.

>> В код c++ stdlib уже внедрили drm, который запрещает его читать? :о)

> Виляния.

Нет, измывательства. У меня нет проблем с тем, чтобы читать stdc++.

gaa ★★
()
Ответ на: комментарий от Absurd

> в c.l.c++ был флейм на несколько сот мессаг, допустим ли void main() { exit(0); }. Одни говорили что это работает, другие - что это нестандартно. Типичные плюсо@бские проблемы.

А что, у Си этой "проблемы" нет?

tailgunner ★★★★★
()
Ответ на: комментарий от Absurd

>a > b ? a : b. std::max должен разворачиваться как-то так.

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

Sectoid ★★★★★
()
Ответ на: комментарий от gaa

>>>> Да, код ядра читать можно, C++ stdlib - нет.

>>> В код c++ stdlib уже внедрили drm, который запрещает его читать? :о)

>> Виляния.

>Нет, измывательства.

В твоем выдуманном мирке.

>У меня нет проблем с тем, чтобы читать stdc++.

Ложь.

Absurd ★★★
()
Ответ на: Re^4: Кусочек Сахару Троллям ☺ от gaa

>std::string имеет функцию c_str(). Это Вам о чём-нибудь говорит?

Мне это говорит о том, что массив возвращаемый c_str() нельзя изменять, поэтому его применение строго огрничено(даже банальный read в него нельзя делать).

Sidrian
()
Ответ на: комментарий от Sidrian

>ООП уже используется в 99% языков(в Ц в том числе), и никакого "изменения сознания" тут не требуется

Т.е., по твоему, сознание это часть сущности языка?

>Или Вы о наборе костылей ака "темплейты и все что с ними связано"?

Это называется, обобщенное программирование, малыш.

...............Твой Карлсон.

anonymous
()
Ответ на: комментарий от tailgunner

>> в c.l.c++ был флейм на несколько сот мессаг, допустим ли void main() { exit(0); }. Одни говорили что это работает, другие - что это нестандартно. Типичные плюсо@бские проблемы.

>А что, у Си этой "проблемы" нет?

Какого-то благоговения перед компилятором будущего, который на 100% поддержит Стандарт и который всех спасет у тех кто пишет на Си нет. Видимо об этом просто не думают, т.к не сталкиваются.

Absurd ★★★
()
Ответ на: комментарий от sergey_feo

>> Лично мне объектная модель Objective С гораздо больше нравится

>А как там у него с шаблонами? Подобие STL для него возможно?

Слава богу нет. А любителей перегруженности и прочиворечивости языка прошу посмотреть Objective-C++, вам, плюсятнекам, он должен поэтому понравиться.

anonymous
()
Ответ на: комментарий от Absurd

>>У меня нет проблем с тем, чтобы читать stdc++.

>Ложь.

В свежем стандарте исправили эту проблему с шаблонами.

anonymous
()
Ответ на: комментарий от anonymous

Дорогой Карлсон, фанат обобщенного программирования, может вам стоит обратить внимание на языки с вменяемой системой макросов, а не на феерический крестовый набор костылей?

Sidrian
()
Ответ на: Re^4: Кусочек Сахару Троллям ☺ от gaa

>std::string имеет функцию c_str(). Это Вам о чём-нибудь говорит?

Говорит. С++ не умеет работать с временными объектами, он их почти сразу удаляет. Поэтому если ты напишешь A = (b + c).c_str(), то в A ничего не окажется.

anonymous
()
Ответ на: комментарий от anonymous

>Как так? Вроде напротив. =\

Пример? Вы можете создать 2 std::string которые внутри будут ссылаться на одну и ту же область памяти?

Sectoid ★★★★★
()
Ответ на: комментарий от Sidrian

>Дорогой Карлсон, фанат обобщенного программирования, может вам стоит обратить внимание на языки с вменяемой системой макросов, а не на феерический крестовый набор костылей?

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

anonymous
()
Ответ на: комментарий от anonymous

>> Говорит. С++ не умеет работать с временными объектами, он их почти сразу удаляет. Поэтому если ты напишешь A = (b + c).c_str(), то в A ничего не окажется.

С подобными минусами C++ лично я соглашусь, т.к. это действительно не очевидно.

Deleted
()
Ответ на: комментарий от gaa

>>> У меня нет проблем с тем, чтобы читать stdc++.

>> Ложь.

>Телепат?

Я *знаю* что с кодом на Си с набитым глазом можно работать сколько угодно не компилируя. По себе. И я *знаю* как с этим в плюсах.

Absurd ★★★
()
Ответ на: комментарий от anonymous

>Поэтому если ты напишешь A = (b + c).c_str(), то в A ничего не окажется.

<telepat-mode>

4.2. В A (подразумеваю что A имеет тип "const char *") окажется указатель, ведущий в преисподню (на память, где хранился временный объект). Вообще-то так и должно быть. Какое Вы ожидали поведение?

</telepat-mode>

Sectoid ★★★★★
()
Ответ на: комментарий от Deleted

>С подобными минусами C++ лично я соглашусь, т.к. это действительно не очевидно.

Может конечно у меня уже мозг взломан, но ИМХО очевидно. Сборки мусора у C++ нет.

Sectoid ★★★★★
()
Ответ на: комментарий от Absurd

> Я *знаю* что с кодом на Си с набитым глазом можно работать сколько угодно не компилируя. По себе. И я *знаю* как с этим в плюсах.

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

gaa ★★
()
Ответ на: комментарий от anonymous

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

Карлсон, так я ведь не сказал что это за язык. Палитесь :)

Sidrian
()
Ответ на: комментарий от anonymous

> Поэтому если ты напишешь A = (b + c).c_str(), то в A ничего не окажется.

Это только вопрос знания языка.

gaa ★★
()
Ответ на: комментарий от Absurd

> Я *знаю* что с кодом на Си с набитым глазом можно работать сколько угодно не компилируя.

Ну ни хрена себе O_O А что такое "работа с кодом", если она не подразумевает компиляции?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>> Шаблоны - гиена огненная. От них больше проблем, чем толку.

Как вы предлагаете например реализовывть обобщённые контейнеры без шаблонов? Причём так, чтобы по сравнению с необобщёнными небыло различий в производительности. Или type-safe io? Или посмотрите на какуюнибудь мегабиблиотеку из состава boost... Лично я не представляю как такое провернуть без шаблонов.

Deleted
()
Ответ на: комментарий от gaa

>> Я *знаю* что с кодом на Си с набитым глазом можно работать сколько угодно не компилируя. По себе. И я *знаю* как с этим в плюсах.

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

Количество сущностей которое мозг способен держать в заданный момент времени конечно. И даже определено с довольно большой точностью.

Absurd ★★★
()
Ответ на: комментарий от Sectoid

> Вы можете создать 2 std::string которые внутри будут ссылаться на одну и ту же область памяти?

Зависит от реализации. gnu libstdc++ может copy-on-write

anonymous
()
Ответ на: комментарий от tailgunner

>> Я *знаю* что с кодом на Си с набитым глазом можно работать сколько угодно не компилируя.

>Ну ни хрена себе O_O А что такое "работа с кодом", если она не подразумевает компиляции?

Редактирование.

Absurd ★★★
()
Ответ на: комментарий от gaa

Это недостаток языка. Понимаешь? Отсутвие в Си классов - вопрос знания Си?

anonymous
()
Ответ на: комментарий от anonymous

>> Вы можете создать 2 std::string которые внутри будут ссылаться на одну и ту же область памяти?

>Зависит от реализации. gnu libstdc++ может copy-on-write

Называется MAD COW.

Absurd ★★★
()
Ответ на: комментарий от tailgunner

>Ну ни хрена себе O_O А что такое "работа с кодом", если она не подразумевает компиляции?

...computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.

:)

Sidrian
()
Ответ на: комментарий от anonymous

>Зависит от реализации. gnu libstdc++ может copy-on-write

copy-on-write (implicit sharing) != explicit data-sharing, а я говорил именно о нем.

Sectoid ★★★★★
()
Ответ на: комментарий от Absurd

>>> Я *знаю* что с кодом на Си с набитым глазом можно работать сколько угодно не компилируя.

>> Ну ни хрена себе O_O А что такое "работа с кодом", если она не подразумевает компиляции?

> Редактирование.

И редактировать Си++ без компиляции невозможно? O_o

tailgunner ★★★★★
()
Ответ на: комментарий от Deleted

> Поэтому если ты напишешь A = (b + c).c_str(), то в A ничего не окажется.

А ты как хотел, С++ не ставит своей целью как-то ограничивать ни программистов, ни ССЗБ.

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

>С подобными минусами C++ лично я соглашусь, т.к. это действительно не очевидно.

Согласен, поэтому компилятор должен давать предупреждение.

anonymous
()
Ответ на: комментарий от tailgunner

>>>> Я *знаю* что с кодом на Си с набитым глазом можно работать сколько угодно не компилируя.

>>> Ну ни хрена себе O_O А что такое "работа с кодом", если она не подразумевает компиляции?

>> Редактирование.

>И редактировать Си++ без компиляции невозможно? O_o

Теоретически можно. Практически так лучше не делать.

Absurd ★★★
()
Ответ на: комментарий от tailgunner

>> Thus, programs must be written for people to read, and only incidentally for machines to execute.

>Молодец. Возьми с полки пирожок.

Я бы еще добавил что программы на С++ одинаково плохо читаются и компьютером и человеком.

Absurd ★★★
()
Ответ на: комментарий от Sidrian

Или просто идейное принебрежение к классической CS-литературе? ;)

Sidrian
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.