Pull to refresh
204
0
Виктор @mace

User

Send message
Я чем дольше живу, тем больше убеждаюсь, что вменяемый разработчик — это вообще большая редкость. Кроме того, я уверен, что среди лисперов процент вменяемых больше, чем в среднем по больнице — просто потому, что для того, чтобы его осилить нужно иметь определенные способности. Что-то мне подсказывает, что среднестатистический джавист или сишарпер с возможностями Лиспа в руках — это как обезьяна с гранатой. А если на Джаве или Сишарпе пишет — так вроде и ничего, нормальный разработчик, если за ним иногда присматривать и подчищать огрехи.
Мне кажется, LISP не стал мейнстримом и никогда им не станет по одной простой причине: этот язык создан для того, чтобы на нем можно было легко писать код. Проблема в том, что в большинстве случаев код нужно еще и легко читать. То, что на Лиспе можно решить определенную задачу сотней разных способов, а на Джаве всего двумя, иногда являеться преимуществом Джавы: когда вы решаете эту задачу — вам так не кажется, но когда через 10 лет в вашей системе на пару миллионов строк будет разбиратся другой разработчик, он эти два способа поймет намного быстрее, чем сотню Лисповских.
Японцы вообще очень консервативны, как ни странно это звучит.
Ну давайте по пунктам.
1. Я не имею представления, почему авторы MPlayer выбрали чистый С вместо С++. И вообще мне лично С нравится больше чем С++. Последний довольно уродский и перегруженный, я с этим согласен. Но, C# — это не С++, он намного стройнее, проще и продуманнее.

2. Я вообще к тому, почему там С++, а не C#, Java или какой-либо другой управляемый язык, например. Про согласование десятков моделей, потоков и сущностей в рамках игры я с вами полностью согласен. И мне страшно представить, насколько сложно это делать на чистом С без использования паттернов ООП. Кстати, «ООП» не обязательно означает десятиэтажные иерархии классов, во всем ведь можно соблюдать меру.

3. Дело не в присутствии или отсутствии определенных ошибок, а о вероятности их появления. Управляемые языки сильно понижают вероятность появления таких ошибок, и никто не говорил, что они претендуют на то, чтобы устранить их вообще. Код пишут люди, а они имеют свойство ошибатся. Язык может только понизить вероятность и сделать часть работы за разработчика.
Про выход за границу массива, извините, нет. Аналог выхода за границу массива в C# — это, сюрприз, выход за границу массива в С++. А access violation — это все таки обращение к обьекту, которого не существует, что бывает в управляемых языках очень редко. Исключение — null reference, но это немного не то и возникает такая ситуация обычно по глупости разработчика, когда обьект не был правильно проинициализирован.
Про то, что можно обработать, а что нельзя. Вообще, сам .Net вроде как написан на С++. А компилятор С++ в свою очередь, вполне возможно написать на С. То есть при определенном желании вы можете на С написать нечто, что даст вам все возможности C#. Вот только сколько времени и сил вы на это потратите? То есть выбирая более высокоуровневый язык вы просто избавляете себя от лишней работы, которую необходимо проделать на более низкоуровневом.

4. Мне тут нечего ответить, извините, я в теории заговора в программировании не верю. Я здесь деньги зарабатываю. На последний абзац могу ответить то же, что и в предыдущем пункте: никто и не говорил, что C# — идеален, и мозг включать при написании кода все равно надо. Самое главное его преимущество — это то, что можно сконцентрироватся на задаче, а не думать о том, какой поток должен освободить память, если обьект создан в одном потоке, передан во второй и при этом его использует третий.

5. Да, разнятся и очень сильно. Будет либо дольше, либо сильно дороже, за счет привлечение большего количества и более опытных разработчиков.
По поводу выбора, лично вы — программист и мыслите своими категориями. Заказчика не волнует на чем написан софт, если ему сказать, что на сервере должен стоять Windows Server 2008 R2 и только, то он его поставит. Ему совершенно все равно как типы взаимодействуют в системе (кстати, я в упор не понимаю, что вы имеете ввиду, когда пишете о загадках при взаимодействии — при правильной архитектуре приложения в нем нет никаких загадок). И ничего он распиливать не собирается. Ему надо чтобы работало, надежно, удобно и дешево.
Зачем соревнования? Бизнес уже давно выбрал Java и С#, потому что они дешевле и надежнее чем С++. Поверьте, этим ребятам плевать на религию, их интересуют только деньги, и когда они их вкладывают в софт на управляемых языках — за этим стоит обдуманное решение. Возвращаясь к вышеупомянутому Postfix, один из его конкурентов, MS Exchange исторически написан на С++. Сейчас его потихоньку, модуль за модулем переводят на C#. Конечно можно возразить, что C# — разработка MS, но нужно понимать, что один из самых популярних С++-компиляторов тоже разрабатывается этой компанией, а Exchange — стратегический продукт, который приносит миллиарды долларов каждый год, в разы больше, чем все средства разработки, в том числе C#.

6. Ядро Windows тоже написано на С. И обьемы там не маленькие. Просто для написания операционок или драйверов никто еще не придумал ничего лучше чем С. Но прикладной уровень — это другое дело.
Существенное отличие современных крупных бизнесс-приложений от Postfix, MPlayer, Abiword и ViM в том, что все четыре вышеупомянутых приложения начали создаватся еще в 90-х/начеле 2000-х годов, когда C# вообще не было, а Java была слишком тяжелой и неповоротливой для железа тех времен, да возможностей давала поменьше чем сейчас. Еще один существенный фактор — все эти проекты открытые и начинали разрабатыватся энтузиастами, которые, как правило, не особо задумываются над бюджетами, сроками и человеко-часами, с которыми обязательно нужно считатся в мире бизнеса.

