ทำไม Scala ถึงสามารถปรับขนาดได้มากกว่าภาษาอื่น ๆ


12

Scala ถูกเรียกเก็บเงินเป็นภาษาที่ปรับขนาดได้คุณลักษณะที่รวมอยู่ในชื่อ :

ชื่อ Scala เป็นกระเป๋าหิ้วของ "ปรับขนาดได้" และ "ภาษา" ซึ่งบ่งบอกว่ามันถูกออกแบบมาเพื่อเติบโตไปพร้อมกับความต้องการของผู้ใช้

"ปรับขนาดได้" หมายถึงอะไรในบริบทของสกาล่า? อะไรทำให้ Scala ปรับขนาดได้มากกว่าพูด Java?


5
Scala ไม่สามารถปรับขนาดได้ตามที่คุณคิด: คุณควรอ่านนักพัฒนา Twitter เกี่ยวกับ Scala / Java ... โดยทั่วไปทุกครั้งที่พวกเขามีปัญหาเกี่ยวกับความสามารถในการขยาย (จริง) พวกเขาลงเอยด้วยการลบโค้ด Scala และใส่มัลติเธรดอย่างถูกต้อง รหัส Java (ซึ่งตามที่ได้รับการชี้ให้เห็นที่นี่เป็นเรื่องง่ายที่จะทำใน Java กว่าใน Scala) Scala นั้นยอดเยี่ยมสำหรับการพิมพ์และเขียนแบบทดสอบหน่วยและสิ่งใดก็ตามที่ไม่เกี่ยวข้องกับข้อมูลจำนวน "โลกแห่งความจริง" [TM]
อุโมงค์ St.

5
การเขียนโค้ดหลายเธรดใน Java ง่ายกว่าใน Scala หรือไม่ งั้นเหรอ
Aaron Novstrup

@Webinator คุณมีลิงค์ไปยังการสัมภาษณ์หรือไม่?
Aaron Novstrup

เห็นด้วยกับ Tristan St เกี่ยวกับความยืดหยุ่น Erlang เป็นผู้นำของแพ็คในกรณีของการเขียนโปรแกรมพร้อมกันเนื่องจากความสามารถในการสร้างกระบวนการในเวลาน้อยที่สุด คุณไม่สามารถสร้างเธรดมากกว่า 10,000 รายการและโต้ตอบกับกันและกันใน SCALA ตามที่คุณคิด
Ubermensch

3
@TristanSt การแพร่กระจายของ FUD ที่ดีนั้นไม่ใช่สิ่งที่ฉันจะได้รับจากการสัมภาษณ์ขั้นพื้นฐาน - "แต่สำหรับชิ้นส่วนอื่น ๆ เราเพิ่งกลับไปใช้ Java Threading Model วิศวกรที่ทำงานเกี่ยวกับสิ่งนั้น John Kalucki เพิ่งพบว่ามันง่ายกว่านิดหน่อยในการทดสอบคาดเดาได้มากขึ้นสิ่งที่ดีคือมัน ใช้เวลาสักครู่เพื่อเปลี่ยนรหัสที่เป็นนักแสดงตามเธรดบางอย่างมันเป็นการค้นหาและแทนที่ดังนั้นมันจึงไม่เลวเลยถ้านักแสดงทำคุณล้มเหลวด้วยเหตุผลอะไรก็ตาม " แนวคิดที่น่าทึ่ง - บางสิ่งบางอย่างเข้ากับนางแบบนักแสดงและบางคนก็ทำไม่ได้!
Derek Litz

คำตอบ:


14

เมื่อ Martin Odersky พูดถึง scala ในฐานะตัวเลือกภาษาที่ปรับขนาดได้สิ่งที่เขาหมายถึงคือภาษานั้นเหมาะสมสำหรับ:

  • สิ่งสคริปต์
  • การเขียนแอปพลิเคชัน
  • การเขียนมอนสเตอร์ "องค์กร" (สำหรับความต้องการของคำที่ดีกว่า) การใช้งาน

แน่นอนที่สุดเขาไม่ได้หมายถึงความสามารถในการปรับขนาดได้จากมุมมองของการแสดง!

ความจริงที่ว่าเขาสามารถอ้างว่า scala นั้นเหมาะสมสำหรับการเขียนสคริปต์อย่างรวดเร็ว 'เช่นเดียวกับการปรับใช้ระดับองค์กรขนาดใหญ่มีดังนี้:

การเขียนสคริปต์

Scala นั้นยอดเยี่ยมสำหรับการเขียนสคริปต์เนื่องจากการอนุมานประเภทและสไตล์การใช้งานทำให้ทั้งกระชับและยอดเยี่ยมสำหรับการแบ่งส่วนและหั่นเป็นชิ้นเล็ก ๆ

การประยุกต์ใช้งาน

Scala นั้นยอดเยี่ยมสำหรับการเขียนแอปพลิเคชันเนื่องจากเป็นภาษาที่ตรวจสอบแบบคงที่พร้อมด้วยคุณสมบัติที่ยอดเยี่ยมสำหรับการทำงานทั้งในรูปแบบการใช้งานและรูปแบบที่จำเป็น Scala เข้ากันได้กับ Java และด้วยเหตุนี้คุณสามารถใช้ประโยชน์จากระบบนิเวศขนาดใหญ่ของห้องสมุด

การปรับใช้ระดับองค์กร

