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

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

Он также записал упращенный рассказ о современном дотнете и его даже можно использовать как введение в область :)


Видео
Как там с запуском старых .net1.1 приложений в Windows10?
А зачем?
Ну не одни же дифирамбы писать технологии которая с каждым номером по сути внутри меняется целиком и забивается наработанное предыдущее (принудительный перевод на «новые» технологии). Delphi в свое время эта перспективная технология обошлась очень дорого. Самым стабильным по обратной совместимости как был winapi, так и остался.
которая с каждым номером по сути внутри меняется целиком и забивается наработанное предыдущее (принудительный перевод на «новые» технологии)

А можно об этом поподробнее, ибо пишу на шарпе со времен .net2 и как-то не помню такого. Появление ветки .net core и в будущем единого кроссплатформенного .net5 — самое крупное архитектурное изменение фреймворка за всю его историю.

Delphi, так вот откуда у Вас такая лютая обида на .net, значит фреймворк виноват в том, что владельцы и разработчики Delphi облажались, не выдержали конкуренции, и тот в мир иной отошел?
со времен .net2

А почему не с первой версии? И не любовь у меня к .net с неповоротливых контрольных панелей от ATI\AMD и одной утилиты для настройки расходомера, потребовавшей переустанавливать под .net4 ось на рабочем ноутбуке.

Первый блин комом потому что. Я точно не помню что там было такого неправильного в первой версии, но явно не на пустом месте её забыли...


Что же до контрольной панелей и утилит — так представьте что они какой-нибудь новейший Visual C++ рантайм используют, или там 11й DirectX вместо 4.5 .NET Framework. Что-нибудь поменялось?

Справедливости ради, любая Днет программа начинает с 20Мб памяти, что гораздо хуже любого Visual C++ рантайма. И вешать такое в трей нехорошо (например у Авиры ублюдская такая трей утилита жрет 150Мб памяти, из-за чего я например отказался дальше её покупать).

Ну, во-первых, исходная претензия-то заключалась не в потребляемой памяти. А во-вторых, не любая. Только что проверил — с 1-3 МБ начинается, а не с 20...

Да, неточно написал.
Это отладочный пустой проект на Wpf потребляет 26Mb (релиз всего 12).
А такой же релиз на Winforms 4.4Mb.

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

Кстати на днях портировал тут проект с D7 (это выпуск 2002г) на актуальную Rio, и особых проблем не получил. Так что оцениваю неплохо.

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

www.youtube.com/watch?v=0RhjEWVkmSk

Предлагаю забыть про былое, про легаси и попробовать разработку на современном фреймворке — .net core 3.1, или его продолжение .net 5 (но лучше подождать возможного 5.1).


Подход к разработке кора изменился: они сначала догнали легаси, а потом перегнали по количеству доступных API (не были перенесены лишь спорные/ненужные), при этом легаси довольно долго находился на мажорной цифре 4, оставшись в итоге там. Внутренние брекинченжи стараются принимать с большой осторожностью. А если вам не понравилось измененное поведения, то вы можете задать вопрос, указав примеры. Достаточно вспомнить нашумевшие темы: изменение в LINQ или string.IndexOf. То есть, разработчики рантайма прислушиваются к мнению сообщества.


К тому же, у вас есть возможность посодействовать развитию дотнета, исправив баги в BCL, или выдвинув Proposal, или опуститься вниз к JIT.


И это только то, что касается dotnet/runtime

Из чистого любопытства, WCF вы относите к спорным или ненужным? Потому как именно его отсутствие блочит портирование огромного количества библиотек и приложений на .net core.

WCF не является кроссплатформенным. Как альтернатива предлагается gRPC
Есть проект CoreWCF, пока «pre-release» и «not production ready» к сожалению, но многое из классического WCF он уже поддерживает.
Справедливости ради Core 3.1 еще очень было-бы далеко до .NET 4.8 если бы они… просто не забили. Так в Core нет и не будет WCF. Чего такого страшного было в API WCF? Можно-же было транспорт и формат данных поменять оставив принцип простого и легко реализуемого RPC! Нет и не будет Windows Workflow Foundation. Скажете «и не надо»? Не надо только тем у кого корпоративный софт не построен вокруг него. Кроме того я имею смелость утверждать что нет WPF/Winforms и иже с ними поскольку оно Windows-only (т.е. фактически дали только interop к ним). Ну и так далее.
А зачем 1.1? В .Net Framework 1.1 уже пофиксили String.IndexOf() котрый часами мог искать «LAutour» в тексте текущей веб-страницы. Давайте пробовать запускать приложения .Net Framework 1.0!
C NET2.0 (на Windows 2000) до Win7 вообще проблем миграции не было. Лучшая работа в мире (с) [портировать]

