นี่คือบ้านของห้องสมุดมาตรฐานสกาล่าคอมไพเลอร์และข้อมูลจำเพาะภาษา
สำหรับ Scala 3 เยี่ยมชม Scala/Scala3
ปัญหาและรายงานข้อผิดพลาดสำหรับ Scala 2 อยู่ใน Scala/Bug ตัวติดตามนั้นยังเป็นที่ที่ผู้มีส่วนร่วมใหม่อาจพบปัญหาในการทำงาน: ปัญหาแรกที่ดีความช่วยเหลือที่ต้องการ
สำหรับการประสานงานที่กว้างขึ้นเรายังใช้ตัวติดตาม Scala/Scala-Dev
หากต้องการมีส่วนร่วมที่นี่โปรดเปิดคำขอดึงจากส้อมของที่เก็บนี้
โปรดทราบว่าเราไม่สามารถรับส่วนเพิ่มเติมของไลบรารีมาตรฐานได้เฉพาะการปรับเปลี่ยนรหัสที่มีอยู่เท่านั้น ความเข้ากันได้ของไบนารีห้ามการเพิ่มคลาสสาธารณะหรือวิธีการสาธารณะใหม่ เพิ่มเติมจะทำเพื่อ Scala-Library-next แทน
เราต้องการให้คุณเซ็นสัญญากับ Scala CLA ก่อนที่เราจะสามารถรวมงานใด ๆ ของคุณเพื่อปกป้องอนาคตของ Scala เป็นซอฟต์แวร์โอเพ่นซอร์ส
เวิร์กโฟลว์ทั่วไปมีดังนี้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและพัฒนาแกนกลางของ Scala อ่านส่วนที่เหลือของ readme นี้โดยเฉพาะอย่างยิ่งสำหรับการตั้งค่าเครื่องของคุณ!
เพื่อที่จะติดต่อกับผู้มีส่วนร่วม Scala คนอื่น ๆ เข้าร่วมช่อง #scala-contributors ในการแชท Scala Discord หรือโพสต์บนผู้ร่วมให้ข้อมูล scala-lang.org (วาทกรรม)
หากคุณต้องการความช่วยเหลือเกี่ยวกับการประชาสัมพันธ์ของคุณได้ตลอดเวลาโปรดอย่าลังเลที่จะ @-mention ทุกคนจากรายการด้านล่างและเราจะพยายามอย่างเต็มที่เพื่อช่วยคุณ:
ชื่อผู้ใช้ | คุยกับฉันเกี่ยวกับ ... | |
---|---|---|
@lrytz | Back End, Optimizer, Named & Default Agrigoments, ผู้สื่อข่าว | |
@retronym | 2.12.x สาขา, ประสิทธิภาพของคอมไพเลอร์, บั๊กคอมไพเลอร์แปลก ๆ , แลมบ์ดาส | |
@SethTisue | เริ่มต้นใช้งานสร้าง, CI, Build ชุมชน, Jenkins, เอกสาร, ห้องสมุด, REPL | |
@dwijnand | Pattern Matcher, MIMA, ส่วนหนึ่ง | |
@som-snytt | คำเตือน/ผ้าสำลี/ข้อผิดพลาด, REPP, ตัวเลือกคอมไพเลอร์, คอมไพเลอร์ภายใน, ส่วนหนึ่ง | |
@Ichoran | ห้องสมุดคอลเลกชันประสิทธิภาพ | |
@viktorklang | พร้อมกันฟิวเจอร์ส | |
@sjrd | ปฏิสัมพันธ์กับ scala.js | |
@NthPortal | ห้องสมุด, พร้อมกัน, scala.math , LazyList , Using , คำเตือน | |
@bishabosha | ผู้อ่านแสนอร่อย | |
@joroKr21 | ประเภทที่สูงกว่าความหมายความแปรปรวน |
PS: หากคุณมีเวลาว่างที่จะช่วยเหลือที่นี่เรายินดีที่จะเพิ่มชื่อของคุณในรายการนี้!
กำหนดเป้าหมายสาขาที่เก่าแก่ที่สุดที่คุณต้องการให้การเปลี่ยนแปลงของคุณจบลงเรารวมกันเป็นระยะจากสาขารุ่นเก่า (เช่น 2.12.x) ไปยังใหม่ (เช่น 2.13.x)
หากการเปลี่ยนแปลงของคุณเป็นเรื่องยากที่จะรวมไปข้างหน้าคุณอาจถูกขอให้ส่ง PR แยกต่างหากที่กำหนดเป้าหมายไปยังสาขาที่ใหม่กว่า
หากการเปลี่ยนแปลงของคุณเป็นรุ่นที่เฉพาะเจาะจงและไม่ควรรวมไปข้างหน้าให้ใส่ [nomerge]
ในชื่อ PR
หากการเปลี่ยนแปลงของคุณเป็น backport จากสาขาใหม่และไม่จำเป็นต้องรวมไปข้างหน้าให้ใส่ [backport]
ในชื่อ PR
การเปลี่ยนแปลงส่วนใหญ่ควรกำหนดเป้าหมาย 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 ต่อไปนี้:
ในระหว่างการพัฒนาทั่วไปการสร้างสกาล่าใหม่ถูกสร้างขึ้นโดยเวอร์ชันที่เปิดตัวก่อนหน้านี้หรือที่เรียกว่า "คอมไพเลอร์อ้างอิง" หรือสลันด์เป็น "สตาร์" (รีลีสอ้างอิงที่เสถียร) การสร้างด้วย Starr นั้นเพียงพอสำหรับการเปลี่ยนแปลงส่วนใหญ่
อย่างไรก็ตามการสร้างเต็มรูปแบบของสกาล่านั้น ถูกบูต Bootstrapping มีสองขั้นตอน: อันดับแรกสร้างด้วย Starr; จากนั้นสร้างอีกครั้งโดยใช้คอมไพเลอร์ที่สร้างขึ้นใหม่ทิ้งสตาร์ไว้ข้างหลัง สิ่งนี้รับประกันได้ว่าทุกรุ่น Scala สามารถสร้างตัวเองได้
หากคุณเปลี่ยนส่วนการสร้างรหัสของคอมไพเลอร์ Scala การเปลี่ยนแปลงของคุณจะปรากฏขึ้นในรหัสของไลบรารีและคอมไพเลอร์หลังจาก bootstrap เท่านั้น 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
การสร้างด้วยคำเตือนที่ร้ายแรง : เพื่อทำการเตือนในโครงการ Fatal (เช่นเปลี่ยนเป็นข้อผิดพลาด) ให้เรียกใช้ set Global / fatalWarnings := true
ใน SBT (แทนที่ Global
ด้วยชื่อของโมดูล - เช่นเดียวกับการ reflect
โมดูลนั้น) เพื่อปิดการใช้งานคำเตือนที่ร้ายแรงอีกครั้งไม่ว่าจะ reload
SBT หรือเรียกใช้ set Global / fatalWarnings := false
(อีกครั้งให้แทนที่ Global
ด้วยชื่อของโมดูลหากคุณเปิดใช้งานคำเตือนร้ายแรงสำหรับโมดูลนั้นเท่านั้น) CI เปิดใช้งานคำเตือนร้ายแรงเสมอ
เมื่อคุณเริ่มเซสชัน sbt
คุณสามารถเรียกใช้หนึ่งในคำสั่งหลัก:
compile
โครงการย่อยทั้งหมด (ไลบรารี, สะท้อน, คอมไพเลอร์, scaladoc, ฯลฯ )scala
/ scalac
เรียกใช้ REPL / Compiler โดยตรงจาก SBT (ยอมรับตัวเลือก / อาร์กิวเมนต์)enableOptimizer
โหลดการสร้างใหม่ด้วยการเปิดใช้งาน Scala Optimizer รุ่นของเราถูกสร้างขึ้นด้วยวิธีนี้ เปิดใช้งานสิ่งนี้เมื่อทำงานเกี่ยวกับการปรับปรุงประสิทธิภาพของคอมไพเลอร์ เมื่อเปิดใช้งานเครื่องมือเพิ่มประสิทธิภาพการสร้างจะช้าลงและการสร้างที่เพิ่มขึ้นอาจไม่ถูกต้อง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
Runs Scalacheck Tests ใช้ 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
ของ Scala repo
โปรดทราบว่าการรวบรวมที่เพิ่มขึ้นของ SBT มักจะหยาบเกินไปสำหรับ codebase คอมไพเลอร์คอมไพเลอร์และการคอมไพล์ไฟล์มากเกินไปทำให้เกิดเวลาในการสร้างที่ยาวนาน (ตรวจสอบ SBT#1104 สำหรับความคืบหน้าในหน้านั้น) ในระหว่างนี้คุณสามารถ:
เราขอแนะนำให้ใช้ Idealij Idea (ดู 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 และวิธีการตรวจสอบรหัสของคุณ
คุณอาจต้องการตรวจสอบทรัพยากรต่อไปนี้:
เมื่อคุณส่ง PR Commits ของคุณจะได้รับการทดสอบโดยอัตโนมัติโดย Scala CI
การตั้งค่า CI ของเรามีการพัฒนาอยู่เสมอ ดู Scala/Scala-Dev#751 สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงานของสิ่งต่าง ๆ ในปัจจุบันและวิธีที่เราคาดหวังว่าพวกเขาอาจเปลี่ยนแปลงได้อย่างไร
หากคุณเห็นความล้มเหลวปลอมสำหรับเจนกินส์คุณสามารถโพสต์ /rebuild
เป็นความคิดเห็นประชาสัมพันธ์ scabot readme แสดงรายการคำสั่งที่มีอยู่ทั้งหมด
หากคุณต้องการทดสอบแพตช์ของคุณก่อนที่จะมีทุกอย่างขัดเพื่อตรวจสอบคุณสามารถให้ Travis CI สร้างสาขาของคุณ (ตรวจสอบให้แน่ใจว่าคุณมีส้อมและเปิดใช้งาน Travis CI สำหรับการสร้างสาขาก่อนแล้วจึงผลักดันสาขาของคุณ) นอกจากนี้อย่าลังเลที่จะส่งร่างประชาสัมพันธ์ ในกรณีที่สาขาร่างของคุณมีการกระทำจำนวนมาก (ที่คุณยังไม่ได้ทำความสะอาด / สควอชสำหรับการตรวจสอบ) ให้พิจารณาเพิ่ม [ci: last-only]
ลงในชื่อ PR ด้วยวิธีนี้จะมีการทดสอบเฉพาะครั้งสุดท้ายเท่านั้นที่จะประหยัดพลังงานและทรัพยากร CI โปรดทราบว่าในที่สุดร่างที่ไม่ได้ใช้งานจะถูกปิดในที่สุดซึ่งไม่ได้หมายความว่าการเปลี่ยนแปลงกำลังถูกปฏิเสธ
CI ดำเนินการ bootstrap คอมไพเลอร์ งานแรก validatePublishCore
เผยแพร่การสร้างความมุ่งมั่นของคุณไปยังที่เก็บชั่วคราว https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots โปรดทราบว่าการสร้างนี้ยังไม่ได้ bootstrapped bytecode ของมันถูกสร้างขึ้นโดยใช้ Starr ปัจจุบัน หมายเลขเวอร์ชันคือ 2.13.2-bin-abcd123-SNAPSHOT
ที่ abcd123
เป็นแฮช สำหรับการสร้างที่เข้ากันไม่ได้ไบนารีหมายเลขเวอร์ชันคือ 2.14.0-pre-abcd123-SNAPSHOT
คุณสามารถใช้ Scala Builds ในที่เก็บการตรวจสอบความถูกต้องในเครื่องโดยเพิ่มตัวแก้ไขและระบุ 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 และเครื่องมืออื่น ๆ ทุกคืนจะอธิบายไว้ในหน้าเอกสารนี้
แม้ว่าเราจะอ้างถึงสิ่งเหล่านี้อย่างไม่เป็นทางการว่า "ทุกคืน" แต่พวกเขาก็ไม่ได้สร้างขึ้นจริงทุกคืน แต่ "ควบรวมกิจการ" กล่าวคืองานสร้างถูกตีพิมพ์สำหรับทุก ๆ PR ที่รวมเข้าด้วยกัน
Scala CI ทำงานเป็นอินสแตนซ์ของ Jenkins บน scala-ci.typesafe.com ซึ่งกำหนดค่าโดยตำราอาหารจากเชฟที่ Scala/Scala-Jenkins-Infra
บอทบอทที่ดู PRS ทริกเกอร์การทดสอบสร้างและใช้ฉลาก "ตรวจสอบ" หลังจากความคิดเห็น LGTM อยู่ใน repo scala/scabot
การสร้างชุมชนสกาล่าเป็นวิธีที่สำคัญสำหรับการทดสอบการเปิดตัวสกาล่า การสร้างชุมชนสามารถเปิดตัวสำหรับการกระทำของ Scala ได้แม้กระทั่งก่อนที่จะมีการรวมการประชาสัมพันธ์ การกระทำนั้นจะถูกใช้เพื่อสร้างโครงการโอเพนซอร์ซจำนวนมากจากแหล่งที่มาและเรียกใช้ชุดทดสอบของพวกเขา
หากต้องการขอให้ชุมชนสร้างการประชาสัมพันธ์ของคุณเพียงแค่ถามความคิดเห็นเกี่ยวกับ PR และสมาชิกทีม Scala (อาจ @Sethtisue) จะดูแลมัน (รายละเอียด)
ชุมชนสร้างการทำงานบนอินสแตนซ์สกาล่าเจนกินส์ งานมีชื่อ ..-integrate-community-build
ดู Repo Scala/Community-Builds