Vengo de un país de dotnet, pero recientemente he estado estudiando las posibilidades de los lenguajes de programación alternativos. Nada realmente serio, solo algunas partes aquí y allá. Recientemente descubrí a Scala y estoy fascinado con eso. A pesar de retoques no deterministas, he hecho algunas comprobaciones intermedias de cosas que son importantes para mí en C# y me siento bastante satisfecho: nociones funcionales - tic, polimorfismo ad-hoc - tic, anotaciones - tic, reflexión y codegen - tic.Procesamiento JSON sin ruido con Scala
Ahora estoy pensando en cómo se podría programar un análogo de la biblioteca de procesamiento JSON que he implementado en C# 4.0 con la ayuda de DLR y azúcar sintáctica "dinámica". Aquí está el conjunto de características que estoy buscando:
- Navegación conveniente y construcción de raw JSON.
- Conversión automática entre JSON y objetos/colecciones nativas (en su forma general, el problema es insoluble, aunque se pueden definir convenciones que funcionarán el 95% del tiempo, y eso está bien para mí).
nuevas características de C# 4.0 un poco de rock aquí, ya que me dejaron de anulación del acceso de miembros y el tipo de moldes para ejecutar una lógica completamente personalizado (si es una variable en C# 4.0 se escribe como "dinámica", entonces cualquier cosa que hagas con ella se compilará en llamadas a métodos definidos por el programador con un comportamiento por defecto razonable - ver DynamicMetaObject.BindXXX methods at MSDN para más información). P.ej. Tengo tipo overriden proyecta para serializar objetos/deserializar .NET y miembro de accesos para manejar JSON prima, de modo que pueda escribir el siguiente código:
var json = Json.Get("http://some.service");
if (json.foo) Console.WriteLine((Foo)json.foo);
json.bars = ((List<Bar>)json.bars).DoSomething();
Por supuesto, esto no es ideal, ya que la unión dinámica en C# 4.0 tiene problemas con los métodos de extensión y la inferencia tipo, y, además, el código todavía se siente bastante pesado. Pero de todos modos, esto es mucho mejor que usar todos esos ((JsonObject) json ["quux"]) ["baz"] que he usado en C# 3.5.
Algunas investigaciones básicas muestran que Scala no tiene funciones de lenguaje dedicadas que admitan el enlace tardío. Sin embargo, hay tantos trucos que quizás se puedan usar juntos para crear una emulación tolerable del código mostrado arriba (o incluso para ser mejor, estoy casi seguro de que esto es posible). ¿Podría, por favor, aconsejarme algo aquí?
ascensor-JSON es grande si se está ejecutando en el servidor ... por desgracia su dependencia de scalap y por lo tanto scala-compilador significa que puede ser una gran parte del o de bytes si está footprint- sensible. –