Информация об изменениях

Сообщение Re[16]: За счет чего выстреливают языки? от 13.07.2015 14:31

Изменено 14.07.2015 0:11 VladD2

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

_>Логики то полно, но она практически (написание инструментов командной строки или сервисов — это всё же редкость) всегда должна соседствовать с GUI. А если на Nemerle нельзя писать GUI, то...

1)Можно. Но для C# есть куча кнопко-формо-шлёпок.
2)Код на немерле можно подключить к проекту на C# без проблем. Это тебе не С++.

_>Просто те же лёгкие потоки (а при их использование асинхронный IO начинает казаться синхронным) в .net сильно интегрированы в язык (async/await) и не совсем понятно как с этим у Nemerle.

Подключаешь пару длл и получаешь абсолютно тот же код.
https://github.com/rsdn/nemerle/blob/master/snippets/Nemerle.Async/Tests/async-compile2.n

_>А вообще речь шла про какие-то аналоги библиотек типа libevent, libev, libuv.

Чемп тебя Task Parallel Library не устраивает?

Ты мне лучше скажи есть в линуксе вот такое:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd627187%28v=vs.85%29.aspx

User-mode scheduling (UMS) is a lightweight mechanism that applications can use to schedule their own threads. An application can switch between UMS threads in user mode without involving the system scheduler and regain control of the processor if a UMS thread blocks in the kernel. UMS threads differ from fibers in that each UMS thread has its own thread context instead of sharing the thread context of a single thread. The ability to switch between threads in user mode makes UMS more efficient than thread pools for managing large numbers of short-duration work items that require few system calls.

Те винда возвращает управление пользовательскому планировщику, если поток завис на системном вызове или залез в своп.

_>Ну хорошо, а хотя бы веб-фреймворк на Nemerle имеется? Я помнится читал на хабре статью про NemerleWeb, но там было в основном про генерацию html/js (что не особо интересно сейчас, т.к. проще использовать статические страницы и какой-нибудь angular.js),

не проще.

_>а вот про собственно серверную работу (оптимальная организацию обработчиков ajax запросов) я так ничего и не увидел.

Это всё NemerleWeb сам делает.

_>Собственно даже не понятен базовый принцип работы — создаётся собственный сервер (как в node.js) или же каким-то образом организуется подключение к существующим (например к nginx, через wsgi).

Оно работает поверх ASP.NET.
Так что везде, где работает ASP.NET бедет работать NemerleWeb.

_>Эммм, у меня было утверждение, что это всё легко пишется на C++, а не то, что по всем пунктам существуют готовые идеально отлаженные решения. Я думаю нет никаких сомнение, что авторы легко могут довести данную разработку до законченного вида? )

Ну, с многопоточностью они, может быть, и разберутся.
А вот с остальным... что-то я не верю.

_>Возможно. Просто при реализации многопоточности через модель акторов понятие блокировки (в смысле ручного lock'a) автоматически полностью исчезает из всего кода... )))

Весьма смешное заявление.
Вся синхронизация всё равно остаётся, просто делается другими методами.

_>Ну да, препроцессор. Однако т.к. он уже полностью готовый, продуманный и вылизанный, то не вижу причин не использовать его, если возникла потребность в АОП. Лично я АОП вообще нигде не использую. Но если бы вдруг зачем-то понадобилось, то без проблем взял бы этого инструмент.

Вот когда попробуешь использовать оба инструмента. Поймешь.

_>Там в чём принципиальная "крутизна" форматирования строк в Nemerle? Проверка на этапе компиляции, как мы видим, есть и в C++.

В том что в С++ тебе придётся написать больше кода.

_>Не понял, что за проверки, если у нас xml без схем? ) Там же правильность получается по построению. )

Вот такое повторишь?
      def html = xml <# 
        <html>
          <head>
            <title>$title</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
            <link rel="stylesheet" href="http://rsdn.ru/css/article.css" type="text/css" />
          </head>
          <body marginwidth="20" marginheight="20">
            <H1>$title</H1>
            
            <H2 $unless (props.IsEmpty())>Свойства</H2>
            <ol $unless (props.IsEmpty())>
              <li $foreach (p in props)>$(p.Name) : $(p.PropertyType)</li>
            </ol>
            
            <H2 $unless (events.IsEmpty())>События</H2>
            <ol $unless (events.IsEmpty())>
              <li $foreach (e in events)>$(e.Name) : $(e.EventHandlerType)</li>
            </ol>
          </body>
        </html>
   #>;


_>Эм, не очень понял как это соотносится с "Возможность поддержать кучу разных видов сериализации одним макросом". ) Вышеприведённый текст скорее напоминает какое-то автоматическую генерацию обёрток для чужого кода.

Как я понял разные системы, имеют разные протоколы.
И нужно уметь гонять по ним объекты.

_>И если речь не о рантайме, то такое обычно делается какой-то внешней утилитой.

