Details

Title: Реализация явно типизированных полей в компиляторе языка Kotlin: выпускная квалификационная работа бакалавра: направление 09.03.01 «Информатика и вычислительная техника» ; образовательная программа 09.03.01_02 «Технологии разработки программного обеспечения»
Creators: Луняк Николай Алексеевич
Scientific adviser: Глухих Михаил Игоревич
Organization: Санкт-Петербургский политехнический университет Петра Великого. Институт компьютерных наук и технологий
Imprint: Санкт-Петербург, 2022
Collection: Выпускные квалификационные работы; Общая коллекция
Subjects: язык программирования Kotlin; теневые свойства; компиляторы; Kotlin programming language; backing properties; compilers; language feature
Document type: Bachelor graduation qualification work
File type: PDF
Language: Russian
Level of education: Bachelor
Speciality code (FGOS): 09.03.01
Speciality group (FGOS): 090000 - Информатика и вычислительная техника
DOI: 10.18720/SPBPU/3/2022/vr/vr22-1229
Rights: Доступ по паролю из сети Интернет (чтение, печать, копирование)
Record key: ru\spstu\vkr\16662

Allowed Actions:

Action 'Read' will be available if you login or access site from another network Action 'Download' will be available if you login or access site from another network

Group: Anonymous

Network: Internet

Annotation

Тема выпускной квалификационной работы: «Реализация явно типизированных полей в компиляторе языка Kotlin».В настоящей работе рассмотрены проблемы, связанные с использованием шаблона «теневых свойств» (англ. backing properties) при написании исходного кода на языке программирования Kotlin. Данные проблемы являются специфичными для Kotlin, а потому готовых решений не имеют. Был проведен анализ разных вариантов их решения и выбраны самые оптимальные из них. Для выбранных вариантов были разработаны программные прототипы, представляющие собой модификации компилятора языка Kotlin, и позволяющие отказаться от использования шаблона «теневых свойств» с помощью специального синтаксиса.В рамках данной работы предлагается расширить синтаксис свойств в языке программирования Kotlin, позволив разработчику определить хранимый внутри поля объект и его тип явным образом, а также позволить получать доступ к этому полю с помощью специального механизма сужения типа в месте вызова при соблюдении определенных условий. Для остальных ситуаций предлагается способ получить доступ к полю свойства напрямую, а также способ получить доступ к членам класса-делегата для делегированных свойств.

The subject of the graduate qualification work is «Implementing explicit backing fields for the Kotlin compiler».The current work was aimed to review the problems introduced by the backing properties programming pattern, which can be frequently found in Kotlin source code. These problems are Kotlin-specific, and therefore ready-made solutions are unavailable. A number of different approaches to solve them has been reviewed, and the most appropriate solutions have been chosen. For the ones chosen the corresponding prototypes have been developed in forms of the modified Kotlin compiler versions allowing to abandon the backing properties pattern with the help of special syntax.This work suggests extending the Kotlin programming language with the ability to declare the object stored in a property field and its type explicitly, along with a mechanism of use-site type narrowing, available if certain conditions are satisfied. To cover other cases a way of accessing property fields and delegate members directly is suggested.

Document access rights

Network User group Action
ILC SPbPU Local Network All Read Print Download
Internet Authorized users SPbPU Read Print Download
-> Internet Anonymous

Table of Contents

  • Перечень условных обозначений и терминов
  • Введение
  • Недостатки шаблона теневых свойств
    • Специальный синтаксис
    • Свойства и поля
    • Две декларации
    • Дублирование кода
    • Бизнес-стратегия
    • Запрос пользователей
  • Обзор предметной области
    • Другие языки программирования
      • Swift
      • C# и Java
      • TypeScript
    • Имеющиеся предложения
  • Исследование возможных подходов
    • Раскрывающие геттеры
      • Геттеры без тела
      • Геттеры с альтернативными типами
      • Геттеры с большей видимостью
      • Тип раскрывающего геттера
      • Порядок вызова геттеров
      • Ручной вызов раскрывающего геттера
      • Сеттер
      • Перегрузка свойств
      • Проблема ментальной модели
    • Предложение пользователя Andylamax
    • Предложение пользователя Fádi Hannoun
    • Предложение пользователя CharlyLafon37
      • Области видимости
      • Многоуровневость
      • Ментальная модель
    • Явное поле и сужение типа
      • Явное теневое поле
      • Умное сужение типа
      • Явный прямой доступ к полю
      • Явный прямой доступ к делегату
    • Приватные геттеры
      • Тип поля
  • Реализация прототипа
    • Реализация раскрывающих геттеров
      • Подготовка имеющейся кодовой базы
      • Обновление механизма разрешения символов
    • Реализация явных теневых полей
    • Реализация прямого доступа с помощью знака 99993em.5#
      • Реализация прямого доступа к полю
      • Реализация доступа к делегату
      • Изменение приоритета оператора 99993em.5#
  • Заключение
  • Перечень используемых источников
  • Приложение А. Модификации парсера
  • Приложение Б. Построение FirBackingField
  • Приложение В. Резолв
  • Приложение Г. Чекер типов свойств
  • Приложение Д. Сужение типа свойства

Usage statistics

stat Access count: 25
Last 30 days: 0
Detailed usage statistics