هذا هو موطن مكتبة Scala 2 القياسية ، والمترجم ، ومواصفات اللغة.
لـ Scala 3 ، تفضل بزيارة Scala/Scala3.
تقع المشكلات وتقارير الأخطاء لـ Scala 2 في Scala/Bug. هذا المتتبع هو أيضًا المكان الذي قد يجد المساهمون الجدد مشكلات للعمل عليها: مشكلات أولى جيدة ، HELD WANTION.
لتنسيق الجهود الأوسع ، نستخدم أيضًا متتبع Scala/Scala-Dev.
للمساهمة هنا ، يرجى فتح طلب سحب من شوكة هذا المستودع.
كن على علم بأننا لا نستطيع قبول الإضافات إلى المكتبة القياسية ، فقط التعديلات على التعليمات البرمجية الحالية. يمنع التوافق الثنائي إضافة فئات عامة جديدة أو أساليب عامة. تم إجراء الإضافات إلى Scala-Library-Next بدلاً من ذلك.
نطلب منك التوقيع على Scala CLA قبل أن نتمكن من دمج أي من عملك ، لحماية مستقبل Scala كبرنامج مفتوح المصدر.
سير العمل العام كما يلي.
لمزيد من المعلومات حول بناء وتطوير جوهر Scala ، اقرأ بقية هذه القراءة ، خاصةً لإعداد جهازك!
من أجل التواصل مع المساهمين الآخرين في Scala ، انضم إلى قناة #Scala-Contributors على دردشة Discord Scala ، أو نشرها على المساهمين. scala-lang.org (الخطاب).
إذا كنت بحاجة إلى بعض المساعدة في العلاقات العامة الخاصة بك في أي وقت ، فلا تتردد في @-أي شخص من القائمة أدناه ، وسنبذل قصارى جهدنا لمساعدتك:
اسم المستخدم | تحدث معي عن ... | |
---|---|---|
@lrytz | النهاية الخلفية ، المحسّن ، الحجج المسمى & الافتراضي ، المراسلين | |
@retronym | 2.12.x الفرع ، أداء المترجم ، حشرات البرمجيات الغريبة ، lambdas | |
@SethTisue | البدء ، البناء ، CI ، بناء المجتمع ، جنكينز ، مستندات ، مكتبة ، استبدال | |
@dwijnand | مطابقة الأنماط ، ميما ، جزء | |
@som-snytt | التحذيرات/الوضوح/الأخطاء ، والاستبدال ، وخيارات التحويل البرمجي ، والمترجمات الداخلية ، والجزء الأقصى | |
@Ichoran | مكتبة المجموعات ، الأداء | |
@viktorklang | التزامن ، العقود الآجلة | |
@sjrd | التفاعلات مع scala.js | |
@NthPortal | المكتبة ، التزامن ، scala.math ، LazyList ، Using ، تحذيرات | |
@bishabosha | قارئ لذيذ | |
@joroKr21 | الأنواع العليا ، والضمن ، والتباين |
ملاحظة: إذا كان لديك بعض وقت الفراغ للمساعدة هنا ، فسيكون سعداء بإضافة اسمك إلى هذه القائمة!
استهدف أقدم فرع تود أن تنتهي التغييرات الخاصة بك. ندمج بشكل دوري إلى الأمام من فروع الإصدار الأقدم (على سبيل المثال ، 2.12.x) إلى أخرى (على سبيل المثال 2.13.x).
إذا كان من الصعب دمج التغيير الخاص بك ، فقد يُطلب منك أيضًا تقديم PR منفصل يستهدف الفرع الأحدث.
إذا كان التغيير الخاص بك محددًا للإصدار ولا ينبغي دمجه إلى الأمام ، فضع [nomerge]
في اسم العلاقات العامة.
إذا كان التغيير الخاص بك عبارة عن مُخلف من فرع أحدث ، وبالتالي لا يلزم دمجه إلى الأمام ، فضع [backport]
باسم العلاقات العامة.
يجب أن تستهدف معظم التغييرات 2.13.x. نحن مترددون بشكل متزايد في استهداف 2.12.x ما لم يكن هناك سبب خاص (على سبيل المثال إذا تم العثور على خطأ سيء بشكل خاص ، أو إذا كانت هناك رعاية تجارية).
أصبح فرع 2.11.x الآن غير نشط ولا يتم تخطيط إصدارات 2.11.x أخرى (ما لم تنشأ ظروف غير عادية وغير متوقعة). يجب ألا تستهدف 2.11.x دون طلب المشرفين أولاً.
الأهم من ذلك:
scala/
+--build.sbt The main sbt build definition
+--project/ The rest of the sbt build
+--src/ All sources
+---/library Scala Standard Library
+---/reflect Scala Reflection
+---/compiler Scala Compiler
+--test/ The Scala test suite
+---/files Partest tests
+---/junit JUnit tests
+---/scalacheck ScalaCheck tests
+--spec/ The Scala language specification
ولكن أيضا:
scala/
+---/library-aux Scala Auxiliary Library, for bootstrapping and documentation purposes
+---/interactive Scala Interactive Compiler, for clients such as an IDE (aka Presentation Compiler)
+---/intellij IntelliJ project templates
+---/manual Scala's runner scripts "man" (manual) pages
+---/partest Scala's internal parallel testing framework
+---/partest-javaagent Partest's helper java agent
+---/repl Scala REPL core
+---/repl-frontend Scala REPL frontend
+---/scaladoc Scala's documentation tool
+---/scalap Scala's class file decompiler
+---/testkit Scala's unit-testing kit
+--admin/ Scripts for the CI jobs and releasing
+--doc/ Additional licenses and copyrights
+--scripts/ Scripts for the CI jobs and releasing
+--tools/ Scripts useful for local development
+--build/ Build products
+--dist/ Build products
+--target/ Build products
تحتاج إلى الأدوات التالية:
MacOS و Linux العمل. قد تعمل Windows إذا كنت تستخدم Cygwin. تساعد المجتمع في الحفاظ على العمل على Windows وتوثيق أي إعداد مطلوب.
نحن ممتنون لتراخيص OSS التالية:
أثناء التطوير العادي ، تم تصميم بناء Scala جديد بواسطة الإصدار الذي تم إصداره مسبقًا ، والمعروف باسم "المترجم المرجعي" أو ، على سبيل المثال ، كـ "Starr" (إصدار مرجعي مستقر). بناء مع ستار يكفي لمعظم أنواع التغييرات.
ومع ذلك ، فإن البناء الكامل من scala هو bootstrapped . يحتوي bootstrapping على خطوتين: أولاً ، بناء مع ستار ؛ ثم ، قم ببناء مرة أخرى باستخدام المترجم الطازج ، تاركًا ستار خلفه. هذا يضمن أن كل نسخة سكالا يمكن أن تبني نفسها.
إذا قمت بتغيير جزء توليد الكود من برنامج التحويل البرمجي Scala ، فلن تظهر التغييرات الخاصة بك إلا في رمز المكتبة والمترجم بعد التمهيد. لدينا CI يقوم ببناء bootstrapped.
Bootstrapping محليًا : لأداء bootstrap ، قم بتشغيل restarrFull
ضمن جلسة SBT. سيؤدي ذلك إلى إنشاء ونشر توزيع Scala إلى مستودع القطع الأثرية المحلية ثم قم بتبديل SBT لاستخدام هذا الإصدار باعتباره scalaVersion
الجديد. يمكنك بعد ذلك العودة مع reload
. ملاحظة: ستقوم restarrFull
أيضًا بكتابة إصدار Starr إلى buildcharacter.properties
حتى تتمكن من العودة إليها باستخدام restarr
دون إعادة النشر. سيؤدي ذلك إلى تبديل جلسة SBT لاستخدام أدلة build-restarr
والراحة target-restarr
بدلاً من build
target
، والتي تتجنب مسح التصنيفات والبيانات الوصفية الإضافية. سيستمر تكوين Intellij لتجميع وتشغيل الاختبارات باستخدام إصدار Starr في versions.properties
.
للتاريخ حول كيفية الوصول إلى المخطط الحالي ، راجع https://groups.google.com/d/topic/scala-internals/gp5jsm1e0fo/discussion.
بناء مع تحذيرات قاتلة : لجعل تحذيرات في المشروع قاتلة (أي تحويلها إلى أخطاء) ، قم بتشغيل set Global / fatalWarnings := true
في SBT (استبدل Global
باسم الوحدة النمطية - مثل reflect
- لجعل التحذيرات قاتلة فقط لصالح تلك الوحدة). لتعطيل التحذيرات القاتلة مرة أخرى ، إما reload
SBT ، أو تشغيل set Global / fatalWarnings := false
(مرة أخرى ، استبدل Global
باسم الوحدة النمطية إذا قمت فقط بتمكين تحذيرات قاتلة لتلك الوحدة). CI دائما لديه تحذيرات مميتة.
بمجرد بدء جلسة sbt
، يمكنك تشغيل أحد الأوامر الأساسية:
compile
جميع المشروعات الفرعية (المكتبة ، الانعكاس ، المترجم ، Scaladoc ، إلخ)scala
/ scalac
قم بتشغيل REPL / برنامج التحويل البرمجي مباشرة من SBT (قبول الخيارات / الوسائط)enableOptimizer
إعادة تحميل البناء مع تمكين محسن Scala. تم بناء إصداراتنا بهذه الطريقة. قم بتمكين هذا عند العمل على تحسينات الأداء المترجم. عند تمكين المُحسّن ، سيكون البناء أبطأ ويمكن أن تكون التصميمات الإضافية غير صحيحة.setupPublishCore
بتشغيل enableOptimizer
وتكوين رقم إصدار بناءً على Git SHA الحالي. غالبًا ما تستخدم كجزء من bootstrapping: sbt setupPublishCore publishLocal && sbt -Dstarr.version=<VERSION> testAll
dist/mkBin
البرامج النصية العداء ( scala
، scalac
، إلخ) في build/quick/bin
dist/mkPack
ينشئ بناء في تنسيق توزيع Scala في build/pack
junit/test
يدير اختبارات Junit ؛ junit/testOnly *Foo
يدير مجموعة فرعيةscalacheck/test
بإجراء اختبارات Scalacheck ، استخدم testOnly
لتشغيل مجموعة فرعيةpartest
لا يدير جزءًا من الاختبارات (يقبل الخيارات ، جرب partest --help
)publishLocal
ينشر توزيعًا محليًا (يمكن استخدامه scalaVersion
في مشاريع SBT الأخرى)set baseVersionSuffix := "bin-abcd123-SNAPSHOT"
حيث abcd123
هو تجزئة GIT للمراجعة التي يتم نشرها. يمكنك أيضًا استخدام شيء مخصص مثل "bin-mypatch"
. هذا يغير رقم الإصدار من 2.13.2-SNAPSHOT
إلى شيء أكثر استقرارًا ( 2.13.2-bin-abcd123-SNAPSHOT
).-bin
تمثل الإصدار الثنائي متوافق. سيؤدي استخدامه في SBT إلى أن يكون الانتقاء scalaBinaryVersion
2.13
. إذا لم يكن الإصدار متوافقًا ثنائيًا ، فإننا نوصي باستخدام -pre
، على سبيل المثال ، 2.14.0-pre-abcd123-SNAPSHOT
.set ThisBuild / Compile / packageDoc / publishArtifact := false
لتخطي مستندات API توليد / نشر (يسرع العملية). إذا كان الأمر قد أدى إلى a module is not authorized to depend on itself
، فقد يكون المكون الإضافي العالمي SBT يسبب تبعية دورية. حاول تعطيل الإضافات العالمية SBT (ربما عن طريق التعليق عليها مؤقتًا في ~/.sbt/1.0/plugins/plugins.sbt
).
نوصي بإبقاء ملفات الاختبار المحلية في دليل sandbox
المدرج في .gitignore
من Repo Scala.
لاحظ أن التجميع التزايدي لـ SBT غالبًا ما يكون خشنًا للغاية بالنسبة لقاعدة رمز برنامج التحويل البرمجي وإعادة تجميع الكثير من الملفات ، مما يؤدي إلى أوقات بناء طويلة (تحقق من SBT#1104 للتقدم في تلك الجبهة). في غضون ذلك يمكنك:
نقترح استخدام Idea Intellij (انظر SRC/Intellij/README.MD).
قد تعمل المعادن أيضًا ، لكن ليس لدينا تعليمات أو عينة من التكوين لذلك. سيكون طلب سحب في هذا المجال موضع ترحيب للغاية. في غضون ذلك ، نقوم بجمع التوجيه في Scala/Scala-Dev#668.
من أجل استخدام المترجم الإضافي لـ Intellij:
dist/mkBin
في SBT للحصول على بناء ونصوص عداء في build/quick/bin
يمكنك الآن تحرير وبناء Intellij واستخدام البرامج النصية (برنامج التحويل البرمجي ، REPL) لاختبار التغييرات الخاصة بك مباشرة. يمكنك أيضًا تشغيل scala
و scalac
partest
أوامر في SBT. تمكين "وضع النمل" (الموضح أعلاه) لمنع برنامج التحويل البرمجي التزايدي لـ SBT من إعادة تجميع الملفات (كثير جدًا) قبل كل partest
الاحتجاج.
يتم شرح إرشاداتنا للمساهمة في المساهمة. أنه يحتوي على معلومات مفيدة عن معايير الترميز لدينا ، والاختبار ، والوثائق ، وكيف نستخدم git و github وكيفية مراجعة التعليمات البرمجية الخاصة بك.
قد ترغب أيضًا في التحقق من الموارد التالية:
بمجرد إرسال العلاقات العامة ، سيتم اختبار الالتزامات تلقائيًا بواسطة Scala CI.
إعداد CI الخاص بنا يتطور دائمًا. انظر Scala/Scala-Dev#751 للحصول على مزيد من التفاصيل حول كيفية عمل الأشياء حاليًا وكيف نتوقع أن تتغير.
إذا رأيت فشلًا زائفًا على جنكينز ، فيمكنك نشر /rebuild
كتعليق علاقات عامة. يسرد Scabot Readme جميع الأوامر المتاحة.
إذا كنت ترغب في اختبار التصحيح الخاص بك قبل أن يكون كل شيء مصقول للمراجعة ، فيمكنك إنشاء فرعك Travis CI (تأكد من أن لديك شوكة وتمكين Travis CI للبناء الفرعي عليها أولاً ، ثم دفع فرعك). لا تتردد أيضًا في تقديم مسودة العلاقات العامة. في حالة يحتوي مسودة فرعك على عدد كبير من الالتزامات (لم تقم بتنظيفها / الاسكواش بعد للمراجعة) ، فكر في إضافة [ci: last-only]
إلى عنوان العلاقات العامة. وبهذه الطريقة ، سيتم اختبار الالتزام الأخير فقط ، مما يوفر بعض الطاقة وموارد CI. لاحظ أنه سيتم إغلاق مسودة PRS غير النشطة في النهاية ، مما لا يعني أن التغيير يتم رفضه.
CI يؤدي bootstrap التحويل البرمجي. تنشر المهمة الأولى ، validatePublishCore
، مجموعة من التزامك بالمستودع المؤقت https://scala-ci.typesafe.com/artifactory/scala-pr-vididation-snapshots. لاحظ أن هذا البناء لم يتم تجميعه بعد ، يتم تصميم رمزها bytecode باستخدام Starr الحالي. رقم الإصدار هو 2.13.2-bin-abcd123-SNAPSHOT
حيث abcd123
هو تجزئة الالتزام. بالنسبة للبناء الثنائي غير المتوافق ، فإن رقم الإصدار هو 2.14.0-pre-abcd123-SNAPSHOT
.
يمكنك استخدام تصميمات Scala في مستودع التحقق من الصحة محليًا عن طريق إضافة حل وتحديد scalaVersion
المقابل:
$ sbt
> set resolvers += "pr" at "https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots/"
> set scalaVersion := "2.12.2-bin-abcd123-SNAPSHOT"
> console
تنشر Scala CI هذه إلى https://scala-ci.typesafe.com/artifactory/scala-integration/.
يتم شرح استخدام البناء الليلي في SBT والأدوات الأخرى على صفحة DOC هذه.
على الرغم من أننا نشير عرضًا إلى هذه التصميمات "الليلية" ، إلا أنها ليست مبنية في الواقع ليلا ، ولكن "mergely". وهذا يعني ، يتم نشر بناء لكل العلاقات العامة المدمجة.
يعمل Scala CI كمثيل Jenkins على scala-ci.typesafe.com ، تم تكوينه بواسطة كتاب طبخ الطهاة في Scala/Scala-Jenkins-Infra.
يقوم Build Bot الذي يشاهد PRS ، ويؤدي إلى تصميم ويطبق الملصق "الذي تمت مراجعته" بعد تعليق LGTM في ريبو Scala/Scabot.
يعد بناء مجتمع سكالا وسيلة مهمة لاختبار إصدارات سكالا. يمكن إطلاق بناء المجتمع لأي التزام Scala ، حتى قبل دمج العلاقات العامة الالتزام. يتم استخدام هذا الالتزام بعد ذلك لبناء عدد كبير من المشاريع المفتوحة من المصدر وتشغيل أجنحة الاختبار الخاصة بهم.
لطلب تشغيل المجتمع على العلاقات العامة الخاصة بك ، فقط اسأل في تعليق على العلاقات العامة ، وسيعتني به عضو فريق Scala (ربما Sethtisue). (تفاصيل)
يبني المجتمع تشغيل على مثيل Scala Jenkins. تتم تسمية الوظائف ..-integrate-community-build
. انظر Scala/Community-Builds Repo.