Которая ничего не знает о проекте.
Я такое делал. Это ад.

_>Так я и написал, что "слабее Nemerle". ) Хотя это "слабее" общетеоретическое — на практике даже возможности C++ на полную редко используются.

Ибо в С++ это ад. Трудно написать. Трудно использовать. Про то, сколько времени оно компилируется, я лучше помолчу.
У нас один проект, генерирующий четырёх метровую сборку, компилируется минуту. Мы считаем, что это очень медленно.

_>Не понимаю как это возможно.

Да ваще не проблема.
Поднялись по стеку да посмотрели.

_>А если мы захватили мьютекс (об этом же речь, правильно?) где-то выше по стеку вызова?

Правильно.

_>Т.е. речь об интроспекции времени компиляции? ) Это да, классная вещь... Давно о ней мечтаю в C++. Собственно это, плюс работа со строками в шаблонах без костылей, и МП в C++ уже было бы приемлемым.

Вот только в немерле оно делает несколькими строками кода.
Да и не нужно в большинстве случаев.

_>
_>function<int(int)> fac=[&](int n) {return n==1?1:n*fac(n-1);};
_>cout<<fac(5)<<endl;//120
_>

Именно этот код я и ожидал.

_>Хотя такой код конечно же будет терять в эффективности (опускаться где до уровня быстродействия Java/.Net).

Вот только немерле локальные функции жестоко инлайнит.
А ещё тут нет вывода типов.

_>Не, я имел в виду просто переопределение обычных операторов. Если речь именно про введение новых, то такого конечно же нет. Правда оно и не особо надо — стандартных более чем хватает. )

Не хватает.

_>Эмм, причём тут открытые исходники компиляторов? ) Речь вообще о другом, как раз о специальной поддержке подгружаемых плагинов.

Это почти ничем не отличается от вставки кода в компилятор.
Вот только и то и другое ад.

_>На фоне C# и D и Nemerle находятся где-то рядом, в области полноценного МП. ))) А C++ где-то между ними (конец шкалы) и C# (начало шкалы — нулевое МП), скажем на 2/3 отрезка. )))

Вот только в реальности D сильно отстаёт от немерле.

_>Я имел в виду деньги на рекламу — у Mozilla нет орд евангелистов, как скажем у того же MS. Ну и кстати размер команды, работающей над языком, не обязательно определяется только деньгами.

Исключительно деньгами. Вопрос в том кто их платит.
Если человек работает за идею, то он просто сам за себя платит. Из накоплений или делая другую работу за деньги.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Re[16]: За счет чего выстреливают языки?
Здравствуйте, alex_public, Вы писали:

_>Логики то полно, но она практически (написание инструментов командной строки или сервисов — это всё же редкость) всегда должна соседствовать с GUI. А если на Nemerle нельзя писать GUI, то...

1)Можно. Но для C# есть куча кнопко-формо-шлёпок.
2)Код на немерле можно подключить к проекту на C# без проблем. Это тебе не С++.

_>Просто те же лёгкие потоки (а при их использование асинхронный IO начинает казаться синхронным) в .net сильно интегрированы в язык (async/await) и не совсем понятно как с этим у Nemerle.

Подключаешь пару длл и получаешь абсолютно тот же код.
https://github.com/rsdn/nemerle/blob/master/snippets/Nemerle.Async/Tests/async-compile2.n

_>А вообще речь шла про какие-то аналоги библиотек типа libevent, libev, libuv.

Чемп тебя Task Parallel Library не устраивает?

Ты мне лучше скажи есть в линуксе вот такое:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd627187%28v=vs.85%29.aspx

User-mode scheduling (UMS) is a lightweight mechanism that applications can use to schedule their own threads. An application can switch between UMS threads in user mode without involving the system scheduler and regain control of the processor if a UMS thread blocks in the kernel. UMS threads differ from fibers in that each UMS thread has its own thread context instead of sharing the thread context of a single thread. The ability to switch between threads in user mode makes UMS more efficient than thread pools for managing large numbers of short-duration work items that require few system calls.

Те винда возвращает управление пользовательскому планировщику, если поток завис на системном вызове или залез в своп.

_>Ну хорошо, а хотя бы веб-фреймворк на Nemerle имеется? Я помнится читал на хабре статью про NemerleWeb, но там было в основном про генерацию html/js (что не особо интересно сейчас, т.к. проще использовать статические страницы и какой-нибудь angular.js),

не проще.

_>а вот про собственно серверную работу (оптимальная организацию обработчиков ajax запросов) я так ничего и не увидел.

Это всё NemerleWeb сам делает.

_>Собственно даже не понятен базовый принцип работы — создаётся собственный сервер (как в node.js) или же каким-то образом организуется подключение к существующим (например к nginx, через wsgi).

Оно работает поверх ASP.NET.
Так что везде, где работает ASP.NET бедет работать NemerleWeb.

_>Эммм, у меня было утверждение, что это всё легко пишется на C++, а не то, что по всем пунктам существуют готовые идеально отлаженные решения. Я думаю нет никаких сомнение, что авторы легко могут довести данную разработку до законченного вида? )

Ну, с многопоточностью они, может быть, и разберутся.
А вот с остальным... что-то я не верю.

_>Возможно. Просто при реализации многопоточности через модель акторов понятие блокировки (в смысле ручного lock'a) автоматически полностью исчезает из всего кода... )))

Весьма смешное заявление.
Вся синхронизация всё равно остаётся, просто делается другими методами.

_>Ну да, препроцессор. Однако т.к. он уже полностью готовый, продуманный и вылизанный, то не вижу причин не использовать его, если возникла потребность в АОП. Лично я АОП вообще нигде не использую. Но если бы вдруг зачем-то понадобилось, то без проблем взял бы этого инструмент.

Вот когда попробуешь использовать оба инструмента. Поймешь.

_>Там в чём принципиальная "крутизна" форматирования строк в Nemerle? Проверка на этапе компиляции, как мы видим, есть и в C++.

В том что в С++ тебе придётся написать больше кода.

_>Не понял, что за проверки, если у нас xml без схем? ) Там же правильность получается по построению. )

Вот такое повторишь?
      def html = xml <# 
        <html>
          <head>
            <title>$title</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
            <link rel="stylesheet" href="http://rsdn.ru/css/article.css" type="text/css" />
          </head>
          <body marginwidth="20" marginheight="20">
            <H1>$title</H1>
            
            <H2 $unless (props.IsEmpty())>Свойства</H2>
            <ol $unless (props.IsEmpty())>
              <li $foreach (p in props)>$(p.Name) : $(p.PropertyType)</li>
            </ol>
            
            <H2 $unless (events.IsEmpty())>События</H2>
            <ol $unless (events.IsEmpty())>
              <li $foreach (e in events)>$(e.Name) : $(e.EventHandlerType)</li>
            </ol>
          </body>
        </html>
   #>;


_>Эм, не очень понял как это соотносится с "Возможность поддержать кучу разных видов сериализации одним макросом". ) Вышеприведённый текст скорее напоминает какое-то автоматическую генерацию обёрток для чужого кода.

Как я понял разные системы, имеют разные протоколы.
И нужно уметь гонять по ним объекты.

_>И если речь не о рантайме, то такое обычно делается какой-то внешней утилитой.

Которая ничего не знает о проекте.
Я такое делал. Это ад.

_>Так я и написал, что "слабее Nemerle". ) Хотя это "слабее" общетеоретическое — на практике даже возможности C++ на полную редко используются.

Ибо в С++ это ад. Трудно написать. Трудно использовать. Про то, сколько времени оно компилируется, я лучше помолчу.
У нас один проект, генерирующий четырёх метровую сборку, компилируется минуту. Мы считаем, что это очень медленно.

_>Не понимаю как это возможно.

Да ваще не проблема.
Поднялись по стеку да посмотрели.

_>А если мы захватили мьютекс (об этом же речь, правильно?) где-то выше по стеку вызова?

Правильно.

_>Т.е. речь об интроспекции времени компиляции? ) Это да, классная вещь... Давно о ней мечтаю в C++. Собственно это, плюс работа со строками в шаблонах без костылей, и МП в C++ уже было бы приемлемым.

Вот только в немерле оно делает несколькими строками кода.
Да и не нужно в большинстве случаев.

_>
_>function<int(int)> fac=[&](int n) {return n==1?1:n*fac(n-1);};
_>cout<<fac(5)<<endl;//120
_>

Именно этот код я и ожидал.

_>Хотя такой код конечно же будет терять в эффективности (опускаться где до уровня быстродействия Java/.Net).

Вот только немерле локальные функции жестоко инлайнит.
А ещё тут нет вывода типов.

_>Не, я имел в виду просто переопределение обычных операторов. Если речь именно про введение новых, то такого конечно же нет. Правда оно и не особо надо — стандартных более чем хватает. )

Не хватает.

_>Эмм, причём тут открытые исходники компиляторов? ) Речь вообще о другом, как раз о специальной поддержке подгружаемых плагинов.

Это почти ничем не отличается от вставки кода в компилятор.
Вот только и то и другое ад.

_>На фоне C# и D и Nemerle находятся где-то рядом, в области полноценного МП. ))) А C++ где-то между ними (конец шкалы) и C# (начало шкалы — нулевое МП), скажем на 2/3 отрезка. )))

Вот только в реальности D сильно отстаёт от немерле.

_>Я имел в виду деньги на рекламу — у Mozilla нет орд евангелистов, как скажем у того же MS. Ну и кстати размер команды, работающей над языком, не обязательно определяется только деньгами.

Исключительно деньгами. Вопрос в том кто их платит.
Если человек работает за идею, то он просто сам за себя платит. Из накоплений или делая другую работу за деньги.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>