В случае промышленных игр огромную роль имеет производительность. Цель большинства разработчиков современных игр — выжать максимум из железа пользователя, чтобы показать ему максимально привлекательную картинку. В ход идут самописные аллокаторы памяти, различные хаки, микрооптимизации и т.п. В этом случае они оправданы, так как дают игре конкурентное преимущество, которое выливается в дополнительный доход, который окупает расходы на все эти усилия. Впрочем довольно часто на С++ пишут только критические части движка, а вот все остальное уже на более высокоуровневом языке.

В случае с подавляющим большинством бизнесс-приложений основными требованиями являются:
а) надежность — утечки памяти или access violation в случае кривого обращения с указателем могут стоить заказчику миллионы долларов. Конечно, использование C# или Java не даст вам 100% гарантии от ошибок, но уменьшит их очень значительно.
б) качество кода — многие бизнесс-приложения живут десятилетиями и их поддерживают и дописывают целые поколения разработчиков. Поэтому код пишется по определенным стандартам, с использованием общепринятых компонентов и с пониманием того, что через 10 лет кому-то, кто сейчас возможно ходит в начальную школу, придется в этом коде разобратся.
в) общая цена вопроса — поставьте себя на место заказчика. К нему приходят два менеджера команд разработчиков: один обещает написать нужное вам приложение на С++ за год и оно будет работать на железе за 1000 у.е., а другой — за пол года на C#, но оно будет требовать дополнительную оперативку, а значит вам придется покупать железо за 1200 у.е. При этом месяц работы каждой комманды стоит 50 тысяч у.е. Кого вы выберете?

Код на С или С++ без сложных ООП конструкций очень хорошо и понятно выглядит по сравнению с кодом, написанном в ООП-стиле до тех пор, пока приложение не разрастается до определенного уровня. Когда обьем кода на С превышает 10000 строк, в нем становится трудно разбиратся. Когда его больше 100000 строк — разобратся в нем могут только настоящие гуру. Когда счет начинает идти на миллионы — в коде на С разобратся не сможет никто. В то же время, с правильно спроектированными приложениями обьемом в миллионы строк на C# вполне возможно работать, это я вам по собственному опыту говорю.
А какое отношение имеет инлайн к сложности алгоритма? Даже если инлайн и даже если копирование идет кусками по 16 байт, как сказано по ссылке, это все равно O(N) и при росте N никакие команды из SSE2 и инлайны не дадут преимущества перед O(logN).
Впрочем, я наверное не прав. Внутри там обычный memcpy, который даже со всеми оптимизациями имеет линейное время работы.
Сдвиг массива выполняется специальной операцией прямого копирования куска памяти. На современных процессорах и контроллерах памяти эта операция довольно быстра.
Выгода C#, Java и других подобных языков познается при разработке крупных бизнесс-приложений. Вы пытаетесь сравнивать два инструмента, которые предназначены для разных целей. Простая метафора: резец для резьбы по дереву и бензопила. Оба вроде как режут древесину, но цели перед ними стоят совершенно разные: резцом вы можете выточить произведение исскуства, но когда перед вами стоит задача срубить десяток деревьев, вы наверняка выберете более подходящий для этих целей инструмент — бензопилу.
C — резец по дереву в мире программирования, очень тонкий и элегантный инструмент. C# — современная высокоэффективная бензопила со встроенным GPS. Да, местами неуклюжая и возможно требующая дополнительных ресурсов, но очень эффективная для своих задач.
Недавно проскакивала ссылка на информацию от Rovio, что бесплатная версия с рекламой под Android была своего рода экспериментом, чтобы прощупать рынок. И вроде как они говорили, что цифры доходов по сравнению с AppStore были просто смешными. Ссылку искать лень.
Интересно было бы увидеть статистику по странам. Что-то мне подсказывает, что доля покупок из «России и многих других стран» настолько мала, что ею можно пренебречь в подобной статистике.
«Потому что Москва — порт пяти морей» (с)
В 2001 у IE6 с производительностью относительно конкурентов тоже все было ок.
Я уже выше ответил, что невозможно утверждать, что между релизами проходит слишком много времени, если еще не было ни одного релиза. Выпустят первую версию, пройдет немного времени — тогда можно будет утверждать что-либо.
Вы противоречите сами себе. Каким образом вам могли показать короткий цикл между релизами, если еще ни одного не было, а предварительные версии по-вашему вообще не считаются?
Вот пускай выйдет релиз, пройдет пару месяцев, если не будет выпущено ни одного обновления с новым функционалом — значит и правда слово не сдержали.
Ну по крайней мере PP-версии выходили с четким интервалом в 6 недель. Кроме последней, которая совпала с релиз-кандидатом — перед ней был перерыв в 2,5 месяца.
Собственно AdBlock — это единственное чего мне жутко не хватало в IE9. Спасибо вам, добрый человек!
Мой Хабр теперь без жутких анимированных флеш-баннеров!
ІЕ9 будет разрабатыватся короткими циклами. По крайней мере это обещали еще год назад.
А что тут удивительного? Скорее всего, в конце курсов лучшим выпускникам предложат работать в Яндексе, соответственно профит от этого у компании есть. Так поступают очень многие компании и это прекрасная практика.

Information

Rating
Does not participate
Location
Львов, Львовская обл., Украина
Date of birth
Registered
Activity