ทำไมทุกคนถึงต้องลงทุนใน Microsoft“ Roslyn”


37

ฉันเพิ่งอ่านเอกสารไวท์ & ตัวอย่างจากMicrosoft "Roslyn"และแนวคิดน่าสนใจมาก จากสิ่งที่ฉันสามารถบอกได้มันเปิดกล่องดำที่เป็นคอมไพเลอร์และให้ส่วนต่อประสานที่เราสามารถใช้รับข้อมูลและตัวชี้วัดเกี่ยวกับโค้ดที่เขียนใน Visual Studio

โรสลินดูเหมือนว่าจะมีความสามารถในการ "สคริปต์" โค้ดและรวบรวม / ดำเนินการได้ทันที (คล้ายกับ CodeDom) แต่ฉันได้พบการใช้งานที่ จำกัด สำหรับประเภทการทำงานในประสบการณ์ของฉัน

ในขณะที่องค์ประกอบการวิเคราะห์รหัสและตัวชี้วัดเป็นพื้นที่ที่น่าสนใจ ... มันเป็นสิ่งที่มีมานานแล้วและมีผู้ให้บริการจำนวนมากที่ได้ลงทุนเงินเป็นจำนวนมากในการวิเคราะห์รหัสและเครื่องมือการสร้างใหม่ (เช่น ReSharper, CodeRush , nCover และอื่น ๆ ) และพวกเขาทำได้ดีมาก!

เหตุใด บริษัท ใดจึงออกนอกเส้นทางของพวกเขาเพื่อนำสิ่งที่สามารถให้มาได้ในราคาเพียงเศษเสี้ยวของต้นทุนโดยการซื้อใบอนุญาตสำหรับหนึ่งในเครื่องมือที่มีอยู่

บางทีฉันอาจพลาดฟังก์ชั่นหลักของโครงการ Roslyn ที่วางไว้นอกโดเมนของเครื่องมือที่กล่าวถึง ...


4
ประเด็นหลักของ Roslyn คือการฝึกงานของ Microsoft มากขึ้นทำให้คอมไพเลอร์ที่ได้รับการจัดการที่ขยายได้ง่าย วิธีนี้ทำให้ทีมสามารถใช้งานได้ง่ายขึ้นและลองใช้คุณสมบัติภาษาใหม่ การใช้อัลกอริธึมการเพิ่มประสิทธิภาพใหม่จะง่ายขึ้นด้วย
JustAnotherUserYouMayKnowOrNot

1
ใช่ Penfold - ฉันสงสัยว่าคุณอาจพลาดบางสิ่งไป คุณเคยดูสัมภาษณ์ Dustin Campbells ทางช่อง 9 หรือไม่? channel9.msdn.com/Events/Ch9Live/…
James Snell

3
นี่คือความเสี่ยงในการพัฒนาโปรแกรมเสริมของ Microsoft ที่ประสบความสำเร็จ / สร้างผลกำไรซึ่งอาจนำไปใช้ในรุ่นถัดไป
JeffO

10
นอกจากนี้คุณสามารถมั่นใจได้ว่าคนที่อยู่เบื้องหลัง ReSharper กำลังเปียกน้ำตัวเองตามความคิดของฟังก์ชั่นพิเศษที่พวกเขาสามารถเสียบเข้าได้ใช่พวกเขาได้เขียน C # parser / ตัววิเคราะห์ แต่ค่าใช้จ่ายต่อคุณลักษณะจะลดลงอย่างมาก เอ็นจิน MS C # จริง
ไบนารี Worrier

2
ลองใช้สคริปต์การใช้ Roslyn ที่น่าสนใจ github.com/scriptcs/scriptcs
Ashley Davis

คำตอบ:


53

โรสลินดูเหมือนว่าจะมีความสามารถในการ "สคริปต์" โค้ดและรวบรวม / ดำเนินการได้ทันที (คล้ายกับ CodeDom) แต่ฉันได้พบการใช้งานที่ จำกัด สำหรับประเภทการทำงานในประสบการณ์ของฉัน

