سكالا (لغة برمجة)

Scala
Scala-full-color.svg
ParadigmMulti-paradigm: concurrent, functional, imperative, object-oriented
Designed byMartin Odersky
DeveloperProgramming Methods Laboratory of École polytechnique fédérale de Lausanne
First appeared20 يناير 2004; منذ 20 سنة (2004-01-20
الإصدار المستقر
2.13.4 / 19 نوفمبر 2020; منذ 4 سنين (2020-11-19[1]
Typing disciplineInferred, static, strong, structural
Implementation languageScala
Platform
LicenseApache License 2.0[2]
Filename extensions.scala, .sc
Websitewww.scala-lang.org
Influenced by
Common Lisp,[3] Eiffel, Erlang, Haskell,[4] Java,[5] OCaml,[5] Oz, Pizza,[6] Scheme,[5] Smalltalk, Standard ML[5]
Influenced
Ceylon, Fantom, F#, Kotlin, Lasso, Red

سكالا Scala ( /ˈskɑːlɑː/ SKAH-lah)[7] هي لغة برمجة للأغراض العامة توفر الدعم لكل من البرمجة كائنية التوجه و البرمجة الوظيفية. اللغة لديها نوع كتابة ثابتة. مصممة لتكون موجزة،[8] تهدف العديد من قرارات تصميم سكالا إلى معالجة انتقادات جاڤا.[6]

الغرض من شيفرة مصدر سكالا أن يتم تجميعها إلى جاڤا بايت كود، بحيث يتم تشغيل الكود القابل للتنفيذ الناتج على آلة جاڤا الافتراضية. توفر سكالا التوافق اللغوي مع جاڤا، بحيث يمكن الإشارة إلى المكتبات المكتوبة بأي من اللغتين مباشرةً في رمز سكالا أو جاڤا.[9] مثل جاڤا، فإن سكالا هي كائنية التوجه، وتستخدم بناء قوس مجعد تذكرنا بـ لغة البرمجة سي. بخلاف جاڤا، تتمتع سكالا بالعديد من ميزات البرمجة الوظيفية مثل المخطط و ML المعيارية و هاسكل، بما في ذلك الكاري، الثبات، التقييم حسب الحاجة، ومطابقة النمط. كما أن لديها نظام نوع متقدم يدعم نوع البيانات الجبرية، التباين والتناقض، أنواع عالية المستوى (ولكن ليس أنواع عالية المستوى) و نوع مجهول. تشمل الميزات الأخرى لـ سكالا غير الموجودة في جاڤا التحميل الزائد للمشغل، والپارامترات الاختيارية، و الپارامتر المحدد، و السلسلة الأولية. على العكس من ذلك، فإن ميزة جاڤا غير الموجودة في سكالا هي الاستثناء المحدد، والتي ثبت أنها مثيرة للجدل.[10]

اسم سكالا هو عبارة عن مجموعة من التحجيم و اللغة، مما يدل على أنها مصممة للنمو مع متطلبات مستخدميها.[11]

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

تاريخ

بدأ تصميم سكالا في عام 2001 في المعهد الاتحادي للتكنولوجيا في لوزان (EPFL) (في لوزان، سويسرا) بواسطة مارتن أودرسكي. يتبع ذلك من العمل على فَنل، وهي لغة برمجة تجمع بين الأفكار من البرمجة الوظيفية و شبكة پتري.[12] عمل أودرسكي سابقاً على جاڤا عامة، و جاڤا سي، مترجم جاڤا الخاص بشركة sun سن.[12]


الإصدارات

النسخة الإصدار الميزات
1.0.0-b2[13] 8 ديسمبر 2003 _
1.1.0-b1[13] 19 فبراير 2004
  • قائمة.سكالا
  • تم تغيير ترخيص سكالا إلى ترخيص BSD المنقح
1.1.1[13] 23 مارس 2004
  • دعم لفئات جاڤا الداخلية الثابتة
  • تحسينات فئة المكتبة إلى متوقعة و مصفوفية و xml.Elem و عازلة
1.2.0[13] 9 يونيو 2004
  • ملاحظات
  • XML حرفية
1.3.0[13] 16 سبتمبر 2004
  • دعم مايكروسوفت .NET
  • إقفال النظام
  • تم تغيير بناء الجملة للطرق الخالية من الپارامترات من [] T إلى => T
1.4.0[13] 20 يونيو 2005
  • السمات
  • تحل الكلمات المفتاحية match محل match method
  • دعم تجريبي لأنواع زمن التشغيل
2.0[14] 12 مارس 2006
  • تمت إعادة كتابة المترجم بالكامل في سكالا
  • دعم تجريبي لعموميات جاڤا
  • implicit و requires كلمات مفتاحية
  • تسمح استبدال match الكلمة المفتاحية المسموحة التي تم إدخالها
  • with رابط مسموح به فقط بعد شرط extends
  • يمكن استخدام الأسطر الجديدة كفواصل تعبيرية بدلاً من الفاصلة المنقوطة
  • يطابق التعبير العادي الأنماط مقتصراً على أنماط التسلسل فقط
  • قبول القيمة من أجل الإدراك وتعريفات النمط
  • قد تكون پارامترات الفئة مسبوقة بـ val أو var
  • للرؤية الخاصة قيود
2.1.0[13] 17 مارس 2006
  • أداة sbaz مدمجة في توزيع سكالا
  • استبدال الكلمة المفتاحية match مكان طريقة match
  • دعم تجريبي لأنواع زمن التشغيل
2.1.8[15] 23 أغسطس 2006
  • للرؤية المحمية قيود
  • يمكن الرجوع إلى الأطراف الخاصة في الفئة من الوحدة المرافقة للفئة والعكس صحيح
  • بحث ضمني معمم
  • تم تشديد تطابق النمط المكتوب للأنواع المفردة
2.3.0[16] 23 نوفمبر 2006
  • لا يتعين على Unit إرجاع الوظائف تحديد نوع الإرجاع صراحة
  • يتم التمييز بين متغيرات النوع والأنواع في مطابقة النمط
  • تمت إعادة التسمية All و AllRef إلى Nothing و Null
2.4.0[17] 9 مارس 2007
  • تقبل محولات private و protected مؤهلات [this]
  • يمكن كتابة المجموعات بأقواس مستديرة
  • يمكن الآن وضع علامة على المُنشئ الأساسي للفئة كخاص أو محمي
  • تم تغيير السمات إلى التعليقات التوضيحية بصيغة جديدة
  • الأسماء المستعارة الذاتية
  • يمكن دمج عوامل التشغيل مع التخصيص
2.5.0[18] 2 مايو 2007
  • يمكن أيضاً تجريد پارامترات الكتابة وأعضاء النوع المجرد عبر منشآت النوع
  • يمكن تهيئة حقول الكائن قبل استدعاء المنشئات الرئيسية
  • تغيير الصيغة من أجل الفهم
  • وظائف مجهولة ضمنية (مع الخط السفلي للپارامترات)
  • تم تمديد مطابقة النمط للوظائف المجهولة لدعم أي متطفل
2.6.0[19] 27 يوليو 2007
  • أنواع وجودية
  • قيم حسب الحاجة
  • أنواع إنشائية
2.7.0[20] 07 فبراير 2008
  • يتم دعم أنواع جاڤا العامة بشكل افتراضي
  • تمديد وظائف فئات الحالة
2.8.0[21] 14 يوليو 2010
  • مراجعة إطار العمل المشترك والموحد والشامل لأنواع المجموعات.
  • نوع التخصص
  • براهين افتراضية و محددة
  • كائنات مجموعة
  • تحسين الملاحظات
2.9.0[22] 12 مايو 2011
  • مجموعات متوازية
  • تحل سمة App الآمن محل سمة Application
  • سمة DelayedInit
  • * تحسينات جاڤا إنتروپ
2.10[23] 4 يناير 2013
  • تصنيفات القيمة[24]
  • تصنيفات ضمنية[25]
  • إقحام السلاسل[26]
  • المستقبل والعهود[27]
  • الديناميكية والتطبيق الديناميكي[28]
  • أنواع الطرق التابعة:
    • def identity(x: AnyRef): x.type = x // the return type says we return exactly what we got
  • باعث بايت كود جديد يعتمد على ASM:
    • يمكن أن يستهدف JDK 1.5 و 1.6 و 1.7
    • يصدر 1.6 بايت كود افتراضياً
    • تم إهمال الواجهة الخلفية القديمة 1.5
  • أداة مطابقة نمط جديدة: إعادة كتابتها من البداية لتوليد كود أكثر قوة (لا مزيد من الزيادة الأسية)
    • أصبح إنشاء الكود والتحليلات مستقلاً الآن (يمكن إيقاف تشغيل الأخير باستخدام -Xno-patmat-analysis)
  • تحسينات سكالا دوك
    • التضمينات (علامة-ضمنية)
    • الرسوم البيانية (-علم المخططات، يتطلب رسم بياني)
    • مجموعات (-مجموعات)
  • ميزات اللغة المعيارية[29]
  • المجموعات المتوازية[30] قابلة للتكوين الآن باستخدام مجموعات الترابط المخصصة
  • عوامل آكا الآن جزء من التوزيع
    • تم إهمال عوامل سكالا وتم تضمين تطبيق آكا الآن في التوزيع.
  • تحسينات في الأداء
    • تضمين أسرع
    • المدى#المجموع الآن O(1)
  • تحديث مكتبة ForkJoin
  • إصلاحات ثابتة في TreeSet / TreeMap
  • تحسينات على الوظائف الجزئية
  • إضافة ؟؟؟ و NotImplementedError
  • إضافة فئات IsTraversableOnce + IsTraversableLike لطرق التمديد
  • الإهمالات و التنظيف
  • إهمال الفاصلة العائمة والنحوية الحرفية الثمانية
  • إزالة scala.dbc

الميزات التجريبية

  • انعكاس سكالا[31]
  • ماركوس[32]
2.10.2[33] 6 يونيو 2013 _
2.10.3[34] 1 أكتوبر 2013 _
2.10.4[35] 18 مارس 2014 _
2.10.5[36] 5 مارس 2015 _
2.11.0[37] 21 أبريل 2014
  • تحسينات في أداء المجموعة
  • تحسينات في أداء المترجم
2.11.1[38] 20 مايو 2014 _
2.11.2[39] 22 يوليو 2014 _
2.11.4[40] 31 أكتوبر 2014 _
2.11.5[41] 8 يناير 2015 _
2.11.6[42] 5 مارس 2015 _
2.11.7[43] 23 يونيو 2015 _
2.11.8[44] 8 مارس 2016 _
2.11.11[45] 18 أبريل 2017 _
2.11.12[46] 13 نوفمبر 2017 _
2.12.0[47] 3 نوفمبر 2016
  • مطلوب جاڤا 8
  • تم إنشاء جاڤا 8 بايت كود
  • دعم لغة جاڤا 8 SAM (واجهة وظيفية)
2.12.1[48] 5 ديسمبر 2016 _
2.12.2[49] 18 أبريل 2017 _
2.12.3[50] 26 يوليو 2017 _
2.12.4[51] 17 أكتوبر 2017 _
2.12.5[52] 15 مارس 2018 _
2.12.6[53] 27 أبريل 2018 _
2.12.7[54] 27 سبتمبر 2018 _
2.12.8[55] 4 ديسمبر 2018
  • الإصدار الأول من سكالا 2.12 مع تغيير الترخيص إلى أپاتشي v2.0
2.12.9[56] 5 أغسطس 2019 _
2.12.10[57] 10 سبتمبر 2019 _
2.12.11[58] 16 مارس 2020 _
2.12.12[59] 13 يوليو 2020 _
2.12.13[60] 12 يناير 2021 _
2.13.0[61] 11 يونيو 2019
  • إعادة تصميم مكتبة المجموعات القياسية
  • الأنماط الحرفية
  • توحيد النوع الجزئي
  • تضمينات حسب الاسم
  • تحسينات المترجم
2.13.1[62] 18 سبتمبر 2019 _
2.13.2[63] 22 أبريل 2020 _
2.13.3[64] 25 يونيو 2020 _
2.13.4[65] 19 نوفمبر 2020 _

النقد

في مارس 2015، صرح نائب الرئيس السابق لمجموعة هندسة المنصات في تويتر رافي كركوريان، أنه لم يكن ليختار سكالا في عام 2011 بسبب منحنى التعلم.[66]في الشهر نفسه، صرح نائب الرئيس الأول في لنكد إن كڤن سكوت بقرارهم "تقليل [اعتمادهم] على سكالا".[67] في نوفمبر 2011، انتقل يامر بعيداً عن سكالا لأسباب تضمنت منحنى التعلم لأعضاء الفريق الجدد وعدم التوافق من إصدار واحد من مترجم سكالا إلى الإصدار التالي.[68]

انظر أيضاً

  • sbt, a widely used build tool for Scala projects
  • Play!, an open-source Web application framework that supports Scala
  • Akka, an open-source toolkit for building concurrent and distributed applications
  • Chisel, an open-source language built upon Scala that is used for hardware design and generation.[69]

المراجع

  1. ^ "Scala 2.13.4 is now available!". 2020-11-19. Retrieved 2020-11-19.
  2. ^ "NOTICE file". 2019-01-24. Retrieved 2019-12-04 – via GitHub.
  3. ^ "Scala Macros".
  4. ^ Fogus, Michael (6 August 2010). "MartinOdersky take(5) toList". Send More Paramedics. Retrieved 2012-02-09.
  5. ^ أ ب ت ث Odersky, Martin (11 January 2006). "The Scala Experiment - Can We Provide Better Language Support for Component Systems?" (PDF). Retrieved 2016-06-22.
  6. ^ أ ب Odersky, Martin; et al. (2006). "An Overview of the Scala Programming Language" (PDF) (2nd ed.). École Polytechnique Fédérale de Lausanne (EPFL). Archived (PDF) from the original on 2020-07-09.
  7. ^ Odersky, Martin (2008). Programming in Scala. Mountain View, California: Artima. p. 3. ISBN 9780981531601. Retrieved 12 June 2014.
  8. ^ Potvin, Pascal; Bonja, Mario (24 September 2015). An IMS DSL Developed at Ericsson. Lecture Notes in Computer Science. Vol. 7916. arXiv:1509.07326. doi:10.1007/978-3-642-38911-5. ISBN 978-3-642-38910-8. S2CID 1214469.
  9. ^ "Frequently Asked Questions - Java Interoperability". scala-lang.org. Retrieved 2015-02-06.
  10. ^ Friesen, Jeff (16 November 2016). "Are checked exceptions good or bad?". JavaWorld. Retrieved 28 August 2018.
  11. ^ Loverdo, Christos (2010). Steps in Scala: An Introduction to Object-Functional Programming. Cambridge University Press. p. xiii. ISBN 9781139490948. Retrieved 31 July 2014.
  12. ^ أ ب Martin Odersky, "A Brief History of Scala", Artima.com weblogs, 9 June 2006
  13. ^ أ ب ت ث ج ح خ "Scala Change History". scala-lang.org. Archived from the original on 2007-10-09.
  14. ^ "Changes in Version 2.0 (12-Mar-2006)". scala-lang.org. 2006-03-12. Retrieved 2014-11-07.
  15. ^ "Changes in Version 2.1.8 (23-Aug-2006)". scala-lang.org. 2006-08-23. Retrieved 2014-11-07.
  16. ^ "Changes in Version 2.3.0 (23-Nov-2006)". scala-lang.org. 2006-11-23. Retrieved 2014-11-07.
  17. ^ "Changes in Version 2.4.0 (09-Mar-2007)". scala-lang.org. 2007-03-09. Retrieved 2014-11-07.
  18. ^ "Changes in Version 2.5 (02-May-2007)". scala-lang.org. 2007-05-02. Retrieved 2014-11-07.
  19. ^ "Changes in Version 2.6 (27-Jul-2007)". scala-lang.org. 2007-06-27. Retrieved 2014-11-07.
  20. ^ "Changes in Version 2.7.0 (07-Feb-2008)". scala-lang.org. 2008-02-07. Retrieved 2014-11-07.
  21. ^ "Changes in Version 2.8.0 (14-Jul-2010)". scala-lang.org. 2010-07-10. Retrieved 2014-11-07.
  22. ^ "Changes in Version 2.9.0 (12-May-2011)". scala-lang.org. 2011-05-12. Retrieved 2014-11-07.
  23. ^ "Changes in Version 2.10.0". scala-lang.org. 2013-01-04. Retrieved 2014-11-07.
  24. ^ Harrah, Mark. "Value Classes and Universal Traits". scala-lang.org. Retrieved 2014-11-07.
  25. ^ Suereth, Josh. "SIP-13 - Implicit classes". scala-lang.org. Retrieved 2014-11-07.
  26. ^ Suereth, Josh. "String Interpolation". scala-lang.org. Retrieved 2014-11-07.
  27. ^ Haller, Philipp; Prokopec, Aleksandar. "Futures and Promises". scala-lang.org. Retrieved 2014-11-07.
  28. ^ "SIP-17 - Type Dynamic". scala-lang.org. Retrieved 2014-11-07.
  29. ^ "SIP-18 - Modularizing Language Features". scala-lang.org. Retrieved 2014-11-07.
  30. ^ Prokopec, Aleksandar; Miller, Heather. "Parallel Collections". scala-lang.org. Retrieved 2014-11-07.
  31. ^ Miller, Heather; Burmako, Eugene. "Reflection Overview". scala-lang.org. Retrieved 2014-11-07.
  32. ^ Burmako, Eugene. "Def Macros". scala-lang.org. Retrieved 2014-11-07.
  33. ^ "Scala 2.10.2 is now available!". scala-lang.org. 2013-06-06. Archived from the original on 2014-11-08. Retrieved 2014-11-07.
  34. ^ "Scala 2.10.3 is now available!". scala-lang.org. 2013-10-01. Archived from the original on 2014-11-08. Retrieved 2014-11-07.
  35. ^ "Scala 2.10.4 is now available!". scala-lang.org. 2014-03-18. Retrieved 2015-01-07.
  36. ^ "Scala 2.10.5 is now available!". scala-lang.org. 2015-03-04. Retrieved 2015-03-23.
  37. ^ "Scala 2.11.0 is now available!". scala-lang.org. 2014-04-21. Retrieved 2014-11-07.
  38. ^ "Scala 2.11.1 is now available!". scala-lang.org. 2014-05-20. Retrieved 2014-11-07.
  39. ^ "Scala 2.11.2 is now available!". scala-lang.org. 2014-07-22. Retrieved 2014-11-07.
  40. ^ "Scala 2.11.4 is now available!". scala-lang.org. 2014-10-30. Retrieved 2014-11-07.
  41. ^ "Scala 2.11.5 is now available!". scala-lang.org. 2015-01-08. Retrieved 2015-01-22.
  42. ^ "Scala 2.11.6 is now available!". scala-lang.org. 2015-03-05. Retrieved 2015-03-12.
  43. ^ "Scala 2.11.7 is now available!". scala-lang.org. 2015-06-23. Retrieved 2015-07-03.
  44. ^ "Scala 2.11.8 is now available!". scala-lang.org. 2016-03-08. Retrieved 2016-03-09.
  45. ^ "Three new releases and more GitHub goodness!". scala-lang.org. 2017-04-18. Retrieved 2017-04-19.
  46. ^ "Security update: 2.12.4, 2.11.12, 2.10.7 (CVE-2017-15288)". scala-lang.org. 2017-11-13. Retrieved 2018-05-04.
  47. ^ "Scala 2.12.0 is now available!". scala-lang.org. 2016-11-03. Retrieved 2017-01-08.
  48. ^ "Scala 2.12.1 is now available!". scala-lang.org. 2016-12-05. Retrieved 2017-01-08.
  49. ^ "Three new releases and more GitHub goodness!". scala-lang.org. 2017-04-18. Retrieved 2017-04-19.
  50. ^ "SCALA 2.12.3 IS NOW AVAILABLE!". scala-lang.org. 2017-07-26. Retrieved 2017-08-16.
  51. ^ "SCALA 2.12.4 IS NOW AVAILABLE!". scala-lang.org. 2017-10-18. Retrieved 2017-10-26.
  52. ^ "SCALA 2.12.5 IS NOW AVAILABLE!". scala-lang.org. 2018-03-15. Retrieved 2018-03-20.
  53. ^ "Scala 2.12.6 is now available!". scala-lang.org. 2018-04-27. Retrieved 2018-05-04.
  54. ^ "Scala 2.12.7 is now available!". scala-lang.org. 2018-09-27. Retrieved 2018-10-09.
  55. ^ "Scala 2.12.8 is now available!". scala-lang.org. 2018-12-04. Retrieved 2018-12-09.
  56. ^ "Scala 2.12.9 is now available!". scala-lang.org. 2019-08-05. Retrieved 2021-01-20.
  57. ^ "Scala 2.12.10 is now available!". scala-lang.org. 2019-09-10. Retrieved 2021-01-20.
  58. ^ "Scala 2.12.11 is now available!". scala-lang.org. 2020-03-16. Retrieved 2021-01-20.
  59. ^ "Scala 2.12.12 is now available!". scala-lang.org. 2020-07-13. Retrieved 2021-01-20.
  60. ^ "Scala 2.12.13 is now available!". scala-lang.org. 2021-01-12. Retrieved 2021-01-20.
  61. ^ "Scala 2.13.0 is now available!". scala-lang.org. 2019-06-11. Retrieved 2018-06-17.
  62. ^ "Scala 2.13.1 is now available!". scala-lang.org. 2019-09-18. Retrieved 2021-01-20.
  63. ^ "Scala 2.13.2 is now available!". scala-lang.org. 2020-04-22. Retrieved 2021-01-20.
  64. ^ "Scala 2.13.3 is now available!". scala-lang.org. 2020-06-25. Retrieved 2021-01-20.
  65. ^ "Scala 2.13.4 is now available!". scala-lang.org. 2020-11-19. Retrieved 2021-01-20.
  66. ^ Krikorian, Raffi (17 March 2015). O'Reilly Software Architecture Conference 2015 Complete Video Compilation: Re-Architecting on the Fly - Raffi Krikorian - Part 3 (video). O'Reilly Media. Event occurs at 4:57. Retrieved 8 March 2016. What I would have done differently four years ago is use Java and not used Scala as part of this rewrite. [...] it would take an engineer two months before they're fully productive and writing Scala code.
  67. ^ Scott, Kevin (11 Mar 2015). "Is LinkedIn getting rid of Scala?". quora.com. Retrieved 25 January 2016.
  68. ^ Hale, Coda (29 November 2011). "The Rest of the Story". codahale.com. Retrieved 7 November 2013.
  69. ^ "Chisel: Constructing Hardware in a Scala Embedded Language | ASPIRE". UC Berkeley APSIRE. Retrieved 27 May 2020.

للاستزادة

هناك كتاب ، Scala، في معرفة الكتب.



قالب:Common Language Infrastructure

الكلمات الدالة: