С# живет по принципу «всякая сущность есть объект». Его причисляют к объектно-ориентированным, а точнее объектным, языкам программирования. «Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода» – так принято характеризовать его. Однако скептики сомневаются как минимум в его безопасности.

Сторонники C# называют его самым мультипарадигменным, универсальным, продвинутым и удобным в использовании языком программирования. Учитывая тот факт, что за ним стоит платформа Microsoft .NET, число таких сторонников достаточно велико.

Предки


Далекие предки C# появились еще в 60-х годах. Все началось с появления языка B, который в 1969 году был создан коллективом разработчиков из Технологического института Массачусетса (MIT). Главным автором B является Кен Томпсон. Тогда команда работала над операционной системой UNIX. Уже существовавший язык PL/I, применявшийся в то время для мэйнфреймов производства компании IBM, был достаточно громоздким и меньше подходил для поставленной задачи. Поэтому ученые решили создать новый язык, который и получил название B. Он является типичным представителем ранних императивных языков программирования.

После B, как это ни странно, последовал С, который был изобретен в 1972 году. Основой для нового языка послужил сам B.

Создателями C были Кен Томпсон и Денис Ритчи, которые работали в исследовательской лаборатории компании AT&T (AT&T Bell Telephone Laboratories). В 1971 году Ритчи начал создавать расширенную версию B. Сначала он назвал её NB (New B), но когда язык стал сильно отличаться от B, название сменили на C. B расширился за счет явного использования типов, структур и ряда новых операций.

По поводу возникновения языка Си Питер Мойлан в своей книге «The case against C» писал: «Нужен был язык, способный обойти некоторые жесткие правила, встроенные в большинство языков высокого уровня и обеспечивающие их надежность. Нужен был такой язык, который позволил бы делать то, что до него можно было реализовать только на ассемблере или на уровне машинного кода».


Изображение из книги «Язык Си»: M. Уэйт, С. Прата, Д. Мартин

В 1984 году Бьярне Страуструп (Bell Labs) выступил с проектом языка С++. Когда Страуструп занимался исследованиями в фирме, ему потребовалось написать несколько имитационных программ для моделирования распределенных вычислений. SIMULA-67 — объектно-ориентированный язык – мог бы стать идеальным инструментом для решения подобных задач, если бы не его сравнительно низкая скорость выполнения программ.

Если вам приходится выбирать между написанием «хорошего» и «быстрого» кода, значит, здесь что-то не так. Потому что «хороший» код должен быть «быстрым», – объясняет Страуструп свою позицию в интервью.

Так был создан язык программирования С++, первоначально получивший название «Си с классами» (С with classes). Название «С++» придумал Рик Мэсчитти. "++" — это оператор инкремента в С, который как бы намекает на то, что язык С++, нечто больше, чем просто С.

C#


Microsoft решила отметить Миллениум выпуском новых программных продуктов. К 2000 году компания подготовила промышленные версии новых компонентных технологий и решений в области обмена сообщениями и данными, а также создания Internet-приложений (COM+, ASP+, ADO+, SOAP, Biztalk Framework). В поддержку этих новшеств Microsoft выпустила инструментарий для разработки приложений – платформу .NET. Она также объединяла «под одной крышей» несколько языков программирования, что было в новинку для того времени.

Еще одним новшеством платформы .NET была технология активных серверных страниц ASP.NET (Active Server Page). С её помощью можно было относительно быстро разработать веб-приложения, взаимодействующие с базами данных.

Язык программирования C# был создан специально для ASP.NET. На C# полностью была написана и сама ASP.NET.



Название «Си шарп» (от англ. sharp — диез) несет «сакральный» смысл. Знак «#» (в музыкальной нотации читается как «диез») означает повышение высоты звука на полтона. С другой стороны, название «C#» получается путем следующей «эволюционной цепочки»: C > C++ > C++++(C#), так как символ «#» можно составить из 4-х знаков «+».
Вследствие технических ограничений на отображение (стандартные шрифты, браузеры и т. д.) и того, что знак диез ? не представлен на стандартной клавиатуре, знак # был выбран для представления знака диез при записи имени языка программирования. Это соглашение отражено в Спецификации Языка C# ECMA-334. Названия языков программирования не принято переводить, поэтому язык следует называть по-английски «Си шарп».
Авторами этого языка программирования стали Скотт Вилтамут и Андерс Хейльсберг — создатель Турбо Паскаля и Дельфи, перешедший в 1996 году в Microsoft.
По одной из версий, он вынашивал замысел нового языка и даже новой платформы (которая сейчас носит название .NET), еще работая в компании Borland.
C# поддерживает все три «столпа» объектно-ориентированного программирования: инкапсуляцию, наследование и полиморфизм. Кроме того, в нем была реализована автоматическая «сборка мусора», обработки исключений, динамическое связывание.

Сравнение с Java


Как и Java, C# изначально предназначался для веб-разработки, и примерно 75% его синтаксических возможностей аналогичны языку программирования Java. Его также называют «очищенной версией Java». 10% позаимствовано из C++, а 5% – из Visual Basic. И около 10% C# – это реализация собственных идей разработчиков.



Несмотря на весьма существенные различия между компонентной объектной моделью COM (основного стандарта Microsoft для компонентного проектирования и реализации программного обеспечения) и моделью Java, языки программирования имеет довольно много общего.

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

Во-первых, в отличие от JVM, IL не привязан к одному языку программирования. В составе, предварительных версий Microsoft.NET имеются компиляторы языков Си++, Си#, Visual Basic. Независимые разработчики могут добавлять другие языки, создавая свои компиляторы в IL-код.

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

Кик Рэдек из Microsoft считает С# более сложным языком, чем Java. По его мнению, «язык Java был построен таким образом, чтобы уберечь разработчика от выстрела в собственную ногу» (англ. «Java was built to keep a developer from shooting himself in the foot»), а «С# был построен так, чтобы дать разработчику пистолет, но оставить его на предохранителе» (англ. «C# was built to give the developer a gun but leave the safety turned on»).

Версии


Работа над C# началась в декабре 1998 года. Проект получил кодовое название COOL (C-style Object Oriented Language).

Первая бета-версия C# 1.0 увидела свет летом 2000 года, а в феврале 2002 вместе с Microsoft Visual Studio вышла окончательная версия языка. Так как C# сочетает лучшие стороны предшествующих ей популярных языков программирования в виде C, Java и C++, программистам легко осуществить переход на C#, основываясь на знаниях любого из перечисленных языков.

Главным отличием от предшественников стала возможность написания компонентов. В C# появились такие средства, как события, методы и свойства.

В 2005 году вышел окончательный релиз версии C# 2.0. Это укрепило его позиции на рынке. Добавление новых возможностей, таких как анонимные методы, обобщения, частичные и параметризованные типы значительно расширили возможности применения C#.

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

Версия 3.0, вышедшая в 2008 году, позволила C# вырваться вперед в «гонке вооружений» языков программирования. Среди нововведений C# 3.0 – язык интегрированных запросов (LINQ); не явно типизированные переменные и методы расширения; Lambda-выражения, которые назначают реализацию кода делегатам с помощью нового, более простого синтаксиса. Особенно «отличились» Lambda-выражения вместе с языком интегрированных запросов.

Анонимные типы переменных позволили избежать громоздкости и откровенного неудобства при описании переменных, дав возможность объявлять новый тип непосредственно при ее создании. Новинкой в C# 3.0 также стали так называемые «ленивые вычисления», которые производят необходимые вычисления только при запросе нужных соответствующих данных.

В 2010 году была выпущена версия C# 4.0. Ее главным дополнением к предыдущим версиям стали именованные и необязательные аргументы. Первые дают возможность привязки аргумента и параметра по имени, а вторые позволяют указать аргумент, который используется по умолчанию, для каждого параметра. Не менее важное новшество – тип dynamic. Он позволяет осуществлять проверку на соответствие типов объектов не на этапе компиляции, а непосредственно во время выполнения программы.

Параллельно появились новшества в .NET Framework 4.0 – библиотека распараллеливания задач (TPL) и параллельный вариант языка интегрированных запросов (PLNQ). Их поддержка позволяет осуществить параллельность выполнения кода в компьютерах с многоядерными процессорами или несколькими одноядерными.

Версия C# 5.0 появилась в 2012 году. В ней было реализовано совсем немного нововведений:

• Асинхронные методы
• Операция получения сведений о вызывающем объекте



Версия C# 6.0


Эта версия была выпущена через три года после выхода пятой версии — в 2015. Ее основные новшества:

• Инициализация свойств со значениями

В C# 6.0 можно инициализировать свойства со значениями. Это поможет избежать ошибки с null и пустыми значениями свойства.

• Интерполяция строк

Каждый день нам приходится сталкиваться с конкатенацией строк. Кто-то в основном использует оператор “+”, кто-то — метод string.Format(). Но проблемы с ним всем известны: при слишком большом количестве параметров тяжело понимать, что означают каждое число – {1}, {2}, {3}. В C# 6.0 придумали новую возможность, которая должна объединить достоинства обоих методов.

• Использование лямбда-выражений

В C# 6.0 свойства и методы можно определять через лямбда-выражения. Это сильно уменьшает количество кода.

• Импорт статических классов

Все статические члены класса могут быть определены с помощью другого статического класса. Но нам приходится постоянно повторять имя данного статического класса. При большом количестве свойств приходится много раз повторять одно и то же.

В C# 6.0 появилась возможность импортировать с помощью ключевого слова using статические классы.

• Null-условный оператор

C# 6.0 вводит новый так называемый Null-условный оператор (?.), который будет работать поверх условного оператора (?:). Он призван облегчить проверку на NULL значения.
Он возвращает значение null, если объект класса, к которому применен оператор, равен null.

• nameof оператор

В C# 6.0 оператор nameof будет использоваться, чтобы избежать появления в коде строковых литералов свойств. Этот оператор возвращает строковый литерал передаваемого в него элемента. В качестве параметра можно передать любой член класса или сам класс.

• Await в catch и finally блоках

До C# 6.0 нельзя было использовать в блоках catch и final оператор await. Ее можно применять для освобождения ресурсов или для ведения логов ошибок.

• Фильтры исключений

Фильтры исключений были в CLR, но только в VB. Теперь данная возможность появилась в C#, и можно накладывать дополнительный фильтр на исключения.

• Инициализация Dictionary

В C# 6.0 добавлена возможность инициализации Dictionary по ключу значения. Это должно упростить инициализацию словарей.

Также Microsoft улучшила новый компилятор в плане производительности.



C# 7.0


В 2016 году стало известно о новшествах готовящейся версии С# 7.0:

• Бинарные литералы

• Локальные функции

Они позволяют структурировать код, например, в стиле JavaScript.

• Сопоставление с образцом (Pattern matching)

Теперь можно использовать разнообразные средства для сопоставления.

• Условия и использование объектов в переключателях

Маленькая революция для разработчиков. Теперь switch почти ничем не ограничен. Можно использовать сопоставления.

• Записи

Автоматическое создание простых классов с произвольными полями.

• Кортежи

Иногда хочется вернуть несколько значений из метода. Для упрощения этой задачи в C# 7 были добавлены кортежи и литералы кортежей.

Перспективы С#


«Все больше компаний для крупных проектов выбирает платформу Microsoft .NET, пишет в своем блоге Михаил Флёнов. – И тут все просто, Java потерял свободу, когда ушел под крыло Oracle. До этого перехода Sun тратил огромные ресурсы на этот язык и много делалось ради свободы, открытого кода и просто Java. С переходом под крыло Oracle язык все же потерял, стал развиваться медленнее.

В случае с .NET, Microsoft делает намного больше усилий. Язык развивается все ещё достаточно серьёзно, компания выпустила бесплатный редактор кода под все платформы, и как раз начинает вкладываться в открытость, делает все, что освобождает .NET.

Трудно сейчас сказать, что будет с Windows в будущем, но пока что эта платформа останется самой популярной. А тут C# набирает популярность. Майкрософт продолжает вкладываться и в свою мобильную платформу и если у них эти действия принесут плоды, то C# может ещё более серьёзно выстрелить», заключает он.
Поделиться с друзьями
-->

Комментарии (174)


  1. senia
    27.10.2016 00:36
    +30

    Вы не могли бы уточнить пару моментов?

    Во-первых, в отличие от JVM, IL не привязан к одному языку программирования.
    Scala, Kotlin, Ceylon, JRuby, Clojure, Groovy и многие другие jvm языки не противоречат этому утверждению?
    Во-вторых, IL предназначен не для программной интерпретации, а для последующей компиляции в машинный код.
    Здесь подразумевается AOT или JIT? AOT компиляторы для java тоже есть.
    Java потерял свободу, когда ушел под крыло Oracle.
    Уже есть аналог JCP для .NET? Или в каком смысле тут «свобода?».
    С переходом под крыло Oracle язык все же потерял, стал развиваться медленнее.
    Как раз с переходам в Oracle Java снова начала развиваться.


    1. GrigoryPerepechko
      27.10.2016 01:05
      +19

      +1. Фанбойство изо всех дыр. Наши иконы самые красивые.


      1. rumkin
        27.10.2016 11:27
        +7

        Это не фанбойство, а джинса от редакции Хабра.


    1. Source
      27.10.2016 01:28
      -3

      Scala, Kotlin, Ceylon, JRuby, Clojure, Groovy и многие другие jvm языки не противоречат этому утверждению?

      Я думаю, в исходном утверждении имелось в виду, что возможности IL не ограничены возможностями C#. Ну, к примеру, было бы так, что в Java нет хвостовой рекурсии, а в Clojure — есть. Но получается, что в Clojure её тоже нет, потому что в Java она не особо нужна, а ради какой-то Clojure в JVM никто ничего добавлять не будет. Т.е., к сожалению, все JVM-языки вынуждены подстраиваться под Java и вторичны к ней.


      Здесь подразумевается AOT или JIT?

      Возможно, имели в виду .NET Native, а так и AOT и JIT тоже есть.


      1. Sirikid
        27.10.2016 04:07
        +5

        Только вот хвостовая рекурсия то есть, в Scala и Kotlin, уверен что и в Clojure есть (Lisp без хвостовой рекурсии плохой Lisp). А есть она потому что её запросто можно реализовать на стадии компиляции в байт-код.
        UPD: В Clojure есть хвостовая рекурсия, но немного кривенькая в плане внешнего вида.


        1. Source
          27.10.2016 11:59
          +1

          UPD: В Clojure есть хвостовая рекурсия, но немного кривенькая в плане внешнего вида.

          Давайте уж по-честному, recur — это воркэраунд, необходимый как раз из-за отсутствия оптимизации хвостовой рекурсии на уровне байт-кода.
          Поддержать что-то на стадии компиляции в байт-код — это тоже вариант, но это как раз то, что я назвал подстройкой под Java. Хотя ниже вспомнили случай (JSR 292), когда JVM всё-таки реализовала что-то не для Java. Но это скорее редкость по сравнению с CLR/DLR, на развитие которых существенное влияние оказывают, что C#, что F#, что VB.NET, что Iron-языки.


        1. potan
          27.10.2016 12:36
          +1

          Есть преобразование хвостовой рекурсии в цикл. Оптимизация хвостовых вызовов — существенно более мощная техника. В Clojure она реализуется с помощью «трамплина» — функция, вместо того, что бы вызвать другую функцию перед завершением, возвращает замыкание, которое вызывается кодом, вызвавшим первую функцию. Полезно это не только экономией стека, но и возможностью раньше собрать мусор, на который были ссылки из локальных переменных.
          Теоретически, специальные команды, как в IL, для TCO не требуются — JIT вполне мог бы распознать хвостовых вызов и откомпилировать его соответствующим образом. Но, к сожалению, оптимизация хвостовых вызовов противоречит модели безопасности Java, в которой проверка разрешений на операцию предполагает анализ стека вызовов и исчезновение из него фрейма некой функции означает потенциальную уязвимость.


      1. gandjustas
        27.10.2016 04:44
        +3

        Даже под Java не правят JVM, все фишки делаются на уровне компилятора, что ограничивает возможности.
        Например generics.


      1. senia
        27.10.2016 09:56
        +4

        а ради какой-то Clojure в JVM никто ничего добавлять не будет. Т.е., к сожалению, все JVM-языки вынуждены подстраиваться под Java и вторичны к ней.

        JSR 292: Supporting Dynamically Typed Languages on the JavaTM Platform
        Это самое известное нововведение в Java за последнее время. Заметьте: даже в названии цель на другие ЯП под JVM.
        Жаль видео с последнего Joker еще не в свободном доступе — там было очень хороший доклад от Charles Nutter: «Let's Talk About Invokedynamic».


    1. BalinTomsk
      27.10.2016 18:20

      --Как раз с переходам в Oracle Java снова начала развиваться.

      Недавно писали что Оракл прикрыла группу занимаюшyюся развитием языка.


      1. taujavarob
        27.10.2016 19:56

        Java мёртв?


        1. FSA
          27.10.2016 20:28

          Помню как в детстве слушал в новостях по телеку про Java в середине 90-х (в 1997 по 2000 я выпл из телека). Сейчас смотрю в его сторону, но никак не решаюсь сделать шаг.


          1. taujavarob
            27.10.2016 22:04
            +1

            >Сейчас смотрю в его сторону, но никак не решаюсь сделать шаг.

            А чего туда идти то?

            Весь фан сейчас на стороне JavaScript.


      1. senia
        27.10.2016 20:07
        +1

        Если не затруднит, поделитесь, пожалуйста, ссылкой. Я видел только панические слухи про Java EE, но это бы языку повредило не сильно.


  1. Terras
    27.10.2016 02:18
    +1

    Кстати, есть ли на C# аналог Hadoop'а?


    1. gandjustas
      27.10.2016 04:49
      +1

      что есть "аналог Hadoop"?


      Распределенный map-reduce был в виде исследовательского проекта Dryad с linq-синтаксисом. Но на него забили, так как есть hadoop.
      В интернетах можно найти кучу опенсорных map-reduce на .NET.


      Но вообще в политике MS работа с данными делается не в .NET коде, а в SQL Server и Azure.


    1. fox_anthony
      27.10.2016 06:13

      SCOPE (Structured Computing Optimized for Parallel Execution) или как он теперь называется — U-SQL. Код исполняется в кластерах Cosmos.


  1. Terras
    27.10.2016 02:20
    -1

    P.s. В свое время выбрал C#, а не Java, так как в статье на лурке Java прямо очень сильно хаяли и опускали.


    1. avost
      27.10.2016 08:24
      +4

      Разве это не повод выбрать как раз яву? ;)


  1. gandjustas
    27.10.2016 02:30
    +5

    Мне больше всего доставило сравнение C# с Java и C, хотя реально больше всего было надергано из делфи. Платформа .NET является продолжателем идей Java, но язык C# на Java похож только синтаксисом, как и все C-подобные языки.


    1. Idot
      27.10.2016 12:56

      Сравнение C — вполне логично, потому что C# происходит не просто напрямую от Delphi, а через C++ Builder, который изначально вобрал в себя фишки от Delphi, являясь диалектом C++ и развитием Borland C++.


      1. gandjustas
        27.10.2016 17:30
        +2

        Именно напрямую делфи. Хейсберг — автор языка C# внезапно также автор языка делфи. Именно в делфи были придуманы свойства и события, которые перекочевали в C#. WinForms является почти калькой с VCL, а com-interop очень похож на делфи.
        С-подобный синтаксис выбрали, чтобы охватить большую аудиторию.


  1. Fen1kz
    27.10.2016 03:51
    -17

    Как-то довелось фиксить проект на C#. Переплевался с Visual Studio и процесса компиляции. Виснет, сложность UI приближается к 3DsMax'у, не может менять код во врмя дебаггинга, итд. Так ещё и возможность делать классы разбитые на несколько, в разных файлах и папках, классы с частью кодогенерации и пихать в один файл несколько интерфейсов и классов (в т.ч. partial). В общем не знаю, возможно проект был говнокодистым, а к ИДЕ привыкаешь, но как-то нет, даже Юнити не вдохновила.


    1. gandjustas
      27.10.2016 04:41
      +5

      Это когда было?


      Edit&Continue уже лет 5 существует, если не больше.
      Сложность UI такая же, как у всех IDE, с чем сравниваешь?
      Зависания при дебаге бывают раз в год. В 2008 студии было часто, в последних версиях почти не сталкивался.


    1. NeoCode
      27.10.2016 09:07
      +5

      По моему, Visual Studio вообще лучшая IDE.
      Я вот с Eclipse недавно плевался… нет классического понятия «файл проекта», файлы исходников где-то толи кэшируются то-ли что, в результате если изменить их снаружи (в текстовом редакторе) то с удивлением можно увидеть что изменения в самом эклипсе не отображаются (или отображаются не сразу).

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


      1. nerumb
        27.10.2016 09:11
        +3

        У меня как раз сложилось обратное впечатление, после Eclipse в VS было очень непривычно и неудобно работать (тут думаю на вкус и цвет как говорится..). Но лучше обоих Intellij Idea, ее не пробовали?


        1. whirl
          27.10.2016 09:56

          Ну для сторонников Intellij Idea для разработки на .Net есть Rider

          Но это конечно восхитительно в качестве среды разработки под .Net использовать IDE написанную на Java


          1. INC_R
            27.10.2016 12:07

            На джаве ведь только «фронтенд» и дополнительные инструменты, а внутри решарпер. Студия тоже не целиком на шарпе написана, но живем же как-то )


          1. CepbluBoJlk
            27.10.2016 12:59
            +5

            Как вы задолбали с этим высказыванием, VS написана на C++/C + C# и скорее всего еще зоопарк всего, тем не менее она используется для многих других языков, есть IntelliJ Platform, на которой написано много разных IDE для других языков, которые к джаве имеют отношение чуть менее чем никакое (PhpStorm, WebStorm, RubyMine, AppCode, PyCharm...) саблаймы, VS Code / Atom. И ни где я не слышал что люди жалуется на то что IDE написана на другом языке, только когда говорят про райдер. Какая разница на чем это написано если это упрощает разработку, и никто не заставляет писать вас на джаве / котлине. Так же когда вы пишите что то на С в саблайме вам плевать что он написан на плюсах и питоне. Есть же бизнес, есть отличный кроссплатформенный UI, есть классный решарпер, и почему бы не взять лучшее из этих 2 миров, чем переписывать один из них на c# просто для чистоты?


          1. kekekeks
            27.10.2016 14:17

            У них там в фоне на Mono крутится цельнотянутый ReSharper, с которым Idea общается по хитрому протоколу.


            1. indestructable
              27.10.2016 17:37

              Вроде для Студии тоже экспериментировали с ReSharper Server, хз, чем закончилось.


      1. evocatus
        27.10.2016 14:37

        А я бы хотел иметь возможность просто написать один .c файл (даже не .cpp) и просто его скомпилировать из IDE. В MSVS ттак нельзя. Извольте создать «проект», даже если внутри будет 1 файл.


        1. KirillFormado
          27.10.2016 14:54

          Для таких целей, если не охота возиться с созданием проекта, а надо только быстро что то набросать или проверить, есть два варианта. Использовать linqPad или REPL встроенный прямо в студию C# Interective.


        1. Free_ze
          27.10.2016 15:19

          А где вы хотели бы хранить, скажем, параметры для компиляции?


          1. asdf87
            27.10.2016 16:15

            Наверное это должен был бы быть 2-ой файл )


          1. DrPass
            27.10.2016 16:22

            В общем случае их нигде можно не хранить. Достаточно два дефолтных набора опций для отладки и релиза, и хранить их в конфигурации IDE. И только если какой-то проект потребовал специфических настроек, оверрайдить в нём эти самые дефолтные опции.


            1. Free_ze
              27.10.2016 16:32

              А где хранить оверрайженые значения?


              1. DrPass
                27.10.2016 16:34

                Ну вот когда они нужны, тогда надо создавать какой-то отдельный файл для них, конечно же.


                1. Free_ze
                  27.10.2016 17:45

                  Они нужны всегда.

                  Другой вопрос, зачем вам полноценная IDE, заточенная на работу с проектами, если есть VS Code? Да даже просто скрипт из двух команд и текстовый редактор.


                  1. DrPass
                    27.10.2016 18:08
                    +1

                    Почему всегда? В общем случае как раз нет. У разработчика для всех проектов на одной платформе обычно один и тот же набор опций для отладки, и один и тот же под релиз.

                    Другой вопрос, зачем вам полноценная IDE, заточенная на работу с проектами, если есть VS Code?

                    Я сейчас не имею в виду вопрос, в чём лучше писать простые софтинки. Фломастеров очень много и все разные на вкус. Я отвечал исключительно на вопрос, где хранить настройки для компиляции проекта.


                    1. Free_ze
                      28.10.2016 10:10
                      +1

                      В общем случае как раз нет. У разработчика для всех проектов на одной платформе обычно один и тот же набор опций для отладки, и один и тот же под релиз.

                      У какого разработчика? Для каких всех проектов? У меня, к примеру, разные проекты с разными конфигами.

                      Я понимаю, что вы имеете ввиду хранение настроек на уровне пользователя, а не проекта, но тогда как проект безопасно переносить? Как сложить его в СКВ? Причем, у разных девелоперов обязательно будут разные настройки, т.е. то, что лежит с проектом (а оно будет лежать обязательно) будет несовместимо.


                      1. DrPass
                        28.10.2016 10:27

                        У какого разработчика? Для каких всех проектов? У меня, к примеру, разные проекты с разными конфигами.

                        Я написал «обычно». Это значит, не у всех, а у большинства. Вот вам зачем разные проекты с разными конфигами? Что у вас там должно отличаться, кроме папки для сборки, и с какой практической целью?

                        Я понимаю, что вы имеете ввиду хранение настроек на уровне пользователя, а не проекта, но тогда как проект безопасно переносить?

                        А что такое «безопасно переносить»? Если у вас на разных машинах отличаются опции компиляции, это не повлияет на безопасность переноса. Если у вас разные версии библиотек, их перечень в конфиге ситуацию не улучшит.


                        1. Free_ze
                          28.10.2016 10:51

                          Я написал «обычно». Это значит, не у всех, а у большинства.

                          У большинства разные проекты, поэтому специфика — это правило, а не исключение.
                          Что у вас там должно отличаться, кроме папки для сборки, и с какой практической целью?

                          Сборка — это многоэтапный процесс. Последовательность и состав этапов разный. + деплой.

                          А что такое «безопасно переносить»? Если у вас на разных машинах отличаются опции компиляции, это не повлияет на безопасность переноса.

                          Я хочу иметь возможность склонировать проект с репозитория, чтобы он собирался так, как задумывал автор, и не аффектил мне на остальную систему.


                          1. DrPass
                            28.10.2016 11:09

                            У большинства разные проекты, поэтому специфика — это правило, а не исключение.

                            Я там написал ещё и «на одной платформе», специально для этого «правила».

                            Сборка — это многоэтапный процесс. Последовательность и состав этапов разный. + деплой.

                            Ну вот видите, вы ушли от ответа с многозначительным намёком :) Я знаю, что в некоторых случаях в крупных проектах сборка предполагает много разных этапов, а мейкфайл разрастается до длиннючего скрипта. Иногда. А также я прекрасно знаю, что в 99% случаях такого не бывает.

                            Я хочу иметь возможность склонировать проект с репозитория, чтобы он собирался так, как задумывал автор, и не аффектил мне на остальную систему.

                            Я в упор не пойму, почему вы считаете, что наличие конфига вам позволит собрать именно то, что задумывал автор, и не будет аффектить на вашу систему, а отсутствие конфига, если в нём нет необходимости наоборот, нарушит задумку автора и может как-то что-то вам поломать. Где логика-то?

                            И вдобавок напрочь забыть о том, что речь шла о простых проектах а-ля «собрать на коленке».


                            1. Free_ze
                              28.10.2016 18:26

                              Ну вот видите, вы ушли от ответа с многозначительным намёком :)… я прекрасно знаю, что в 99% случаях такого не бывает.

                              Я предпочел не вдаваться в дебри. Если это не нужно лично вам, то не говорите за всех.
                              Допустим, есть веб-проект, состоящий из нескольких сервисов, которые нужно сначала паковать, а затем деплоить отдельно, с накатыванием миграций на базу, и прочее. Это типичная ситуация для такого рода проектов.
                              Пример другой: десктопное приложение, которое нужно собрать в пакеты по различным редакциям.

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

                              Я в упор не пойму, почему вы считаете, что наличие конфига вам позволит собрать именно то, что задумывал автор

                              Вы не понимаете, для чего нужны настройки проектов?

                              отсутствие конфига, если в нём нет необходимости
                              речь шла о простых проектах а-ля «собрать на коленке».

                              Для хэлловордов можно использовать другие инструменты или вообще другие языки. IDE ориентированы на упрощение работы с крупными проектами, я уже говорил об этом.

                              Не ругайте микроскоп за то, что он соскальзывает с гвоздя.


                              1. DrPass
                                28.10.2016 22:41

                                Это типичная ситуация для такого рода проектов.

                                Кстати, какого рода? ASP.NET? Или EJB для деплоя под вебсферу? Или может быть PHP? А может быть, вы что-то под докер себе представляете? Видите, в общем случае ни разу не типичная. Деплоить несколько сервисов отдельно, с разными опциями упаковки, с миграциями… Можно подумать, все только чем-то таким и занимаются.

                                Пример другой: десктопное приложение, которое нужно собрать в пакеты по различным редакциям.

                                А тут типичная ситуация — это одна редакция. Мало кто компилирует разные сборки под разные редакции, и не от хорошей архитектуры.

                                Для хэлловордов можно использовать другие инструменты или вообще другие языки.

                                Эээ… какие инструменты и какие языки-то? Мы вообще, если вы внимательно почитаете, никакие конкретные инструменты и языки не упоминали.
                                Кстати, если вы в контексте статьи, про C# говорите, то тем более, миграция базы на новую версию по феншую сейчас делается где-нибудь в инициализаторе EF, т.е. непосредственно в коде. А не в скрипте мейкфайла.


                                1. Free_ze
                                  01.11.2016 09:20

                                  Кстати, какого рода?

                                  Веб и интерпрайз.

                                  Мало кто компилирует разные сборки под разные редакции, и не от хорошей архитектуры.

                                  Те, кто делает на софте деньги достаточно часто так поступает. Кстати, выступает стимулом к модуляризации архитектуры, так что она только выигрывает.

                                  Эээ… какие инструменты и какие языки-то?

                                  Которые можно компилировать в Visual Studio из коробки, если вы внимательно почитаете.

                                  тем более, миграция базы на новую версию по феншую сейчас делается где-нибудь в инициализаторе EF

                                  Вы удивитесь, но не все используют миграции EF и даже сам EF. Феншуй у всех свой.


        1. indestructable
          27.10.2016 17:40
          +1

          using System;
          
          public class Program {
              public static void Main() {
                  Console.WriteLine("Hello World");
              }
          }

          csc Program.cs /out Program.exe


          1. evocatus
            27.10.2016 22:32

            Я спрашивал про C, а не про C#.
            Да, наверное, самый лучший способ — через командную строку.


        1. ad1Dima
          28.10.2016 18:01

          VS15 поддерживает FolderProjects вроде именно то, что вы ищете.


      1. Lure_of_Chaos
        27.10.2016 16:18

        нет классического понятия «файл проекта»

        есть, .eclipse, или что в Вашем понятии «файл проекта»?
        если изменить их снаружи (в текстовом редакторе) то с удивлением можно увидеть что изменения в самом эклипсе не отображаются

        так было раньше, теперь eclipse спрашивает, обновить ли файл

        структуру файлов проекта тоже неплохо было бы стандартизировать

        что тут говорить, если структура меняется от версии к версии одной IDE, и вообще, это связало бы разработчикам руки


        1. NeoCode
          27.10.2016 18:41

          Структура проекта должна быть в нормальном формате — xml, а лучше json. Стандартизирована должна быть основа, каркас. Если какому-то хитровывернутому компилятору или IDE нужно что-то еще — никто не запрещает добавлять свои кастомные теги и атрибуты. Но в целом стандартизация должна быть, чтобы переход между IDE и компилятрами и одновременное использование нескольких IDE и компиляторов было максимально простым и прозрачным. Да, всякие *make — это костыли концептуально родом из 70-х годов, их даже упоминать не стоит.
          Тот же M$ в своей студии меняет форматы vcproj (для С++, насчет C# не знаю) каждый раз c выпуском новой студии. Зачем? Неужели структура проекта это что-то такое архи сложное, что не продумать сразу? Структура любого языка программирования как такового будет на порядки сложнее, и ничего — языки проектируются и существуют десятилетиями.


          1. Free_ze
            28.10.2016 10:25

            Тот же M$ в своей студии меняет форматы vcproj (для С++, насчет C# не знаю) каждый раз c выпуском новой студии.

            Для решения таких проблем для C/C++ проектов существует CMake.

            Зачем? Неужели структура проекта это что-то такое архи сложное, что не продумать сразу?

            Этот формат помимо настроек сборки отвечает за фишки студии. Добавляются фишки — меняется формат. Но студия способна конвертировать старые форматы проектных файлов в новые.
            Что же касается самой сборки, есть же MSBuild, сценарии к которому должны быть обратно совместимы.

            насчет C# не знаю

            Для .NET Core конфиги в общем случае в json-формате (global.json для солюшена и project.json для проекта), хотя студия и добавляет свой .sln/.xproj, но это скорее конфиги самой студии, ничто не мешает собирать проект штатными кроссплатформенными средствами.
            Классические .NET-проекты нет особого смысла рассматривать с точки зрения кроссплатформенности, но MonoDevelop может кушать .sln/.csproj файлы.


            1. KirillFormado
              28.10.2016 12:13

              И от xproj с project.json скоро откажутся и переведут все на msbuild с csproj. Хотя до конца еще не известно как все в итоге будет выглядеть.


              1. Free_ze
                28.10.2016 18:30

                Буду признателен, если вы поделитесь ссылками на материалы об этом.


                1. KirillFormado
                  28.10.2016 18:49

                  оригинал и перевод на хабре


                1. KirillFormado
                  29.10.2016 13:40

                  Вот тут белее свежая информация. Обещают убрать package.xml и упростить формат проектного файла. И сделать необязательным добавление каждого файла в csproj. Плюс поддержку со стороны cli. Вообщем взять все хорошие идеи связанные с xproj и project.json, но сделать унифицированное решение для всех типов проектов. Ну все это уже только в vs15.


    1. dFarkhod
      27.10.2016 10:24
      +5

      А я вот, наоборот, влюблён в Visual Studio. Ну никак немогу привыкнуть к Android Studio и Eclipse.


  1. Refridgerator
    27.10.2016 07:13
    +6

    Примечание к изображению ноты.
    Если читать по русски c?, это прозвучит как «си диез». А изображена — до диез. А всё потому, что нота «до» обозначается буквой «С». Такой вот любопытный нюанс.


    1. ad1Dima
      27.10.2016 08:14
      +1

      Поэтому никто и не читает c? как «си диез».


    1. timiskhakov
      27.10.2016 10:47
      +7

      Не могу не привести замечательный слайд из доклада DreamWalker о C#7 на прошлогоднем DotNext:

      Слайд


  1. NLO
    27.10.2016 07:55

    НЛО прилетело и опубликовало эту надпись здесь


    1. ad1Dima
      27.10.2016 08:15
      +9

      В соседней статье он же назвал C# не модным, это просто холиварный вброс для поддержания комьюнити.


    1. denismaster
      27.10.2016 08:19
      +1

      Не соглашусь. Да, новый .NET Core делался с прицелом на облака и работа с Azure позволит иметь всегда актуальную версию. Однако ничто не мешает его завести на любом другом хосте, будь то любой VDS с линуксом=)
      И вряд ли это изменится в ближайшие года)


    1. NeoCode
      27.10.2016 09:09

      Ну в принципе ничего плохого в этом нет. Зачем держать зоопарки разных версий если есть одна последняя?


    1. KotV4
      27.10.2016 09:22
      +6

      Здесь пахнет «толстым» троллингом.

      Вместо этого вам будет предоставлена шикарная альтернатива: only current .Net в облаке Azure.

      Запах усилился!


    1. Xandrmoro
      27.10.2016 15:28

      > Уже очень скоро у вас будет утрачена возможность использовать свой хост.Net и выбирать версионность, дату апгрейда, кастомные настройки. Вместо этого вам будет предоставлена шикарная альтернатива: only current .Net в облаке Azure.

      В чьём воспалённом воображении?


  1. kulikovDenis
    27.10.2016 09:22
    +4

    А где же трогательная история, о том как майкрософт пыталась узурпировать Java, выпускаю свою не совместимую ява машину?
    И только когда им сан в судах им дала по зубам, майкрософт придумала конкурирующий проект.
    Один J# чего стоит.
    Без этого история будет не полной.


    1. MAXHO
      27.10.2016 09:28
      +5

      Зачем такие подробности в записках проповедника?


    1. kryvichh
      27.10.2016 10:24
      +1

      Может Вам еще историю про то, как к кампусу Borland прислали лимузин за Хейльсбергом?
      Developers, developers, developers! :)


    1. Idot
      27.10.2016 12:29
      +1

      А ещё была J++.
      Было очень интересно и познавательно прочитать историю J++ и J#.


  1. GreenBee
    27.10.2016 09:44
    +25

    Автор, мне кажется, что Вы не разбираетесь в теме и написали эдакий «реферат из Интернета».

    Если уж мы говорим об истории, то как можно было настолько облажаться?

    1) Начинать историю с языков B/С/С++, это просто бред — таким же образом можно любой «Си-подобный» язык сюда приплести. Ничего общего, кроме схожих синтаксических конструкций, и то в самом начале.
    2) А вот Java как раз стоило упомянуть в качестве предка. Ведь именно с нее все началось.
    3) Ваш график Hystory of ASP.NET & C# & Visual Studio… где вы его взяли? Это же бред сивой кобылы. ASP.NET Web Forms оказывается появилась в 2010 году. На чем я интересно в 2004-ом сайты делал?
    4) ASP появился задолго до .NET и не надо его путать с ASP.NET
    5) С чего Вы взяли, что C# был создан «специально для ASP.NET»?

    Не могу дальше читать этот бред


    1. NLO
      27.10.2016 10:07

      НЛО прилетело и опубликовало эту надпись здесь


    1. NikitOS9
      27.10.2016 12:10

      >Ведь именно с нее все началось
      до нее были Self, Strongtalk и тд…

      но затем всему настала Java (с)

      История проекта Strongtalk

      ссылка не работает, тогда вот так

      http://ru.smalltalk.wikia.com/wiki/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_Strongtalk


    1. Idot
      27.10.2016 12:34

      Начинать историю с языков B/С/С++, это просто бред

      С чего это бред?
      Историю Российской Федерации — тоже начинают с Киевской Руси
      Потому что Российская Федерация официально считается правопреемницей Киевской Руси, точно так же C# позиционирует себя преемником языка C.


      1. GreenBee
        27.10.2016 12:40
        +3

        Во-первых, где именно СиШарп позиционирует себя как преемник языка Си? Откуда Вы это взяли?

        Во-вторых, если хотите аналогию, то считая Киевскую Русь аналогом языка Си, аналогом языка СиШарп может быть какая-нить страна в африке, где решили сделать государственным русский язык (а точнее взяли только основные конструкции, но добавили кучу своих слов) и назвались «РусьШарп».
        Еще раз повторяю: ничего общего у языков Си и СиШарп, кроме похожего названия и некоторых синтаксических конструкций, нет.


        1. Idot
          27.10.2016 12:50
          +2

          ничего общего у языков Си и СиШарп, кроме похожего названия и некоторых синтаксических конструкций, нет

          Что-то мне Ваши рассуждения (и вообще сам спор между C# и Java) по фанатичности напоминают спор между российскими и украинскими патриотами.

          Как я писал ниже: C# происходит от C++ Builder, являясь его дальнейшим развитием.
          Надеюсь, Вы не станете утверждать что «между C++ и C++ Builder нет ничего общего», и что «C++ Builder происходит от Java»?


        1. kekekeks
          27.10.2016 14:20
          +1

          Вообще говоря при переключении в unsafe-режим и использовании везде struct, stackalloc для массивов на стеке и Marshal.AllocHGlobal вместо malloc получается вполне себе сишка. Разве что указатели на функции просто так не сделать без управляемой кучи. Тут возникает основной вопрос: но зачем?


        1. Master_Dante
          27.10.2016 14:25
          -2

          >> Во-первых, где именно СиШарп позиционирует себя как преемник языка Си?

          Я не специалист по JAVA но есть ли в ней указатели и прямая работа с памятью? C# компилируется и исполняется только в нативе, никаких ВМ в нем нет, а как насчет JAVA?


          1. TargetSan
            27.10.2016 15:00

            sun.misc.unsafe?


            1. Master_Dante
              27.10.2016 17:10
              -2

              using System;
              using System.Runtime.InteropServices;

              namespace ConsoleApplication2
              {
              unsafe class Program
              {
              static void Main(string[] args)
              {
              Print();
              Call(Print);

              Console.ReadLine();
              }

              static void Print()
              {
              Console.WriteLine(«Hello world»);
              }

              static void Call(Action fnc)
              {
              int bp = 10;
              var ptr = (int*)&bp;
              var tmp = *(int*)Marshal.GetFunctionPointerForDelegate(fnc).ToPointer();

              for (int i = 0; i < 20; i++)
              {
              ptr++;

              *ptr = tmp;
              }

              return;
              }
              }
              }

              Вызов функции через замену адреса ret слабо на яве? )).


              1. TargetSan
                27.10.2016 17:39
                +5

                Прежде всего, я не явист. Я просто знаю, что там есть этот пакет. К тому же, Java много где работает в режиме интерпретации байткода. Так что нет, нельзя хотя бы поэтому.


                Далее, по поводу "слабо". Подобные финты с манипуляцией стеком применяются крайне редко и в нативном коде. Причём пишутся на ассемблере, под конкретную архитектуру-платформу-ABI. Ваш же пример напоминает мне старую шутку про троллейбус из буханки.


                Теперь конкретно по примеру.
                Вы можете потенциально расстрелять стек своим неумелым топтанием вверх.
                Ваш код всё сломает нафиг при переходе даже на x64 (не говоря о других платформах), по двум причинам сразу.
                Вы рискуете отстрелить себе пол-программы по самые гланды если случится инлайнинг.
                Вы рискуете сделать непонятно что если JIT вдруг не произойдёт.
                Из-за слома return address ваша программа вылетит в никуда.


                Короче, вы написали то, что считается отборнейшим говнокодом даже на С/С++.


                1. Master_Dante
                  27.10.2016 18:07
                  -1

                  Простите но это и было что то вроде шутки, если у вас плохое чувство юмора это не моя проблема. Что касается вызов функции через подмену адреса, само собой я набросал этот код за 2 минуты. Если все делать правильно, то это займет больше времени. Но нет цели что бы это делать. Я сделал этот пример для того, что бы показать уровень возможностей по сравнению с JAVA и не для чего больше. Кто то в этой ветке сказал что при желании из C# можно сделать C. И он прав, можно даже ассемблерные вставки делать при желании.


                  1. TargetSan
                    27.10.2016 18:15

                    Знаете, шутка неудачная. Вы пытались показать, насколько крут C#. В результате вы показали, что на нём можно легко и непринуждённо отстрелить себе ногу по самое лицо. Зачем мне тогда C#, если я могу точно так же стрелять себе по ногам в родном С++, без привязки к MS и рантайма в 200Мб? :)


                    1. Master_Dante
                      27.10.2016 18:36

                      Все очень просто вы получаете скорость разработки как у C#, а производительность как у C++. И шутка про рантайм 200мб. уже не усместна, во первых есть уже Core в которой собирается только набор используемых пакетов. Есть так же предустановка .Net во всех новых МС-ОС. Да и 200мб это не теже 200мб что и 20 лет назад, можно скачать и поставить при необходимости. Скоро также выйдет .Net Native который изначально компилится в натив.


                    1. Master_Dante
                      29.10.2016 10:53

                      C# действительно крут, и он круче Java. Хотите можем провести эксперимент, на простой задаче. Дано массив байтов, заполненный случайными данными. Необходимо просуммировать все элементы этого массива. Вы сделаете на Java а я сделаю на C#. Есть функция Sum(byte[] buf), нужно замерить время ее выполнения. А после мы оценим производительность и красоту кода ).


                      1. TargetSan
                        29.10.2016 22:29

                        Я написал выше, что не явист. Точнее, я знаком с явой на начально-среднем уровне. Мой основной посыл — вы написали крайне неудачный код чтобы продемонстрировать "крутизну" C#. И предложенную вами задачу я буду писать вообще на Rust. На крайняк на С++.


                        1. Master_Dante
                          30.10.2016 01:00

                          Ну как до дела дошло так мы включаем задний ход, а пофлудить на ровном месте любой может. Читая длинные терады про выстрелы себе в ногу, на код который само-собой разумеется никто и никогда не стал бы использовать…


                          1. TargetSan
                            30.10.2016 01:13

                            Тогда зачем вы вообще его написали? И где задний ход? Я вам что-то по поводу явы обещал? Я написал что в яве это не сработает из-за прогрева JIT как минимум, и что вы написали говнокод — неудачно "проиллюстрировали крутизну" любимой вами технологии. Голым С .NET не станет никогда, хотя бы из-за разных ниш. Станет равен по производительности в тривиальных числодробилках — да. Но одним перформансом на оных числодробилках сыт не будешь.


                            Кстати, https://habrahabr.ru/post/313694/?reply_to=9884716#comment_9881538 ломает ваше утверждение что .NET выполняется всегда нативно.


                            1. Master_Dante
                              30.10.2016 01:42
                              -1

                              Нет не ломает, а только подтверждает. Боже с какими некомпетентными людьми приходится разговаривать. Да еще и как гориллы бьющими себя кулаками в грудь. А что вы на другую тему переходите? К чему бы еще придраться… я в ваш горшок не написал?


                              1. TargetSan
                                30.10.2016 01:57
                                +1

                                Эмм… где подтверждает? Там явное указание что .NET Micro Framework работает в режиме интерпретатора.
                                Оке, в своём примере вы имели в виду конкретно Win32, C calling convention. Пусть это будет скетч. Более того, вы хотели показать, что в Java нельзя выполнять хаки с адресом возврата и вообще прямой манипуляцией памятью, а в .NET — можно. И таки да, показали. Теперь у меня вопрос. Вы серьёзно считаете это преимуществом дотнета? Возможность делать ASM-style хаки? Можете не отвечать — подумайте для себя. А с уровнем своей компетенции я как-нибудь сам разберусь. Засим откланиваюсь.


                                1. Master_Dante
                                  30.10.2016 13:09
                                  -1

                                  >> Эмм… где подтверждает?

                                  1. Для начала можно пользовать логикой. Я вот как подумал: «Виртуальная машина на контроллере, да ладно???».
                                  2. Найти эту статью: https://geektimes.ru/post/274094/
                                  3. Прочитать этот текст:
                                  Прошивка для конкретного устройства тоже появляется в результате выполнения большого количества шагов:

                                  Компиляция нативного кода в .obj файлы.
                                  Компиляция нативного кода в .lib файлы.
                                  Линковка нативных .obj и .lib файлов в бинарный файл.
                                  Выполнение Link/Locate над бинарным файлом для получения образа XIP для flash.


                                  Будьте здоровы.


                                1. Master_Dante
                                  30.10.2016 13:17
                                  -1

                                  >> Вы серьёзно считаете это преимуществом дотнета?

                                  Есть целый класс задач, которые невозможно выполнить без указателей. Я уже тонко намекал вам(предложение просуммировать байты), что некоторые алго работают значительно быстрее, когда есть указатели. Случай из жизни, внезапно в одном проекте пришлось использовать MemoryMapped файлы, у реализации API в .Net есть стойкий запах индусятины и очень жуткие лаги. Выручило то что в C# есть указатели, ох как это выручило вы даже не представляете.


                                  1. DrPass
                                    30.10.2016 19:41
                                    +1

                                    > Есть целый класс задач, которые невозможно выполнить без указателей.
                                    … и среди них нет ни одной, где платформа с управляемым кодом, даже с возможностью делать хаки, была бы подходящим инструментом.


                                    1. Master_Dante
                                      31.10.2016 00:01

                                      В последнее время вышли .Net Core, Micro Framework, скоро выйдет .Net Native, так же есть ASP.Net. Вам не кажется, что C# уже перерос уровень нишевой применимости? Посмотрите и веб, и десктоп, и с мобилками, и с контроллерами работает донет. Уверен что скоро появится C# с возможностью делать ASM вставки, и писать на нем драйвера, возможно это произойдет вместе с .Net Native, возможно позже. Но уже сейчас видно, что C# это больше чем просто язык в какой то одной области. Писать на одном языке везде это прекрасно.


                                      1. DrPass
                                        31.10.2016 01:21

                                        Вам не кажется, что C# уже перерос уровень нишевой применимости?

                                        Какую вы нишу имеете в виду? C# с момента своего появления позиционировался как «хедлайновый» язык для решений на платформе Майкрософт. С тех пор не поменялось ровным счетом ничего. Хотя и есть реализации для других платформ, их применение как было экзотикой, так и осталось. Вы можете делать решения под Android, но вы все равно возьмете Java или C++ под NDK. Вы можете делать решения под Linux, но вы все равно возьмете… что-то другое. Так что ниша, вернее, группа ниш применений C# достаточно стабильна.


          1. GreenBee
            27.10.2016 15:02
            +1

            > C# компилируется и исполняется только в нативе

            Если это утверждение, то у меня для Вас плохие новости.


            1. Master_Dante
              27.10.2016 16:42
              -3

              Что еще один молодняк хочет поспорить? Да это утверждение, любой дотнет выполняется процессором нативно и нет виртуальной машины как в vb6 например. Если вы этого не знали то у меня для Вас плохие новости :).


              1. DrPass
                27.10.2016 17:06
                +2

                Ну, не преувеличивайте. C# компилируется в MSIL. А уже промежуточный код как-то там доводится до бинарного, обычно в рантайме JIT-компилятором, реже предварительной компиляцией с помощью ngen. В Java архитектура такая точно. JVM — это не какой-то эмулятор компьютера внутри компьютера. Это просто рантайм, абстракция, которая создаёт машинно-независимую прослойку между кодом и конкретной архитектурой. В случае дотнета эта же штука называется CLR, но принципиально ничем они не отличаются. Просто маркетологи Microsoft придумали другое название.


                1. denismaster
                  27.10.2016 17:18

                  А с другой стороны .NET осваивает LLVM(проект LLILC) и развивает CoreRT(он же .NET Native). Так что будущее неоднозначное)


                  1. asdf87
                    28.10.2016 16:01

                    К сожалению, похоже LLILC ушел в нирвану или транс за новыми идеями т. к. коммитов нет с июня. Надеюсь работы по нему возобновят в скором времени.


                1. Master_Dante
                  27.10.2016 17:21
                  -1

                  >> C# компилируется в MSIL. А уже промежуточный код как-то там доводится до бинарного
                  >> любой дотнет выполняется процессором нативно

                  Где противоречие? Не надо меня расстраивать ).


              1. ApeCoder
                27.10.2016 20:39

                JFYI


                https://en.wikipedia.org/wiki/.NET_Micro_Framework#Features


                The CLR is an interpreter rather than a just-in-time compiler, and uses a simpler mark-and-sweep garbage collector instead of a generational approach.


                1. szKarlen
                  28.10.2016 10:59

                  это Micro Framework. он должен выполняться на устройствах, где памяти раз-два и обсчелся. По возможностям никакого отношения к стандартному CLR не имеет отношения.


                  1. ApeCoder
                    28.10.2016 11:14
                    +1

                    Я говорил про утверждение


                    любой дотнет выполняется процессором нативно

                    А не про


                    любой стандартный дотнет выполняется процессором нативно

                    ;)


                    1. Master_Dante
                      30.10.2016 01:29
                      -3

                      Я отвечаю вам и szKargen. Один говорит если яблоко весит больше 300грамм, то это не яблоко, второй говорит нет, если больше 350 грамм то это не яблоко. А на самом деле компиляция — это трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду. Это из википедии, а на самом деле не близком машинному коду, а коду который может исполнить некая машина. Так вот C# имеет двух этапную компиляцию, сначала идет трансляция в IL, а потом уже IL компилируется в код x86\x64. И вы можете легко в этом убедиться если во время остановки программы откроете окошко дизасемблированный код, и вы увидите там куски вашего кода в комментариях к ассемблеру. Но вы там не увидите там никакого IL. Само понятие компиляция предпологает некую машину способную выполнять код, например для VB6 есть виртуальная машина, которая умеет выполнять этот код. Но для донета такой машины нет, поэтому любая стандартная или не стандартная .Net программа выполняется машиной x86\x64 нативно. Знать такие вещи программисту необходимо, что бы иметь представление о том, что же на самом деле происходит когда его программа работает, это позволяет «видеть» некоторые подводные камни, и делать более правильный выбор структур данных или алгоритмов, необходимых для достижения цели. В общем и целом повышает профессионализм. Все эти глупые разговоры и минусы в карму, не сделают вас несчастных бездарей более успешными на этом сложном пути.


                      1. szKarlen
                        01.11.2016 13:57
                        +2

                        уважаемый Master_Dante!


                        если честно, то даже лень отвечать на нубские комментарии. особенно товарищу, которому лень зайти в профиль оппонента, но любящему использовать оскорбляющие эпитеты направо и налево. отвечу коротко:


                        … полу-невежда,
                        Полу-подлец, но есть надежда,
                        Что будет полным наконец.
                        ©


                        1. Master_Dante
                          02.11.2016 22:07
                          -3

                          Я и не ожидаю от поэтов каких то ответов. Для меня авторитетов не существует, только доказанные аргументы. Поэтому плевать мне на ваш профиль, или чей то еще.


      1. eydemidov
        27.10.2016 16:26

        Официально Российская Федерация даже не правопреемница Российской Империи.

        По факту — традиционно выходит что «да», но официально — скорее нет (это несколько запутанный вопрос). Потому что после революции большевики открестились от любых связей с царским правительством, и Российская Федерация это официально правопреемник только Советского Союза.

        Ну и дальше — насчёт «начинают с Киевской Руси» — нет, это не так. Что старые книги по истории (например, Карамзин или Соловьёв) начинают с древних времён и вопросов о возникновении славянских племён, что новые учебники.


    1. Idot
      27.10.2016 12:44

      Java как раз стоило упомянуть в качестве предка. Ведь именно с нее все началось.

      Значит, Вы никогда не слышали про C++ Builder.
      Язык C# является фактическим развитием C++ Builder, а сам C++ Builder начался с Delphi.

      PS если писать про Java, то нужно писать и про J++ и J#.


      1. GreenBee
        27.10.2016 12:53
        +2

        Да, про J++, про Delphi — нужно было писать. А еще про VB6. Именно на этот сегмент рынка был ориентирован .NET и успешно заменил VB6/Delphi.
        Java победить не удалось, но со временем потеснили достаточно сильно.

        Что касается J#, то он появился вместе с C# и оказался так себе идеей. Для Java-программистов (на которых она ориентировалась) проще было перейти сразу на C#.

        Не стоит забывать, что большое количество Java-библиотек были портированы на C#.
        Не С, не В, не С++, а именно Java.


      1. DrPass
        27.10.2016 13:00
        +2

        > Язык C# является фактическим развитием C++ Builder,
        Ну, не преувеличивайте :) Если вы про идеологию библиотек, то… в C++Builder нет своих библиотек. Тамошняя VCL написана на Паскале, и собрана на нём же. Её никто на С++ заново не переписывал, просто добавили поддержку BPL формата в компоновщик, чтобы связывать с бинарниками Delphi. А в остальном Builder имеет всё то же, что имел любой классический компилятор С++. Поэтому C++Builder — это не предок C#, а просто ещё одна платформа, которая что-то взяла от Delphi.
        По факту, C# даже не «фактическое развитие» Delphi, а просто позаимствовал некоторые хорошие моменты. Ну а сама платформа .NET действительно больше взяла от Java в своей архитектуре, нежели от любой платформы разработки нативных приложений.


        1. Vedomir
          27.10.2016 15:19
          +1

          Все-таки у C# и Delphi есть один очень важный общий момент — общий архитектор и идеолог Андерс Хейлсберг.


  1. mmMike
    27.10.2016 09:49
    +1

    Немного не в тему… да простят меня…
    Упоминание о 2000 году и различных активностях Microsoft в попытках выйти на другие рынки ПО напомнило мне о мало известной попытке MS выйти на рынок smart card со своей "Windows for Smart Card".
    Cейчас безраздельно правит JavaCard технология.


    "Букетик" к "памятнику" — самая первая официально представленная JavaCard OS карта. В том же 2000 году…
    Сам образец Windows OS карты потерял где то (прочем ничем не примечательный "белый пластик")..



  1. DrPass
    27.10.2016 10:10
    +15

    А я бы позанудствовал по поводу массы неточностей в статье.
    > В поддержку этих новшеств Microsoft выпустила инструментарий для разработки приложений – платформу .NET.
    Microsoft выпустила платформу .NET не в поддержку этих новшеств, а в поддержку своего разрыва отношений с Sun. Т.к. изначально речь шла о Microsoft JVM.

    > Еще одним новшеством платформы .NET была технология активных серверных страниц ASP.NET (Active Server Page).
    > С её помощью можно было относительно быстро разработать веб-приложения, взаимодействующие с базами данных.
    Для взаимодействия с базами данных предназначена технология ADO.NET, которая никакой особой связи с ASP.NET не имеет, ну кроме того, что их можно использовать в одном приложении.

    > Язык программирования C# был создан специально для ASP.NET
    ???

    > Кроме того, в нем была реализована автоматическая «сборка мусора», обработки исключений, динамическое связывание.
    А разве это реализовано в C#, а не средствами платформы?

    > Как и Java, C# изначально предназначался для веб-разработки
    Java изначально не предназначался для веб-разработки

    > Во-первых, в отличие от JVM, IL не привязан к одному языку программирования
    JVM тоже не привязана к одному языку программирования, можно использовать другие компиляторы, которые генерируют байт-код для JVM, и они в природе есть.

    > Во-вторых, IL предназначен не для программной интерпретации, а для последующей компиляции в машинный код. Это позволяет достичь существенно большего быстродействия программ.
    А эта же JIT-компиляция на JVM появилась в 1999-м году, ещё до появления дотнета.

    > Во второй версии была добавлена поддержка 64-х разрядных вычислений, что открыло возможность увеличения адресного пространства.
    > Также было реализовано создание триггеров, хранимых процедур и типов данных на .NET языках.
    Где добавлено и реализовано, в C#? Или опять перепутано, где язык, где платформа, а где Microsoft SQL Server?


    1. NLO
      27.10.2016 10:18

      НЛО прилетело и опубликовало эту надпись здесь


      1. DrPass
        27.10.2016 10:33
        +10

        Я не стараюсь лично вам угодить. Если для вас знак вопроса не является очевидным намёком на то, что «конкретный тезис» просто странный и непонятно откуда взятый, и вы считаете тех, кто так пишет, дураками, это ваше личное право. У большинства других читателей, к счастью, это не вызывает таких неочевидных эмоций.


        1. NLO
          27.10.2016 10:40

          НЛО прилетело и опубликовало эту надпись здесь


  1. ruzhovt
    27.10.2016 10:15
    +1

    История языков программирования: C# — впереди планеты всей

    К сожалению это уже далеко не так.


    1. denismaster
      27.10.2016 10:23
      +16

      Конкурировали Java и c#, конкурировали, а в итоге впереди все равно Javascript=)


    1. indestructable
      27.10.2016 12:39
      +2

      Ну в плане возможностей языка, я думаю, из мейнстрима — C# один из лидеров.
      По экосистеме и популярности — вы правы.


  1. SirEdvin
    27.10.2016 10:47
    +1

    С# живет по принципу «всякая сущность есть объект».

    По такому принципу живет Python. А в этом вашем C# есть структуры, я напомню.


    1. Drag13
      27.10.2016 13:40

      Структуры, внезапно, наследуются тоже от объекта.
      Object -> ValueType-> struct
      Так что оно то да но строго говоря нет.


    1. akzhan
      27.10.2016 22:27
      +1

      Скорее уж Ruby :)


  1. NLO
    27.10.2016 10:49

    НЛО прилетело и опубликовало эту надпись здесь


    1. ad1Dima
      27.10.2016 12:32
      +1

      Ребята из российского офиса МС пишут нормальные статьи. А тут претензии предъявляйте semen_grinshtein или Boomburum короче к habrahabr


  1. NLO
    27.10.2016 11:14

    НЛО прилетело и опубликовало эту надпись здесь


    1. Drag13
      27.10.2016 13:41
      +6

      Я думаю минус был за форму обращения. Никто не любит хамства. А если статья не нравится то есть вполне себе понятные инструменты.


  1. zodchiy
    27.10.2016 12:10
    +13

    Мне нравится C#, я люблю читать холивары с участием kekekeks или lair.
    Но данная статья настолько безграмотна, что тянет максимум на черновик реферата, причем еще до фактчекинга.
    Ужас.


    1. NLO
      27.10.2016 12:20

      НЛО прилетело и опубликовало эту надпись здесь


      1. forcewake
        27.10.2016 12:37
        +2

        Я, к примеру, зарабатывают на жизнь .net стеком. Статья бесполезна и, в некоторых моментах, вредна.


      1. zodchiy
        27.10.2016 14:12

        C 2005 года зарабатываю на жизнь с C#.
        Начинал вообще с classic ASP (vbs с 2003) и php (с 2000) и perl (с 98).


  1. NLO
    27.10.2016 12:27

    НЛО прилетело и опубликовало эту надпись здесь


    1. DrPass
      27.10.2016 13:03
      +2

      Да на что оно вам сдалось? Вы их на дуэль вызывать собрались, что ли? Или вас возмущает, что в Интернете кто-то поступил несправедливо?


      1. NLO
        27.10.2016 13:15

        НЛО прилетело и опубликовало эту надпись здесь


        1. NLO
          27.10.2016 13:20

          НЛО прилетело и опубликовало эту надпись здесь


          1. NLO
            27.10.2016 13:27

            НЛО прилетело и опубликовало эту надпись здесь


    1. KirillFormado
      27.10.2016 13:34
      +3

      А можно пояснить о какой странице идет речь и зачем она вам нужна?)


      1. NLO
        27.10.2016 13:45

        НЛО прилетело и опубликовало эту надпись здесь


        1. Drag13
          27.10.2016 13:45
          +2

          А что там интересного?


          1. NLO
            27.10.2016 13:47

            НЛО прилетело и опубликовало эту надпись здесь


            1. Drag13
              27.10.2016 13:52
              +2

              Да нет, мне честно интересно. Я просто не могу понять откуда столько бурления по простой в общем то статье и откуда столько меркаптанов в сторону с#.


            1. 0xd34df00d
              27.10.2016 21:51
              +2

              А я вообще на плюсах под линуксы пишу и еще немножко хаскелирую, но я в упор не понимаю, чего вы хотите.


        1. KirillFormado
          27.10.2016 14:16

          я бы отправил вас на github в репозиторий компилятора roslyn, поскольку именно там сейчас идут обсуждения дизайна языка и новых его фич в 7-ой версии. А так сложно ответить что является официальным сайтом, есть dot.net сайт с интерактивными туториалами. Есть старый добрый msdn)


      1. NLO
        27.10.2016 13:46

        НЛО прилетело и опубликовало эту надпись здесь


  1. NLO
    27.10.2016 13:38

    НЛО прилетело и опубликовало эту надпись здесь


    1. INC_R
      27.10.2016 13:55
      +5

      Судя по тому, как припекло вашей активности, утверждение «Мне абсолютно фиолетевен эсшарп» несостоятельно. У вас такие яркие негативные чувства вызывает то, что в вашем родном городе кто-то пишет на шарпе?


  1. NLO
    27.10.2016 14:08

    НЛО прилетело и опубликовало эту надпись здесь


    1. phillennium
      27.10.2016 14:32
      +9

      Глядя на ваши многочисленные комментарии под этим постом, я тоже испытываю ощущение, что зомби захватили хабр.


    1. Master_Dante
      27.10.2016 16:15

      Такие тролли как ты, выдают себя как бешеная овца в стаде. C# это бест язык, он вобрал в себя все лучшее из мира кодинга, из всех существовавших до него языков и платформ. А теперь он еще и бессмертный т.е. опенсорц. Покайся грешник.


  1. NLO
    27.10.2016 15:03

    НЛО прилетело и опубликовало эту надпись здесь


  1. taujavarob
    27.10.2016 18:08

    >В 2010 году была выпущена версия C# 4.0. Ее главным дополнением к предыдущим версиям стали именованные и необязательные аргументы. Первые дают возможность привязки аргумента и параметра по имени, а вторые позволяют указать аргумент, который используется по умолчанию, для каждого параметра. Не менее важное новшество – тип dynamic. Он позволяет осуществлять проверку на соответствие типов объектов не на этапе компиляции, а непосредственно во время выполнения программы.

    >В 2016 году стало известно о новшествах готовящейся версии С# 7.0: • Бинарные литералы • Локальные функции, Они позволяют структурировать код, например, в стиле JavaScript.

    Они превратили C# в JavaScript?


    1. Flammar
      27.10.2016 21:30

      Они превратили C# в JavaScript?
      А что в этом плохого? Если не удаётся сделать в JavaScript статическую типизацию с поддержкой в IDE, то остаётся «тащить» в язык со статической типизацией наиболее актуальные для него черты языка JavaScript.


      1. Free_ze
        28.10.2016 02:04

        Плохо в этом то, что синтаксис усложняется и увеличивается количество фич сомнительной полезности.


      1. taujavarob
        28.10.2016 16:07

        > Если не удаётся сделать в JavaScript статическую типизацию с поддержкой в IDE, то остаётся «тащить» в язык со статической типизацией наиболее актуальные для него черты языка JavaScript.

        MS взял JavaScript в клещи:

        — С одной стороны тащит туда типизацию через TypeScript
        — С другой стороны меняет C# так чтобы «структурировать код, например, в стиле JavaScript.»

        Не к добру это. ;-)


        1. asdf87
          28.10.2016 16:15

          Вы боитесь за судьбу JavaScript'a? Не стоит. Его монополии положит конец скорее wasm чем MS.


          1. taujavarob
            28.10.2016 17:42

            >Вы боитесь за судьбу JavaScript'a? Не стоит. Его монополии положит конец скорее wasm чем MS.

            Я просто помню как MS из «благих намерений» даже весь интернет хотел под себя изменить.

            Потом перетянуть всех на свой IE — что ему даже удалось на какое-то время!

            Я вижу — тактика MS не изменилась с тех пор.


            1. asdf87
              28.10.2016 18:08

              > Я вижу — тактика MS не изменилась с тех пор.

              C тех пор у MS уже 2 руководителя сменилось и тенденции изменений с приходом последнего весьма положительные: в open source вышел .net и много чего еще.

              Или вы хотите сказать что MS хочет под себя изменить весь open source? :-)


              1. taujavarob
                28.10.2016 18:44

                >хотите сказать что MS хочет под себя изменить весь open source? :-)

                Весь мир!

                Но пока это ему не удалось. :-)


    1. Source
      28.10.2016 02:34
      +1

      Они превратили C# в JavaScript?

      Нет. Почему Вам везде мерещится JavaScript?
      dynamic и компания пришли из IronRuby/IronPython.


  1. madkite
    27.10.2016 19:16
    +3

    > компания выпустила бесплатный редактор кода под все платформы
    И чего ж не упомянуть на каком языке то написан этот редактор? Тем более в статье про языки и кто впереди планеты всей.


  1. Regis
    27.10.2016 20:23
    +2

    А тут C# набирает популярность
    Пруф?
    Это позволяет достичь существенно большего быстродействия программ
    Пруф? (Подсказка: в Java есть JIT, весьма эффективный).


  1. Myrddin
    28.10.2016 00:23
    +5

    Любопытно, что так называемые редакторы практически никогда не вступают в диалог под своими так называемыми публикациями, видимо, ввиду практически полного невладения излагаемой темой.


  1. NLO
    28.10.2016 08:35

    НЛО прилетело и опубликовало эту надпись здесь


    1. INC_R
      28.10.2016 09:04

      StackOverflow — достаточно позитивеный пример? Еще позитивные примеры можно найти здесь:
      https://en.wikipedia.org/wiki/List_of_C_Sharp_software
      https://www.quora.com/What-are-some-known-programs-written-in-C


      1. NLO
        28.10.2016 14:19

        НЛО прилетело и опубликовало эту надпись здесь


    1. KirillFormado
      28.10.2016 12:18

      Под проекты на C# можно сейчас подвести кучу инди и не очень игр на Unity)


    1. denismaster
      28.10.2016 12:46
      +1

      Если вас обидели конкретные люди, оказавшиеся специалистами по С# в вашем городе/конторе/где-нибудь еще, то это не повод всех брать под одну гребенку.
      C# в плане языка очень сбалансирован и удобен, в плане технологий тоже развивается, если люди решают с его помощью свои задачи и делают это эффективно, то почему бы и нет?


      1. NLO
        31.10.2016 19:20

        НЛО прилетело и опубликовало эту надпись здесь


      1. NLO
        31.10.2016 19:22

        НЛО прилетело и опубликовало эту надпись здесь


        1. NLO
          31.10.2016 19:23

          НЛО прилетело и опубликовало эту надпись здесь


  1. NLO
    31.10.2016 19:22

    НЛО прилетело и опубликовало эту надпись здесь


  1. NLO
    31.10.2016 19:23

    НЛО прилетело и опубликовало эту надпись здесь


    1. NLO
      31.10.2016 19:24

      НЛО прилетело и опубликовало эту надпись здесь