Re[5]: Если не C#, тогда что? (и закроем эту тему)
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.11.22 19:54
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>не стал проверять жаву, но дотнет 6 натив релиз лин64 против раст релиз (консольный ХВ), в среднем 80 к 1.

А конкретные времена каковы?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Если не C#, тогда что? (и закроем эту тему)
От: vaa  
Дата: 05.11.22 02:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>не стал проверять жаву, но дотнет 6 натив релиз лин64 против раст релиз (консольный ХВ), в среднем 80 к 1.

S>А конкретные времена каковы?

C# (.net 6.0.300)

real 0m0,076s
user 0m0,035s
sys 0m0,012s


rustc 1.61.0 (fe5b13d68 2022-05-18)

real 0m0,001s
user 0m0,001s
sys 0m0,000s

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[6]: Если не C#, тогда что? (и закроем эту тему)
От: vaa  
Дата: 05.11.22 02:51
Оценка: 3 (1)
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>не стал проверять жаву, но дотнет 6 натив релиз лин64 против раст релиз (консольный ХВ), в среднем 80 к 1.

vaa>>Это такая столовая ложка дегтя в бочке дотнета.
vaa>>тот же ди всего 3 к 1.

S>С семеркой не сравнивал Native AOT Deployment


S>https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/#native-aot


Да, действительно, почти как в ДИ приятно удивлен!

7.0.100-rc.2.22477.23
../dotnet build -c release --runtime=linux-x64 --self-contained

real 0m0,117s
user 0m0,067s
sys 0m0,029s

../dotnet publish -c release --runtime=linux-x64 --self-contained

real 0m0,003s
user 0m0,004s
sys 0m0,000s


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

ДОПОЛНЕНИЕ: ложка дегтя. F# не аотится.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 05.11.2022 2:56 Разраб . Предыдущая версия .
Re[6]: Если не C#, тогда что? (и закроем эту тему)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.11.22 10:11
Оценка: 3 (1)
Здравствуйте, rudzuk, Вы писали:

R>В действительности, что жаба, что шарп — все едино, близнецы-братья. Жаба более консервативна, и это хорошо, не будет стыдно за поспешно принятые решения. К шарпу пытаются прикрутить всего и побольше. В результате не язык, а свалка. Вместо того, чтобы сделать нормальную работу с шаблонным кодом, они впендюривают костыль генерик матх и прутся. Тфу на них, обоих двух.

Категорически не согласен! Тот же Linq, Pattern Matching, Source Generator кстати это и есть замена шаблонов которые создаются с помощью кодогенерации.
Надеюсь прикрутят более интересных инструментов
генерик матх это упрощение работы с числовыми типами. Расширение описания интерфейсов с перегрузкой операторов.
Кроме того куча изменений для ускорения работы с нативом (Span, ref struct,ref fields,Function Pointers) а так же Native AOT
и солнце б утром не вставало, когда бы не было меня
Отредактировано 05.11.2022 10:42 Serginio1 . Предыдущая версия .
Re[7]: Если не C#, тогда что? (и закроем эту тему)
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.11.22 13:47
Оценка: 2 (1)
Здравствуйте, Serginio1, Вы писали:
S>генерик матх это упрощение работы с числовыми типами. Расширение описания интерфейсов с перегрузкой операторов.
Помимо генерик матх, static virtual members позволяют, например, обойти ограничение ограничений на конструкторы (pun intended).
Допустим, я хочу, чтобы меня параметризовывали типом, у которого есть конструктор от 1го строкового параметра. В современном дотнете я так сделать не могу, придётся реализовывать двухфазную инициализацию, или городить городушки с активатором (ненадёжно), либо дополнительно параметризовывать фабрикой:

  двухфазная инициализация
public interface IRequest: IDisposable
{
  void Init(string url);
  void Send(byte[] data);
}

public static Send<T>(string url, byte[] data)
  where T: IRequest, new
{
   using(var t = new T()) // :(
   { 
     t.Init(url);
     t.Send(data);
   }
}

  фабрика
public interface IRequest: IDisposable
{
  void Send(byte[] data);
}
public interface IRequestFactory<T> 
  where T: IRequest
{
  T Create(string url);
}

public static Send<T, F>(string url, byte[] data)
  where T: IRequest, new
  where F: IRequestFactory<T>, new
{
   var f = new IRequestFactory(); // :( Ну, мы, конечно можем это закешировать, или обойти через struct, но осадочек остаётся.
   using(var t = f.Create(url)) 
     t.Send(data);
}

