diff --git a/_uk/index.md b/_uk/index.md index 649365dc49..15ad2c0bab 100644 --- a/_uk/index.md +++ b/_uk/index.md @@ -78,15 +78,15 @@ sections: - title: "Нове у Scala 3" description: "Огляд нових функцій у Scala 3." icon: "fa fa-star" - link: /scala3/new-in-scala3.html + link: /uk/scala3/new-in-scala3.html - title: "Новий Scaladoc для Scala 3" description: "Основні характеристики нових функцій у Scaladoc." icon: "fa fa-star" - link: /scala3/scaladoc.html + link: /uk/scala3/scaladoc.html - title: "Доповіді" description: "Онлайн доповіді про Scala 3." icon: "fa fa-play-circle" - link: /scala3/talks.html + link: /uk/scala3/talks.html - title: "Еволюція Scala" links: diff --git a/_uk/scala3/guides/tasty-overview.md b/_uk/scala3/guides/tasty-overview.md new file mode 100644 index 0000000000..53eed66f34 --- /dev/null +++ b/_uk/scala3/guides/tasty-overview.md @@ -0,0 +1,164 @@ +--- +layout: singlepage-overview +title: Огляд TASTy +partof: tasty-overview +language: uk +scala3: true +versionSpecific: 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)_. +Це високорівневий формат для 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: + +```scala +val xs: List[Int] = List(1, 2, 3) +``` + +цей код компілюється у файл _.class_, який має бути сумісним із JVM. Результатом цієї вимоги сумісності код всередині цього файлу класу — який ви можете побачити за допомогою команди `javap` — виглядає так: + +```java +public scala.collection.immutable.List 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. +Однак, інформація про те, що ми вже мали список цілих чисел, втрачається у файлах класу. +Це створює проблеми під час спроби збірки Scala програми з уже скомпільованою бібліотекою. +Для цього нам потрібно більше інформації, ніж зазвичай міститься у файлах класу. + +Ця дискусія охоплює лише тему стирання типу. +Існують подібні проблеми для кожної іншої конструкції Scala, про які JVM не знає, включно з union, intersection, trait with parameters та багатьма іншими відмінностями Scala 3. + +### На допомогу приходить 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]` + +Зі 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 diff --git a/_uk/scala3/new-in-scala3.md b/_uk/scala3/new-in-scala3.md new file mode 100644 index 0000000000..0b00d60ca5 --- /dev/null +++ b/_uk/scala3/new-in-scala3.md @@ -0,0 +1,139 @@ +--- +layout: singlepage-overview +title: Нове в Scala 3 +scala3: true +language: uk +--- +Нова версія Scala 3 принесла багато покращень і нові можливості. +Тут наведено короткий огляд найважливіших змін. +Якщо ви хочете розібратись детальніше глибше, у вашому розпорядженні є наступні посилання: + +- [Книга по Scala 3]({% link _overviews/scala3-book/introduction.md %}) націлений на розробників-початківців мови Scala. +- [Конспект синтаксису][syntax-summary] надає формальний опис нового синтаксису. +- [Довідник з мови][reference] дає детальний опис змін від Scala 2 до Scala 3. +- [Посібник з міграції][migration] надає вам всю інформацію, необхідну для переходу від Scala 2 до Scala 3. +- [Посібник для внесення змін в Scala 3][contribution] глибше занурюється в компілятор, включаючи посібник із розв'язання проблем. + +## Що нового в Scala 3 +Scala 3 - це повне перероблення мови Scala. Було змінено багато аспектів +системи типів на більш принципові. Хоч це і надає нові можливості (наприклад, об’єднання типів), +але в першу чергу це означає, що у вашій роботі стає менше системи типів та [наведення типів][type-inference]. +Також значно покращено процес перевантаження. + +### Нове і яскраве: Синтаксис +Окрім багатьох (невеликих) очищень, синтаксис Scala 3 пропонує такі покращення: + +- Новий «тихий» синтаксис для керуючих структур, таких як `if`, `while` та `for` ([новий синтаксис керуючих структур][syntax-control]) +- Ключеве слово `new` тепер опціональне (_або_ [creator applications][creator]) +- [Опціональні дужки][syntax-indentation] привертають до стилю програмування на основі відступів +- Зміна [символу підстановки типів][syntax-wildcard] з `_` на `?`. +- Імплісіти (та їх синтаксис) були [ґрунтовно переглянуті][implicits]. + +### Впертість: контекстні абстракції +Одним з основних концептів Scala було (і залишається певною мірою) +надання користувачам невеликого набору потужних можливостей, які можна комбінувати +заради великої (а іноді навіть непередбачуваної) виразності. Наприклад, _implicits_ +використовувалися для моделювання контекстної абстракції, для вираження обчислення +на рівні типів, моделювання типів-класів, виконання неявних приведень, кодування +розширення методів та багато іншого. +Базуючись на цих прикладах використання, Scala 3 використовує дещо інший підхід +і фокусується на **намірі**, а не на **механізмі**. +Замість того, щоб пропонувати одну дуже потужну функцію, Scala 3 пропонує кілька +спеціальних мовних конструкцій, що дозволяють програмістам прямо висловлювати свої наміри: + +- **Абстрагування над контекстною інформацією**. [Ключове слово using][contextual-using] дозволяє програмістам абстрагуватися від інформації, яка доступна в контексті виклику і повинна передаватися неявно. Конструкція using є удосконаленням implicit зі Scala 2 та може бути визначена за типом, звільняючи сигнатури функцій від термів, на які ніколи не посилаються явно. + +- **Надання екземплярів класів типів**. [Наведені екземпляри][contextual-givens] дозволяють програмістам визначати _канонічне значення_ певного типу. Це робить програмування з класами типів простішим без витоку деталей реалізації. + +- **Ретроспективне розширення класів**. У Scala 2 методи розширення повинні бути закодовані за допомогою неявних перетворень або неявних класів. На відміну від цього, у Scala 3 [методи розширення][contextual-extension] тепер безпосередньо вбудовані в мову, що призводить до кращих повідомлень про помилки та покращеного виведення типу. + +- **Відображення одного типу як іншого**. Неявні перетворення були [перероблені][contextual-conversions] з нуля як екземпляри класу типів `Conversion`. + +- **Контекстні абстракції вищого порядку**. _Абсолютно нова_ можливість [контекстних функцій][contextual-functions] робить контекстні абстракції first-class citizen. Вони є важливим інструментом для авторів бібліотек і дозволяють стисло виразити домен-специфічні мови. + +- **Дієвий відгук від компілятора**. Якщо неявний параметр не може бути розв'язаний компілятором, то надаються [пропозиції імпорту](https://www.scala-lang.org/blog/2020/05/05/scala-3-import-suggestions.html), що можуть розв'язувати проблему. + +### Скажи що маєш на увазі: покращення системи типів +Окрім значно покращеного виведення типів, система типів Scala 3 також пропонує багато нових функцій, надаючи вам потужні інструменти для статичного вираження інваріантів у типах: + +- **Перерахування**. [Enum][enums] був перероблений, щоб добре поєднуватися з кейс-класами та сформувати новий стандарт для вираження [алгебраїчних типів даних][enums-adts]. + +- **Непрозорі типи**. Сховайте деталі реалізації за [псевдонімом непрозорого типу][types-opaque] без зниження перфомансу! Непрозорі типи замінюють класи значень і дозволяють налаштувати бар'єр абстракції без додаткових накладних витрат. + +- **Типи перетину та об'єднання**. Нові засади системи типів призвели до введення нових можливостей системи типів: екземпляр [типу Intersection][types-intersection], як `A & B`, є екземпляром _обох_ типів і `A` і `B`. Екземпляр [типу Union][types-union], як `A | B`, є екземпляром _або_ `A` або `B`. Обидві конструкції дозволяють програмістам гнучко обмежувати типи поза межами ієрархії наслідування. + +- **Залежні типи функцій**. Scala 2 вже дозволяє типам результату залежати від (значення) аргументів. У Scala 3 тепер можна абстрагуватися над цим шаблоном і виразити [залежні типи функцій][types-dependent]. В типі `type F = (e: Entry) => e.Key` результат _залежить_ від аргументу! + +- **Поліморфні типи функцій**. Як і типи функцій залежності, Scala 2 підтримувала методи, які дозволяють параметри типу, але не дозволяла абстрагуватися над цими методами. У Scala 3, [поліморфні типи функцій][types-polymorphic], наприклад `[A] => List[A] => List[A]` абстрагується над функцією, що приймає _аргумент типу_ на додачу до аргументів значень. + +- **Лямбда типу**. Те, що виражалося з використанням [плагіна компілятора](https://github.com/typelevel/kind-projector) в Scala 2 тепер є першокласною особливістю в Scala 3: Лямбда типу — це функції рівня типів, які можна передавати як аргументи типу (вищого роду) без визначення допоміжного типу. + +- **Відповідність типів**. Замість того, щоб кодувати обчислення на рівні типу з використанням імплісітів, Scala 3 пропонує пряму підтримку [відповідності за типами][types-match]. Інтеграція обчислень на рівні типів у процес перевірки типів дозволяє покращити повідомлення про помилки та усуває необхідність у складному кодуванні. + + +### Переосмислено: об'єктно-орієнтоване програмування +Scala завжди була на межі між функціональним програмуванням та об'єктноорієнтованим програмуванням -- і Scala 3 розширює межі в обох напрямках! +Вищезгадані зміни в системі типів і перероблення контекстних абстракцій роблять _функціональне програмування_ легшим, ніж раніше. +Водночас наступні нові функції дозволяють добре структурувати _об'єктноорієнтовані проєкти_ та підтримують найкращі практики. + +- **Pass it on**. Трейти наближаються до класів і тепер також можуть приймати [параметри][oo-trait-parameters], що робить їх ще більш потужними як інструмент для модульної декомпозиції. +- **План розширення**. Класи розширення, які не призначені для наслідування, є давньою проблемою в об'єктноорієнтованому програмуванні. Для розв'язання цього питання, [відкриті класи][oo-open] вимагають у розробників бібліотек _явно_ позначити класи як відкриті. +- **Приховати деталі реалізації**. Утилітні трейти, які іноді реалізують поведінку, не повинні входити до складу виведених типів. У Scala 3, такі трейти можуть бути позначені як [прозорі][oo-transparent] приховуючи наслідування від користувача (у виведених типах). +- **Композиція понад спадковістю**. Це поняття широко згадується, але є важким у реалізації. Але не з [export][oo-export] у Scala 3's: симетричні до імпорту, експорти дозволяють користувачеві визначати псевдоніми для вибраних членів об'єкта. +- **Більше без NPE**. Scala 3 безпечніша, ніж будь-коли: [явний null][oo-explicit-null] виводить `null` з ієрархії типів, допомагаючи статично виловлювати помилки; додаткові перевірки для [безпечної ініціалізації][oo-safe-init] виявляють доступ до неініціалізованих об'єктів. + + +### Батарейки в комплекті: метапрограмування +Хоча макроси в Scala 2 були лише експериментальною функцією, Scala 3 поставляється з потужним арсеналом інструментів для метапрограмування. +[Посібник по макросах]({% link _overviews/scala3-macros/tutorial/index.md %}) містить детальну інформацію про різні об'єкти. Зокрема, Scala 3 пропонує наступні можливості для метапрограмування: + +- **Inline**. Як відправна точка, [inline][meta-inline] дозволяє редукувати значення та методи під час компіляції. Ця проста функція вже охоплює багато варіантів використання і в той же час є точкою входу для більш розширених функцій. +- **Операції під час компіляції**. Пакет [`scala.compiletime`][meta-compiletime] містить додаткову функціональність, яку можна використовувати для реалізації вбудованих методів. +- **Цитування блоків коду**. Scala 3 додає нову можливість [квазі-цитування][meta-quotes] коду, що надає зручний інтерфейс високого рівня для побудови та аналізу коду. Побудувати код для додавання одиниці до одиниці так само просто, як і `'{ 1 + 1 }`. +- **API рефлексії**. Для більш просунутих випадків використання [quotes.reflect][meta-reflection] забезпечує більш детальний контроль для перевірки та створення дерев програм. + +Якщо ви хочете дізнатися більше про метапрограмування в Scala 3, пропонуємо подивитись на наш [посібник][meta-tutorial]. + + +[enums]: {{ site.scala3ref }}/enums/enums.html +[enums-adts]: {{ site.scala3ref }}/enums/adts.html + +[types-intersection]: {{ site.scala3ref }}/new-types/intersection-types.html +[types-union]: {{ site.scala3ref }}/new-types/union-types.html +[types-dependent]: {{ site.scala3ref }}/new-types/dependent-function-types.html +[types-lambdas]: {{ site.scala3ref }}/new-types/type-lambdas.html +[types-polymorphic]: {{ site.scala3ref }}/new-types/polymorphic-function-types.html +[types-match]: {{ site.scala3ref }}/new-types/match-types.html +[types-opaque]: {{ site.scala3ref }}/other-new-features/opaques.html + +[type-inference]: {{ site.scala3ref }}/changed-features/type-inference.html +[overload-resolution]: {{ site.scala3ref }}/changed-features/overload-resolution.html +[reference]: {{ site.scala3ref }}/overview.html +[creator]: {{ site.scala3ref }}/other-new-features/creator-applications.html +[migration]: {% link _overviews/scala3-migration/compatibility-intro.md %} +[contribution]: {% link _overviews/scala3-contribution/contribution-intro.md %} + +[implicits]: {{ site.scala3ref }}/contextual +[contextual-using]: {{ site.scala3ref }}/contextual/using-clauses.html +[contextual-givens]: {{ site.scala3ref }}/contextual/givens.html +[contextual-extension]: {{ site.scala3ref }}/contextual/extension-methods.html +[contextual-conversions]: {{ site.scala3ref }}/contextual/conversions.html +[contextual-functions]: {{ site.scala3ref }}/contextual/context-functions.html + +[syntax-summary]: {{ site.scala3ref }}/syntax.html +[syntax-control]: {{ site.scala3ref }}/other-new-features/control-syntax.html +[syntax-indentation]: {{ site.scala3ref }}/other-new-features/indentation.html +[syntax-wildcard]: {{ site.scala3ref }}/changed-features/wildcards.html + +[meta-tutorial]: {% link _overviews/scala3-macros/tutorial/index.md %} +[meta-inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} +[meta-compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} +[meta-quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} +[meta-reflection]: {% link _overviews/scala3-macros/tutorial/reflection.md %} + +[oo-explicit-null]: {{ site.scala3ref }}/experimental/explicit-nulls.html +[oo-safe-init]: {{ site.scala3ref }}/other-new-features/safe-initialization.html +[oo-trait-parameters]: {{ site.scala3ref }}/other-new-features/trait-parameters.html +[oo-open]: {{ site.scala3ref }}/other-new-features/open-classes.html +[oo-transparent]: {{ site.scala3ref }}/other-new-features/transparent-traits.html +[oo-export]: {{ site.scala3ref }}/other-new-features/export.html diff --git a/_uk/scala3/scaladoc.md b/_uk/scala3/scaladoc.md new file mode 100644 index 0000000000..f9193aa1c6 --- /dev/null +++ b/_uk/scala3/scaladoc.md @@ -0,0 +1,89 @@ +--- +layout: singlepage-overview +title: Нові можливості в Scaladoc +partof: scala3-scaladoc +language: uk +scala3: true +--- + +Нова версія Scala 3 поставляється з абсолютно новою реалізацією генератора документації _Scaladoc_, переписаною з нуля. +У цій статті ви можете знайти огляд нових функцій, які є або будуть представлені в Scaladoc. +Для загальної довідки відвідайте [посібник Scaladoc]({% link _overviews/scala3-scaladoc/index.md %}). + +## Нові можливості + +### Синтаксис Markdown + +Найбільшою зміною, внесеною в нову версію Scaladoc, є зміна мови за замовчуванням для docstrings. Поки що Scaladoc підтримував лише синтаксис Wikidoc. +Новий Scaladoc все ще може аналізувати застарілий синтаксис `Wikidoc`, однак Markdown вибрано як основну мову для форматування коментарів. +Щоб повернутися до `Wikidoc`, можна передати глобальний прапор перед запуском `doc` або визначити його для конкретних коментарів за допомогою директиви `@syntax wiki`. + +Щоб отримати додаткову інформацію про те, як використовувати повну силу документації, перегляньте [Scaladoc docstrings][scaladoc-docstrings] + + +### Статичні вебсайти + +Scaladoc також забезпечує простий спосіб створення **статичних сайтів** як для документації, так і для публікацій у блозі, подібно до того, як це робить Jekyll. +Завдяки цій функції ви можете зберігати свою документацію разом зі згенерованим API Scaladoc дуже зручним способом. + +Щоб отримати додаткову інформацію про те, як налаштувати генерацію статичних сайтів, перегляньте абзац [Статична документація][static-documentation] + +![](/resources/images/scala3/scaladoc/static-site.png) + +### Публікації в блозі + +Дописи в блозі – це особливий тип статичних сайтів. У посібнику Scaladoc ви можете знайти додаткову інформацію про те, як працювати з [публікаціями в блозі][built-in-blog]. + +![](/resources/images/scala3/scaladoc/blog-post.png) + +### Посилання на соціальні мережі + +Крім того, Scaladoc надає простий спосіб налаштувати [посилання на соціальні мережі][social-links], наприклад Twitter чи Discord. + +![](/resources/images/scala3/scaladoc/social-links.png){: style="width: 180px"} + +## Експериментальні особливості + +На поточний час (травень 2021 р.) перелічені нижче функції не можуть бути випущені разом із Scaladoc, однак ми будемо раді почути ваші відгуки. +Кожна функція має власний розділ на сайті учасників scala-lang, де ви можете поділитися своїми думками. + +### Компіляція фрагментів + +Одним з експериментальних особливостей Scaladoc є компілятор фрагментів (snippets compiler). +Цей інструмент дозволить вам компілювати фрагменти, які ви додаєте до docstring, щоб перевірити, чи вони насправді поводяться належним чином. +Ця функція дуже схожа на інструменти `tut` або `mdoc`, але буде поставлятися разом із Scaladoc для легкого налаштування та інтеграції у ваш проєкт. +Зробити фрагменти інтерактивними, наприклад, дозволити користувачам редагувати та компілювати їх у браузері, наразі розглядається. + +Вітрина: +* Приховування коду ![]({{ site.baseurl }}/resources/images/scala3/scaladoc/hiding-code.gif) +* Виявлення помилок компіляції ![]({{ site.baseurl }}/resources/images/scala3/scaladoc/assert-compilation-errors.gif) +* Включення фрагментів ![]({{ site.baseurl }}/resources/images/scala3/scaladoc/snippet-includes.png) + +Для більш детальної інформації дивіться [Посібники](/scala3/guides/scaladoc/snippet-compiler.html), або перейдіть у [тред Scala Contributors](https://contributors.scala-lang.org/t/snippet-validation-in-scaladoc-for-scala-3/4976) + +### Пошук, оснований на типах + +Пошук функцій за їх символьними назвами може зайняти багато часу. +Саме тому новий Scaladoc дозволяє шукати методи та поля за їх типами. + +Тому для декларації: +``` +extension [T](arr: IArray[T]) def span(p: T => Boolean): (IArray[T], IArray[T]) = ... +``` +Замість того, щоб шукати `span`, ми можемо шукати `IArray[A] => (A => Boolean) => (IArray[A], IArray[A])`. + +Щоб скористатися цією функцією, просто введіть підпис функції, яку ви шукаєте, на панелі пошуку scaladoc. Ось як це працює: + +![](/resources/images/scala3/scaladoc/inkuire-1.0.0-M2_js_flatMap.gif) + +Ця функція забезпечується пошуковою системою [Inkuire](https://github.com/VirtusLab/Inkuire), яка працює для Scala 3 і Kotlin. Щоб бути в курсі розвитку цього інструменту, підпишіться на оновлення [репозиторію Inkuire](https://github.com/VirtusLab/Inkuire). + +Для отримання додаткової інформації дивіться [Посібники](/scala3/guides/scaladoc/search-engine.html) + +Зауважте, що ця функція все ще знаходиться на стадії розробки, тому вона може зазнати значних змін. +Якщо ви зіткнулися з помилкою або маєте ідею щодо покращення, не соромтеся створювати проблему на [Inkuire](https://github.com/VirtusLab/Inkuire/issues/new) або [dotty](https://github.com/lampepfl/dotty/issues/new). + +[scaladoc-docstrings]: {% link _overviews/scala3-scaladoc/docstrings.md %} +[static-documentation]: {% link _overviews/scala3-scaladoc/static-site.md %} +[built-in-blog]: {% link _overviews/scala3-scaladoc/blog.md %} +[social-links]: {% link _overviews/scala3-scaladoc/settings.md %}#-social-links diff --git a/_uk/scala3/talks.md b/_uk/scala3/talks.md new file mode 100644 index 0000000000..a6ba116ec9 --- /dev/null +++ b/_uk/scala3/talks.md @@ -0,0 +1,91 @@ +--- +layout: singlepage-overview +title: Розмови +partof: scala3-talks +language: uk +scala3: true +versionSpecific: true +--- + +Серія "Поговорімо про Scala 3" +------------------------------- + +[Поговорімо про Scala 3](https://www.youtube.com/playlist?list=PLTx-VKTe8yLxYQfX_eGHCxaTuWvvG28Ml) є серією +коротких (близько 15 хвилин) розмов про Scala 3. Він охоплює різноманітні теми, наприклад, як почати, як застосувати +переваги нових функцій мови, або як перейти з Scala 2. + +Talks on Scala 3 +---------------- +- (ScalaDays 2019, Lausanne) [Тур по Scala 3](https://www.youtube.com/watch?v=_Rnrx2lo9cw) + від [Martin Odersky](http://twitter.com/odersky) + [\[слайди\]](https://www.slideshare.net/Odersky/a-tour-of-scala-3) + +- (ScalaDays 2016, Berlin) [Попереду дорога Scala](https://www.youtube.com/watch?v=GHzWqJKFCk4) + від [Martin Odersky](http://twitter.com/odersky) + [\[слайди\]](http://www.slideshare.net/Odersky/scala-days-nyc-2016) + +- (JVMLS 2015) [Compilers are Databases](https://www.youtube.com/watch?v=WxyyJyB_Ssc) + від [Martin Odersky](http://twitter.com/odersky) + [\[слайди\]](http://www.slideshare.net/Odersky/compilers-are-databases) + +- (Scala World 2015) [Dotty: Досліджуємо майбутнє Scala](https://www.youtube.com/watch?v=aftdOFuVU1o) + від [Dmitry Petrashko](http://twitter.com/darkdimius) + [\[слайди\]](https://d-d.me/scalaworld2015/#/). + Розповідь Дмітрія охоплює багато нових функцій, які приносить Dotty, наприклад типи Intersection та Union, покращена ініціалізація lazy val тощо. + Дмітрій також розповідає внутрішню архітектуру Dotty і, зокрема, високий рівень контекстуальних абстракцій Dotty. Ви + ознайомитесь з багатьма базовими поняттями, такими як «Denotations» та їх особливостями. + +Deep Dive with Scala 3 +---------------------- +- (ScalaDays 2019, Lausanne) [Метапрограмування in Dotty](https://www.youtube.com/watch?v=ZfDS_gJyPTc) + від [Nicolas Stucki](https://github.com/nicolasstucki). + +- (ScalaDays 2019, Lausanne) [Future-proofing в Scala: проміжна репрезентація TASTY](https://www.youtube.com/watch?v=zQFjC3zLYwo) + від [[Guillaume Martres](http://guillaume.martres.me/)](http://guillaume.martres.me/). + +- (Mar 21, 2017) [Dotty Internals 1: Trees та Symbols](https://www.youtube.com/watch?v=yYd-zuDd3S8) + від [Dmitry Petrashko](http://twitter.com/darkdimius) + [\[meeting notes\]](https://dotty.epfl.ch/docs/internals/dotty-internals-1-notes.html). + Це запис зустрічі EPFL та Waterloo, де були представлені перші нотатки про Dotty: Trees та Symbols. + +- (Mar 21, 2017) [Dotty Internals 2: Types](https://www.youtube.com/watch?v=3gmLIYlGbKc) + від [Martin Odersky](http://twitter.com/odersky) та [Dmitry Petrashko](http://twitter.com/darkdimius). + Це запис зустрічі EPFL та Waterloo, де були представлено як представлені типи всередині Dotty. + +- (Jun 15, 2017) [Dotty Internals 3: Denotations](https://youtu.be/9iPA7zMRGKY) + від [Martin Odersky](http://twitter.com/odersky) та [Dmitry Petrashko](http://twitter.com/darkdimius). + Це запис зустрічі EPFL та Waterloo, де були представлена денотація в Dotty. + +- (JVM Language Summit) [Як зробити компілятор Dotty швидким](https://www.youtube.com/watch?v=9xYoSwnSPz0) + від [Dmitry Petrashko](http://twitter.com/darkdimius). + Дмітрій дає високорівневий вступ до того, що було зроблено для створення Dotty . + +- (Typelevel Summit Oslo, May 2016) [Dotty та типи: поки що історія](https://www.youtube.com/watch?v=YIQjfCKDR5A) + від [Guillaume Martres](http://guillaume.martres.me/) + [\[слайди\]](http://guillaume.martres.me/talks/typelevel-summit-oslo/). + Гійом зосередився на деяких практичних вдосконаленнях системи типів, які робить Dotty. Це новий алгоритм параметру типу, + який здатний робити висновки про безпеку типів для більшої кількості ситуацій ніж scalac. + +- (flatMap(Oslo) 2016) [AutoSpecialization в Dotty](https://vimeo.com/165928176) + від [Dmitry Petrashko](http://twitter.com/darkdimius) + [\[слайди\]](https://d-d.me/talks/flatmap2016/#/). + Компонувальник Dotty аналізує вашу програму та її залежності, щоб застосувати нову схему спеціалізації. + Віна ґрунтується на нашому досвіді з Specialization, Miniboxing та Valhalla Project, + і різко зменшує розмір байт-коду. І, що найкраще, це завжди ввімкнено, відбувається за кулісами без анотацій, + що призводить до прискорення понад 20 разів. Крім того, він «просто працює» на колекціях Scala. + +- (ScalaSphere 2016) [Hacking on Dotty: жива демонстрація](https://www.youtube.com/watch?v=0OOYGeZLHs4) + від [Guillaume Martres](http://guillaume.martres.me/) + [\[слайди\]](http://guillaume.martres.me/talks/dotty-live-demo/). + Прийоми Гійома для Dotty: демонстрація в реальному часі, під час якої він створює просту фазу компілятора для відстеження викликів методів під час виконання. + +- (Scala By the Bay 2016) [Dotty: що це і як працює](https://www.youtube.com/watch?v=wCFbYu7xEJA) + від [Guillaume Martres](http://guillaume.martres.me/) + [\[слайди\]](http://guillaume.martres.me/talks/dotty-tutorial/#/). + Гійом демонструє високорівневе представлення пайплайну компіляції в Dotty. + +- (ScalaDays 2015, Amsterdam) [Як зробити ваші програми на Scala меншими та швидшими за допомогою компонувальника Dotty](https://www.youtube.com/watch?v=xCeI1ArdXM4) + від [Dmitry Petrashko](http://twitter.com/darkdimius) + [\[слайди\]](https://d-d.me/scaladays2015/#/). + Дмитрій представляє алгоритм аналізу графу виклик у Dotty та переваги продуктивності, які ми можемо отримати з точки зору кількості методів, + розміру байт-коду, розміру коду JVM і кількість об'єктів, виділених в кінці. diff --git a/scala3/guides/tasty-overview.md b/scala3/guides/tasty-overview.md index 835bd28497..4346271a8b 100644 --- a/scala3/guides/tasty-overview.md +++ b/scala3/guides/tasty-overview.md @@ -1,6 +1,8 @@ --- layout: singlepage-overview title: An Overview of TASTy +partof: tasty-overview +languages: ["uk"] scala3: true versionSpecific: true --- diff --git a/scala3/new-in-scala3.md b/scala3/new-in-scala3.md index f91f0d06af..fa2b6aa609 100644 --- a/scala3/new-in-scala3.md +++ b/scala3/new-in-scala3.md @@ -1,7 +1,7 @@ --- layout: singlepage-overview title: New in Scala 3 -languages: ["ja","zh-cn"] +languages: ["ja","zh-cn","uk"] --- The exciting new version of Scala 3 brings many improvements and new features. Here we provide you with a quick overview of the most important diff --git a/scala3/scaladoc.md b/scala3/scaladoc.md index f6706ffdf0..10a4366a63 100644 --- a/scala3/scaladoc.md +++ b/scala3/scaladoc.md @@ -1,6 +1,8 @@ --- layout: singlepage-overview title: New features for Scaladoc +partof: scala3-scaladoc +languages: ["uk"] --- The new Scala version 3 comes with a completely new implementation of the documentation generator _Scaladoc_, rewritten from scratch. @@ -25,19 +27,19 @@ Thanks to this feature, you can store your documentation along-side with the gen For more information on how to configure the generation of static sites check out [Static documentation][static-documentation] chapter -![](../resources/images/scala3/scaladoc/static-site.png) +![](../../resources/images/scala3/scaladoc/static-site.png) ### Blog posts Blog posts are a specific type of static sites. In the Scaladoc manual you can find additional information about how to work with [blog posts][built-in-blog]. -![](../resources/images/scala3/scaladoc/blog-post.png) +![](../../resources/images/scala3/scaladoc/blog-post.png) ### Social links Furthermore, Scaladoc provides an easy way to configure your [social media links][social-links] e.g. Twitter or Discord. -![](../resources/images/scala3/scaladoc/social-links.png){: style="width: 180px"} +![](../../resources/images/scala3/scaladoc/social-links.png){: style="width: 180px"} ## Experimental features @@ -70,7 +72,7 @@ Instead of searching for `span` we can also search for `IArray[A] => (A => Boole To use this feature simply type the signature of the function you are looking for in the scaladoc searchbar. This is how it works: -![](../resources/images/scala3/scaladoc/inkuire-1.0.0-M2_js_flatMap.gif) +![](../../resources/images/scala3/scaladoc/inkuire-1.0.0-M2_js_flatMap.gif) This feature is provided by the [Inkuire](https://github.com/VirtusLab/Inkuire) search engine, which works for Scala 3 and Kotlin. To be up-to-date with the development of this feature, follow the [Inkuire repository](https://github.com/VirtusLab/Inkuire). diff --git a/scala3/talks.md b/scala3/talks.md index d3d110d4d5..75ace5c7b7 100644 --- a/scala3/talks.md +++ b/scala3/talks.md @@ -2,6 +2,8 @@ layout: singlepage-overview title: Talks scala3: true +partof: scala3-talks +languages: ["uk"] versionSpecific: true ---