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



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

    Сторонники 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# может ещё более серьёзно выстрелить», заключает он.

    Средняя зарплата в IT

    110 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 8 707 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

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

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

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

          –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
              UPD: В Clojure есть хвостовая рекурсия, но немного кривенькая в плане внешнего вида.

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

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

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

                  +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».
                  0
                  --Как раз с переходам в Oracle Java снова начала развиваться.

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

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

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

                      +1
                      Если не затруднит, поделитесь, пожалуйста, ссылкой. Я видел только панические слухи про Java EE, но это бы языку повредило не сильно.
                    +1
                    Кстати, есть ли на C# аналог Hadoop'а?
                      +1

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


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


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

                        0
                        SCOPE (Structured Computing Optimized for Parallel Execution) или как он теперь называется — U-SQL. Код исполняется в кластерах Cosmos.
                        –1
                        P.s. В свое время выбрал C#, а не Java, так как в статье на лурке Java прямо очень сильно хаяли и опускали.
                          +4
                          Разве это не повод выбрать как раз яву? ;)
                          +5

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

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

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

                            –17

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

                              +5

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


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

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

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

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

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

                                            0

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

                                        0
                                        А я бы хотел иметь возможность просто написать один .c файл (даже не .cpp) и просто его скомпилировать из IDE. В MSVS ттак нельзя. Извольте создать «проект», даже если внутри будет 1 файл.
                                          0
                                          Для таких целей, если не охота возиться с созданием проекта, а надо только быстро что то набросать или проверить, есть два варианта. Использовать linqPad или REPL встроенный прямо в студию C# Interective.
                                            0
                                            А где вы хотели бы хранить, скажем, параметры для компиляции?
                                              0
                                              Наверное это должен был бы быть 2-ой файл )
                                                0
                                                В общем случае их нигде можно не хранить. Достаточно два дефолтных набора опций для отладки и релиза, и хранить их в конфигурации IDE. И только если какой-то проект потребовал специфических настроек, оверрайдить в нём эти самые дефолтные опции.
                                                  0
                                                  А где хранить оверрайженые значения?
                                                    0
                                                    Ну вот когда они нужны, тогда надо создавать какой-то отдельный файл для них, конечно же.
                                                      0
                                                      Они нужны всегда.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                                                      Вы удивитесь, но не все используют миграции EF и даже сам EF. Феншуй у всех свой.
                                                +1
                                                using System;
                                                
                                                public class Program {
                                                    public static void Main() {
                                                        Console.WriteLine("Hello World");
                                                    }
                                                }

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

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

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

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

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

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

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

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

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

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

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

                                                      Для .NET Core конфиги в общем случае в json-формате (global.json для солюшена и project.json для проекта), хотя студия и добавляет свой .sln/.xproj, но это скорее конфиги самой студии, ничто не мешает собирать проект штатными кроссплатформенными средствами.
                                                      Классические .NET-проекты нет особого смысла рассматривать с точки зрения кроссплатформенности, но MonoDevelop может кушать .sln/.csproj файлы.
                                                        0
                                                        И от xproj с project.json скоро откажутся и переведут все на msbuild с csproj. Хотя до конца еще не известно как все в итоге будет выглядеть.
                                                          0
                                                          Буду признателен, если вы поделитесь ссылками на материалы об этом.
                                                            0
                                                            оригинал и перевод на хабре
                                                              0
                                                              Вот тут белее свежая информация. Обещают убрать package.xml и упростить формат проектного файла. И сделать необязательным добавление каждого файла в csproj. Плюс поддержку со стороны cli. Вообщем взять все хорошие идеи связанные с xproj и project.json, но сделать унифицированное решение для всех типов проектов. Ну все это уже только в vs15.
                                                    +5
                                                    А я вот, наоборот, влюблён в Visual Studio. Ну никак немогу привыкнуть к Android Studio и Eclipse.
                                                    +6
                                                    Примечание к изображению ноты.
                                                    Если читать по русски c♯, это прозвучит как «си диез». А изображена — до диез. А всё потому, что нота «до» обозначается буквой «С». Такой вот любопытный нюанс.
                                                      +1

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

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

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

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

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

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

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

                                                                  В чьём воспалённом воображении?
                                                                  +4
                                                                  А где же трогательная история, о том как майкрософт пыталась узурпировать Java, выпускаю свою не совместимую ява машину?
                                                                  И только когда им сан в судах им дала по зубам, майкрософт придумала конкурирующий проект.
                                                                  Один J# чего стоит.
                                                                  Без этого история будет не полной.
                                                                    +5
                                                                    Зачем такие подробности в записках проповедника?
                                                                      +1
                                                                      Может Вам еще историю про то, как к кампусу Borland прислали лимузин за Хейльсбергом?
                                                                      Developers, developers, developers! :)
                                                                        +1
                                                                        А ещё была J++.
                                                                        Было очень интересно и познавательно прочитать историю J++ и J#.
                                                                        +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»?

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

                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                            0
                                                                            >Ведь именно с нее все началось
                                                                            до нее были 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
                                                                              0
                                                                              Начинать историю с языков B/С/С++, это просто бред

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

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

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

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

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

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

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

                                                                                        sun.misc.unsafe?

                                                                                          –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 слабо на яве? )).
                                                                                            +5

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


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


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


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

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

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

                                                                                                  0
                                                                                                  Все очень просто вы получаете скорость разработки как у C#, а производительность как у C++. И шутка про рантайм 200мб. уже не усместна, во первых есть уже Core в которой собирается только набор используемых пакетов. Есть так же предустановка .Net во всех новых МС-ОС. Да и 200мб это не теже 200мб что и 20 лет назад, можно скачать и поставить при необходимости. Скоро также выйдет .Net Native который изначально компилится в натив.
                                                                                                    0
                                                                                                    C# действительно крут, и он круче Java. Хотите можем провести эксперимент, на простой задаче. Дано массив байтов, заполненный случайными данными. Необходимо просуммировать все элементы этого массива. Вы сделаете на Java а я сделаю на C#. Есть функция Sum(byte[] buf), нужно замерить время ее выполнения. А после мы оценим производительность и красоту кода ).
                                                                                                      0

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

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

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


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

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

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

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

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

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


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

                                                                                                                  Есть целый класс задач, которые невозможно выполнить без указателей. Я уже тонко намекал вам(предложение просуммировать байты), что некоторые алго работают значительно быстрее, когда есть указатели. Случай из жизни, внезапно в одном проекте пришлось использовать MemoryMapped файлы, у реализации API в .Net есть стойкий запах индусятины и очень жуткие лаги. Выручило то что в C# есть указатели, ох как это выручило вы даже не представляете.
                                                                                                                    +1
                                                                                                                    > Есть целый класс задач, которые невозможно выполнить без указателей.
                                                                                                                    … и среди них нет ни одной, где платформа с управляемым кодом, даже с возможностью делать хаки, была бы подходящим инструментом.
                                                                                                                      0
                                                                                                                      В последнее время вышли .Net Core, Micro Framework, скоро выйдет .Net Native, так же есть ASP.Net. Вам не кажется, что C# уже перерос уровень нишевой применимости? Посмотрите и веб, и десктоп, и с мобилками, и с контроллерами работает донет. Уверен что скоро появится C# с возможностью делать ASM вставки, и писать на нем драйвера, возможно это произойдет вместе с .Net Native, возможно позже. Но уже сейчас видно, что C# это больше чем просто язык в какой то одной области. Писать на одном языке везде это прекрасно.
                                                                                                                        0
                                                                                                                        Вам не кажется, что C# уже перерос уровень нишевой применимости?

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

                                                                                              Если это утверждение, то у меня для Вас плохие новости.
                                                                                                –3
                                                                                                Что еще один молодняк хочет поспорить? Да это утверждение, любой дотнет выполняется процессором нативно и нет виртуальной машины как в vb6 например. Если вы этого не знали то у меня для Вас плохие новости :).
                                                                                                  +2
                                                                                                  Ну, не преувеличивайте. C# компилируется в MSIL. А уже промежуточный код как-то там доводится до бинарного, обычно в рантайме JIT-компилятором, реже предварительной компиляцией с помощью ngen. В Java архитектура такая точно. JVM — это не какой-то эмулятор компьютера внутри компьютера. Это просто рантайм, абстракция, которая создаёт машинно-независимую прослойку между кодом и конкретной архитектурой. В случае дотнета эта же штука называется CLR, но принципиально ничем они не отличаются. Просто маркетологи Microsoft придумали другое название.
                                                                                                    0
                                                                                                    А с другой стороны .NET осваивает LLVM(проект LLILC) и развивает CoreRT(он же .NET Native). Так что будущее неоднозначное)
                                                                                                      0
                                                                                                      К сожалению, похоже LLILC ушел в нирвану или транс за новыми идеями т. к. коммитов нет с июня. Надеюсь работы по нему возобновят в скором времени.
                                                                                                      –1
                                                                                                      >> C# компилируется в MSIL. А уже промежуточный код как-то там доводится до бинарного
                                                                                                      >> любой дотнет выполняется процессором нативно

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

                                                                                                      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.
                                                                                                        0
                                                                                                        это Micro Framework. он должен выполняться на устройствах, где памяти раз-два и обсчелся. По возможностям никакого отношения к стандартному CLR не имеет отношения.
                                                                                                          +1

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


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

                                                                                                          А не про


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

                                                                                                          ;)

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

                                                                                                              уважаемый Master_Dante!


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


                                                                                                              … полу-невежда,
                                                                                                              Полу-подлец, но есть надежда,
                                                                                                              Что будет полным наконец.
                                                                                                              ©
                                                                                                                –3
                                                                                                                Я и не ожидаю от поэтов каких то ответов. Для меня авторитетов не существует, только доказанные аргументы. Поэтому плевать мне на ваш профиль, или чей то еще.
                                                                                                0
                                                                                                Официально Российская Федерация даже не правопреемница Российской Империи.

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

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

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

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

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

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

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


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


                                                                                                    +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?
                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                        +10
                                                                                                        Я не стараюсь лично вам угодить. Если для вас знак вопроса не является очевидным намёком на то, что «конкретный тезис» просто странный и непонятно откуда взятый, и вы считаете тех, кто так пишет, дураками, это ваше личное право. У большинства других читателей, к счастью, это не вызывает таких неочевидных эмоций.
                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                        +16
                                                                                                        Конкурировали Java и c#, конкурировали, а в итоге впереди все равно Javascript=)
                                                                                                          +2

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

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

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

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

                                                                                                              Скорее уж Ruby :)

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

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

                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                  +6
                                                                                                                  Я думаю минус был за форму обращения. Никто не любит хамства. А если статья не нравится то есть вполне себе понятные инструменты.
                                                                                                                  +13
                                                                                                                  Мне нравится C#, я люблю читать холивары с участием kekekeks или lair.
                                                                                                                  Но данная статья настолько безграмотна, что тянет максимум на черновик реферата, причем еще до фактчекинга.
                                                                                                                  Ужас.
                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      +2
                                                                                                                      Я, к примеру, зарабатывают на жизнь .net стеком. Статья бесполезна и, в некоторых моментах, вредна.
                                                                                                                        0
                                                                                                                        C 2005 года зарабатываю на жизнь с C#.
                                                                                                                        Начинал вообще с classic ASP (vbs с 2003) и php (с 2000) и perl (с 98).
                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                        +2
                                                                                                                        Да на что оно вам сдалось? Вы их на дуэль вызывать собрались, что ли? Или вас возмущает, что в Интернете кто-то поступил несправедливо?
                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          +3
                                                                                                                          А можно пояснить о какой странице идет речь и зачем она вам нужна?)
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              +2
                                                                                                                              А что там интересного?
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  +2
                                                                                                                                  Да нет, мне честно интересно. Я просто не могу понять откуда столько бурления по простой в общем то статье и откуда столько меркаптанов в сторону с#.
                                                                                                                                    +2
                                                                                                                                    А я вообще на плюсах под линуксы пишу и еще немножко хаскелирую, но я в упор не понимаю, чего вы хотите.
                                                                                                                                  0
                                                                                                                                  я бы отправил вас на github в репозиторий компилятора roslyn, поскольку именно там сейчас идут обсуждения дизайна языка и новых его фич в 7-ой версии. А так сложно ответить что является официальным сайтом, есть dot.net сайт с интерактивными туториалами. Есть старый добрый msdn)
                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  +5
                                                                                                                                  Судя по тому, как припекло вашей активности, утверждение «Мне абсолютно фиолетевен эсшарп» несостоятельно. У вас такие яркие негативные чувства вызывает то, что в вашем родном городе кто-то пишет на шарпе?
                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                    +9
                                                                                                                                    Глядя на ваши многочисленные комментарии под этим постом, я тоже испытываю ощущение, что зомби захватили хабр.
                                                                                                                                      0
                                                                                                                                      Такие тролли как ты, выдают себя как бешеная овца в стаде. C# это бест язык, он вобрал в себя все лучшее из мира кодинга, из всех существовавших до него языков и платформ. А теперь он еще и бессмертный т.е. опенсорц. Покайся грешник.
                                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                        0
                                                                                                                                        >В 2010 году была выпущена версия C# 4.0. Ее главным дополнением к предыдущим версиям стали именованные и необязательные аргументы. Первые дают возможность привязки аргумента и параметра по имени, а вторые позволяют указать аргумент, который используется по умолчанию, для каждого параметра. Не менее важное новшество – тип dynamic. Он позволяет осуществлять проверку на соответствие типов объектов не на этапе компиляции, а непосредственно во время выполнения программы.

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

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

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

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

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

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

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

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

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

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

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

                                                                                                                                                      Весь мир!

                                                                                                                                                      Но пока это ему не удалось. :-)
                                                                                                                                              +1
                                                                                                                                              Они превратили C# в JavaScript?

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

                                                                                                                                              +3
                                                                                                                                              > компания выпустила бесплатный редактор кода под все платформы
                                                                                                                                              И чего ж не упомянуть на каком языке то написан этот редактор? Тем более в статье про языки и кто впереди планеты всей.
                                                                                                                                                +2
                                                                                                                                                А тут C# набирает популярность
                                                                                                                                                Пруф?
                                                                                                                                                Это позволяет достичь существенно большего быстродействия программ
                                                                                                                                                Пруф? (Подсказка: в Java есть JIT, весьма эффективный).
                                                                                                                                                  +5
                                                                                                                                                  Любопытно, что так называемые редакторы практически никогда не вступают в диалог под своими так называемыми публикациями, видимо, ввиду практически полного невладения излагаемой темой.
                                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                      0
                                                                                                                                                      StackOverflow — достаточно позитивеный пример? Еще позитивные примеры можно найти здесь:
                                                                                                                                                      https://en.wikipedia.org/wiki/List_of_C_Sharp_software
                                                                                                                                                      https://www.quora.com/What-are-some-known-programs-written-in-C
                                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                        0
                                                                                                                                                        Под проекты на C# можно сейчас подвести кучу инди и не очень игр на Unity)
                                                                                                                                                          +1
                                                                                                                                                          Если вас обидели конкретные люди, оказавшиеся специалистами по С# в вашем городе/конторе/где-нибудь еще, то это не повод всех брать под одну гребенку.
                                                                                                                                                          C# в плане языка очень сбалансирован и удобен, в плане технологий тоже развивается, если люди решают с его помощью свои задачи и делают это эффективно, то почему бы и нет?
                                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь

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

                                                                                                                                                              Самое читаемое