Scala คอมไพล์ไปยัง bytecode และทำงานบน Java Virtual Machine ซึ่งเป็นระบบที่เสถียรและมีประสิทธิภาพที่ยอดเยี่ยมเมื่อเทียบกับ (ที่เรียกว่า) พิมพ์แบบไดนามิก (เช่น untyped) ภาษา อีกครั้งความจริงที่ว่ามันถูกพิมพ์แบบคงที่หมายความว่าการปรับโครงสร้างจะทำง่ายขึ้นมากในฐานรหัสขนาดใหญ่


มีหลักฐานสนับสนุนใด ๆ สำหรับ "การพิมพ์แบบสแตติกหมายความว่าการปรับโครงสร้างจะทำง่ายขึ้นบนฐานโค้ดขนาดใหญ่"? ฟังดูเหมือน a, "มันขึ้นอยู่กับ", สถานการณ์จริงแล้ว สิ่งเดียวที่ฉันเห็นภาษาที่พิมพ์มีความแตกต่างอย่างชัดเจนคือพวกเขาง่ายขึ้นสำหรับนักเขียนคอมไพเลอร์ที่จะจัดการกับ
Derek Litz

21

สิ่งที่ Odersky พูดคือ (สไลด์ 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"สกาล่าอยู่ลึกที่ภาษาอื่น ๆ ในวงกว้าง"

วิธีนี้สามารถปรับขนาดได้ในแง่ของความยืดหยุ่นและความหมาย คุณสามารถสร้างโครงสร้างการควบคุมของคุณเอง เช่นกรอบนักแสดงเป็นห้องสมุด แต่ดูเหมือนว่ามันใช้คุณสมบัติภาษา

ซึ่งหมายความว่า Scala จะปรับขนาดตามสิ่งที่เป็นนามธรรมที่ต้องการไม่จำเป็นต้องอยู่ในรูปของ "ตอบ 1.000.000 คำขอในวินาที" (แต่ Scala ก็แข็งแกร่งเช่นกัน)


1
+1 สิ่งนี้เข้ากันได้กับ "SCAlable LAnguage" มันเป็นภาษาที่ออกแบบมาเพื่อให้สอดคล้องกับความต้องการของนักพัฒนา
เบ็นเจมส์

11

สิ่งที่จำกัดความสามารถในการปรับขยายของ Java ในทางปฏิบัติไม่ใช่ JVM มันเป็นความยากลำบากในการเขียนรหัสที่ถูกต้องพร้อมกัน สกาล่าทำให้มันง่ายขึ้นผ่านการสนับสนุนสำหรับการเขียนโปรแกรมการทำงานและรูปแบบนักแสดง

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


แม้ว่า Java จะไม่รองรับการเขียนโปรแกรมที่ใช้งานได้ แต่ก็ไม่ได้หมายความว่าคุณจะไม่สามารถใช้งานได้ใน Java การทำเช่นนั้นจะทำให้คุณมีความยืดหยุ่นเท่าเดิมแม้ว่าจะพยายามมากขึ้นก็ตาม ห้องสมุดที่สามารถช่วยcode.google.com/p/lambdaj
Peter Lawrey

2
ความสามารถในการปรับขนาดที่สกาลาเป็นเจ้าของชื่อเป็นภาษาไม่ใช่ของโปรแกรม
Daniel C. Sobral


6

นั่นไม่จำเป็นสำหรับภาษานั้นเองที่สามารถปรับขนาดได้มากกว่า Java เนื่องจากคุณบอกว่าทั้งสองภาษาสามารถสร้างรหัสไบต์เดียวกันได้

แต่รูปแบบนักแสดงและรูปแบบการเขียนโปรแกรมการทำงานสามารถเพิ่มความยืดหยุ่น (โดย - สั้น - ลดความซับซ้อนของการเขียนโปรแกรมพร้อมกันที่ถูกต้องและลดความต้องการการประสาน)

หากต้องการข้อมูลเชิงลึกที่ดีขึ้นลองดูที่โมเดลนักแสดงและเปรียบเทียบกับแอปพลิเคชัน Java แบบมัลติเธรดแบบดั้งเดิม:

คุณสามารถใช้กรอบ Akka เพื่อสร้างแอปพลิเคชัน Java ที่ปรับขนาดได้สูงโดยไม่ต้องเขียนโค้ดใน Scala:


ไลบรารีนักแสดงเป็นตัวอย่างที่ดีว่า Scala สามารถปรับขนาดได้อย่างไร แต่ตัวอย่างนี้ไม่เกี่ยวข้องกับการทำงานพร้อมกัน: API นักแสดงดูเหมือนคุณลักษณะดั้งเดิมพร้อมตัวดำเนินการพิเศษ (เช่น! message-send) แต่จริงๆแล้วมันเป็นเพียงแค่ วิธีการโทรปกติ
เบ็นเจมส์

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

ความคิดเห็นของฉันไม่ได้ใช้คำพูดเก่งขอโทษ คำตอบของ llemieng หรือ michael.kebe อธิบายได้ดีกว่า
เบ็นเจมส์

ไม่มีปัญหา ! ตอนนี้ฉันเข้าใจประเด็นของคุณแล้วฉันแค่พูดถึงความสามารถในการปรับขนาดของห้องสมุดสกาล่าและไม่เกี่ยวกับคุณสมบัติการปรับขนาดภาษา / การทำงานพร้อมกัน ขอบคุณ
Alois Cochard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.