А я напьюсь безалкогольной водки в компании своих воображаемых друзей.
16.12.2010 в 23:50
Пишет Кенджи-но Сората:Я плакал
осторожно, ненормативная лексикаНавеяно срачём С++ vs C# в соседней теме. Создаю новую тему потому, что там уже 216 постов и её никто не читает, а мне охота поразвлечься.
-------------------
Кстати это довольно глупая идея - сравнивать скорость работы программ на разных языках. Каждый язык создавался со своей целью, и каждый с ней отлично справляется я считаю.
Например C был сделан потому, что писать юникс на ассемблере было слишком напряжно. Задачу свою язык решил - юникс написан и жив до сих пор. Несмотря на то, что является безнадёжно устаревшим говном.
При этом С - низкоуровневый язык, за счет этого можно выполнять различные оптимизации с учетом конкретного оборудования. Это не значит, что программа, написанная на С, будет автоматически быстрее аналогичной, написанной на C#. Скорее всего, наивная реализация будет даже медленней. Помню, когда еще был студентом, один знакомый рассказывал, как к нему пришел очередной срыватель покров с дотнета и заявил, что в дотнете медленная операция конкатенации строк. Естественно, знакомый повелся на провокацию сразу сказал: `Talk is cheap. Show me the code'. Потрахавшись минут 20 с сегфолами и тупым микрософтовским компилятором, срыватель покров родил таки рабочую конкатенацию строк с memcpy и malloc-ом. Знакомый был парнем подкованным, поэтому свою программу на C#-е написал с использованием StringBuilder-а минут за 5. Программа на C# работала мгновенно, а на С - секунд 30. Конечно, если бы срыватель покров потратил на оптимизацию год-другой, учел бы все особенности задачи и железа, и реализовал бы все оптимизации, используемые в StringBuilder-е, он с лёгкостью обошел бы программу на C#, но наличие потенциальной возможности ручной оптимизации вовсе не означает, что этой возможностью получится воспользоваться в реальном проекте, имеющим ограничения по времени и бюджету.
Далее C++. Был сделан, чтобы добавить свистоперделки в С. Задачу свою решил на отлично - свистоперделок в С++ такое количество, что всех их не знает ни один программист, а производители компиляторов еще долгие годы плевались и не могли реализовать стандарт в полном объёме. Как и С позволяет выполнять ручную оптимизацию кода и делает всё для невозможности автоматической. Поэтому любая попытка использовать какие-либо высокоуровневые абстракции на C++, например stl, заканчивается лютой потерей производительности из-за фрагментации кучи и прочего говна, а любой серьезный проект на С++ начинается с написания собственного менеджера памяти и собственной реализации строк. В этом плане он мало отличается от C, поэтому работодатели часто пишут C/C++, что следует читать как пиздец/пиздец++.
Джава. Язык для тостеров и кофеварок. Задачу решает, на кофеварках работает (по крайней мере на выставках).
Изначально создавался, чтобы кофеварки программировать было просто. В процессе создания создателей внезапно осенило: программировать просто - это лучше, чем программировать сложно, причем безотносительно того, программируется кофеварка или платёжная банковская система. Таким образом Джава распространилась с кофеварок на платёжные банковские системы. И вообще везде, куда только можно. И куда нельзя - тоже. Правда из-за катарсиса, вызванного таким неожиданным открытием, адепты Джавы упустили тот факт, что задача написания платёжной банковской системы немного сложнее задачи узорного запекания хлебца в тостере и, по-хорошему, сложностью надо как-то управлять. Поэтому написание банковских систем на простой Джаве внезапно стало сложным. Более того, оказалось что даже прикрутить Свинг к Эклипсу не так просто. Ребята посообразительнее стали выбирать более эффективную Дельфи. Но, как говориться, на любую хитрую жопу с резьбой всегда найдётся свой ... винтом, адепты Джавы не сильно расстроились, а стали бороться со сложностью посредством самой же сложности. Например, если задача создания объектов сложна, от нее можно абстрагироваться, используя паттерн фабрика (en.wikipedia.org/wiki/Factory_object). Но так как сама фабрика тоже является объектом, который может быть тоже сложно создавать, от этой задачи тоже можно абстрагироваться, используя фабрику фабрик (www.docjar.org/docs/api/org/outerj/pollo/xm... например). И так далее. Вот и пишут джависты фабрики фабрик фабрик фабрик фабрик до сих пор.
С#. Появился потому что Майкрософт с его embrace, extend and extinguish не пустили в Джаву. Майкрософт решил создать свою Джаву. И создал. И надо сказать, на Джаве от Майкрософта пишут даже несмотря на то, что на кофеварках и тостерах она не работает, а в банках используется редко и не очень успешно (blogs.computerworld.com/london_stock_exchan...).
Должен заметить, что задача перед Майкрософтом стояла грандиозная - надо было не просто создать Джаву, надо было создать Джаву лучше Джавы. Для этого, во-первых, Майкрософт нанял создателя Дельфи, которая, как известно, была успешнее Джавы (заодно сделав живительный extinguish самой Дельфи), а во-вторых, использовал уже зарекомендовавший себя на C/C++ метод - а именно напихал в Майкрософт(r) Джаву(tm) свистоперделок. По свистоперделкам C# стоит где-то между смолтолком, дельфи и С++. Это C# второй версии, в 3.5 добавили что удалось отхватить от Схемы, Хаскелла и SQL-а. В 4-ой решили побаловать любителей PHP, Питона и прочего скриптового говна, которое в приличном обществе называть языками програмирования не принято. На очереди контракты из Эйфеля. Что добавят в следующую версию я даже не представляю, я языков-то столько не знаю. Хотя есть еще не паханное поле в области Unlambda, Brainfuck и Malbolge.
Как правило, свистоперделки к C#-у прикручиваются либо криво, либо очень криво (но таки лучше, чем генерики к Джаве), однако в сообществе дотнетчиков все они принимаются с аплодисментами - ведь это прекрасный повод свалить с работы на `дни разработчика' и вполне официально нихрена не делать под видом повышения квалификации.
Хаскелл. Мой любимый. Создан чтобы троллить форумы вроде этого. Свою задачу выполняет на 100%, идеален. Не слишком распространён, чтобы меня с ходу могли поймать за руку за размещение нерабочего кода, но и не слишком редок, чтобы все начали думать, что на нём никто не программирует. Позволяет писать шарады, достаточно сложные для понимания даже другими хаскеллистами, при этом не выглядит как Перл. Любой начинающий программист, решивший написать `Hello World' на Хаскелле, наткнётся на слово `монада'. При попытке выяснить что это такое, получит что-то среднее между `моноид в категории эндофункторов' и `живые, духообразные единицы, из которых все состоит и кроме которых ничего в мире нет' (ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%BD%D0...). Поэтому начинающие программисты пишут на Хаскелле факториалы (www.willamette.edu/~fruehr/haskell/evolutio...). При этом в той же степени рискуя наткнуться на любое другое непонятное слово, начиная с `правая свёртка' заканчивая `зигохистоморфический препроморфизм' (www.haskell.org/haskellwiki/Zygohistomorphi...). По свистоперделкам Хаскелл уступает разве что C#-у. Но если типичная свистоперделка шарпа - это LINQ - такая клёвая штучка, чтобы писать на C# как на SQL-е, то типичная хаскеллевская свистоперделка - это полиморфизм ранга 2 - такая клёвая штучка, чтобы писать зигохистоморфические препроморфизмы. А чтобы писать на Хаскелле как SQL-е, нужно подключить кванторы существования (ExistentialQuantification), классы типов с несколькими параметрами (MultiParamTypeClasses), функциональные зависимости (FunctionalDependencies), полиморфизм ранга 2 (Rank2Types), гибкие экземпляры (FlexibleInstances), гибкие контексты (FlexibleContexts), неразрешимые экземпляры (UndecidableInstances), экземпляры синонимов типов (TypeSynonymInstances), лексические области видимости для переменных типа (ScopedTypeVariables) и шаблоны (TemplateHaskell) конечно же, зато вам не придется учить SQL, клёво! Однако по непонятной причине большинство людей всё-таки вбирают C# с LINQ.
копирайт
За ссылку спасибо ССК
URL записиосторожно, ненормативная лексикаНавеяно срачём С++ vs C# в соседней теме. Создаю новую тему потому, что там уже 216 постов и её никто не читает, а мне охота поразвлечься.
-------------------
Кстати это довольно глупая идея - сравнивать скорость работы программ на разных языках. Каждый язык создавался со своей целью, и каждый с ней отлично справляется я считаю.
Например C был сделан потому, что писать юникс на ассемблере было слишком напряжно. Задачу свою язык решил - юникс написан и жив до сих пор. Несмотря на то, что является безнадёжно устаревшим говном.
При этом С - низкоуровневый язык, за счет этого можно выполнять различные оптимизации с учетом конкретного оборудования. Это не значит, что программа, написанная на С, будет автоматически быстрее аналогичной, написанной на C#. Скорее всего, наивная реализация будет даже медленней. Помню, когда еще был студентом, один знакомый рассказывал, как к нему пришел очередной срыватель покров с дотнета и заявил, что в дотнете медленная операция конкатенации строк. Естественно, знакомый повелся на провокацию сразу сказал: `Talk is cheap. Show me the code'. Потрахавшись минут 20 с сегфолами и тупым микрософтовским компилятором, срыватель покров родил таки рабочую конкатенацию строк с memcpy и malloc-ом. Знакомый был парнем подкованным, поэтому свою программу на C#-е написал с использованием StringBuilder-а минут за 5. Программа на C# работала мгновенно, а на С - секунд 30. Конечно, если бы срыватель покров потратил на оптимизацию год-другой, учел бы все особенности задачи и железа, и реализовал бы все оптимизации, используемые в StringBuilder-е, он с лёгкостью обошел бы программу на C#, но наличие потенциальной возможности ручной оптимизации вовсе не означает, что этой возможностью получится воспользоваться в реальном проекте, имеющим ограничения по времени и бюджету.
Далее C++. Был сделан, чтобы добавить свистоперделки в С. Задачу свою решил на отлично - свистоперделок в С++ такое количество, что всех их не знает ни один программист, а производители компиляторов еще долгие годы плевались и не могли реализовать стандарт в полном объёме. Как и С позволяет выполнять ручную оптимизацию кода и делает всё для невозможности автоматической. Поэтому любая попытка использовать какие-либо высокоуровневые абстракции на C++, например stl, заканчивается лютой потерей производительности из-за фрагментации кучи и прочего говна, а любой серьезный проект на С++ начинается с написания собственного менеджера памяти и собственной реализации строк. В этом плане он мало отличается от C, поэтому работодатели часто пишут C/C++, что следует читать как пиздец/пиздец++.
Джава. Язык для тостеров и кофеварок. Задачу решает, на кофеварках работает (по крайней мере на выставках).
Изначально создавался, чтобы кофеварки программировать было просто. В процессе создания создателей внезапно осенило: программировать просто - это лучше, чем программировать сложно, причем безотносительно того, программируется кофеварка или платёжная банковская система. Таким образом Джава распространилась с кофеварок на платёжные банковские системы. И вообще везде, куда только можно. И куда нельзя - тоже. Правда из-за катарсиса, вызванного таким неожиданным открытием, адепты Джавы упустили тот факт, что задача написания платёжной банковской системы немного сложнее задачи узорного запекания хлебца в тостере и, по-хорошему, сложностью надо как-то управлять. Поэтому написание банковских систем на простой Джаве внезапно стало сложным. Более того, оказалось что даже прикрутить Свинг к Эклипсу не так просто. Ребята посообразительнее стали выбирать более эффективную Дельфи. Но, как говориться, на любую хитрую жопу с резьбой всегда найдётся свой ... винтом, адепты Джавы не сильно расстроились, а стали бороться со сложностью посредством самой же сложности. Например, если задача создания объектов сложна, от нее можно абстрагироваться, используя паттерн фабрика (en.wikipedia.org/wiki/Factory_object). Но так как сама фабрика тоже является объектом, который может быть тоже сложно создавать, от этой задачи тоже можно абстрагироваться, используя фабрику фабрик (www.docjar.org/docs/api/org/outerj/pollo/xm... например). И так далее. Вот и пишут джависты фабрики фабрик фабрик фабрик фабрик до сих пор.
С#. Появился потому что Майкрософт с его embrace, extend and extinguish не пустили в Джаву. Майкрософт решил создать свою Джаву. И создал. И надо сказать, на Джаве от Майкрософта пишут даже несмотря на то, что на кофеварках и тостерах она не работает, а в банках используется редко и не очень успешно (blogs.computerworld.com/london_stock_exchan...).
Должен заметить, что задача перед Майкрософтом стояла грандиозная - надо было не просто создать Джаву, надо было создать Джаву лучше Джавы. Для этого, во-первых, Майкрософт нанял создателя Дельфи, которая, как известно, была успешнее Джавы (заодно сделав живительный extinguish самой Дельфи), а во-вторых, использовал уже зарекомендовавший себя на C/C++ метод - а именно напихал в Майкрософт(r) Джаву(tm) свистоперделок. По свистоперделкам C# стоит где-то между смолтолком, дельфи и С++. Это C# второй версии, в 3.5 добавили что удалось отхватить от Схемы, Хаскелла и SQL-а. В 4-ой решили побаловать любителей PHP, Питона и прочего скриптового говна, которое в приличном обществе называть языками програмирования не принято. На очереди контракты из Эйфеля. Что добавят в следующую версию я даже не представляю, я языков-то столько не знаю. Хотя есть еще не паханное поле в области Unlambda, Brainfuck и Malbolge.
Как правило, свистоперделки к C#-у прикручиваются либо криво, либо очень криво (но таки лучше, чем генерики к Джаве), однако в сообществе дотнетчиков все они принимаются с аплодисментами - ведь это прекрасный повод свалить с работы на `дни разработчика' и вполне официально нихрена не делать под видом повышения квалификации.
Хаскелл. Мой любимый. Создан чтобы троллить форумы вроде этого. Свою задачу выполняет на 100%, идеален. Не слишком распространён, чтобы меня с ходу могли поймать за руку за размещение нерабочего кода, но и не слишком редок, чтобы все начали думать, что на нём никто не программирует. Позволяет писать шарады, достаточно сложные для понимания даже другими хаскеллистами, при этом не выглядит как Перл. Любой начинающий программист, решивший написать `Hello World' на Хаскелле, наткнётся на слово `монада'. При попытке выяснить что это такое, получит что-то среднее между `моноид в категории эндофункторов' и `живые, духообразные единицы, из которых все состоит и кроме которых ничего в мире нет' (ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%BD%D0...). Поэтому начинающие программисты пишут на Хаскелле факториалы (www.willamette.edu/~fruehr/haskell/evolutio...). При этом в той же степени рискуя наткнуться на любое другое непонятное слово, начиная с `правая свёртка' заканчивая `зигохистоморфический препроморфизм' (www.haskell.org/haskellwiki/Zygohistomorphi...). По свистоперделкам Хаскелл уступает разве что C#-у. Но если типичная свистоперделка шарпа - это LINQ - такая клёвая штучка, чтобы писать на C# как на SQL-е, то типичная хаскеллевская свистоперделка - это полиморфизм ранга 2 - такая клёвая штучка, чтобы писать зигохистоморфические препроморфизмы. А чтобы писать на Хаскелле как SQL-е, нужно подключить кванторы существования (ExistentialQuantification), классы типов с несколькими параметрами (MultiParamTypeClasses), функциональные зависимости (FunctionalDependencies), полиморфизм ранга 2 (Rank2Types), гибкие экземпляры (FlexibleInstances), гибкие контексты (FlexibleContexts), неразрешимые экземпляры (UndecidableInstances), экземпляры синонимов типов (TypeSynonymInstances), лексические области видимости для переменных типа (ScopedTypeVariables) и шаблоны (TemplateHaskell) конечно же, зато вам не придется учить SQL, клёво! Однако по непонятной причине большинство людей всё-таки вбирают C# с LINQ.
копирайт
За ссылку спасибо ССК
@темы: Компьютерное, ©перто, Позитив, Стёб