При наличии static virtual всё это можно свернуть в значительно более простую, понятную, и компактную запись:
public interface IRequest<T>: IDisposable
  where T: IRequest<T>
{
  static virtual T Create(string url);
  void Send(byte[] data);
}

public static Send<T>(string url, byte[] data)
  where T: IRequest
{
   using(var t = T.Create(url)) 
     t.Send(data);
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Если не C#, тогда что? (и закроем эту тему)
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.11.22 15:08
Оценка: 3 (1)
Здравствуйте, vaa, Вы писали:
vaa>на самом деле чистый jvm-код можно настроить на более быстрый старт. например уменьшив максимальный размер кучи до 30-60МБ и другими ключами.
Удивительный эффект. Не очень понятно, почему стартап JVM зависит от макс. размера кучи; ну, и его сокращение — прямая дорога в ад: ведь чем меньше куча, тем чаще нужно делать GC.
vaa>но вот взять любую демку из вебасм фрэймворков, тот же yew раста и блазоровский хелловорд и сравнить. не нужно секундомера чтобы понять что и сколько грузится.
vaa>и разве не цель большинства участников данного форума в оптимизации программы, а загрузка это ведь часть процесса.
Загрузка играет роль только в двух сценариях:
1. мы запускаем какое-то приложение для пользователя, и хочется чтобы запуск происходил без визуальных лагов
2. мы запускаем какое-то приложение тысячи раз в секунду, и хочется, чтобы сумма задержек была поменьше.

Вариант 1, по большому счёту, означает, что любые времена лучше 100мс уже устраивают. По моим субьективным впечатлениям, джава ухитряется продолбать даже такую мягкую метрику, несмотря на наличие интерпретатора (== отсутствие JIT-delays).
Вариант 2 — это какие-то утилиты командной строки, которые вызываются над списками в десятки тыщ файлов, при этом сами делают что-то простое. Там да, стартап тайм в 30мс сильно хуже стартап тайма в 3мс, при условии самой работы, занимающей 20мс.
Ну, как бы да — управляемая среда, она не про это. Хотя вот по соседству пишут, что .Net уже и эту нишу окучил благодаря AOT. В Java, как я понимаю, официальный ответ — "поднимайте сервер, а саму утилиту делайте нативным тонким прокси к этому серверу". Ну, вот как языковые сервисы для VS Code — никто в здравом уме не запускает новый экземпляр JVM на каждое событие вроде "code completion".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Если не C#, тогда что? (и закроем эту тему)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.11.22 16:59
Оценка:
Здравствуйте, Sinclair, Вы писали:

Сразу вспоминается Delphi с виртуальными конструкторами!
Добавлю ссылочку Руководство. Изучение функции C# 11 — статические виртуальные элементы в интерфейсах
и солнце б утром не вставало, когда бы не было меня
Отредактировано 05.11.2022 18:45 Serginio1 . Предыдущая версия .
Re[9]: Если не C#, тогда что? (и закроем эту тему)
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.11.22 17:24
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Sinclair, Вы писали:


S>Сразу вспоминается Delphi с виртуальными конструкторами!

Именно, именно. Ну, и class virtual method там тоже были во вполне себе полный рост.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Если не C#, тогда что? (и закроем эту тему)
От: vaa  
Дата: 06.11.22 00:39
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Удивительный эффект. Не очень понятно, почему стартап JVM зависит от макс. размера кучи; ну, и его сокращение — прямая дорога в ад: ведь чем меньше куча, тем чаще нужно делать GC.
по-моему ничего удивительного, просто объем кода который нужно загрузить.
речь идет от минимальном значении. насколько я понимаю, жава при старте пытается зарезервировать указанное значение, инициализируя огромный кусок памяти.
проверял я это еще во времена 1.6.
S>Ну, как бы да — управляемая среда, она не про это. Хотя вот по соседству пишут, что .Net уже и эту нишу окучил благодаря AOT. В Java, как я понимаю, официальный ответ — "поднимайте сервер, а саму утилиту делайте нативным тонким прокси к этому серверу". Ну, вот как языковые сервисы для VS Code — никто в здравом уме не запускает новый экземпляр JVM на каждое событие вроде "code completion".
я выше уже приводил, АОТ не работает дальше ХВ(стандартную библиотеку фшарпа не осилил).
Не все же сервера. клиентов больше. и самое странное, что старый дотнет стартовал шустрее.
Неужели библиотеки стали жирнее или настолько изменились технологии. мне кажется 1 плюс возможно большАя связанность тянет за собой кучу кода.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Если не C#, тогда что? (и закроем эту тему)
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.11.22 08:25
Оценка: 3 (1)
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, Sinclair, Вы писали:

S>>Удивительный эффект. Не очень понятно, почему стартап JVM зависит от макс. размера кучи; ну, и его сокращение — прямая дорога в ад: ведь чем меньше куча, тем чаще нужно делать GC.
vaa>по-моему ничего удивительного, просто объем кода который нужно загрузить.
Объём загружаемого кода зависит от того, что написано в main. От размера кучи он никак не зависит.

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

Да, у Оракла все советы про оптимизацию стартап тайма сводятся к "покрутите размер кучи" и "установите минимальный размер кучи равный максимальному".
Резервируют они макс. размер; а мин. размер сразу коммитят. Я так понял, что на это время и уходит.

vaa>я выше уже приводил, АОТ не работает дальше ХВ(стандартную библиотеку фшарпа не осилил).

Ну, значит есть к чему стремиться.
vaa>Не все же сервера. клиентов больше. и самое странное, что старый дотнет стартовал шустрее.
Вот это странно. Там же наоборот прикрутили множество мер по ускорению — tiered compilation, всё такое.
vaa>Неужели библиотеки стали жирнее или настолько изменились технологии. мне кажется 1 плюс возможно большАя связанность тянет за собой кучу кода.
Ну, это нетрудно посмотреть — в блоге про ускорение .Net 7 было показано, как трассировать JIT.
И заодно можно увидеть, сколько всего дёргается перед тем, как hello world получает управление в Main().
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Если не C#, тогда что? (и закроем эту тему)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.11.22 09:44
Оценка: 3 (1)
Здравствуйте, vaa, Вы писали:
vaa>Не все же сервера. клиентов больше. и самое странное, что старый дотнет стартовал шустрее.
vaa>Неужели библиотеки стали жирнее или настолько изменились технологии. мне кажется 1 плюс возможно большАя связанность тянет за собой кучу кода.
Ну тут может играть роль оптимизация JIT кода. На Core выполнение быстрее https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/
и солнце б утром не вставало, когда бы не было меня
Re: Если не C#, тогда что? (и закроем эту тему)
От: Privalov  
Дата: 07.11.22 08:40
Оценка: 3 (1)
Здравствуйте, vaa, Вы писали:

Фортран и Кобол
Автор: Tai
Дата: 26.10.22
Re[7]: Если не C#, тогда что? (и закроем эту тему)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 07.11.22 11:50
Оценка:
Здравствуйте, vaa, Вы писали:

Кстати ты помнится ругался на скорость компиляции в Webassembly
Интересно изменилась ли скорость в .Net 7 и какова скорость Native AOT
и солнце б утром не вставало, когда бы не было меня
Re[8]: Если не C#, тогда что? (и закроем эту тему)
От: vaa  
Дата: 07.11.22 13:13
Оценка: 2 (1)
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, vaa, Вы писали:


S>Кстати ты помнится ругался на скорость компиляции в Webassembly

S>Интересно изменилась ли скорость в .Net 7 и какова скорость Native AOT
последние опыты в нет7 на ХВ показали быструю компиляцию. вебассембли не проверял.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[9]: Если не C#, тогда что? (и закроем эту тему)
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.11.22 07:04
Оценка: 1 (1) +1
Здравствуйте, vaa, Вы писали:
vaa>последние опыты в нет7 на ХВ показали быструю компиляцию. вебассембли не проверял.
Я, похоже, нашёл экспоненциалочку в .Net 6. Есть проектик, в котором код типа такого кладёт компилятор навзничь:
var q = 
  from x1 in source
  from x2 in source
  from x3 in source
  from x4 in source
  from x5 in source
  from x6 in source
  from x7 in source
  from z1 in Result.InitWith(0)
  from z2 in Result.InitWith(0)
  from z3 in Result.InitWith(0)
  from z4 in Result.InitWith(0)
  select ValueTuple.Create(
    0*z1[-1, -1] + 0*z2[-1, -1] + 0*z3[-1, -1] + 0*z4[-1, -1] + 0*x1 + 0*x2 + 0*x3 + 0*x4 + 0*x5 + 0*x6 + 0*x7, 
    0*z1[-1, -1] + 0*z2[-1, -1] + 0*z3[-1, -1] + 0*z4[-1, -1] + 0*x1 + 0*x2 + 0*x3 + 0*x4 + 0*x5 + 0*x6 + 0*x7,
    0*z1[-1, -1] + 0*z2[-1, -1] + 0*z3[-1, -1] + 0*z4[-1, -1] + 0*x1 + 0*x2 + 0*x3 + 0*x4 + 0*x5 + 0*x6 + 0*x7, 
    0*z1[-1, -1] + 0*z2[-1, -1] + 0*z3[-1, -1] + 0*z4[-1, -1] + 0*x1 + 0*x2 + 0*x3 + 0*x4 + 0*x5 + 0*x6 + 0*x7);

Конкретно это ещё компилируется за разумное время, но если добавить ещё несколько from, то сборка начинает работать с привычной скоростью С++.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Если не C#, тогда что? (и закроем эту тему)
От: zx zpectrum  
Дата: 04.03.23 08:15
Оценка:
Gt_>на C# не напишешь что-то размером с хадуп или cassandra.
С другой стороны, на Java я с трудом себе представляю извраты наподобие таких: https://github.com/Ryujinx/Ryujinx. Под которые кроме садо-мазо-C++ и конкурентов-то нет.

Современный кроссплатформенный Дотнет любят и ценят за другое. За удобнейшую возможность спускаться с высокого уровня на очень низкий. Эмитирование кода на лету, динамические рекомпиляции, дёргание железа, безболезненная интеграция с ОС и нативом, вот это всё.
В секурити и в серверной части, плотно интегрированной со всяческой железячной и низкоуровневой экзотикой, он весьма в ходу, например.
Для классических данных да, лучше брать хоженный вдоль и поперек JVM, с накопленной базой знаний на все вопросы.
.Net в этом отношении в теории как бы не менее мощный, однако куда более экзотичный и экспериментальный.
Т.е. что-то размером с хадуп или cassandra теоретически написать можно, но "полимеров" придется профукать куда больше.
Re[2]: Если не C#, тогда что? (и закроем эту тему)
От: zx zpectrum  
Дата: 04.03.23 08:27
Оценка:
P>Фортран и Кобол
Автор: Tai
Дата: 26.10.22

Для job security – однозначно Подозреваю, что на этих языках будут многовековые проекты. Если человечество доживёт, конечно.
А ежели захочется безопасности в представлении здорового человека — бронебойных mission–critical решений — то почему бы и не Ада?
Это, блин, храм, построенный толковейшими практиками. Каждая мелочь продумана, а не набыдлокожена. После неё всё остальное напоминает какие-то шараш-шиномонтажки и стихийные рынки
Re[4]: Если не C#, тогда что? (и закроем эту тему)
От: Gt_  
Дата: 05.03.23 09:43
Оценка:
ZZ>Современный кроссплатформенный Дотнет любят и ценят за другое. За удобнейшую возможность спускаться с высокого уровня на очень низкий. Эмитирование кода на лету, динамические рекомпиляции, дёргание железа, безболезненная интеграция с ОС и нативом, вот это всё.

если в самом деле любят, где проекты ? где что-то типа андройд, хадупа, кафки, касандры ? нету же ничего. по мне его любят корпорации описывать унылую бизнес логику, что раньше в сторед процедурах держали.
Re[5]: Если не C#, тогда что? (и закроем эту тему)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.03.23 11:49
Оценка:
Здравствуйте, Gt_, Вы писали:

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


https://survey.stackoverflow.co/2022/#most-popular-technologies-misc-tech-prof

Обрати внимание на Xamarin и сравни с QT
и солнце б утром не вставало, когда бы не было меня
Re[3]: Если не C#, тогда что? (и закроем эту тему)
От: Privalov  
Дата: 05.03.23 11:55
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>А ежели захочется безопасности в представлении здорового человека — бронебойных mission–critical решений — то почему бы и не Ада?

ZZ>Это, блин, храм, построенный толковейшими практиками. Каждая мелочь продумана, а не набыдлокожена. После неё всё остальное напоминает какие-то шараш-шиномонтажки и стихийные рынки

Я тут как-то цитату приводил
Автор: Privalov
Дата: 25.10.22
. Может, в этом все дело?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.