Pull to refresh

Comments 73

Да, это и подразумевается. Как раз описано во втором факте.
С# является одним из двух чистых объектно-ориентированных языков программирования

Хм, даже интересно стало увидеть ваше определение чистого ООЯП и какой же ещё 1 язык под него подпадает?

Спасибо. :) Исправила этот факт.
Вот кстати автор Ruby назвал свой язык «истинно объектно-ориентированным», из-за того что в нем не было простых типов.
Таких языков очень много, Smalltalk, Self, Io, etc. Однако, Ruby, как и C#, не является чистым ООЯП, т.к. поддерживает и другие парадигмы «из коробки».
> 10. Существуют независимые реализации языка C#, самые известные из них: Xamarin, dotGNU и Portable.NET.
DotGnu давно уж мертв, и можно не считать
Ну и xamarin не реализация, а платформа вокруг моно для кроссплатформенности.

Ну по сути mono=xamarin, т.к. основные контрибьютеры все — из компании :-).

Алсо, не Xamarin, а mono, которая у него внутри.

7. Не смог найти ни одной фотографии Andy.
Там похоже еще 3 картинки с талисманами были, но они кануть в лету.
Остальные картинки изображали Spuds Mackenzie, Morris the Cat, McGruff, судя по названиям файлов. Изображения этих персонажей найти совснм не сложно.
Название C# произошло при проведении параллели между языками C# и C++. Рекурсивненько.
Для меня тут (кроме маскота) новым оказался один факт:
> 5. С# является первым компонентно-ориентированным языком программирования.
я-то считал, что это был [пост]Виртовский Component Pascal, а нет, до-диез вышел на год раньше. Впрочем и у того, и у другого были предшественники в виде Borland Object Pascal/Delphi и Oberon-2 соответственно.
Насколько я знаю, любители Component Pascal считают именно его истинным компонентно-ориентированным языком.
Я думаю, что C# означает «чуть более высокоуровневый C»
Для меня С# означает: скачайте еще 250-300 мегабайт dotnet, чтобы этот helloworld заработал.

вы живете стереотипами из 2007ого.

Как бы то ни было, но helloworld должен занимать несколько десятков байт, не более. На любой архитектуре, любой ОС и в любом году. Если это не так — это проблемы архитектуры и ОС, а не стереотипы из какого-то там года,

Кому должен? Вы пишите хеллоу ворлды в продакшн? Или вы пишите большие rich интерфейс приложения, где одних ассетов может быть на пару мегабайт? Всё зависит от контекста.

200-300 мегабайт рантайма типа незаметны на фоне пары мегабайт ассетов?

Проблема в том, что офигительный процент этих «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гб телефоны, недорогие терабайтные диски (а то и ссд)… а мы до сих пор будем вспоминать зеленую траву из юности?

Borderlands 2, Unigine Heaven — в основном коде использования C# нет, как-то обошлись классическим С++. Но на C# написаны там простенькие лаунчеры (в случае Unigine, размер требуемого dot-net для лаунчера заметно превышает основное приложение.).
Как бы то ни было, но helloworld должен занимать несколько десятков байт, не более. На любой архитектуре, любой ОС и в любом году.
На правах человека, который для прикола реально писал программу, размером меньше 1 кб, замечу, что Вы несёте чушь…
Для примера возьмём Windows, как наиболее распространённую ОС… Даже если взять 32-битную версию, то есть определённый формат исполняемых файлов, есть импорт kernel32.dll, чтобы хоть что-то осмысленное сделать… есть длина строки и имени вызываемой функции в конце концов. Всё это занимает гораздо больше нескольких десятков байт. Даже если насиловать компилятор кастомными размерами секций, то меньше 512 байт у Вас небитый exe-файл сделать не получится. А helloworld будет занимать уже не меньше 768 байт. А если прибавить к этому размер самой kernel32.dll, то уже на мегабайты счёт пойдёт.
А когда Вам надо забить гвоздь в стену вы вызываете специальную бригаду строителей с отбойными молотками? Можно конечно, но не лучше ли использовать обычный молоток и самому вбить гвоздь?

Шарп разрабатывался не что бы «с миром здороваться» и для своих целей очень и очень удобен.
Можно пример в студию?
Только если мы уже заговорили про неиспользование фреймворков по 100-200-300 Мб, чур и средства ОС тоже не использовать.
Да и драйвер видеокарты тоже весит 100 метров. Его тоже в топку.
А ну и БИОС — тоже фреймворк можно сказать. Прерывания нельзя.
Удачи!
Почему средства ОС не использовать? Давайте так. Не использовать то, чего не стоит по-умолчанию на свежей системе. Я не против дотнета, но когда продукт на двадцать строчек хочет 40 мебагайт 4.5 дотнета — это меня пугает.

