Взгляните на nest.js . Это фреймворк node.js с базовым экземпляром Express и предлагает очень четкую структуру, очень похожую на приложение Angular, отличные инструменты тестирования, ... Поддерживаются различные протоколы обмена сообщениями ( rabbitmq , [113 ] nats , mqtt , redis , ...). (Почему java является обязательным требованием? Pub / Sub должен быть независимым от языка?!)
Рассматривали ли вы использование ngrx/entity
для обработки ваших обновлений данных? Я думаю, что трудно сделать общее предложение здесь, но только отправка обновлений кажется хорошей идеей. Таким образом, вы можете использовать запомненные селекторы и избежать ненужных вычислений и визуализации.
Проверьте.NET поддержка CodeDom. Существует старая статья о проекте кода для синтаксический анализатор CodeDOM C# , но это не будет поддерживать новые функции языка.
Там, как также предполагается, поддержка в #develop для генерации дерева CodeDom от исходного кода C# согласно этому регистрация .
Похоже, что этот вид функциональности будет включен с тем, что прибывает после C# 4, согласно 'будущее Anders Hejlsberg C#' видео PDC .
Парсер-генератор ANTLR имеет грамматику для C# 3.0, который покрывает все за исключением синтаксиса LINQ.
это в настоящее время возможный перевести код C# в Абстрактное синтаксическое дерево?
Да, тривиально при особых обстоятельствах (= использование нового платформа Выражений ):
// Requires 'using System.Linq.Expressions;'
Expression<Func<int, int>> f = x => x * 2;
Это создает дерево выражений для лямбды, т.е. функцию, берущую int
и возвращающую двойное. Можно изменить дерево выражений при помощи платформы Выражений (= классы от в том пространстве имен) и затем скомпилировать его во времени выполнения:
var newBody = Expression.Add(f.Body, Expression.Constant(1));
f = Expression.Lambda<Func<int, int>>(newBody, f.Parameters);
var compiled = f.Compile();
Console.WriteLine(compiled(5)); // Result: 11
Уведомление, что все выражения неизменны, таким образом, они должны быть созданы снова составом. В этом случае я предварительно ожидал добавление 1.
Уведомление, что эти деревья выражений только работают над реальными выражениями т.е. содержанием, найденным в функции C#. Вы не можете получить синтаксические деревья для более высоких конструкций, таких как классы этот путь. Используйте платформу CodeDom для них.
См. проект R# (извините, документы находятся на русском языке, но существуют некоторые примеры кода). Это позволяет манипуляции AST на коде C#.
http://www.rsdn.ru/projects/rsharp/article/rsharp_mag.xml
SVN Проекта здесь : (Обновленный URL, спасибо, derigel)
Также посмотрите язык Nemerle . Это - язык .NET с мощной поддержкой метапрограммирования.
Наш интерфейс C # для DMS полностью анализирует C # 3.0, включая LINQ, и создает AST. Фактически, DMS - это экосистема для анализа / преобразования исходного кода с использованием AST для языков, предоставляемых клиентским интерфейсом.
РЕДАКТИРОВАТЬ 10.03.2010: ... Теперь обрабатывает полную версию C # 4.0
РЕДАКТИРОВАТЬ: 27.06.2014: Обрабатывает C # 5.0 с некоторого времени.
РЕДАКТИРОВАТЬ: 15.06.2016: Обрабатывает C # 6.0. См. https://stackoverflow.com/a/37847714/120163 для образца AST.
ANTLR не очень полезен. LINQ - это не то, что вам нужно.
Попробуйте Mono.Cecil! http://www.mono-project.com/Cecil
Он используется во многих проектах, включая NDepend! http://www.ndepend.com/
Я только что ответил на другой поток здесь, в StackOverflow, на решение, где я реализовал API для создания и манипулирования AST из C# Source Code