การรวบรวมและการใช้งานในทันทีเป็นประโยชน์สำคัญของ Roslyn ฉันคิดว่าคุณอาจประเมินประโยชน์ของฟีเจอร์นี้ไม่ได้เพราะคุณไม่เคยเจอกรณีการใช้งานในประสบการณ์ที่มันส่องแสงจริงๆ และนี่ทำให้รู้สึก; ความต้องการในการคอมไพล์แบบไดนามิกอาจเป็นฟีเจอร์เฉพาะ แต่ถ้ามีแอพพลิเคชั่นที่ทรงพลังซึ่งจะยากกว่านี้หากไม่มีมัน

ต่อไปนี้เป็นตัวอย่างบางส่วนจากส่วนหัวของฉันที่การรวบรวมแบบไดนามิกจะมีประโยชน์มาก มีวิธีอื่นในการทำสิ่งเหล่านี้ให้สำเร็จ แต่ Roslyn ทำให้ง่ายขึ้น

  • มีไฟล์ปลั๊กอินที่โหลดตอนรันไทม์รวบรวมและรวมอยู่ในการดำเนินการของแอปพลิเคชัน "ผู้ปกครอง"
  • การสร้างDSLซึ่งแปลเป็น C # ตอนรันไทม์และคอมไพล์โดยใช้ Roslyn
  • การสร้างแอปพลิเคชันที่เน้นโปรแกรมเมอร์ซึ่งใช้ C # วิเคราะห์วิเคราะห์แปล ฯลฯ
  • การเปรียบเทียบโค้ดสองชิ้นสำหรับความแตกต่างหลังจากการรวบรวมซึ่งตรงข้ามกับความแตกต่างเพียง "พื้นผิว" เช่นช่องว่าง นี้เป็นที่รู้จักกันเป็นความหมายแตกต่าง

ดังนั้นเพื่อสรุปคุณอาจไม่เคยใช้ Roslyn ขึ้นอยู่กับซอฟต์แวร์ที่คุณใช้ในการเขียนเวลา อย่างไรก็ตามมีหลายกรณีการใช้งานที่ Roslyn นำจำนวนมากมาที่โต๊ะ ไม่มีเครื่องมือใดที่คุณกล่าวถึงให้คุณสมบัตินี้ พวกเขาไม่สามารถขึ้นอยู่กับสถาปัตยกรรมและวัตถุประสงค์ของพวกเขา


+1 สำหรับ sematic diff เพื่อความสนใจนี่คือลิงค์ไปยังผลิตภัณฑ์เชิงพาณิชย์ภายใต้การพัฒนาซึ่งใช้ Roslyn สำหรับความหมายต่างกัน (เปิดเผยอย่างสมบูรณ์ - ฉันไม่มีส่วนเกี่ยวข้องกับพวกเขาฉันเพิ่งเห็นผลิตภัณฑ์ของพวกเขากล่าวถึงในบล็อกของ Jon Skeet )
MarkJ

@RationalGeek - ขอบคุณสำหรับตัวอย่างฉันไม่ได้พิจารณา DSL => C # ตัวอย่างเส้นทาง ... ฉันสามารถจินตนาการบางเซเนกัลที่จะมีประสิทธิภาพมากในการใช้งานทางธุรกิจ ตัวอย่างอื่น ๆ อีกมากมายที่ฉันได้เห็น (ไม่ใช่แค่ของคุณ) ซ้อนทับกันมากกับเครื่องมือการเปลี่ยนโฉมที่ฉันพูดถึงก่อนหน้านี้ อีกส่วนหนึ่งของคำถามเดิมของฉันคือทำไมใครบางคนจะลงทุนเงินในการพัฒนาเครื่องมือเพื่อทำการวิเคราะห์นี้เมื่อมีบางอย่างที่ยอดเยี่ยมก่อนรีดที่เศษส่วนของค่าใช้จ่าย ... แต่ฉันคิดว่ามีที่ว่างเสมอสำหรับอีก ดีกว่า) ชุดเครื่องมือ! :)
Richard Hooper

