Waarschijnlijk ben ik heel kippig, maar ik heb al een paar uur op Google gezocht en het niet kunnen vinden.
Inleiding: Hoe het werkt in C# en Scala (en met workaround inmiddels ook in Java)
Als je met C# programmeert, kun je zelf zogenaamde LINQ providers maken. Dat wil zeggen dat het mogelijk is om zelf LINQ expressions te parsen.
Een voorbeeldje hiervan kun je vinden op: http://blogs.msdn.com/b/m...ble-provider-part-ii.aspx
Het staat het vertalen van LINQ expressies naar SQL toe bijvoorbeeld. In het Entity Framework kun je LINQ gebruiken om de database te queryen hierdoor:
Ook nHibernate maakt met QueryOver<T> dankbaar gebruik van deze mogelijkheid:
In Java wordt dit standaard niet ondersteund, maar heeft iemand zoiets dergelijks gebouwd door de lambda expressions serializable te maken en daarna byte code analysis toe te passen:
https://github.com/TrigerSoft/jaque
Java 8 lambda's worden dan vertaald naar expression trees, waardoor het in de toekomst mogelijk is om ook een QueryOver<T> voor Hibernate te bouwen.
Ook in een taal als Scala is het mogelijk om functional relational mapping toe te passen, getuige de Slick ORM library:
http://slick.typesafe.com...tional-relational-mapping
Het is dus mogelijk om een class te bouwen die functies als filter en map heeft die predicaten ontvangen, en deze vervolgens als een expression tree te parsen om er daarna iets anders mee te doen, bijvoorbeeld SQL genereren.
Het grote voordeel hiervan is dat je strongly typed queries krijgt die refactoring ondersteunen.
Apple: Swift wordt open source
Dus ik word enthousiast
En begin de taal te bestuderen en uit te zoeken of het wel alles heeft dat ik wil.
En dit is nou net zo'n dingetje wat ik niet heb kunnen vinden.
Ondersteunt Swift nou expression tree parsing van functionele expressies en kun je daardoor ook API's bouwen die functional relational mapping ondersteunen? Of niet?
Ik kan het niet vinden tot nu toe, wat mij een beetje droevig stemt, gezien ik een grote fan ben van deze mogelijkheid in C# en Scala
Alvast bedankt.
Inleiding: Hoe het werkt in C# en Scala (en met workaround inmiddels ook in Java)
Als je met C# programmeert, kun je zelf zogenaamde LINQ providers maken. Dat wil zeggen dat het mogelijk is om zelf LINQ expressions te parsen.
Een voorbeeldje hiervan kun je vinden op: http://blogs.msdn.com/b/m...ble-provider-part-ii.aspx
Het staat het vertalen van LINQ expressies naar SQL toe bijvoorbeeld. In het Entity Framework kun je LINQ gebruiken om de database te queryen hierdoor:
code:
1
| var blog = context.Blogs.Where(b => b.Name == "ADO.NET Blog").FirstOrDefault(); |
Ook nHibernate maakt met QueryOver<T> dankbaar gebruik van deze mogelijkheid:
code:
1
| IList<Cat> cats = session.QueryOver<Cat>().Where(c => c.Name == "Max").List(); |
In Java wordt dit standaard niet ondersteund, maar heeft iemand zoiets dergelijks gebouwd door de lambda expressions serializable te maken en daarna byte code analysis toe te passen:
https://github.com/TrigerSoft/jaque
Java 8 lambda's worden dan vertaald naar expression trees, waardoor het in de toekomst mogelijk is om ook een QueryOver<T> voor Hibernate te bouwen.
Ook in een taal als Scala is het mogelijk om functional relational mapping toe te passen, getuige de Slick ORM library:
http://slick.typesafe.com...tional-relational-mapping
Het is dus mogelijk om een class te bouwen die functies als filter en map heeft die predicaten ontvangen, en deze vervolgens als een expression tree te parsen om er daarna iets anders mee te doen, bijvoorbeeld SQL genereren.
code:
1
2
3
| // Query that limits results by price < 10.0 // Equivalent SQL: select * from COFFEES where PRICE < 10.0 coffees.filter(_.price < 10.0) |
Het grote voordeel hiervan is dat je strongly typed queries krijgt die refactoring ondersteunen.
Apple: Swift wordt open source
Dus ik word enthousiast
En dit is nou net zo'n dingetje wat ik niet heb kunnen vinden.
Ondersteunt Swift nou expression tree parsing van functionele expressies en kun je daardoor ook API's bouwen die functional relational mapping ondersteunen? Of niet?
Ik kan het niet vinden tot nu toe, wat mij een beetje droevig stemt, gezien ik een grote fan ben van deze mogelijkheid in C# en Scala
Alvast bedankt.
Ask yourself if you are happy and then you cease to be.