Комментарии 185
Во-первых, в отличие от JVM, IL не привязан к одному языку программирования.Scala, Kotlin, Ceylon, JRuby, Clojure, Groovy и многие другие jvm языки не противоречат этому утверждению?
Во-вторых, IL предназначен не для программной интерпретации, а для последующей компиляции в машинный код.Здесь подразумевается AOT или JIT? AOT компиляторы для java тоже есть.
Java потерял свободу, когда ушел под крыло Oracle.Уже есть аналог JCP для .NET? Или в каком смысле тут «свобода?».
С переходом под крыло Oracle язык все же потерял, стал развиваться медленнее.Как раз с переходам в Oracle Java снова начала развиваться.
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-языки.
Теоретически, специальные команды, как в 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».
Недавно писали что Оракл прикрыла группу занимаюшyюся развитием языка.
А чего туда идти то?
Весь фан сейчас на стороне JavaScript.
что есть "аналог Hadoop"?
Распределенный map-reduce был в виде исследовательского проекта Dryad с linq-синтаксисом. Но на него забили, так как есть hadoop.
В интернетах можно найти кучу опенсорных map-reduce на .NET.
Но вообще в политике MS работа с данными делается не в .NET коде, а в SQL Server и Azure.
Мне больше всего доставило сравнение C# с Java и C, хотя реально больше всего было надергано из делфи. Платформа .NET является продолжателем идей Java, но язык C# на Java похож только синтаксисом, как и все C-подобные языки.
Именно напрямую делфи. Хейсберг — автор языка C# внезапно также автор языка делфи. Именно в делфи были придуманы свойства и события, которые перекочевали в C#. WinForms является почти калькой с VCL, а com-interop очень похож на делфи.
С-подобный синтаксис выбрали, чтобы охватить большую аудиторию.
Как-то довелось фиксить проект на C#. Переплевался с Visual Studio и процесса компиляции. Виснет, сложность UI приближается к 3DsMax'у, не может менять код во врмя дебаггинга, итд. Так ещё и возможность делать классы разбитые на несколько, в разных файлах и папках, классы с частью кодогенерации и пихать в один файл несколько интерфейсов и классов (в т.ч. partial). В общем не знаю, возможно проект был говнокодистым, а к ИДЕ привыкаешь, но как-то нет, даже Юнити не вдохновила.
Это когда было?
Edit&Continue уже лет 5 существует, если не больше.
Сложность UI такая же, как у всех IDE, с чем сравниваешь?
Зависания при дебаге бывают раз в год. В 2008 студии было часто, в последних версиях почти не сталкивался.
Я вот с Eclipse недавно плевался… нет классического понятия «файл проекта», файлы исходников где-то толи кэшируются то-ли что, в результате если изменить их снаружи (в текстовом редакторе) то с удивлением можно увидеть что изменения в самом эклипсе не отображаются (или отображаются не сразу).
Вообще я давно уже пришел к выводу, что при разработке нового языка программирования структуру файлов проекта тоже неплохо было бы стандартизировать, чтобы не было зоопарков с разными форматами, средами разработки и т.д.
У них там в фоне на Mono крутится цельнотянутый ReSharper, с которым Idea общается по хитрому протоколу.
Другой вопрос, зачем вам полноценная 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
VS15 поддерживает FolderProjects вроде именно то, что вы ищете.
нет классического понятия «файл проекта»
есть, .eclipse, или что в Вашем понятии «файл проекта»?
если изменить их снаружи (в текстовом редакторе) то с удивлением можно увидеть что изменения в самом эклипсе не отображаются
так было раньше, теперь eclipse спрашивает, обновить ли файл
структуру файлов проекта тоже неплохо было бы стандартизировать
что тут говорить, если структура меняется от версии к версии одной IDE, и вообще, это связало бы разработчикам руки
Тот же 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 файлы.
Если читать по русски c♯, это прозвучит как «си диез». А изображена — до диез. А всё потому, что нота «до» обозначается буквой «С». Такой вот любопытный нюанс.
В соседней статье он же назвал C# не модным, это просто холиварный вброс для поддержания комьюнити.
И вряд ли это изменится в ближайшие года)
Здесь пахнет «толстым» троллингом.
Вместо этого вам будет предоставлена шикарная альтернатива: only current .Net в облаке Azure.
Запах усилился!
В чьём воспалённом воображении?
И только когда им сан в судах им дала по зубам, майкрософт придумала конкурирующий проект.
Один 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?
sun.misc.unsafe?
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 ваша программа вылетит в никуда.
Короче, вы написали то, что считается отборнейшим говнокодом даже на С/С++.
Знаете, шутка неудачная. Вы пытались показать, насколько крут C#. В результате вы показали, что на нём можно легко и непринуждённо отстрелить себе ногу по самое лицо. Зачем мне тогда C#, если я могу точно так же стрелять себе по ногам в родном С++, без привязки к MS и рантайма в 200Мб? :)
Я написал выше, что не явист. Точнее, я знаком с явой на начально-среднем уровне. Мой основной посыл — вы написали крайне неудачный код чтобы продемонстрировать "крутизну" 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# есть указатели, ох как это выручило вы даже не представляете.
… и среди них нет ни одной, где платформа с управляемым кодом, даже с возможностью делать хаки, была бы подходящим инструментом.
Вам не кажется, что C# уже перерос уровень нишевой применимости?
Какую вы нишу имеете в виду? C# с момента своего появления позиционировался как «хедлайновый» язык для решений на платформе Майкрософт. С тех пор не поменялось ровным счетом ничего. Хотя и есть реализации для других платформ, их применение как было экзотикой, так и осталось. Вы можете делать решения под Android, но вы все равно возьмете Java или C++ под NDK. Вы можете делать решения под Linux, но вы все равно возьмете… что-то другое. Так что ниша, вернее, группа ниш применений C# достаточно стабильна.
Если это утверждение, то у меня для Вас плохие новости.
>> любой дотнет выполняется процессором нативно
Где противоречие? Не надо меня расстраивать ).
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.
Я говорил про утверждение
любой дотнет выполняется процессором нативно
А не про
любой стандартный дотнет выполняется процессором нативно
;)
уважаемый Master_Dante!
если честно, то даже лень отвечать на нубские комментарии. особенно товарищу, которому лень зайти в профиль оппонента, но любящему использовать оскорбляющие эпитеты направо и налево. отвечу коротко:
… полу-невежда,
Полу-подлец, но есть надежда,
Что будет полным наконец.
©
По факту — традиционно выходит что «да», но официально — скорее нет (это несколько запутанный вопрос). Потому что после революции большевики открестились от любых связей с царским правительством, и Российская Федерация это официально правопреемник только Советского Союза.
Ну и дальше — насчёт «начинают с Киевской Руси» — нет, это не так. Что старые книги по истории (например, Карамзин или Соловьёв) начинают с древних времён и вопросов о возникновении славянских племён, что новые учебники.
Java как раз стоило упомянуть в качестве предка. Ведь именно с нее все началось.
Значит, Вы никогда не слышали про C++ Builder.
Язык C# является фактическим развитием C++ Builder, а сам C++ Builder начался с Delphi.
PS если писать про Java, то нужно писать и про J++ и J#.
Java победить не удалось, но со временем потеснили достаточно сильно.
Что касается J#, то он появился вместе с C# и оказался так себе идеей. Для Java-программистов (на которых она ориентировалась) проще было перейти сразу на C#.
Не стоит забывать, что большое количество Java-библиотек были портированы на C#.
Не С, не В, не С++, а именно Java.
Ну, не преувеличивайте :) Если вы про идеологию библиотек, то… в C++Builder нет своих библиотек. Тамошняя VCL написана на Паскале, и собрана на нём же. Её никто на С++ заново не переписывал, просто добавили поддержку BPL формата в компоновщик, чтобы связывать с бинарниками Delphi. А в остальном Builder имеет всё то же, что имел любой классический компилятор С++. Поэтому C++Builder — это не предок C#, а просто ещё одна платформа, которая что-то взяла от Delphi.
По факту, C# даже не «фактическое развитие» Delphi, а просто позаимствовал некоторые хорошие моменты. Ну а сама платформа .NET действительно больше взяла от Java в своей архитектуре, нежели от любой платформы разработки нативных приложений.
Немного не в тему… да простят меня…
Упоминание о 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?
С# живет по принципу «всякая сущность есть объект».
По такому принципу живет Python. А в этом вашем C# есть структуры, я напомню.
Ребята из российского офиса МС пишут нормальные статьи. А тут претензии предъявляйте semen_grinshtein или Boomburum короче к habrahabr
>В 2016 году стало известно о новшествах готовящейся версии С# 7.0: • Бинарные литералы • Локальные функции, Они позволяют структурировать код, например, в стиле JavaScript.
Они превратили C# в JavaScript?
Они превратили C# в JavaScript?А что в этом плохого? Если не удаётся сделать в JavaScript статическую типизацию с поддержкой в IDE, то остаётся «тащить» в язык со статической типизацией наиболее актуальные для него черты языка JavaScript.
MS взял JavaScript в клещи:
— С одной стороны тащит туда типизацию через TypeScript
— С другой стороны меняет C# так чтобы «структурировать код, например, в стиле JavaScript.»
Не к добру это. ;-)
Я просто помню как MS из «благих намерений» даже весь интернет хотел под себя изменить.
Потом перетянуть всех на свой IE — что ему даже удалось на какое-то время!
Я вижу — тактика MS не изменилась с тех пор.
C тех пор у MS уже 2 руководителя сменилось и тенденции изменений с приходом последнего весьма положительные: в open source вышел .net и много чего еще.
Или вы хотите сказать что MS хочет под себя изменить весь open source? :-)
Они превратили C# в JavaScript?
Нет. Почему Вам везде мерещится JavaScript?
dynamic
и компания пришли из IronRuby/IronPython.
И чего ж не упомянуть на каком языке то написан этот редактор? Тем более в статье про языки и кто впереди планеты всей.
А тут C# набирает популярностьПруф?
Это позволяет достичь существенно большего быстродействия программПруф? (Подсказка: в Java есть JIT, весьма эффективный).
https://en.wikipedia.org/wiki/List_of_C_Sharp_software
https://www.quora.com/What-are-some-known-programs-written-in-C
C# в плане языка очень сбалансирован и удобен, в плане технологий тоже развивается, если люди решают с его помощью свои задачи и делают это эффективно, то почему бы и нет?
Может кто-нибудь объяснить что хотел тот милый человек с утверждениями про зомби?
Я понял только то, что он чем-то очень недоволен. Но вот чем?
Всё же для авторских статей надо побольше разбираться в материале.
И таки да, 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, которые позволили делать веб-странички тем, кто до этого делал только десктоп-приложения.
Не обошлось без ложки дёгтя — в первых версиях платформы много было косяков. Но цель была достигнута — многие разработчики выбрали эту платформу, она активно развивается и по сей день. Развивается всё — и «основной» язык, и библиотека классов, и даже новые языки появляются.
А если вернуться к статье — в ней почти поровну перевранной истории, технических ошибок и агитаторской лапши… и всего это в сумме примерно половина статьи. фу.
История языков программирования: C# — впереди планеты всей