@Penfold มีที่ว่างสำหรับเครื่องมือสำหรับนักพัฒนาใหม่อยู่เสมอ ... :-)
RationalGeek

1
Semantic diff ไม่ได้มีไว้เพื่อการรวบรวมเท่านั้น ระบบควบคุมทุกเวอร์ชันต้องการความแตกต่างและส่วนใหญ่จะใช้ความแตกต่างที่โง่ เพียงสลับ 2 ฟังก์ชั่นและดูความยุ่งเหยิงเมื่อ diff คิดว่ามันสามารถจับคู่ไม่กี่ (และ {.
MSalters

นี่คือการรวบรวมใหม่โดยอัตโนมัติเมื่อเขียนแอป ASP.NET โดยไม่ต้องสร้างและปรับใช้เว็บแอปอีกครั้ง ประกาศสุดท้ายใน ASP.NET vNext มันจะทำให้การทำงานใน C # เหมือนกับภาษาสคริปต์ ... ยกเว้นว่ามันเป็นทั้ง typesafe และ performant ฉันเห็นว่านี่เป็นจุดเริ่มต้นของวิธีการทั่วไปนี้ในที่สุดก็จะมาถึงแอปที่มีลูกเล่นมากมาย (มือถือเดสก์ท็อป) เพื่อให้คุณสามารถเปลี่ยนรหัสของคุณได้ในขณะทำงาน มันง่ายกว่ามากกับเว็บแอปเนื่องจากตามคำนิยามคำขอแต่ละครั้งจะไร้สัญชาติ แต่ในเวลาต่อมามันจะเข้าสู่สถาปัตยกรรมแอปอื่น ๆ เช่นกัน
Marchy

12

ฉันแน่ใจว่า บริษัท ที่ให้บริการเครื่องมือ (เช่น JetBrains *) มีความสนใจใน Roslyn มาก Microsoft ต้องการทำให้เครื่องมือเป็นเรื่องง่ายเพราะ Tooling ที่ดีสนับสนุนการใช้ระบบนิเวศของ Microsoft

* ต่อบล็อก JetBrains ( รายการนี้ ) JetBrians ได้ประกาศว่าพวกเขาจะไม่ใช้ Roslyn อย่างไรก็ตามฉันคิดว่าคู่แข่งใหม่ ๆ ของ JetBrains (ที่ไม่มีโค้ดเบสที่มีอยู่แล้วในการทำงาน) จะใช้ Roslyn; มันทำให้พวกเขาเริ่มต้น

คำถาม 6 ใน10 คำถาม 10 คำตอบใน Roslyn :

6: มีประโยชน์อะไรบ้างสำหรับโรสลิน? มันจะช่วยฉันในฐานะนักพัฒนาได้อย่างไร

หนึ่งในการใช้งานครั้งแรกของโรสลินที่นึกถึงคือกฎเกณฑ์ทางธุรกิจ ก่อน Roslyn การประเมินแมโครของผู้ใช้มักจะเกี่ยวข้องกับการใช้ Visual Basic สำหรับ Applications (VBA) การเรียกใช้ DLR ด้วยนิพจน์ Ruby หรือทำการ shelling คอมไพเลอร์บรรทัดคำสั่งด้วย Visual Basic ที่สร้างขึ้นแบบไดนามิกหรือรหัส C # และรับผลลัพธ์ของการทำงาน รหัสนั้น วิธีการเหล่านี้น้อยกว่าอุดมคติ

Roslyn จะอนุญาตให้มีการคอมไพล์และประมวลผลแบบไดนามิกของ C # และ (ในที่สุด) โค้ด Visual Basic พร้อมฟังก์ชัน Evaluate () ดังที่แสดงให้เห็นในบทความของ Eric Vogel "การใช้ Roslyn Scripting API ใน C #" มาโครผู้ใช้ที่เขียนด้วยภาษาเดียวกันกับแอปพลิเคชันจะทำให้นักพัฒนาซอฟต์แวร์สามารถรองรับมาโครผู้ใช้ที่เป็นตัวแทนของกฎทางธุรกิจได้ง่ายขึ้น

การปรับโครงสร้างรหัสกลายเป็นเรื่องง่ายขึ้นด้วย Roslyn ก่อนที่จะมี Roslyn ผู้พัฒนาเครื่องมือเช่น DevExpress CodeRush และ Refactor Pro และ JetBrains ReSharper ต้องสร้างการดำเนินการคอมไพเลอร์ใหม่เป็นพื้นฐานสำหรับผลิตภัณฑ์ของพวกเขา ด้วย Roslyn ผู้พัฒนา refactoring สามารถใช้ประโยชน์จากความสามารถของคอมไพเลอร์ที่มีอยู่โดยตรง ฉันนึกภาพการปรากฏตัวของแพ็คเกจ NuGet เพื่อติดตั้งกฎการปรับโครงสร้างซ้ำแต่ละครั้งเมื่อ Roslyn วางจำหน่ายอย่างกว้างขวาง


4
"มาโครผู้ใช้ที่เขียนด้วยภาษาเดียวกันกับแอพพลิเคชั่นจะช่วยให้นักพัฒนาซอฟต์แวร์สามารถรองรับมาโครผู้ใช้ที่เป็นตัวแทนของกฎทางธุรกิจได้ง่ายขึ้น" - สิ่งที่อาจจะผิดไป!
gbjbaanb

9

ฉันรออย่างใจจดใจจ่อวันที่คอมไพเลอร์ทุกคนเสนอคอมไพเลอร์เป็นบริการ (CaaS) เป็นประจำ เราต้องหยุดคิดว่าคอมไพเลอร์ปล่อยโค้ด pre-linker และเริ่มคิดว่าคอมไพเลอร์ปล่อยต้นไม้ซึ่งสามารถเปลี่ยนเป็นเป้าหมายหลาย ๆ คอมไพเลอร์ทั้งหมดควรมีคุณสมบัติในการปล่อยต้นไม้และเลือก JSON / XML ผลลัพธ์นั้นสามารถแปลงเป็นเป้าหมายหลายประเภทเช่นภาษาเดียวกันที่สวยงาม, แหล่ง C, IL, ไบนารี IL, Java, Javascript, LLVM, ปฏิบัติการ PIC และแม้กระทั่งรหัส pre-linker

ฉันเขียนคอมไพเลอร์เพื่อหาเลี้ยงชีพ ลูกค้าของฉันถูกขายบน CaaS เพราะเปิดประตูสู่ความยืดหยุ่นที่ยอดเยี่ยมการพกพาและการวิเคราะห์

ฉันผิดหวังจริงๆที่ Microsoft ไม่ได้ติดตั้ง CaaS มานานแล้ว ตัวอย่างเช่นสามารถใช้เป็นเส้นทางการย้ายข้อมูลสำหรับ VB6 ไปยังสิ่งอื่นหรือ. Net ไปยัง C ++


1

คำตอบง่ายๆสำหรับสาเหตุที่ MSFT ลงทุนใน Roslyn คือ codebase ที่มีอยู่สำหรับคอมไพเลอร์ C # ตอนนี้มีอายุ 5 เวอร์ชัน - 11 ปีแล้ว นั่นเป็นเวลานานที่โค้ดเบสใด ๆ จะยังคงสามารถจัดการได้ นอกจากนี้เนื่องจากพวกเขากำลังเขียนใหม่พวกเขาตัดสินใจลงทุนในการทำเช่นนั้นเพื่อให้ internals ทั้งหมดถูกเปิดเผยว่าเป็น API

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.