Впрочем, по текущей статье переход на Коре 3.1 /5 будет не таким уж гладким. Хотя компиляция в нативный код может во многих случаях стоить того.
".NET Core кроссплатформенный"
".NET Core работает с WPF и WinForms"

Я так и не понял, получается сейчас на линуксе работают WPF и WinForms?
Из ваших утверждений это не следует. Ну т.е. мозг обычного человека наверное так и домыслит, но нет
Вообще маркетологи Микрософт не зря едят свой хлеб
нет, WPF и WinForms работают только на винде. Так как они, WPF и WinForms, используют специфические api'шки винды, пруф. WPF и WinForms могут работать и с .NET Core (только на винде), и с .NET Framework.
Как видим, вывод простого Hello world занимает у нас 2–3 секунды. Давайте разберёмся, почему так долго

Мне вот интерестно, никому не приходит в голову что вывод одной строки занимает 2–3 секунды потому что Скотт Хансельмана и прочие руководители плохо выполняют свою работу и пора бы их выгнать или заставить заниматься делом

Статью не читал, но осуждаю.
Перечитайте внимательней.
2-3 секунды из-за сборки и установки пакетов.
Запустив исполняемый файл напрямую всё работает быстро.

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

Вот кстати кто-то тестирует компиляцию Hello word. На Java занимает 0.3 секунды, а у Скота — 2-3. Почему им никто не задает такие вопросы, как так?

stackoverflow.com/questions/2531616/why-is-the-clojure-hello-world-program-so-slow-compared-to-java-and-python
Почему им никто не задает такие вопросы, как так?

Потому что, на самом деле, всё немного иначе.
Как сказали выше, первая сборка происходит медленно т.к. собираются зависимости, востанавливаются пакеты.
Последующие сборки происходят куда быстрее:


First build run:
dotnet build                     ## Time Elapsed 00:00:01.16

Subsequent build run (no changes):
dotnet build                     ## Time Elapsed 00:00:00.78

Subsequent build run (with changes):
dotnet build                     ## Time Elapsed 00:00:00.94

No package restore (with changes):
dotnet build --no-restore   ## Time Elapsed 00:00:00.61

No package restore (no changes):
dotnet build --no-restore   ## Time Elapsed 00:00:00.46
НЛО прилетело и опубликовало эту надпись здесь

Справедливости ради у джавистов сейчас есть Kotlin. Конечно, рантайм у Java объективно похуже по скорости чем CLR, но вот Kotlin… просто шикарен и потеснил в моем личном списке C# с первого места.


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


Нет ощущения синтаксической нагромождености как с нововведениями C# 8..9, где разработчики пошли по пути добавления новых конструкций в сам язык, намертво зашивая их реализацию в компиляторе.


Помимо этого, в Kotlin изначально все заточено на иммутабельность и отсутствие синтаксических нагромождений, вроде top-level функций, отсутствия ';', все поля класса — на самом деле сразу свойства, и т. п.

все заточено на иммутабельность и отсутствие синтаксических нагромождений, вроде top-level функций, отсутствия ';', все поля класса — на самом деле сразу свойства, и т. п.

это всё есть в F#

F# в первую очередь функциональный язык и полигон для предварительной обкатки синтаксических трюков C#. Поэтому, F# не заточен под разработку типичных сценариев с которыми мы сталкиваемся в C# и Java, а предлагает иную парадигму мышления.
Kotlin же, не предлагает менять мышление, а по настоящему доводит до ума наш обычный ООП-подход. Кроме того, в F# нет встраиваемых лямбд и такой простоты расширения синтаксиса "из коробки" =)

Есть и inline function и computation expression c CustomOperation для написания своих DSL.
есть еще много чего, чего нет в котлине, например выделение памяти на стеке.
Котлин хорош, но печалит, что вокруг все равно всё Java.
Кроме того, на бэкенде многие также не используют Котлин

Зарегистрируйтесь на Хабре, чтобы оставить комментарий