4 ms·
sorry but did we read the same article? how's compiling brainfuck into Julia via macros related to LINQ?
by uryga 7y ago
sorry but did we read the same article? how's compiling brainfuck into Julia via macros related to LINQ?
- lostmsu 7y agoExpression BrainFuck(string code) => Expression.Constant(42); // parser would go there var bfFunc = BrainFuck(@"arbritrary code").Compile(); WriteLine(bfFunc(someArg)); // <- prints 42 As I mentioned later the difference appears to be that Julia does `Compile` call at compile time, thus giving you build-time validation. P.S. this exact code won't work, but it shows the idea.
- uryga 7y agoah sorry, the naming threw me off. TIL you can manipulate/compile ASTs in C#! https://docs.microsoft.com/en-us/dotnet/api/system.linq.expressions?view=netframework-4.8 https://docs.microsoft.com/en-us/dotnet/api/system.linq.expr... i guess all the macro stuff is under System.Linq.Expressions because LINQ expressions like from score in scores where score > 80 select score aren't just for SQL and can desugar to arbitrary C# code, is that right?
- lostmsu 7y agoI think they are limited quite a bit. E.g. do not support classes, latest C# features, etc. They were made exactly for SQL among other things. With SQL target your example will use this feature: scores will be IQueryable, and "IQueryable.Where" will take Expression, which C# compiler will generate from "score > 80" during compilation. Then the specific database engine will convert that "Expression" instance to SQL query for execution. Of course, there are other ways to generate more .NET code at runtime. But not at compile time, which I wish we had.