-
Notifications
You must be signed in to change notification settings - Fork 1k
Add Ukrainian Scala3 #2447
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Add Ukrainian Scala3 #2447
Changes from 1 commit
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
--- | ||
layout: inner-page-documentation | ||
overview-name: "Документація Scala 3" | ||
title: Внесок у документацію | ||
language: uk | ||
scala3: true | ||
--- | ||
|
||
## Огляд | ||
Існує кілька напрямів зусиль для створення високоякісної документації для Scala 3. | ||
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Зокрема, є такі документи: | ||
|
||
- Книга Scala 3 | ||
- Підручник з макросів | ||
- Посібник з міграції | ||
- Внесок у Scala 3 | ||
- Довідник про Scala 3 | ||
|
||
Ми вітаємо внесок спільноти в кожен аспект документації. | ||
|
||
|
||
### Як я можу зробити внесок? | ||
Загалом, ви можете допомогти нам багатьма способами: | ||
|
||
- **Заплуталися в якомусь із документів?** Відкрийте issue. | ||
- **Знайшли щось неактуальне?** Відкрийте issue або Створіть PR. | ||
- **Друкарська помилка та інші невеликі покращення тексту?** Створіть PR. | ||
- **Хочете додати щось нове або внести більші зміни?** Чудово! Відкрийте issue та подискутуймо. | ||
|
||
Як правило, кожен із різних напрямів документації містить посилання (так само як і цей документ на панелі змісту – поки що він був лише на робочому столі) для їх редагування та покращення. | ||
Крім того, нижче ми надаємо вам необхідну інформацію для початку. | ||
|
||
## Книга Scala 3 | ||
[Книга по Scala 3][scala3-book] пишеться Alvin Alexander та надає огляд усіх важливих функцій Scala 3. Вона орієнтована на новачків в Scala. | ||
|
||
- [Sources](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-book) | ||
- [Issues](https://github.com/scala/docs.scala-lang/issues) | ||
|
||
## Підручник з макросів | ||
[Посібник з макросів](/scala3/guides/macros) пишеться Nicolas Stucki і містить детальну інформацію про макроси в Scala 3 та передові методи. | ||
|
||
- [Sources](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-macros) | ||
- [Issues](https://github.com/scala/docs.scala-lang/issues) | ||
|
||
## Посібник з міграції | ||
[Посібник з міграції на Scala 3](/uk/scala3/guides/migration/compatibility-intro.html) | ||
містить вичерпний огляд сумісності між Scala 2 і Scala 3, | ||
екскурсія з інструментами міграції та детальними посібниками з міграції. | ||
|
||
- [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-migration) | ||
- [Issues](https://github.com/scala/docs.scala-lang/issues) | ||
|
||
## Внесок у Scala 3 | ||
[Посібник з внесків у Scala 3](/uk/scala3/guides/contribution/contribution-intro.html) | ||
містить вичерпний огляд вкладу та внутрішніх компонентів компілятора та бібліотек Scala 3. | ||
|
||
- [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-contribution) | ||
- [Issues](https://github.com/scala/docs.scala-lang/issues) | ||
|
||
## Довідник про Scala 3 | ||
[Довідник про Scala 3]({{ site.scala3ref }}) містить офіційну презентацію та детальну технічну інформацію про різні особливості мови. | ||
|
||
- [Sources](https://github.com/lampepfl/dotty/tree/main/docs/_docs) | ||
- [Issues](https://github.com/lampepfl/dotty/issues) | ||
|
||
|
||
[scala3-book]: {% link _overviews/scala3-book/introduction.md %} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
--- | ||
layout: inner-page-parent | ||
title: Посібники по Scala 3 | ||
language: uk | ||
scala3: true | ||
|
||
guides: | ||
bishabosha marked this conversation as resolved.
Show resolved
Hide resolved
|
||
- title: "Міграція зі Scala 2 на Scala 3" | ||
icon: suitcase | ||
url: "/scala3/guides/migration/compatibility-intro.html" | ||
description: "Все, що вам потрібно знати про сумісність і міграцію на Scala 3." | ||
- title: Макроси | ||
by: Nicolas Stucki | ||
icon: magic | ||
url: "/scala3/guides/macros" | ||
description: "Докладний посібник, який охоплює всі функції, пов’язані з написанням макросів у Scala 3." | ||
label-text: feature | ||
- title: Огляд TASTy | ||
by: Alvin Alexander | ||
icon: birthday-cake | ||
url: "/uk/scala3/guides/tasty-overview.html" | ||
description: "Огляд формату TASTy, призначеного для кінцевих користувачів мови Scala." | ||
- title: "Внесок у Scala 3" | ||
by: Jamie Thompson, Anatolii Kmetiuk | ||
icon: cogs | ||
url: "/scala3/guides/contribution/contribution-intro.html" | ||
description: "Посібник з компілятора Scala 3 та вирішення проблем." | ||
- title: Scaladoc | ||
by: Krzysztof Romanowski, Aleksander Boruch-Gruszecki, Andrzej Ratajczak, Kacper Korban, Filip Zybała | ||
icon: book | ||
url: "/uk/scala3/scaladoc.html" | ||
description: "Інструмент Scala для генерації документації для API." | ||
--- | ||
|
||
<section class="full-width"> | ||
<div class="wrap"> | ||
<div class="content-primary overviews"> | ||
<div class="inner-box toc-context"> | ||
<h2>Огляди і посібники</h2> | ||
<p> | ||
Детальні посібники про мову Scala 3 та її особливості. | ||
</p> | ||
{% include scala3-guides-card-group.html %} | ||
</div> | ||
</div> | ||
</div> | ||
</section> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
--- | ||
layout: singlepage-overview | ||
title: Огляд TASTy | ||
language: uk | ||
scala3: true | ||
--- | ||
Створіть файл вихідного коду Scala 3 _Hello.scala_: | ||
|
||
```scala | ||
@main def hello = println("Hello, world") | ||
``` | ||
|
||
і скомпілюйте файл з `scalac`: | ||
|
||
```bash | ||
$ scalac Hello.scala | ||
``` | ||
|
||
ви помітите, що серед інших отриманих файлів, `scalac` створює файли з розширенням _.tasty_: | ||
|
||
```bash | ||
$ ls -1 | ||
Hello$package$.class | ||
Hello$package.class | ||
Hello$package.tasty | ||
Hello.scala | ||
hello.class | ||
hello.tasty | ||
``` | ||
|
||
Виникає питання: «Що таке tasty?» | ||
|
||
|
||
|
||
## Що таке TASTy? | ||
|
||
TASTy це акронім терміну, _ Абстрактне синтаксичне дерево типів (Typed Abstract Syntax Trees)_. | ||
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Це високорівневий формат для Scala 3, і в цьому документі ми називатимемо його як _Tasty_. | ||
|
||
Перше, що важливо знати, це те, що файли Tasty генеруються компілятором `scalac`, | ||
та містять _всю_ інформацію про ваш вихідний код, включаючи синтаксичну структуру вашої програми, | ||
і _повну_ інформацію про типи, позицію та навіть документацію. | ||
Файли Tasty містять набагато більше інформації, ніж файли _.class_, які створюються для роботи на JVM. (Детальніше далі.) | ||
|
||
У Scala 3 процес компіляції виглядає так: | ||
|
||
```text | ||
+-------------+ +-------------+ +-------------+ | ||
$ scalac | Hello.scala | -> | Hello.tasty | -> | Hello.class | | ||
+-------------+ +-------------+ +-------------+ | ||
^ ^ ^ | ||
| | | | ||
Ваш вихідний Файл TASTy Файл класу | ||
код для scalac для JVM | ||
(містить повну (неповна | ||
інформацію) інформація) | ||
``` | ||
|
||
Ви можете переглянути вміст файлу _.tasty_ у зрозумілій формі, запустивши на ньому компілятор із прапорцем `-print-tasty`. | ||
Ви також можете переглянути вміст, декомпільований у формі, подібній до вихідного коду Scala, використовуючи прапор `-decompile`. | ||
```bash | ||
$ scalac -print-tasty hello.tasty | ||
$ scalac -decompile hello.tasty | ||
``` | ||
|
||
### Проблеми з файлами _.class_ | ||
|
||
Через проблему [стирання типів][erasure], файли _.class_ містять неповне представлення про ваш код. | ||
Простий спосіб продемонструвати це приклад з `List`. | ||
|
||
_Стирання типів_ означає, що коли ви пишете наступний код Scala, він повинен працювати на JVM: | ||
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
```scala | ||
val xs: List[Int] = List(1, 2, 3) | ||
``` | ||
|
||
цей код компілюється у файл _.class_, який має бути сумісним із JVM. Результатом цієї вимоги сумісності код всередині цього файлу класу --- який ви можете побачити за допомогою команди `javap` --- виглядає так: | ||
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
```java | ||
public scala.collection.immutable.List<java.lang.Object> xs(); | ||
``` | ||
|
||
Результат команди `javap` показує Java-уявлення того, що міститься у файлі класу. Зверніть увагу, що `xs` більше _не_ визначений як `List[Int]`; він по суті представлений як `List[java.lang.Object]`. Щоб ваш код Scala працював із JVM, тип `Int` має бути стертим. | ||
|
||
Далі, коли ви отримуєте елемент вашого `List[Int]` у вашому Scala коді, наприклад: | ||
|
||
```scala | ||
val x = xs(0) | ||
``` | ||
|
||
отриманий файл класу матиме операцію перетворення для цього рядка коду, яку ви можете уявити так: | ||
|
||
``` | ||
int x = (Int) xs.get(0) // Java-подібно | ||
val x = xs.get(0).asInstanceOf[Int] // більш Scala-подібно | ||
``` | ||
|
||
Знову ж таки, це зроблено для сумісності, щоб ваш код Scala міг працювати на JVMю | ||
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Однак, інформація про те, що ми вже мали список цілих чисел, втрачається у файлах класу. | ||
Це створює проблеми під час спроби збірки Scala програми з уже скомпільованою бібліотекою. | ||
Для цього нам потрібно більше інформації, ніж зазвичай міститься у файлах класу. | ||
|
||
Ця дискусія охоплює лише тему стирання типу. | ||
Існують подібні проблеми для кожної іншої конструкції Scala, про які JVM не знає, включно з об'єднанням, перетином, трейтами з параметрами та багатьма іншими відмінностями Scala 3. | ||
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
### На допомогу приходить TASTy | ||
Таким чином, на відміну від відсутньої інформації про вихідні типи у _.class_ файлах або тільки публічного API (як у «Pickle» форматі Scala 2.13), формат TASTy зберігає повне абстрактне синтаксичне дерево (AST) після перевірки типів. | ||
Зберігання всього AST має багато переваг: воно дає можливість окремої компіляції, перекомпіляції для іншої версії JVM, статичного аналізу програм і багато іншого. | ||
|
||
### Ключові моменти | ||
|
||
Отже, це перший висновок з цього розділу: типи, які ви вказуєте у своєму коді Scala, не зовсім точно представлені у файлах _.class_. | ||
|
||
Другим ключовим моментом є розуміння того, що існують відмінності між інформацією, яка доступна під час _компіляції_ та _виконання_: | ||
|
||
- Під **час компіляції**, `scalac` читає та аналізує ваш код, він знає, що `xs` є `List[Int]` | ||
- Коли компілятор записує ваш код у файл класу, він записує `xs` як `List[Object]`, та додає інформацію про перетворення усюди, де йде звернення до `xs` | ||
- Потім під **час виконання** --- коли ваш код працює в JVM --- JVM не знає, що ваш список є `List[Int]` | ||
kazanzhy marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Зі Scala 3 та Tasty, є ще одна важлива примітка про час компіляції: | ||
|
||
- Коли ви пишете код на Scala 3, що використовує інші Scala 3 бібліотеки, `scalac` більше не має читати їх _.class_ файли; | ||
він може прочитати їх _.tasty_ файли, які, як згадувалось, є _точним_ представленням вашого коду. | ||
Це важливо для забезпечення окремої компіляції та сумісності між Scala 2.13 і Scala 3. | ||
|
||
|
||
## Переваги Tasty | ||
|
||
Як ви можете зрозуміти, доступ до повного представлення вашого коду має [багато переваг][benefits]: | ||
|
||
- Компілятор використовує його для підтримки окремої компіляції. | ||
- Сервер мови, що базується на _Мовному серверному протоколі (Language Server Protocol)_ використовує його для підтримки гіперпосилань, завершення команд, документації, та таких глобальних операцій як, пошук звернень та перейменування. | ||
- Tasty створює чудову основу для нового покоління [макросів основаних на рефлексії][macros]. | ||
- Оптимізатори та аналізатори можуть використовувати його для глибокого аналізу коду та розширеної генерації коду. | ||
|
||
У відповідній примітці, Scala 2.13.6 має програму для читання TASTy, а компілятор Scala 3 також може читати формат 2.13 «Pickle». | ||
У [сторінці з classpath сумісності][compatibility-ref] посібнику з міграції на Scala 3 пояснюється перевага можливості крос-компіляції. | ||
|
||
|
||
|
||
## Більше інформації | ||
|
||
Підсумовуючи, Tasty — це високорівневий формат обміну для Scala 3, а файли _.tasty_ містять повне представлення вашого вихідного коду, що надає до переваги, описані у попередніх розділах. | ||
Щоб дізнатися більше, перегляньте ці ресурси: | ||
|
||
- У [цьому відео](https://www.youtube.com/watch?v=YQmVrUdx8TU), Jamie Thompson зі Scala Center детально розповідає про те, як працює Tasty, та його переваги | ||
- Статті з [Бінарної сумісності для авторів бібліотек][binary] розглядаються теми бінарної сумісності, сумісності джерел та модель виконання JVM | ||
- [Подальша сумісність для Scala 3](https://www.scala-lang.org/blog/2020/11/19/scala-3-forward-compat.html) демонструє методи використання Scala 2.13 і Scala 3 в одному проєкті | ||
|
||
Ці статті містять додаткову інформацію про макроси Scala 3: | ||
|
||
- [Бібліотеки макросів Scala](https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html) | ||
- [Макроси: плани для Scala 3](https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html) | ||
- [Довідник по рефлексії цитат (Quotes Reflect)][quotes-reflect] | ||
- [Довідник по макросах](/scala3/guides/macros) | ||
|
||
[benefits]: https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html | ||
[erasure]: https://www.scala-lang.org/files/archive/spec/2.13/03-types.html#type-erasure | ||
[binary]: {% link _overviews/tutorials/binary-compatibility-for-library-authors.md %} | ||
[compatibility-ref]: {% link _overviews/scala3-migration/compatibility-classpath.md %} | ||
[quotes-reflect]: {{ site.scala3ref }}/metaprogramming/reflection.html | ||
[macros]: {{ site.scala3ref }}/metaprogramming/macros.html |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.