Provengo da una terra dotnet, ma recentemente ho esaminato le possibilità di linguaggi di programmazione alternativi. Niente di veramente serio, solo alcuni pezzi qua e là. Recentemente ho scoperto Scala e ne sono abbastanza affascinato. Nonostante il bricolage non deterministico, ho fatto alcuni controlli intermedi su cose che sono importanti per me in C# e mi sento piuttosto soddisfatto: nozioni funzionali - tick, polimorfismo ad-hoc - tick, annotazioni - tick, reflection e codegen - tick.Elaborazione JSON senza rumore con Scala
Ora sto pensando a come si potrebbe programmare un analogo della libreria di elaborazione JSON che ho implementato in C# 4.0 con l'aiuto della DLR e dello zucchero sintattico "dinamico". Ecco il set di funzionalità che sto cercando:
- Navigazione comoda e costruzione di JSON raw.
- Conversione automatica tra JSON e oggetti/raccolte nativi (nella sua forma generale il problema è irrisolvibile, sebbene sia possibile definire convenzioni che funzionino il 95% delle volte - e per me va bene).
nuove funzionalità di C# 4.0 po roccia qui, dal momento che mi hanno lasciato a ignorare l'accesso utente e il tipo di calchi di eseguire logica completamente personalizzato (se una variabile in C# 4.0 è tipizzata come "dinamico", quindi tutto ciò che fate con esso sarà compilato in chiamate a metodi definiti dal programmatore con un comportamento predefinito ragionevole - vedi DynamicMetaObject.BindXXX methods at MSDN per maggiori informazioni). Per esempio. Ho tipo sovresposta getta per serializzare/deserializzare oggetti .NET e membro accessi per gestire JSON grezzo, in modo che io possa scrivere il seguente codice:
var json = Json.Get("http://some.service");
if (json.foo) Console.WriteLine((Foo)json.foo);
json.bars = ((List<Bar>)json.bars).DoSomething();
Naturalmente, questo non è l'ideale, in quanto legame dinamico in C# 4.0 ha problemi con i metodi di estensione e inferenza di tipo, e, inoltre, il codice si sente ancora piuttosto pesante. Ma comunque, è molto meglio che usare tutti quelli ((JsonObject) json ["quux"]) ["baz"] che ho usato nel C# 3.5.
Alcune ricerche di base mostrano che Scala non dispone di funzioni linguistiche dedicate che supportano l'associazione tardiva. Tuttavia, ci sono così tanti trucchi che forse possono essere usati insieme per creare un'emulazione sopportabile del codice mostrato sopra (o anche per essere migliori - sono quasi sicuro che questo sia possibile). Potresti, per favore, consigliarmi qualcosa qui?
lift-JSON è grande se si esegue sul lato server ... purtroppo la sua dipendenza scalap e quindi scala-compilatore significa che può essere un grande pezzo o' byte se siete footprint- sensibile. –