Впрочем, дегенеративная привычка ВизуалСтудиостов не менять свойства проекта, из-за чего он потом требует редистры разных версий — такое же раздражение вызывает. Вот честно, я лучше полуторамеговый экзешник скачаю, чем 150-килобайтный, который еще и msvcr120.dll будет требовать на пустой машине.
Ок, у меня Windows 8.1, там уже есть .NET 4.5 из коробки. Helloworld занимает у меня меня 4,5 Кб. Он будет работать на любой современной версии винды без дополнительных танцев (Современная в моем понимании — официально поддерживаемая вендором). При этом хеловорлд на C# осилит даже ребенок, я бы классе в 5 точно осилил. Предложите свой пример. Только давайте без встроенных в ОС скриптовых языков, мы сейчас говорим о компилируемом приложении.

В ответ предлагаю встречный вашему «размер хеловорлда» тест. Я на .NET смогу тасклист с вебмордой накидать за пару часов. И задеплоить его в продакшен на ажур в тот же день. Следуя вашей логике — любой язык должен позволять сделать то же самое за сопоставимое время. Возьмите язык, который по-вашему превосходит C# в написании хеловорлдов, и сделайте то же самое за сутки.

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

Кроме того, время не стоит на месте тоже. Даже ребята-электронщики уже забили на ассемблер и, тем более, двоичные коды, и вовсю пилят прошивки для микроконтроллеров на Си и даже JS. Хотя это тоже требует каких-то уступок: будь то эффективность, быстродействие или размер прошивки.
Речь не о том, чтобы «не использовать C#», речь о «не использовать его для приложений на 10 строк».

А насчет «хелловорлда на для 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, не обвешивая программу полноценным стомегабайтным рантаймом (применяем либо Avian JVM (вес исполняемого файла ~3Мб), либо скомпилировать при помощи gcj — компилятора из набора gcc (~3Мб), либо с помощью ExcelsiorJet (~1Мб) ).
Тасклист с веб-мордой можно приготовить на FreePascal, на D (dlang.org), на бейсике (Gambas) и на множестве других компилируемых языков. Можно даже на Java,

Не спорю, можно. На ассемблере, вероятно, тоже можно. Вопрос затрат времени и усилий.

Напоминаю, весь холивор начался со слов:
Как бы то ни было, но helloworld должен занимать несколько десятков байт, не более. На любой архитектуре, любой ОС и в любом году.

А вы предлагаете JVM, хоть и по 3 Мб…
Так, справедливости ради, дотнет стоит по умолчанию на свежей системе, начиная с Windows 7 SP1, емнип.
ЁМНИП какая версия dotnet стоит на win7sp1?
Несчастный конфигуратор для охранно-пожарных приборов требует, не менее 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 в названии. В остальном, языки из разных групп, с разной областью применения и т.п.
Давайте не страдать геронтофилией. Win7 уже все. Даже если она и стоит до сих пор на куче компов по всему миру, это не значит что нужно разрабатывать софт под устаревшие платформы. В вебе давно этот вопрос решили: Убогая фича? В топку, deprecated! Не поддерживается браузером и делай что хочешь.

А насчет любви, на мой взгляд, C# любят те кому надоели:
— 5 страничные скрипты сборки
— 4 вложенных цикла чтобы всего лишь освободить память из под указателя на массив массивов указателей на массивы указателей.
Те, кому нравится:
— объявление массива строк 1 строкой
— освобождение памяти из под него 0 строками.
— уверенность в том, что int это всегда int32, на любой платформе, после любого компилятора.

Я не хочу никого убедить, что С# идеален, а C++ нет. У обоих есть свое применение и свои сильные-слабые стороны. Как и у множества других языков. Я вот не понимаю Java, хотя вроде бы задумка неплохая. Но я не кричу на каждом углу — «джава для тех кто не смог C#».
мажу лицо фэйспалмовыл маслом, «хэлоуворлд» это же сарказм, извините что тэг забыл добавить.

Но масса приложений, прошедшие через мои руки, в частности по видеонаблюдению, могли бы СПОКОЙНО обойтись без этого «поделия», т.к. функционал и так не изобилует чем-то сверхгениальным.
Меня просто субъективно раздражает подход контор разработчиков ПО: С++ хорош, но программеры дорого берут, возьмём студента на С#.
А в результате страдает пользователь:
— вот вам программа на 20 мегабайт, она всё может.
— хм, 30 метров и прямо всё может?
— ну да, это же C#
прошло 5 минут
— парни, ваша поделка просит dotnet, что делать?
— как что? скачать dot net и радоваться жизни(а в это время за глаза: вот ламерюга, такие вопросы тупые задаёт)
— так оно 300 метров весит, я со своим инетом неделю качать это буду! Мало того что за ОСь заплатил, следом за вашу поделку заплатил, теперь еще и за трафик платить?
— ну извините, что в вашем Мухосранске нет оптики, давайдосвидания!

