Найти - Пользователи
Полная версия: Вывод видео
Начало » Флейм » Вывод видео
1 2 3 4 5 6
doza_and
py.user.next
Это такая загадка для doza_and.
Я знаю что
int f()
{
    return 1;
}
int main()
{
    f(2);
    return 0;
}
Валидный сишный код и невалидный код для C++ (опять более жесткие проверки типов). Следовательно если будете вызывать main то это надо делать разными способами. Наиболее близкий сишный эквивалент int main(void). Но для вызова с точки зрения ОС разницы помоему нет. В C++ логично было конечно генерировать ошибку при передаче аргументов программе которая декларируется как int main(void); Но увы, исторические корни ….

Если я чтото упустил поправьте, думаю многим будет интересно.

p.s.
Когда учились в Вузе нам преподавали FORTRAN. И на предложение попробовать C, PASCAL, ADA Я ответил что для моих проектов возможностей FORTRAN вроде хватает. А потом были разные коды. И через пол года перепиывание свойств воды и пара с FORTRAN на C++ сократило объем кода в 5 раз (около 300 кб кода на фортране). Быстродействие при этом несколько выросло. Самое главное что существенно упростилась поддержка кода, ушла необходимость вносить изменения одновременно в куче мест.
py.user.next
FishHook
Ну не код же эти гигабайты занимает, в самом то деле.
Код, не код - один хрен. Код там точно такой же неэкономный.

FishHook
на этом сейчас никто не экономит, вот и гагабайты выходят
Тогда, как и сейчас, тоже были такие неэкономные, это свойственно для всех времён. Я помню игры на сотни мегабайт, которые были по функционалу не более, чем лайнс или тетрис. Известно, чем они закончили - о них даже никто не помнит, что они вообще были когда-то. А есть игры типа танчиков с восьмибитки, про которые до сих пор статьи появляются с восхищением как это всё засунули в 256 байт.

Не зря про fortress написал, реально квейк и квейк, только не на 300 мегов, а на 15 гигов.

doza_and
Не кое чего нет, а более жесткие проверки типов.
Да, и как же так получилось, что C - подмножество, но код не компилируется в C++?

doza_and
Если вы возьмете другой компилятор С то тоже будут аналогичные выкрутасы и потребуется корректировать код.
Не, это стандарт, в любом компиляторе C он скомпилируется. Почему? Потому что в стандарте C разрешено присваивать void'овые указатели в обе стороны без всяких приведений.

doza_and
При этом вы можете использовать плюсовой компилятор, Я не знаю полезных свойств сишного компилятора которые отсутствуют в плюсовом компиляторе.
Это другой язык с другими правилами. Он один и тот же код компилирует в разные программы. Это как буква “с” в русском языке и буква “c” в английском языке, выглядят они идентично, а произносятся по-разному.
В C++ можно объявлять переменную до первого оператора, а в C, который якобы является подмножеством, - нет. Только потом это в C добавили в 99 году.

doza_and
может на ваш вкус ее перегнули в C++.
Понимаешь, там просто взяли и нивелировали то, что было в C, - лаконичность языковых конструкций. В C специально сделали фигурные скобки вместо паскалевских begin и end, чтобы кода было меньше. А Страуструп на это положил и снова стал вводить и лишние конструкции, и длинные конструкции, убирать ограничения, которые нужны. Почему Go (свежий язык) такой минималистичный? Да потому что это правильно.

doza_and
На мой вкус в C++ принципиально наличие template которые позволяют снизить ограничения накладываемые типизацией.
Классы, шаблоны, пространства имён, снятые ограничения на длину имён - это всё, что надо в C. Ну, итераторы, может быть. Но никак не десяток умных и полуумных указателей, десяток разновидностей приведений типов, когда это вообще мало где нужно, новые ненужные ключевые слова, медленные потоки вывода.
Вот в C такое запрещено, в C++ зачем-то разрешили определять переменные в условиях:
#include <iostream>

using namespace std;

int main()
{
int n = 1;
if (int n = 2) cout << n << endl;
return 0;
}

doza_and
Валидный сишный код и невалидный код для C++ (опять более жесткие проверки типов).
Это не из-за проверки типов, а из-за того, что раньше в C они вообще не проверялись у аргументов, поэтому для обратной совместимости со старым кодом в C ввели void. И это называется определением функции в старом стиле, тогда как в C++ никакого старого стиля нет.
http://c-faq.com/ansi/maindecl.html
Старый стиль означает, что аргументы передаваемые в функцию, не проверяются ни по количеству, ни по типам. У них там ещё разные преобразования типов аргументов при передаче в зависимости от стиля.

doza_and
Но для вызова с точки зрения ОС разницы помоему нет. В C++ логично было конечно генерировать ошибку при передаче аргументов программе которая декларируется как int main(void); Но увы, исторические корни ….
Тут речь вообще про любые функции, что они могут быть записаны в коде вот так, но в разных компиляторах (для разных языков) будут восприняты по-разному. А main() - это распространённая ошибка цппшников, когда они код на C пишут. Подловил одну бабу на зарубежном форуме на этой теме ;) Она там выпендривалась, а я ей говорю “что ж у тебя, у такой умной, код на C неправильно записан?”, так и срубил ферзюшку.
FishHook
py.user.next
Я вот читаю твои ностальгические опусы и не понимаю выводов. Чего ты сказать то хочешь? Что игры плохие, потому что большие, а были бы маленькие были бы хорошие? Или если писать игрушки экономя каждый байт они становятся интереснее? Или надо делать игры с вырвиглазной графикой, 16-ю цветами и
восьмибитным звуком, тогда они приобретают нужную атмосферу и геймплей?
Shaman
py.user.next
Тогда, как и сейчас, тоже были такие неэкономные, это свойственно для всех времён. Я помню игры на сотни мегабайт, которые были по функционалу не более, чем лайнс или тетрис. Известно, чем они закончили - о них даже никто не помнит, что они вообще были когда-то. А есть игры типа танчиков с восьмибитки, про которые до сих пор статьи появляются с восхищением как это всё засунули в 256 байт.
Новый виток спирали: сейчас GTA5 для PS3, к примеру, занимает 18ГБ на диске, но работает в 256Мб оперативки с очень приличной картинкой. C++. Кризисы - то же самое. Скажи ещё что это школьники сделали, как и UE, на котором вертится упомянутая Mass Effect. Mass Effect шикарна, она бесспорный шедевр геймдева, и её шедевральность связана с контентом и трудом художников-музыкантов-актёров-режиссёров в первую очередь, а мастерство создателей движка тут оказалось на вторых ролях.
И, да, танчики для восьмибиток клепались на асме. Все.
py.user.next
Да, и как же так получилось, что C - подмножество, но код не компилируется в C++?
Синтаксически - подмножество, а кроме синтаксиса есть ещё много умных вещей.
py.user.next
Ну, итераторы, может быть.
Как ты их представляешь без классов? Некий синтаксический сахар вокруг указателей, который можно хоть сейчас соорудить для препроцессора?
py.user.next
FishHook
Чего ты сказать то хочешь? Что игры плохие, потому что большие, а были бы маленькие были бы хорошие?
Нет, если игры пишут на C++, то это ещё ни о чём не говорит, потому что пишут их кодеры. Идей - ноль, берут платформу, на неё что-то лепят, а потом продают. А качество - а всем по барабану на качество.
Они на C++ пишут, потому что он быстрый, а быстрый он, потому что на C основан.
Он просто взял, к C добавил классы (поначалу он так и назывался), поснимал ограничения и выдал это за новый язык, а потом стал книжки писать (чтобы продавать их ;) ).

Shaman
Скажи ещё что это школьники сделали
А кто это сделал? Ты просто Warcraft вспомни, как это всё на дискетках таскали из офиса в офис, когда не было систем контроля версий, электронной почты и прочих вещей. Но получилась игра - классика стратегий. А сейчас вот так делают какой-то квейк два притопа три прихлопа и просто монетизируют через какой-то внутренний магазин, никаких других задач там не стоит.

Shaman
а мастерство создателей движка тут оказалось на вторых ролях
Так они не делают движок, они его уже готовый берут. У них мозгов не хватит на движок.

Shaman
Как ты их представляешь без классов?
Итератор без классов? Легко.
Но почему без классов? классы тоже добавить.
Их просто не стали добавлять, потому что они требуют замедления программ. А C характеризуется скоростью. Проги на C++ медленнее работают как раз из-за дополнительных вычислений.

Shaman
соорудить для препроцессора
Можно, конечно, но не нужно. Препроцессор - для создания макросов. Нельзя на нём писать, он для этого не предназначен.
FishHook
py.user.next
Нет, если игры пишут на C++, то это ещё ни о чём не говорит, потому что пишут их кодеры. Идей - ноль, берут платформу, на неё что-то лепят, а потом продают. А качество - а всем по барабану на качество.
Они на C++ пишут, потому что он быстрый, а быстрый он, потому что на C основан.
Он просто взял, к C добавил классы (поначалу он так и назывался), поснимал ограничения и выдал это за новый язык, а потом стал книжки писать (чтобы продавать их ).
Посмотрел бы я на игроделов ваяющих проект масштаба Skyrim или Mass Effect на чистом Си.
i.slepov
FishHook
Посмотрел бы я на игроделов ваяющих проект масштаба Skyrim или Mass Effect на чистом Си.

Why not?
FishHook
Because люди деньги зарабатывают, а не херней страдают.
Shaman
i.slepov
Why not?
Ну да. И игровой скриптинг на вот этом вот.
Почти в каждом крупном сишном проекте свой аналогичный велосипед. Спрашивается, why not C++, или что уровнем повыше?
py.user.next
FishHook
Because люди деньги зарабатывают
Торвальдс (линукс, гит), Столлман (емакс)?
Не знаешь разницу между домашними пирожками и пирожками на продажу?
Вот сравни Emacs и Sublime Text, первый - для души, второй - для продажи. Кто будет жить?
С C та же история, потому он и качественный, и живёт 45 лет уже.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB