Как стать автором
Обновить

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Если при выборе языка/платформы для очередного проекта вы на первое место уровень некоего «фана» (ассоциации с этим словом в контексте JavaScript лично у меня не самые позитивные), то я даже и не знаю, что и сказать.

И все-таки, что вы подразумеваете под этим словом?
Если не затруднит, поделитесь, пожалуйста, ссылкой. Я видел только панические слухи про Java EE, но это бы языку повредило не сильно.
Как минимум JRuby в этом списке лишний — это интерпретатор Ruby кода, а не компилятор в байт-код.
все верно автор написал, архитектура .NET изначально проектировалась с поддержкой нескольких языков, с учетом своих особенностей, для JVM пришлось ждать годы чтоб довели ее до приемлемого уровня и то не все исправили (совместимость, особенности ассемблера), аналогично с JIT, в .NET была изначально, как фундаментальное свойство, в JVM добавили как стороннюю разработку, опять же, еслибы да кабы, былобы гораздо лучше.
Кстати, есть ли на C# аналог Hadoop'а?

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


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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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»?

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

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

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

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

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

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

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

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

Я не специалист по JAVA но есть ли в ней указатели и прямая работа с памятью? C# компилируется и исполняется только в нативе, никаких ВМ в нем нет, а как насчет JAVA?
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 слабо на яве? )).

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


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


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


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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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


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

А не про


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

;)

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

уважаемый Master_Dante!


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


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

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

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

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

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

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

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

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


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


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

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

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

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

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

Скорее уж Ruby :)

А почему структура не может быть объектом?)
НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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

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

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

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

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

Весь мир!

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

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

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

А можете пояснить про слабость экосистемы? По мне так Java выглядит более сырой и неудобной.

особенно из-за жесткой привязки в Windows.

В чем привязка-то? Современный .NET работает на Windows, Linux, MacOs, iOS и Android.

Прочитал все комментарии.
Может кто-нибудь объяснить что хотел тот милый человек с утверждениями про зомби?
Я понял только то, что он чем-то очень недоволен. Но вот чем?
Вот поддержу GreenBee… ибо фигни в этой статье слишком много.

Всё же для авторских статей надо побольше разбираться в материале.

И таки да, ASP в 2000-м году уже был 4-й версии (совместно с IIS-ом), а вместе с первой версией ASP.Net пришли WebForms.

И говоря про историю развития надо говорить в первую очередь про два вектора развития — желание присутствовать на всех платформах (куда уже пролезла java) и стремление занять интернет.
Предлагая новую платформу разработчикам нужно было как-то обеспечить всё это, да ещё и заманить чем-то вкусненьким.
Поэтому и появился CLR (Common Language Runtime), который мог бы (на тот момент ещё потенциально) работать на любой платформе, и IL, который и должен был исполняться в CLR (это чтобы писать на любом языке). С первого релиза предложили новый язык: C# и два диалекта — VisualBasic.Net и C++.Net.
VB.Net предалгался тем, кто привык юзать VB под офис/десктоп или писал asp.
C++.Net с намёком, что существующий код можно будет легко перенести на новую платформу.
C# должен был затмить Java и может даже стать «идеальным» языком разработки. При этом он не случайно C-подобен — его синтаксис не был бы чужероден и C++-разработчикам, ни JavaScript-разработчикам (для них был даже JavaScript.Net, но ввиду массы ограничений, не получил развития).

В качестве заманухи — большая библиотека классов (даже на момент выхода первой версии ни с одним других языком или с платформой не поставлялась столь богатая библиотека) и возможность писать на одном из привычных языков и для десктопа, и для сервера, и для веба. И специально для вовлечения в мир веб-разработки придумали WebForms, которые позволили делать веб-странички тем, кто до этого делал только десктоп-приложения.

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

А если вернуться к статье — в ней почти поровну перевранной истории, технических ошибок и агитаторской лапши… и всего это в сумме примерно половина статьи. фу.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории