Comments 73
С# является одним из двух чистых объектно-ориентированных языков программирования
Хм, даже интересно стало увидеть ваше определение чистого ООЯП и какой же ещё 1 язык под него подпадает?
DotGnu давно уж мертв, и можно не считать
Ссылка на Web Archive: http://web.archive.org/web/20060208020139/http://msdn.microsoft.com/vcsharp/art/csharp_team.gif
> 5. С# является первым компонентно-ориентированным языком программирования.
я-то считал, что это был [пост]Виртовский Component Pascal, а нет, до-диез вышел на год раньше. Впрочем и у того, и у другого были предшественники в виде Borland Object Pascal/Delphi и Oberon-2 соответственно.
del
вы живете стереотипами из 2007ого.
Кому должен? Вы пишите хеллоу ворлды в продакшн? Или вы пишите большие rich интерфейс приложения, где одних ассетов может быть на пару мегабайт? Всё зависит от контекста.
Проблема в том, что офигительный процент этих «Rich приложений» не делают ничего такого что какой-нибудь FoxPro или Clarion не могли сделать этак 20 лет назад.
К сожалению это проблема всеобщая: современный C++ тут от C# недалеко ушёл:
$ cat test.cc #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; } $ g++ -O3 -static -s test.cc -o test $ size test text data bss dec hex filename 1304583 27276 92776 1424635 15bcfb test
В своё время в примерно такой объём влазили компилятор, линкер и даже интегрированная среда. Сегодня — Hello, World. Но, конечно, это всё ещё на порядок (а то и на два) меньше, чем в случае с C#…
Я написал выше комментарий про то, что 200-300мб — это стереотип из 2007ого, а вы опять повторяете. Сейчас там модульный дотнекор, а у нас на андроиде весь дотнет(моно) со всем добром простым интерфейсом занимает мегабайта 2-3. Но опять же как только вы начнете делать что-то сложнее Hello world (ну знаете, этим занимаются обычные прикладные программисты на работе, а не теоретики, которые меряются размерами хеллоу ворлдов) с добавление 3rd party, ассетов под разные аспекты — на этом фоне небольшая прокладка для шарпа теряется. LTE, 128гб телефоны, недорогие терабайтные диски (а то и ссд)… а мы до сих пор будем вспоминать зеленую траву из юности?
Как бы то ни было, но helloworld должен занимать несколько десятков байт, не более. На любой архитектуре, любой ОС и в любом году.На правах человека, который для прикола реально писал программу, размером меньше 1 кб, замечу, что Вы несёте чушь…
Для примера возьмём Windows, как наиболее распространённую ОС… Даже если взять 32-битную версию, то есть определённый формат исполняемых файлов, есть импорт kernel32.dll, чтобы хоть что-то осмысленное сделать… есть длина строки и имени вызываемой функции в конце концов. Всё это занимает гораздо больше нескольких десятков байт. Даже если насиловать компилятор кастомными размерами секций, то меньше 512 байт у Вас небитый exe-файл сделать не получится. А helloworld будет занимать уже не меньше 768 байт. А если прибавить к этому размер самой kernel32.dll, то уже на мегабайты счёт пойдёт.
Шарп разрабатывался не что бы «с миром здороваться» и для своих целей очень и очень удобен.
Только если мы уже заговорили про неиспользование фреймворков по 100-200-300 Мб, чур и средства ОС тоже не использовать.
Да и драйвер видеокарты тоже весит 100 метров. Его тоже в топку.
А ну и БИОС — тоже фреймворк можно сказать. Прерывания нельзя.
Удачи!
Впрочем, дегенеративная привычка ВизуалСтудиостов не менять свойства проекта, из-за чего он потом требует редистры разных версий — такое же раздражение вызывает. Вот честно, я лучше полуторамеговый экзешник скачаю, чем 150-килобайтный, который еще и msvcr120.dll будет требовать на пустой машине.
В ответ предлагаю встречный вашему «размер хеловорлда» тест. Я на .NET смогу тасклист с вебмордой накидать за пару часов. И задеплоить его в продакшен на ажур в тот же день. Следуя вашей логике — любой язык должен позволять сделать то же самое за сопоставимое время. Возьмите язык, который по-вашему превосходит C# в написании хеловорлдов, и сделайте то же самое за сутки.
Вообще, как правильно высказались коллеги выше, не стоит сравнивать теплое с мягким. Есть разные задачи, разные цели и разные инструменты. .NET в первую очередь создавался для ускорения сложной разработки, для уменьшения ошибок, связанных управлением памятью. То что до полноценной модульной структуры добрели только сейчас — плохо конечно, но добрели же. В любом случае, закон сохранения всего подряд никто не отменял — чтобы в чем-то выиграть, нужно где-то уступить.
Кроме того, время не стоит на месте тоже. Даже ребята-электронщики уже забили на ассемблер и, тем более, двоичные коды, и вовсю пилят прошивки для микроконтроллеров на Си и даже JS. Хотя это тоже требует каких-то уступок: будь то эффективность, быстродействие или размер прошивки.
А насчет «хелловорлда на для 5 класса» — так паскаль же! Вон, Хеловорлд на 4 строчки, на 31 килобайт, который не требует установки ничего лишнего ;) И тасклист на FPC в веб-мордой я не смогу за пару часов, но если поменять FPC на дельфы — вполне. Правда, там бинари, «не требующие ничего» будут не по 500кб, а в пяток мегабайт, но, если честно, для меня приоритетней «ничего не ставить» чем «лишний мегабайт бинаря»
если честно, для меня приоритетней «ничего не ставить» чем «лишний мегабайт бинаря»Подход «ничего не ставить» подходит для очень ограниченного круга простых задач… Для мало-мальски сложного клиентского приложения всё равно придётся делать инсталлятор/деинсталлятор, из которого уже не проблема установить всё что нужно, если это отсутствует.
В конечном итоге, использование виртуальных машин и разделяемых библиотек позволяет сократить место суммарно занимаемое всеми установленными программами. Обратный пример можно видеть на примере Electron, где каждое приложение встраивает в себя под 100 Mb браузерного движка, вместо того, чтобы устанавливать его отдельно и единоразово.
No Man's Sky. Отбросив проблемы с AMD — первый выкаченный билд не запускался у некоторых потому, что требовал MSVCR какой-то там версии, которая стояла не у всех. Блин, да поменять один флаг компилятора — и не нужны будут никакие редистры. Да, ДЛЛки и бинарь вырастут на стописят килобайт каждый, но в современных продуктах PEшек мало, главное место жрут ресурсы.
KIS17. Перед тем как поставиться на Win7 он попросил Дотнет45. И пойдет качать много мегабайт. А потом его ставить. А зачем там нужен дотнет? Для гуев. И все.
первый выкаченный билд не запускался у некоторых потому, что требовал MSVCR какой-то там версии, которая стояла не у всех.С MSVCR я тоже не понимаю смысла отдельно его устанавливать, особенно для игр, которые сами по себе порядка Гб занимают… Подозреваю, что там какие-то лицензионные заморочки от MS.
KIS17. Перед тем как поставиться на Win7 он попросил Дотнет45. И пойдет качать много мегабайт. А потом его ставить. А зачем там нужен дотнет?Ну и в чём проблема? 1 раз установится Дотнет45 и всё на этом, остальные программы уже не будут его качать.
P.S. Вы ещё про JRE забыли ;-)
Тасклист с веб-мордой можно приготовить на FreePascal, на D (dlang.org), на бейсике (Gambas) и на множестве других компилируемых языков. Можно даже на Java,
Не спорю, можно. На ассемблере, вероятно, тоже можно. Вопрос затрат времени и усилий.
Напоминаю, весь холивор начался со слов:
Как бы то ни было, но helloworld должен занимать несколько десятков байт, не более. На любой архитектуре, любой ОС и в любом году.
А вы предлагаете JVM, хоть и по 3 Мб…
Несчастный конфигуратор для охранно-пожарных приборов требует, не менее 4.0.
Качаю -> ставлю, т.к. моя неполноценная win7sp1Pro не имеет на борту dotnet 4.0 и более.
http://superuser.com/questions/298025/does-windows-7-have-net-4-installed-by-default
В картинках
http://stackoverflow.com/questions/909516/what-version-of-net-ships-with-what-version-of-windows
Обязательно вики
https://en.wikipedia.org/wiki/.NET_Framework#Release_history
В моём субъективном понимании — C# любят те, кто не понял С++. Ничего личного.
С++ — здоровенный швейцарский нож в составе: кремневый нож, каменный ударник, классный скальпель, почти функциональная пилка, программируемый синтезатор материи. Дополнительно можно купить изоленту, чтобы кремневый нож и скальпель не раскладывались во время программирования синтезатора.
ЁМНИП какая версия dotnet стоит на win7sp1?Из коробки 3.5, остальные должны были приехать с обновлениями, если Windows Update не отключён.
В моём субъективном понимании — C# любят те, кто не понял С++.Вы знаете о существовании только двух языков программирования? По-моему у C# и C++ из общего только буква C в названии. В остальном, языки из разных групп, с разной областью применения и т.п.
А насчет любви, на мой взгляд, C# любят те кому надоели:
— 5 страничные скрипты сборки
— 4 вложенных цикла чтобы всего лишь освободить память из под указателя на массив массивов указателей на массивы указателей.
Те, кому нравится:
— объявление массива строк 1 строкой
— освобождение памяти из под него 0 строками.
— уверенность в том, что int это всегда int32, на любой платформе, после любого компилятора.
Я не хочу никого убедить, что С# идеален, а C++ нет. У обоих есть свое применение и свои сильные-слабые стороны. Как и у множества других языков. Я вот не понимаю Java, хотя вроде бы задумка неплохая. Но я не кричу на каждом углу — «джава для тех кто не смог C#».
Но масса приложений, прошедшие через мои руки, в частности по видеонаблюдению, могли бы СПОКОЙНО обойтись без этого «поделия», т.к. функционал и так не изобилует чем-то сверхгениальным.
Меня просто субъективно раздражает подход контор разработчиков ПО: С++ хорош, но программеры дорого берут, возьмём студента на С#.
А в результате страдает пользователь:
— вот вам программа на 20 мегабайт, она всё может.
— хм, 30 метров и прямо всё может?
— ну да, это же C#
прошло 5 минут
— парни, ваша поделка просит dotnet, что делать?
— как что? скачать dot net и радоваться жизни(а в это время за глаза: вот ламерюга, такие вопросы тупые задаёт)
— так оно 300 метров весит, я со своим инетом неделю качать это буду! Мало того что за ОСь заплатил, следом за вашу поделку заплатил, теперь еще и за трафик платить?
— ну извините, что в вашем Мухосранске нет оптики, давайдосвидания!
Вы думаете я чушь несу? Нет! Это реальность из-за третьего транспортного кольца :(
С++ хорошЭто C хорош, а не С++, не путайте )))
CD/DVD-приводов и USB-разъёмов на местных компах тоже сроду не водилось, поэтому доставка ПО возможна только через интернет и только с оплатой за трафик 2 руб/Мб
А как же Вы, простите, собираетесь Windows Update без интернета организовать?
А вот есть такие системы видеонаблюдения, для которых софт существует только под Windows XP, и всякие ненужные разъёмы на системном блоке залиты эпоксидкой.
На этот же компьютер начальство желает поставить охранно-пожарную морду, написанную на этом вашем дотнете. И интернет к охранно-пожарке подключать нежелательно. Какой выход? Правильно — подключить сотовый модем и долго-нудно скачивать 300Мб .NET.
А как же Вы, простите, собираетесь Windows Update без интернета организовать?А причём тут это? .NET можно и напрямую поставить…
P.S. Вас кто-то из программистов, использующих .NET, обидел что-ли?
Разъёмы залиты, ethernet-доступа нет, интернета нет… Ну достаньте HDD из этого несчастного компа, подключите его к нормальному и скопируйте туда эти 67 Mb (именно столько занимает инсталлятор .NET 4.5.2) xD
Просто у меня дух противоречия бурлит, и не нравится идея таскания большого рантайма вслед за крохотным приложением.
У меня на телефоне, просто вдумайтесь, 4 Гб оперативной памяти. В ТЕЛЕФОНЕ!
На планшете за 3 доллара в месяц — 10 Гб 3G трафика. Это не опечатка, 10 ГИГАБАЙТ.
А вы все жметесь скачать 100 метров из тырнета…
21 век на дворе, е-мае! Виртуальная реальность на подлете!
Если трудно с инетом — скачал, принес на флешке (Нормальные девелоперы просто делают сетап и туда вкладывают msi дотнета, сетап делается за 15 минут в студии)
Если один раз поставить — легче простого.
Если много — есть замечательные штуки типа WSUS/SCOM и тому подобных корпоративных раздвалок софта.
При этом ставится 1 раз, а не так как C++ рантайм: минорная версия различается — и все, нужно рядом ставить 5 штук одинаковых, но не совсем.
Извините за излишнюю эмоциональность, но и в правду, хватит.
Если это «наколеночная» утилита, то не стоит ждать от нее удобства развертывания. Небось, кряки для игр, включающие 10 пунктов (включая правку реестра вручную и прочие увеселения) вас так не раздражают.
Если продакшен утилита — то должен быть сетап и все ставится одной кнопкой. Если сетапа нет — значит вы наняли не тех людей.
Просто у меня дух противоречия бурлит, и не нравится идея таскания большого рантайма вслед за крохотным приложением.Так в том то и дело, что ни .NET, ни JVM не таскают большой рантайм за крохотных приложением. Рантайм ставится системно, а не в рамках приложения. Сравните, например, с Electron-based приложениями, вот там действительно рантайм засунут в приложения. И если Вам нужно 5 приложений на Electron, то Вы 5 раз вынуждены будете скачать рантайм и иметь в системе 5 его копий.
C# — мой основной язык. Работаю на международном проекте. И хотелось бы сказать:
11 факт. Как бы не был крут язык, найдутся индусы, которые испоганят его в своем *овнокоде.
Во всяком случае программ на C# для Android'а с добавлением библиотек на Objective C скопилированных под ARM и нативных процедур «для ускорения» C# кода под x86 в одном продукте я у индусов не видел. У китайцев — легко.
10. Существуют независимые реализации языка C#, самые известные из них: Xamarin, dotGNU и Portable.NET.
Разьве Xamarin это реализация C#? реализация C# это компилятор mcs в Mono.
Жаль, не C-style Object Best Oriented Language.
Да, в свое время даже опубликовал статьи по разработке компилятора для этого языка :) Благодаря первой получил инвайн на хабр.
1) Подумал, что внутри что-то про день программиста;
2) Что-то про C++;
И ещё поздравление в двоичном коде -> из вашего сообщения у меня получилось «Друзья`pсpднемpпрограммистаqpɡ» (UTF-8)
Если исправить то:
11010000 10010100 11010001 10000000 11010001 10000011 11010000 10110111 11010001 10001100 11010001 10001111 00101100 00100000 11010001 10000001 00100000 11010000 10110100 11010000 10111101 11010001 10010001 11010000 10111100 00100000 11010000 10111111 11010001 10000000 11010000 10111110 11010000 10110011 11010001 10000000 11010000 10110000 11010000 10111100 11010000 10111100 11010000 10111000 11010001 10000001 11010001 10000010 11010000 10110000 00100001
«Друзья, с днём программиста!»Проверила еще раз. Вроде все верно про двоичный код. Надпись выглядит так: «Друзья, с днём программиста! :)»
0000010000010100 0000010001000000 0000010001000011 0000010000110111 0000010001001100 0000010001001111 00000000101100 00000000100000 0000010001000001 00000000100000 0000010000110100 0000010000111101 0000010001010001 0000010000111100 00000000100000 0000010000111111 0000010001000000 0000010000111110 0000010000110011 0000010001000000 0000010000110000 0000010000111100 0000010000111100 0000010000111000 0000010001000001 0000010001000010 0000010000110000 00000000100001
5. С# является первым компонентно-ориентированным языком программирования.) брехня:
Платформа .NET (и её родной C#) опубликована в 2002 году,
см. .Net Framework
Язык «Компонентный Паскаль» опубликован в 1999 году,
см. Компонентный Паскаль
Синтаксические конструкции нового языка в большинстве своем были позаимствованы из С++ (типы данных вроде структуры и перечисления) и из Visual Basic (использование свойств классов).тоже на мой взгляд были позаимствованы именно из Delphi. Да и Аннерс Хейлсберг получил награду не за один C#, а за создание Turbo Pascal, Delphi и C#.
С днем программиста, или 10 фактов о С++++