Re[15]: За счет чего выстреливают языки?
От: alex_public  
Дата: 13.07.15 10:11
Оценка:
Здравствуйте, 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. Ну и кстати размер команды, работающей над языком, не обязательно определяется только деньгами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.