Neden birileri Microsoft “Roslyn” e zaman harcar ki?


37

Microsoft "Roslyn" in beyaz makalelerini ve örneklerini okudum ve konsept çok ilginç görünüyor. Söyleyebileceğim, derleyici olan kara kutuyu açar ve Visual Studio'da yazılmış kod hakkında bilgi ve metrikler elde etmek için kullanabileceğimiz bir arayüz sağlar.

Roslyn ayrıca “script” kodunu kullanma ve anında derleme / çalıştırma yeteneğine de sahip görünüyor (CodeDom'a benzer) ancak deneyimimdeki bu tür işlevler için yalnızca sınırlı kullanımlarla karşılaştım.

Kod analizi ve metrikler öğesi ilginç bir alan olsa da ... çok uzun zamandır etrafta olan bir şey ve kod analizi ve yeniden düzenleme araçlarına çok fazla para yatırmış olan çok sayıda sağlayıcı var (örneğin, ReSharper, CodeRush , nCover, vb) ve oldukça iyi bir iş yapıyorlar!

Neden herhangi bir şirket, mevcut araçlardan biri için bir lisans satın alarak bir maliyet karşılığında elde edilebilecek bir şeyi uygulamaya koyulmuyor?

Belki de Roslyn projesinin belirtilen araçların etki alanı dışına yerleştirdiği bazı işlevselliğini kaçırdım ...


4
Roslyn'in ana noktası daha fazla Microsoft stajyeridir - kolay genişletilebilir bir C # derleyicisidir. Bu şekilde ekip, yeni dil özelliklerini daha kolay uygulayabilir ve deneyebilir. Ayrıca yeni optimizasyon algoritmalarının uygulanması daha kolay hale gelecektir.
JustAnotherUserYouMayBiliyorumOrnay

1
Evet Penfold - Birkaç şeyi kaçırmış olabileceğinden şüpheleniyorum. Channel9'da Dustin Campbells'in röportajını izledin mi? channel9.msdn.com/Events/Ch9Live/…
James Snell

3
Bu, Microsoft ürünlerine başarılı / kârlı eklentiler geliştirme riskidir, bir sonraki sürüme ekleyebilirler.
JeffO

10
Ayrıca, ReSharper'ın arkasındaki adamların, takabilecekleri ekstra işlevsellik düşünceleriyle kendilerini ıslattıklarından emin olabilirsiniz. Evet, bir C # ayrıştırıcı / analizörü yazdılar, ancak özelliklerinden yararlanabiliyorlarsa özellik başına maliyet önemli ölçüde düşecek gerçek MS C # motoru.
İkili Savaş

2
Roslyn'in ilginç bir kullanımı için scriptleri inceleyin. github.com/scriptcs/scriptcs
Ashley Davis

Yanıtlar:


53

Roslyn ayrıca “script” kodunu kullanma ve anında derleme / çalıştırma yeteneğine de sahip görünüyor (CodeDom'a benzer) ancak deneyimimdeki bu tür işlevler için yalnızca sınırlı kullanımlarla karşılaştım.

Anında derleme ve yürütme Roslyn'in en önemli faydasıdır. Bence bu özelliğin yararına değer düşüklüğü yapıyor olabilirsiniz, çünkü deneyiminizde gerçekten parladığı bir kullanım durumuyla hiç karşılaşmadınız. Ve bu mantıklı; Dinamik derlemeye duyulan ihtiyaç muhtemelen niş bir özelliktir, ancak sahip olmadan çok daha zor olabilecek bazı güçlü uygulamalar sağlar.

İşte dinamik derlemenin oldukça yararlı olacağı kafamın üstündeki birkaç örnek. Tüm bunları başarmanın başka yolları da var, ancak Roslyn onları kolaylaştırıyor.

  • Çalışma zamanında yüklenen, derlenen ve "parent" uygulamasının yürütülmesine dahil edilen eklenti dosyalarına sahip olmak.
  • Bir oluşturma DSL sonra zamanında C # çevrilmiş ve Roslyn kullanılarak derlendi.
  • C # alan, analiz eden, tercüme eden, programcı odaklı bir uygulama oluşturmak.
  • Beyaz boşluk gibi sadece "yüzey" farklılıklarının aksine, iki kod parçası derlemeden sonraki farkları ile karşılaştırmak. Bu Semantik Diff olarak bilinir .

Yani, özetlemek gerekirse, sen senin zaman yazılı harcamak hangi yazılımı bağlı Roslyn için bir kullanım asla bulamayabilir. Bununla birlikte, Roslyn'in masaya çok getirdiği birçok kullanım durumu vardır. Bahsettiğiniz araçların hiçbiri bu özelliği sağlamıyor. Mimarileri ve amaçlarına da dayanamadılar.


Sematic diff için +1. İlgilenmek için burada Semantik fark için Roslyn kullanan, geliştirilmekte olan ticari bir ürün için bir link . (Tam açıklama - Onlarla bir bağlantım yok , Jon
Skeet'in

@RationalGeek - Örnekler için teşekkürler, DSL => C # route örneğini göz önünde bulundurmadım ... Bunun iş uygulamalarında çok güçlü olacağı birkaç senarios hayal edebiliyorum. Daha önce bahsettiğim yeniden düzenleme araçlarıyla çok fazla çakıştığım diğer örneklerin çoğu (sadece sizin değil). Asıl sorumun diğer kısmı, neden bir kısmının maliyetinin bir kısmını önceden yuvarlanmış mükemmel bir tane varken, bu analizi yapmak için araçlar geliştirmek için para yatırmaktı? daha iyi) araçlar kümesi! :)
Richard Hooper,

@Penfold her zaman yeni geliştirici araçları için yer var ... :-)
RationalGeek

1
Anlamsal fark sadece derleme amaçlı değildir. Her Versiyon Kontrol Sistemi bir farklılığa ihtiyaç duyar ve çoğu aptalca bir fark kullanır. Sadece 2 işlevi değiştirin ve
farkın

İşte büyük bir tane: ASP.NET uygulamaları yazarken web uygulamasını yeniden oluşturmak ve yeniden dağıtmak zorunda kalmadan, otomatik yeniden derleme. Nihayet ASP.NET vNext’te ilan edilen, tam anlamıyla C # 'da çalışmayı bir betik diliyle aynı hale getirecek ... hem typeafe AND hem de performans. Bunu bu genel yaklaşımın başlangıcı olarak görüyorum, sonunda çalışma zamanındaki kodunuzu değiştirebilmeniz için zengin istemci uygulamalarına (mobil, masaüstü) girmeye başlayacağım. Web uygulamalarında çok daha kolaydır, çünkü her bir istek tanımsızdır - ancak zamanla diğer uygulama mimarilerine de girer.
Marchy

12

Takım sağlayan (örn. JetBrains *) şirketler Roslyn’le çok ilgileniyorlar. Microsoft, takım oluşturmayı kolaylaştırmak istiyor, çünkü iyi takımlar Microsoft ekosisteminin kullanımını teşvik ediyor.

* JetBrains blogu başına ( bu giriş ), JetBrians, Roslyn kullanmayacaklarını açıkladı. Ancak, JetBrains'e (üzerinde çalışmak için önceden var olan bir kod temeli bulunmayan) yeni rakiplerin Roslyn kullanacağını hayal ediyorum; onlara bir başlangıç ​​verir.

10 soruda 6 soru, Roslyn hakkında 10 cevap :

6: Roslyn için pratik kullanımlardan bazıları nelerdir? Bir geliştirici olarak bana nasıl yardımcı olacak?

Aklıma gelen Roslyn'in ilk kullanımlarından biri iş kuralları motorunun kullanımıdır. Roslyn'den önce, kullanıcı makrolarını değerlendirmek, genellikle Visual Basic for Applications'ı (VBA) uygulamak, DLR'ye Ruby ifadeleriyle seslenmek ya da komut satırı derleyicisine dinamik olarak oluşturulan Visual Basic ya da C # koduyla bombardıman etmek ve koşmanın sonucunu elde etmekle ilgiliydi. bu kod. Bu yöntemler idealden daha azdı.

Roslyn, Eric Vogel'in "C # 'da Roslyn Scripting API'sini Kullanma" başlıklı makalesinde gösterildiği gibi, C # ve (nihayetinde) Visual Basic kodunun dinamik bir şekilde derlenip yürütülmesine izin verecektir. Uygulama ile aynı dilde yazılmış olan kullanıcı makroları, geliştiricilerin iş kurallarını temsil eden kullanıcı makrolarını desteklemesini kolaylaştıracaktır.

Roslyn ile kod yeniden yapılandırması çok daha kolay hale geliyor. Roslyn'den önce DevExpress CodeRush ve Refactor Pro ve JetBrains ReSharper gibi araçların geliştiricileri, derleyici işlemlerinin çoğunu ürünleri için bir temel olarak yeniden oluşturmak zorunda kaldı. Roslyn ile refactoring geliştiricileri mevcut derleyici özelliklerinden doğrudan yararlanabilir. NuGet paketlerinin Roslyn yaygın olarak erişilebilir olduktan sonra bireysel yeniden düzenleme kuralları kurmak için hayal edebiliyorum.


4
"Uygulama ile aynı dilde yazılmış olan kullanıcı makroları, geliştiricilerin iş kurallarını temsil eden kullanıcı makrolarını desteklemesini kolaylaştıracaktır." - ne yanlış gidebilir ki!
gbjbaanb

9

Tüm derleyicilerin düzenli olarak Derleyiciyi Hizmet Olarak (CaaS) sundukları günü sabırsızlıkla bekliyorum. Derleyicilerin yalnızca ön bağlayıcı kodunu yattığını düşünmemiz ve derleyicilerin birden çok hedefe dönüştürülebilecek ağaçları yattığını düşünmemiz gerekir. Tüm derleyiciler, ağaç yayan ve isteğe bağlı olarak JSON / XML özelliğine sahip olmalıdır. Daha sonra çıktı, güzelleştirilmiş aynı dil, C, IL kaynağı, IL ikili, Java, Javascript, LLVM, PIC tarafından yürütülebilir ve hatta ön bağlayıcı kodu gibi birçok hedef türüne dönüştürülebilir.

Bir yaşam için derleyiciler yazarım. Müşterilerim CaaS'ta satılıyor çünkü fantastik esneklik, taşınabilirlik ve analiz için kapıyı açıyor.

Microsoft'un uzun zaman önce CaaS'ı uygulamadığını hayal kırıklığına uğrattım. Örneğin, VB6 için başka bir şeye geçiş yolu veya .Net'ten C ++ 'ya kullanılmış olabilir.


1

MSFT'nin Roslyn'e yatırım yapmasının nedeninin basit cevabı, C # derleyicisi için mevcut kod tabanının şimdi 5 versiyon eski - 11 yıl olmasıdır. Bu bir var uzun herhangi kod temeli yönetilebilir kalması için süre. Artı, yeniden yazdıklarından beri, tüm iç kısımlarının API'ler olarak gösterilmesi için bunu yapmaya yatırım yapmaya karar verdiler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.