Здравствуйте, WolfHound, Вы писали:
_>>Т.е. я правильно понимаю, что весь десктоп и все мобильные приложения (всё это требует GUI) пролетают мимо? Т.е. по сути для Немерле остаются только сервера?
WH>Любая логика.
WH>Совсем любая.
WH>Или, по-твоему, на десктопе нет логики?
Логики то полно, но она практически (написание инструментов командной строки или сервисов — это всё же редкость) всегда должна соседствовать с GUI. А если на Nemerle нельзя писать GUI, то...
_>>Кстати, а как у него с серверными фреймворками? Асинхронный IO, лёгкие потоки и т.п?
WH>Всё что есть в .НЕТ. Плюс можно ещё очень много сделаь на макросах.
Просто те же лёгкие потоки (а при их использование асинхронный IO начинает казаться синхронным) в .net сильно интегрированы в язык (async/await) и не совсем понятно как с этим у Nemerle. А вообще речь шла про какие-то аналоги библиотек типа libevent, libev, libuv.
Ну хорошо, а хотя бы веб-фреймворк на Nemerle имеется? Я помнится читал на хабре статью про NemerleWeb, но там было в основном про генерацию html/js (что не особо интересно сейчас, т.к. проще использовать статические страницы и какой-нибудь angular.js), а вот про собственно серверную работу (оптимальная организацию обработчиков ajax запросов) я так ничего и не увидел. Собственно даже не понятен базовый принцип работы — создаётся собственный сервер (как в node.js) или же каким-то образом организуется подключение к существующим (например к nginx, через wsgi).
_>>Ну вот посмотрим по списку здесь https://rsdn.ru/forum/nemerle/4281048.1Автор: hi_octane
Дата: 23.05.11
_>>1. https://github.com/solodon4/Mach7
WH>WH>The library is not yet suitable for multi-threaded environment.
WH>
WH>Проверки на то, что проверены все варианты и одно правило не скрывает другое, тоже как я понимаю, нет.
WH>А это важно при развитии проекта.
Эммм, у меня было утверждение, что это всё легко пишется на C++, а не то, что по всем пунктам существуют готовые идеально отлаженные решения. Я думаю нет никаких сомнение, что авторы легко могут довести данную разработку до законченного вида? )
_>>2. http://actor-framework.org
WH>Поскольку не известно, что делал hi_octane говорить на эту тему не имеет смысла.
Возможно. Просто при реализации многопоточности через модель акторов понятие блокировки (в смысле ручного lock'a) автоматически полностью исчезает из всего кода... )))
_>>3. http://www.aspectc.org
WH>WH>AspectC++ is a source-to-source translator.
WH>Даже не смешно.
Ну да, препроцессор. Однако т.к. он уже полностью готовый, продуманный и вылизанный, то не вижу причин не использовать его, если возникла потребность в АОП. Лично я АОП вообще нигде не использую. Но если бы вдруг зачем-то понадобилось, то без проблем взял бы этого инструмент.
_>>5. Стандартная библиотек и boost
WH>Даже не смешно.
А что такого? ) Или я может не понял о чём речь? ) Но инструментов для логирования в C++ просто полно (в том же boost'е имеем огромный фреймворк на эту тему). А для замеров времени вообще достаточно стандартной библиотеки.
_>>8. Не видел чем так круто форматирование строк в Nemerle, поэтому непонятно. Но в любом случае разного подобного добра полно и в бусте и отдельно (https://github.com/panzi/formatstring например) — выбирай на любой вкус.
WH>Близко не стояло.
WH>WH>$"Property '$(astProperty.Name)' has invalid type '$t'. Only list of declarations can be decomposed."
WH>
Там в чём принципиальная "крутизна" форматирования строк в Nemerle? Проверка на этапе компиляции, как мы видим, есть и в C++.
_>>9. Ну на такие простенькие dsl (если xml без схем) C++ то уж легко хватает. )))
WH>Вот чтобы прямо с нужным синтаксисом и проверками на этапе компиляции?
Не понял, что за проверки, если у нас xml без схем? ) Там же правильность получается по построению. )
_>>10. Не понял о чём речь.
WH>Наверное про это:
WH>WH>Кроме того много работы выполняли макросы и стиль программирования, за которые в C# проекте я бы руки отрывал. Например нужно было устанавливать связь с разными старыми системами, написанными чёрт знает на чём. Для каждой такой системы был заведён свой проект, с одинаковой иерархией namespace'ов. И в них была строгая иерархия наименования типа Root.Api.XyzTasks, Root.Api.XyzSerializer, Root.Comm.XyzListener и т.п. Так вот если в имени класса было Xyz, то автоматом генерировались пачками приватные члены, характерные для этой системы. Если при этом ещё и namespace Comm, то создавалась прокся с полностью асинхронными вызовами тех public методов что имелись в классе. Ну и так далее.
Эм, не очень понял как это соотносится с "Возможность поддержать кучу разных видов сериализации одним макросом". ) Вышеприведённый текст скорее напоминает какое-то автоматическую генерацию обёрток для чужого кода. И если речь не о рантайме, то такое обычно делается какой-то внешней утилитой.
_>>11. Это как раз C++ умеет из коробки, хотя и слабее Nemerle. Для этого есть серьёзные библиотеки, типа https://github.com/bolero-MURAKAMI/Sprout.
WH>Думаю, ты не понимаешь масштаб бедствия...
WH>Макросы немерла могут обежать весь проект, собрать нужную информацию и сгенерировать всё что нужно.
WH>На С++ тебе придётся собирать всё в кучу руками.
Так я и написал, что "слабее Nemerle". ) Хотя это "слабее" общетеоретическое — на практике даже возможности C++ на полную редко используются.
_>>12. Тоже не очень понятно.
WH>Если метод должен быть вызван под локом, а ты забыл сделать лок, и пытаешься вызвать метод, то компилятор даст тебе по рукам.
Не понимаю как это возможно. А если мы захватили мьютекс (об этом же речь, правильно?) где-то выше по стеку вызова?
_>>13. Вообще не понял.
WH>Например, получение строкового имени переменной. Причем если переменная будет переименована, компилятор даст по рукам.
Т.е. речь об интроспекции времени компиляции? ) Это да, классная вещь... Давно о ней мечтаю в C++. Собственно это, плюс работа со строками в шаблонах без костылей, и МП в C++ уже было бы приемлемым.
_>>15. Про локальные функции не понял — зачем они, если есть лямбды? ) Т.е. я когда-то давно был за них (ещё с Паскаля), но теперь то зачем? )
WH>Рекурсивную лямбду изобразить можешь?
function<int(int)> fac=[&](int n) {return n==1?1:n*fac(n-1);};
cout<<fac(5)<<endl;//120
Хотя такой код конечно же будет терять в эффективности (опускаться где до уровня быстродействия Java/.Net).
_>>16. Из коробки
WH>Ну-ка покажи как добавить в С++ оператор #@$! с правой ассоциативностью и приоритетом больше + и меньше *.
Не, я имел в виду просто переопределение обычных операторов. Если речь именно про введение новых, то такого конечно же нет. Правда оно и не особо надо — стандартных более чем хватает. )
_>>Не, это же только недавно появилось.
WH>У gcc код открыт с рождения. Влезай и делай что хочешь.
WH>Но никто не делает. Ибо ад.
Эмм, причём тут открытые исходники компиляторов? ) Речь вообще о другом, как раз о специальной поддержке подгружаемых плагинов.
_>>Тот же D. )
WH>Ты издеваешься? D рядом не стоял.
На фоне C# и D и Nemerle находятся где-то рядом, в области полноценного МП. ))) А C++ где-то между ними (конец шкалы) и C# (начало шкалы — нулевое МП), скажем на 2/3 отрезка. )))
_>>Как бренд — возможно. Но не как "деньги от мегакорпорации" (про которые тут так много писали).
WH>Именно что деньги от мегакорпорации.
WH>Главная проблема с развитием немерле то что нет нескольких сильных программистов, которые пишут его полный рабочий день.
WH>У раста они есть.
Я имел в виду деньги на рекламу — у Mozilla нет орд евангелистов, как скажем у того же MS. Ну и кстати размер команды, работающей над языком, не обязательно определяется только деньгами.