├── README.md ├── proposals └── .keep └── snip-template.yaml /README.md: -------------------------------------------------------------------------------- 1 | # Scala Native Improvement Proposals 2 | 3 | This repository contains the Scala Native Improvement Proposal - a list of Scala Native future improvements, similar to the [Scala Improvement Proposals](https://github.com/scala/improvement-proposals) dedicated to the core Scala-lang. 4 | 5 | Currently, Scala Native Improvement Process is not well defined, like [SIPs](https://docs.scala-lang.org/sips), however, they can be approved or discarded by the Scala Native core team. SNIPs, similarly to [RFC](https://en.wikipedia.org/wiki/Request_for_Comments) can be treated as a form of public discussion to share, comment and review new possible Scala Native improvements, before starting actual work on the given ideas. 6 | -------------------------------------------------------------------------------- /proposals/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scala-native/improvement-proposals/e98a9357cea234ff977961d432ca9dd4c030553f/proposals/.keep -------------------------------------------------------------------------------- /snip-template.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: sip 3 | stage: implementation 4 | status: waiting-for-implementation 5 | title: SNIP-NN - Title of the Proposal 6 | --- 7 | 8 | **By: Author A and Author B and Author C** 9 | 10 | ## History 11 | 12 | | Date | Version | 13 | |---------------|--------------------| 14 | | Feb 19th 2022 | Initial Draft | 15 | | Feb 20th 2022 | Alteration Details | 16 | 17 | ## Summary 18 | 19 | A summary of the proposed changes. This should be no longer than 3 paragraphs. It is intended to serve in two ways: 20 | 21 | - For a first-time reader, a high-level overview of what they should expect to see in the proposal. 22 | - For returning readers, a quick reminder of what the proposal is about. 23 | 24 | ## Motivation 25 | 26 | A high-level overview of the proposal with: 27 | 28 | - An explanation of the problems or limitations that it aims to solve, 29 | - A presentation of one or more use cases as running examples, with code showing how they would be addressed *using the status quo* (without the feature), and why that is not good enough. 30 | 31 | This section should clearly express the scope of the proposal. It should make it clear what are the goals of the proposal, and what is out of the scope of the proposal. 32 | 33 | ## Proposed solution 34 | 35 | This is the meat of your proposal. 36 | 37 | ### High-level overview 38 | 39 | A high-level overview of the proposed changes, and how they allow to better solve the running examples. This section should be example-heavy, and not dive into corner cases. 40 | 41 | Example: 42 | 43 | ~~~ scala 44 | // This is an @main method 45 | @main def foo(x: Int): Unit = 46 | println(x) 47 | ~~~ 48 | 49 | ### Specification 50 | 51 | A specification for the proposed changes, as precise as possible. This section should address difficult interactions with other language features, possible error conditions, and corner cases as much as the good behavior. 52 | 53 | For example, if the syntax of the language is changed, this section should list the differences in the grammar of the language. If it affects the type system, the section should explain how the feature interacts with it. 54 | 55 | ### Compatibility 56 | 57 | A justification of why the proposal will preserve backward binary and NIR compatibility. Changes are backward binary compatible if the bytecode produced by a newer compiler can link against library bytecode produced by an older compiler. Changes are backward NIR compatible if the NIR files produced by older compilers can be read, with equivalent semantics, by the newer tooling. 58 | 59 | If it doesn't do so "by construction", this section should present the ideas of how this could be fixed (through deserialization-time patches and/or alternative binary encodings). It is OK to say here that you don't know how binary and TASTy compatibility will be affected at the time of submitting the proposal. However, by the time it is accepted, those issues will need to be resolved. 60 | 61 | This section should also argue to what extent backward source compatibility is preserved. In particular, it should show that it doesn't alter the semantics of existing valid programs. 62 | 63 | ### Other concerns 64 | 65 | If you think of anything else that is worth discussing about the proposal, this is where it should go. Examples include interoperability concerns, cross-platform concerns, implementation challenges. 66 | 67 | ### Open questions 68 | 69 | If some design aspects are not settled yet, this section can present the open questions, with possible alternatives. By the time the proposal is accepted, all the open questions will have to be resolved. 70 | 71 | ## Alternatives 72 | 73 | This section should present alternative proposals that were considered. It should evaluate the pros and cons of each alternative, and contrast them to the main proposal above. 74 | 75 | Having alternatives is not a strict requirement for a proposal, but having at least one with carefully exposed pros and cons gives much more weight to the proposal as a whole. 76 | 77 | ## Related work 78 | 79 | This section should list prior work related to the proposal, notably: 80 | 81 | - A link to the Pre-SNIP discussion that led to this proposal, 82 | - Any other previous proposal (accepted or rejected) covering something similar as the current proposal, 83 | - Whether the proposal is similar to something already existing in other languages, 84 | - If there is already a proof-of-concept implementation, a link to it will be welcome here. 85 | 86 | ## FAQ 87 | 88 | This section will probably initially be empty. As discussions on the proposal progress, it is likely that some questions will come repeatedly. They should be listed here, with appropriate answers. 89 | --------------------------------------------------------------------------------