Вы думаете я чушь несу? Нет! Это реальность из-за третьего транспортного кольца :(
Видимо, в Мухосранске до сих пор сидят на Windows XP, но при заказе разработки забыли об этом упомянуть… CD/DVD-приводов и USB-разъёмов на местных компах тоже сроду не водилось, поэтому доставка ПО возможна только через интернет и только с оплатой за трафик 2 руб/Мб или сколько там оно было 10 лет тому назад…

С++ хорош
Это 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
Никто меня не обидел. И более того: среди виденных мною разработчиков я могу выделить трёх очень грамотных и вдумчивых людей, и все трое, по странному стечению обстоятельств, работают с .NET.
Просто у меня дух противоречия бурлит, и не нравится идея таскания большого рантайма вслед за крохотным приложением.
Не понимаю я вас, вот честно.
У меня на телефоне, просто вдумайтесь, 4 Гб оперативной памяти. В ТЕЛЕФОНЕ!
На планшете за 3 доллара в месяц — 10 Гб 3G трафика. Это не опечатка, 10 ГИГАБАЙТ.
А вы все жметесь скачать 100 метров из тырнета…
21 век на дворе, е-мае! Виртуальная реальность на подлете!

Если трудно с инетом — скачал, принес на флешке (Нормальные девелоперы просто делают сетап и туда вкладывают msi дотнета, сетап делается за 15 минут в студии)
Если один раз поставить — легче простого.
Если много — есть замечательные штуки типа WSUS/SCOM и тому подобных корпоративных раздвалок софта.
При этом ставится 1 раз, а не так как C++ рантайм: минорная версия различается — и все, нужно рядом ставить 5 штук одинаковых, но не совсем.

Извините за излишнюю эмоциональность, но и в правду, хватит.

Если это «наколеночная» утилита, то не стоит ждать от нее удобства развертывания. Небось, кряки для игр, включающие 10 пунктов (включая правку реестра вручную и прочие увеселения) вас так не раздражают.
Если продакшен утилита — то должен быть сетап и все ставится одной кнопкой. Если сетапа нет — значит вы наняли не тех людей.
Кряки я уж лет 8 не использую, apt-get — наше всё + Steam;
А утилита была коробочная (т.е. это не сосед Вася наваял нетленку), поставлялась вместе с пожарными и охранными датчиками, повлиять на разработчиков я не могу, ибо не я ставил им задачу.
Просто у меня дух противоречия бурлит, и не нравится идея таскания большого рантайма вслед за крохотным приложением.
Так в том то и дело, что ни .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.
> проект изначально назывался COOL (C-style Object Oriented Language)
Жаль, не C-style Object Best Oriented Language.
Видимо тогда возник бы вопрос об авторских правах к аббревиатуре.

Ну вообще-то язык Cool тоже существует.

Ееее, я знал, что кто-то тут проходил замечательный курс Compilers и познакомился с COOL'ом!

Да, в свое время даже опубликовал статьи по разработке компилятора для этого языка :) Благодаря первой получил инвайн на хабр.

Эх, я обманулся заголовком дважды:
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
«Друзья, с днём программиста!»
Получился сюрприз. :)

Проверила еще раз. Вроде все верно про двоичный код. Надпись выглядит так: «Друзья, с днём программиста! :)»
Вы правы! Поспешил с сообщением и не заметил, что первый 0 сделал число восьмеричным)

Это тоже входит в один из плюсов C#.

21 век а все еще ascii используете
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
там UTF-8, а не ASCII, а у вас UTF-16. поэтому всё в порядке, мы в 21 веке)
В 5 пункте (про
5. С# является первым компонентно-ориентированным языком программирования.
) брехня:
Платформа .NET (и её родной C#) опубликована в 2002 году,
см. .Net Framework
Язык «Компонентный Паскаль» опубликован в 1999 году,
см. Компонентный Паскаль
Более того,
Синтаксические конструкции нового языка в большинстве своем были позаимствованы из С++ (типы данных вроде структуры и перечисления) и из Visual Basic (использование свойств классов).
тоже на мой взгляд были позаимствованы именно из Delphi. Да и Аннерс Хейлсберг получил награду не за один C#, а за создание Turbo Pascal, Delphi и C#.
Кстати, на Channel 9 есть видео (3 минуты) с Аннерсом о том, что его вдохновило на создание C#.
Да, стоит уточнить, что это первый компонентно-ориентированный язык из семейства С. Спасибо!
Sign up to leave a comment.