Как я познакомился с C# и едва не перешел на темную сторону Силы
Работая в Linux, я частенько сталкиваюсь с задачами автоматизации, которые мне успешно помогал решать язык программирования Ruby. И вдруг он мне разонравился. Встал вопрос: чем бы его заменить?
А почему разонравился Ruby?
Ruby я использовал для написания программ с интерфейсом командной строки, а когда требовался графический интерфейс, то использовал фреймворк Ruby on Rails, который написан на Ruby, основан на модели MVC (Model-View-Controller) и предназначен для создания Web-приложений. Другими словами, когда требовался графический интерфейс я делал локальное web-приложение. Такой подход имел несколько преимуществ. Например, моя программка для хранения заметок могла быть быстро выложена в интернет и доступ к заметкам я бы получил везде, где есть интернет (эдакий Evernote). И это без каких либо переделок. И самим Ruby я был вполне доволен.
Но со временем пришлось написать несколько десктопных приложений, которые как-то не очень хорошо смотрелись в браузере. Кроме того, программы на Rails неудобно распространять. Выложить в интернет и дать друзьям ссылку, конечно, можно, а если вывод в общий доступ не планируется, то возникают некоторые сложности. Помимо скриптов, жаждущим моего софта приходилось устанавливать Apache, MySQL, постигать особенности их настройки и изучать нюансы развертывания RoR-приложений. Стоит ли удивляться, что согласных пройти такое ради моей драгоценной программы набралось аж 0 человек? Поэтому Ruby остается для консоли, Rails для web, а вот для desktop-приложений пришлось искать что-то новое.
Как я искал что-то новое и нашел Си
Первой мыслью было использовать голый Си и какую-нибудь устоявшуюся графическую библиотеку к нему. Си я знал еще со времен раннего детства, достать графическую библиотеку в наше время не проблема, даже кроссплатформенную и под свободной лицензией. Но отговорили спецы: негоже, говорят, в наше время Си использовать. Ошибок с памятью не оберешься, да и разработка намного медленнее.
Признаться, я немного огорчился, ведь хотел использовать Си из-за следующих его преимуществ:
- согласно всем рейтингам, Си всё еще самый частоиспользуемый язык;
- быстрее Си только ассемблер;
- грамотные программы на Си легко переносить на любую ОС;
- Linux написан на Си;
- на Си написано огромное количество великолепнейших библиотек;
- и многое другое.
Но раз специалисты сказали не надо, значит не надо.
Cи++ и Linux
Следующим претендентом стал Си++. Плюсы:
- относительно высокая скорость работы программ на Cи++;
- ООП (впрочем, это сомнительный плюс).
Минусы:
- подвержен всем болячкам, которыми болел предшественник — Си;
- громоздкий синтаксис;
В общем, спасибо, не надо!
Java для линуксоида
В Яве понравилось многое и это был серьезный претендент на победу.
Плюсы:
- широкая распространенность (2е место после Си);
- кроссплатформенность;
- безопасность;
- наличие прекрасных свободных IDE типа Eclipse и NetBeans;
- и много других плюсов.
Минусы:
- тормознутость;
- громоздкий и своеобразный синтаксис;
- в комплекте с собственной программкой в 100 кб потребуется распространять и JRE (кажется, около 50 Мб);
- всё же не очень подходит для настольных приложений, скорее для сетевых;
- гадкая контора Oracle, владеющая патентами на Java;
- Ричард не благословил;
- и некоторые другие.
Долго думал начать ли освоение Явы, но как-то передумал.
C# в Linux
Слышен гул толпы. В воздух полетели помидоры. Да как автор статьи посмел упомянуть название продукции богомерзкой фирмы Микрософт на сайте, который преподносится как мир электронной свободы?! Выкрики неодобрения все громче. Слышны выстрелы.
Плюсы C#:
- отличные IDE как под Linux (MonoDevelop), так и под Windows (Visual Studio);
- обе IDE бесплатны (MonoDevelop вообще, а Visual Studio в редакции Express);
- удобный синтаксис;
- первосортная документация на русском;
- библиотеки практически на любую тему;
- легкость в освоении;
- управляемый код несет с собой много бонусов;
- скомпилированная в Windows программа на C# запускается в Linux без перекомпиляции и — о чудо — без всякого Wine;
- при распространении программы не нужно докладывать библиотеки и интерпретатор в комплект: .NET Framework входит в состав Windows, а Linux-дистрибутивы содержат Mono;
- изначальная ориентированность на desktop-приложения.
Минусы:
- тормознутость;
- продукция печально известной фирмы Microsoft;
- традиционно, стандарты поддерживаются так, что работают только с продукцией от Microsoft (классический пример — библиотека для работы по протоколу SMTP, которая работает не со всеми SMTP-серверами, а только от MS);
- постоянная угроза судебного преследования со стороны Microsoft из-за нарушения патентов;
- не очень высокая популярность (5е место в рейтинге);
- Ричард не благословил.
Какой язык программирования выбрать пользователю Linux?
Сейчас я пробую просто из любопытства C#, хотя и сомневаюсь, что буду действительно его использовать в практических целях. Если временно отбросить вопросы лицензирования, патентов и свободы, если забыть о предупреждениях RMS, то пока увиденное производит скорее приятное впечатление. Это касается как свободного Mono, так и родной реализации.
Настольное приложение на C# разрабатывается быстро, легко и удобно. Программа работает как в Linux, так и Windows. Серьезных проблем не заметил.
Помощь читателей
И вот здесь мне требуется помощь читателей. Я чувствую, что если мне тут же не сообщат о каком-нибудь серьезном недостатке C#, то я могу и полюбить этот язык, а если полюбить что-то от MS, то так не далеко и до перехода обратно на Windows. Друзья, спасайте линуксоида! ;)
Monodevelop для Linux — норм?
MonoDevelop — это полный отстой. Есть прекрасная IDE под названием SharpDevelop. Используется для разработки на C# и основана на MonoDevelop. К сожалению, работает только под Windows, но должно работать и под Wine. Сам MonoDevelop нелогичен, неудобен и часто падает. В топку.
Комментарии
Чингачгук
15 апреля, 2013 - 02:31
Та нормально! Главное глубоко не заходить!
MrBison
15 апреля, 2013 - 06:32
>> Ричард не благословил; (Java)
Вообще-то, уже благословил:
"Since this article was first published, Sun has relicensed most of its Java platform reference implementation under the GNU General Public License, and there is now a free development environment for Java. Thus, the Java language as such is no longer a trap."
И есть полностью свободные реализации Java (причём вполне неплохие) вроде OpenJDK.
pomodor
15 апреля, 2013 - 17:16
Если все так прекрасно, то почему тогда возникают вот такие иски? Или юристы Оракла пока не догадываются, что "most of its Java platform reference implementation under the GNU General Public License"? ;)
Leon
21 апреля, 2013 - 23:53
не-не-не.
Тут проблема не в приложении на Java, а в том, что Google в андроиде зафигачили альтернативную систему, с тем же синтаксисом (и с совсем другими правилами построения UI).
Программа на Andoid не запустится на jvm...
Это ведет к фрагментации, в отличии от свободных реализаций виртуальных машин.
Чингачгук
15 апреля, 2013 - 10:26
Я что-то не понял, разве под виндой не в exe компилирует, а такие на линуксе запускаются?
можно поподробней?
comrade
15 апреля, 2013 - 11:12
В .exe или .dll. Только там, внутри, исполняемого кода ровно столько, чтобы вызвать .NET, установленный в виндовсе. А остальное – код на языке IL, в который скомпилировался в среде разработки исходного кода любого языка программирования, поддерживаемого средой разработки C# (т.е., не обязательно собственно C#:-)
Т.е., что-то вроде явовских .jar-файлов получается — платформенно независимый код, который перед исполнением надо ещё дополнительно "докомпиллировать" для данной системы (процессор, ОС).
jar докомпиллируются (и запускаются) ораколовской или свободной ява-машиной, а дот-нетовские ".exe" – .NET либо MONO.
.NET и был микрософтовским ответом на JAVA. Но JAVA используют везде, а .NET так почти весь в винде и остался. Хотя есть MONO, конечно...
Наверное в .NET и MONO, кроме .exe, есть и какое-то своё расширение для кода на языке IL (без добавления exe-шной шапки – виндозного вызова .NET), не знаю...
А то бред получается (не согласуется как-то с заявленной мультиплатформенностью:-).
Ну в виндовсе-то exe-шник, видимо, запускает .NET, который его докомпиллирует. В линуксе же MONO, после установки, просто забирает все exe-шники себе, приходится их опять на wine потом переназначать. А если нужен именно MONO для исполнения, то "Открыть с помощью..."
Чингачгук
15 апреля, 2013 - 17:26
Не кидайтесь палками, но вот для сравнительно простых приложений не использовать ли простой Lazarus? Старый добрый паскаль в основе, кроссплатформенный, хотя и медленный, FPC. Зато прекрасно документирован на русском языке, ибо совместим с Delphi.
Правда релиз выпустили сравнительно недавно - в конце августа. До этого падала почти каждая сборка. Неприятный осадок остался с тех пор
pomodor
15 апреля, 2013 - 17:53
Можно, конечно, и Lazarus. Но хотелось бы, чтобы получаемые знания чего-то стоили, раз уж на изучение затрачивается время. И вот тут-то недостаток Lazarus и всплывает — что-то я не видел, чтобы был особый спрос на специалистов по Лазарусу. :)
Leon
21 апреля, 2013 - 23:57
Lazarus вещь хорошая -- перекомпилировал им все нужные паскалевские и дельфийские программы. Очень доволен, но..
Но размер исполняемого файла с GUI чересчур велик.. Порядка 7 мб. (~27 мб, если собран с отладочной информацией)
Чингачгук
18 апреля, 2013 - 13:58
Язык TCL и графическая библиотека Tk к нему.
pomodor
22 апреля, 2013 - 23:14
Tk не очень приятен на вид, если не сказать, что уродлив. А Tcl проклял Столлман.
Чингачгук
30 мая, 2017 - 12:04
По прошествии многих лет, мне интересно перешел ли автора на темную сторону ?
pomodor
31 мая, 2017 - 18:16
Нет, не перешел. Когда надо написать приложение под Windows для кого-то использую C# и очень доволен. Но тянуть это добро себе в Linux нет никакого желания. Я может быть и перешел бы на темную сторону Силы, но телеметрия и закладки в рантаймовых библиотеках оттолкнули от этого шага. Резюмируя: C# очень хорош, но разработчик сделал всё возможное, чтобы подорвать доверие к себе и к своей продукции.
Чингачгук
19 июля, 2017 - 01:30
Что значит телеметрия и закладки в вашем понимании
pomodor
19 июля, 2017 - 03:32
Это не в моем понимании, а это факт. Microsoft поймали за руку. VS линковала пользовательский код со своей библиотекой, которая сливала некие данные на сервера Microsoft. Получалось, что еще на этапе компиляции юзер получал в своей же программе троян. Потом это якобы убрали, но осадочек остался.
Чингачгук
20 июля, 2017 - 04:12
Я вот работал на visual studio очень долго и знал, что там не все так просто. Так как и в самой винде. Получается что майкрософтовским советом можно пользоваться только без доступа к интернету. Что бы не сливать туда всю информацию. Суть в том, что Э.Сноуден говорил, про метаданные. Но суть в том, что MS это правительственная контора в принцепе, я уверен, что и apple тоже. Если говорить о других ОС то я думаю там тоже собака закрыта и даже в линуксе. Именно поэтому в России и разработали свой ПК со своей архитектурой и ОС. Только проблема в том, что пока Америка будет диктовать всем условия, а Россия так и будет частично оккупированной страной, мы будем рабами инф. Технологий, а может и на всегда если захватят и разооружат нашу страну как Украину. Если это произойдёт то вообще никто не будет вас спрашивать что и как в разных ОС или IDE происходит, а до кучи вошьют чип в голову и будут следить за вами или управлять нервной системой. Вот весело будет ... Сами продали свою страну за идею против коррупции и получили её навсегда, да ещё и превратились в рабов.
Texnoline
7 декабря, 2019 - 16:49
уже рабы и много лет назад создали (более 30 лет уже, на 2020 год), к примеру: Internet/GSM/AGPS/видеокамеры в каждом магазе/магнитные полоски в банкнотах/RFID/WLAN c ограничением по мощности в радиоканале, российский проект - Эра-с которым ***Nas(в машины с 2016 года особенно для слежения за иномарками и их владельцами) и т.д.:)
опять же уже полным ходом вшивают под кожу радиоидентификацию, плюс даже животным ставят радиометки и даже теперь в РФ, с 2017 года (ну, типа чтобы потом опознать кто владелец:) ), у Маска одна компания "NeuraLink", уже через 10 лет выкатит массовую технологию нейромозгового интерфейса с лазерной технологией инсталляции, в черепные кости головы пользователя, так что все это уже есть и к 2030 году будет у каждого в черепе...:))) А если не захотите, то просто отберут ваше миграционное гражданство и усЁ, вы изгой демократического общества, заберут и счет и детей и собственность, а вдруг вы пособник терроризма и иностранный агент (скрываете свое местоположение и преступные помослы от правоохранительной системы своего государства), поэтому и не хотите идти в ногу с действующими законами и инициативами своего правительства, которое уже давно комерсы на услугах для мирового правительства!!!
Мы..., уже продали одну страну в 1991-93 гг., называлась СССР, а до этого 1915-17 гг., Российская империя, и еще до этого - 15 век, продавали: всю Сибирь и Дальний восток, продажные люди - столько веков продаем Русь Великую, совместно с сопредельными территориями и все не можем успокоиться!?:)))
Чингачгук
20 июля, 2017 - 04:39
Да кстати о моно там тоже как и VS есть телеметрия. Если моно совместим с VS под виндой, то скорее всего есть :вот что что а MS придумала Cшпрп, и этот язык очень хороший в плане простоты и много функциональности, но после чёрных пятян от MS плакать хочется, что использовать Cшарп для клиентских частей и веб разработки теперь не безопасно в плане того, что MS в любой прекрасный день скажет ты у нас на крючке если не хочешь что бы проект загнулся делай то то и тото. Что теперь использовать для веб хз пхп не очень хочу... Получается если мы Россия не создадим аналог программированию на своей платформе у нашей страны нет будущего. Её не станет.
Чингачгук
20 июля, 2017 - 04:48
Да получается что и СУБД нельзя использовать если оно полностью не протестированно ... Хотя postgree sql рекомендовано к использованию в РФ
Чингачгук
4 декабря, 2019 - 18:52
А что выбрали?
Чингачгук
1 ноября, 2017 - 21:58
А почему не рассматривал Python для реализации задач на Linux?
+ свободно распространяемый
+ много библиотек под различных задач
+ примеры вызова bash скриптов из Py
+ прост в освоении
+ платформонезависим и не требует компиляции , интерпретируемый
— не столь красивые IDE , но я остановился на PyCharm / Visual code
Чингачгук
2 ноября, 2017 - 00:28
(не автор статьи)
У Pyton плюсы как раз не в перечисленном
(да и всё не решу — есть ли они там вообще...),
но минусов — точно МНОГО
и каждый кардинально-фундаментальный, начиная как с этой извратской позиционной системы разделения блоков — само по себе повышающей риски багов и уязвимостей.
И он просто — слишком навязчиво змеино-алиенский.
В целом говоря, даже не согласен с "прост в освоении"...
В моём понимании С++ если игнорирувать его STL классы — вполне прост в освоении, даже с нуля когда обучение. Даже под ДОС. Ну, т.е.да тяжело в учении
— зато легко в бою.
Прост Pyton только если человек уже знает Си или хотя бы Pascal, а иначе у него как и у джавистов и т.д. — просто нет возможности учиться, учиться понимать что такое реальный режим процессора, например для написания MBR, я вот могу даже на СИ написать этот загрузчик, а вы?... (относится и к С++шникам взрощенных на MFC или Delphi) А, BIOS? Да вам там даже с ассемблером нечего делать, как впрочем и в MBR. В вашем понимании это что то эзотерическое — на другом плане мироздания, как и ядро ОС. И не говоря уже про то как оптимизировать ваш же софт даже на том же Pyton эффективней... Эти языки плодят полупрограммистов ничем не отличных от HTML-писалетей или там .BAT'ников(ну или никсовых аналогичных скриптов даже более функциональных).
Могу рассказать жизненный пример из отечественного игростроя. Была контора делали игры, сделали даже единственный и поныне в мире игру-симулятор кой чего, ну и помельче. И было это всё не на нормальном Си или хотя бы без компилерно-стандартных классов С++, а как полагается с убер классами STL и даже якобы ускоряющим глюке BOOST. И потому тормозило капец просто, графику приходилось покупателям снижать, а она и правда была неплоха хоть и однообразна, т.е.всем было жаль это делать. В общем, понятно руководить недоволен, продаж то меньше.
Но, урок — не вынес тогда.
Как пришло время делать очередную игру, решили слабать стратегию, а так как предыдущие команды С++шных криворучек давно разбежались — доверили дело главного программиста руководить имеющемуся программисту-ноухау-фэну хорошо себя зарекомендовавшего на мелких программах. И вот он как почитатель всего новомодного как я понял с разговора — настоял на кажется C#(но, Pyton тут будет где то тут же — в плане доп.защищённости и ноухау фич). Но, как позже я узнал — компания эта развалилась, и ещёпозже из описания участников тех собыий — причём по причине того что игру не доделали в срок и как выяснилось как полагается по ВНЕЗАПНОЙ причине — всё оказалось не так уж просто: тормозило всё — жутко, а судя по тому что невыпустили ЖУТКО даже снижение качества графики ползунком не могло значит помочь, хоть понятно что и оно не порядок. В итоге сроки и выделенные спнсорами деньги давно просрали конкурабельного продукта нету, то что есть — в мусорку. Всё фирма — туда же.
А, ведь его предупреждали невозможно на защищённом от ошибок програмирования языке написать вообще сколько то сопоставимое по производительности иначе говоря качеству_картинки&FPS ПО. В ответ как обычно — а, вот в (синтетических ахаха)[MS-проплаченных] тестах уже "доглани и (даже) обогнали" С++!
Ага, уже!
Смотрел я эти синтетические тесты... и просто голова вроде бы на месте, так что уже тогда было еубедительно, НО вот хотелось ему писать на ноу-хау — и ВСЁ!
Смтрел я позже, уже у других языков и даже якобы-несинтеческие от других аналогичных языков программирования — даже простенький программный 3D-отрисовщик с физической достоверностью освещения, сравнительная оптимизация на С++ там — от слова отсутвует... Потому что автор — тупо переписал всё 1в1 на С++ да ещё их гунолагоклассами стандарптными, и а что такое низкоуровнёвая оптимизации толи незнает, толи скорей был незаинтересован(как автор одного из таких языков). Вот народ смотрит — видит С++ аналог который ой даже больше, ну пусть на 100 строчек, а видит то — фигу. К слову, те же 3D-отрисовщики как заведомо требующие оптимизации — и на Си то никогда не писались, не говоря уже про С+++либы, только ассемблер или куча громадных вставок на нём. Это уже на тему (притом закономерного)отсутвия поддержки ассемблера у безопасных языков. Кстати, самую быструю 3D игру которую я (с ним, точней даже inline-hex кодами) видел, не поверите
— была на Pascal)))
Самые же лаговые, а то и иногда как раз реально изотерично-глючные игры — с вставками по типу скриптового функционала на безопасных языках LUA/JAVA (GSC со сталком на эту же мин наступили).
Как понял даже в Unreal3 — выкинули их продвинуто игровой скрипт до которых этим С# и Pyton — как рукой до неба... После чего их игры ошарашили всех сверхвысокой детализацией и отсутвием лагов даже сней, к которым просто ранее все уже привыкли в ранних версиях движка. Хоть конечно модингу это хуже, но сколько ни видел пиара у разных компаний на дружелюбность мододелам — по факту же: разработчикам не выгоден он, вплоть до того что часто даже ранее открыто обещанный SDK не дают.
И ещё по наблюдениям: если и разработчики игр использовали всё что угодно вместо С'ей — то только потому что считается что так тупо дешевле, глядя на зарплату программистов, вот только не учитывалось что правка багов от неумеющего программировать элементарное — затем всегда куда дороже обходится (и сталк — тому лучшее подтверждение, а какие там примитивный код всего в скриптах — всё надо переделывать для полноценного модинга, и так везде где виде л эти скрипы в играх, так программист на них не тольок лажает а и туп оприори, в итоге и сама механика жизни включая разфуфыренный a-life — жутко примитивное и нерасширяемое ГУАНО!).
А, уж про безопасность хотя бы мнимую, как с С'ями, для прочих типов ПО — и вообе говорить нечего,
уж если в "защищённом" Java — постоянно-периодически откровенно наглые дыры находят,
то что говорить про остальные языки которые вообще никто не проверяет просто из-за меньшей распространённости и ведь самому в дизассемблере почти нереально сделать ибо тупо ассембре ещё оже надо знать, а даже если и знаешь забыть и учить p-code'вский.
Комментировать