A to nie jest tak, że MS narobił w gacie po tym, jak Java (język) w wersji 8 nadgoniła C# na tyle, że nie ma się już o co spinać na tym poziomie? ;]
Nie, bo decyzje o pójściu w open source zostały podjęte IMO dobre kilka lat temu. W tej chwili może ci się wydawać, że z C# niewiele się ostatnio działo (o tym na koniec), ale Microsoft przez ten czas: kompletnie przepisał kompilator C#/VB (Roslyn), kompilator JIT (wspólny codebase dla wszystkich architektur - Ryujit), pracował nad natywną kompilacją (najpierw MDIL, teraz .NET Native) czy nową architekturą aplikacji webowych (core clr, czyli .net obok samej aplikacji). Można powiedzieć, że .NET został w większości przepisany od nowa i teraz zacznie się proces integracji codebase'ów z Xamarinem (Mono).
Więc Microsoft kończy chować swoje trupy w szafie, a co z Javą? Lambdy! Pierwsza reakcja po spojrzeniu na Stream API to nie mogło być nic innego niż "no tak, Java wciąż ma type erasure" (IntStream, BlahBlahIntToLongBlah, getAsDouble). Całe te lata oszukiwania siebie, że "type erasure to feature" , "value types są niepotrzebne (mamy escape analysis)", "przeładowywanie operatorów tylko zaciemnia kod", "checked exceptions ułatwiają pracę" i tak dalej ;).
No i w końcu Oracle też chce swoje trupy pochować - dosłownie w "komnacie poległych", czyli projekt Valhalla. Tylko czy zdąży w tym dziesięcioleciu?
A zakończę tym, że C# zaraz dostanie rekordy i pattern matching. Draft specyfikacji, wstępna implementacja. I znowu będzie przepaść.