Skip to content

Instantly share code, notes, and snippets.

@abreslav
Last active July 28, 2023 10:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abreslav/4174982 to your computer and use it in GitHub Desktop.
Save abreslav/4174982 to your computer and use it in GitHub Desktop.
Kotlin Project Theme(s) - 2012/13

The Kotlin Programming Language

Kotlin is a modern statically typed programming language targeting for the Java and JavaScript platforms. We aim at creating what we call "a modern language for industry", keeping a balance between flexibility and readability, expressiveness and safety. Kotlin is under development, and we are rapidly approaching a Beta stage.

Project Overview

A modern programming language is much more than a grammar. Principal susystems of Kotlin include

  • Compiler front-end
  • Lexer/Parser translates text into a syntax tree, reports syntax errors
  • Type Checker resolves names, infers and checks types, annotates the syntax tree, reports typing errors
  • Java front-end loads Java classes from .java and .class files, so that the Type Checker can see them
  • Back-ends (code generators)
  • JVM back-end generates JVM .class files from a syntax tree annotated by the Type Checker
  • JavaScript back-end generates JavaScript source code from a syntax tree annotated by the Type Checker
  • Standard library
  • Functions and classes for common programming tasks: from io and collections to XML and HTML manipulation
  • IDE
  • IntelliJ IDEA plugin facilitates editing and inspection of Kotlin source code in IntelliJ IDEA
  • Interoperability services
  • Java-to-Kotlin converter turns Java source code into Kotlin source code
  • KAnnotator inspects .class files and infers more precise types than Java allows to specity
  • Build tools
  • Ant and Maven integration

Objectives

The first objective is to become familiar with the language. The best way to do it is to work on the subsystems already written in Kotlin, namely Standard Library, Java-to-Kotlin converter and KAnnotator. By working on minor issues in these subsystems the student gets to know the language, the tooling and the overall workflow.

Once the stage of first acquaintance is passed, the objective will be set according to the student's interests. Examples of possible topics with notes on what kind of knowledge the student will acquire by working on them:

  • Support different refactorings in the IntelliJ IDEA plugin
  • Static code analysis and transformation, User Interface design, Multithreaded programming
  • Building an open annotation repository for Java libraries (using KAnnotator)
  • Data-flow analysis, Java byte code internals, Web programming
  • Implementing Batches for Kotlin
  • Compiler construction, Code analysis and transformation
  • Improving the JavaScript back-end
  • Compiler construction, JavaScript standards, Performance of dynamic languages
  • Implementing Kotlin/GWT interoperability
  • Compiler construction, GWT, JavaScript standards and performance
  • Implementing dynamic types in Kotlin
  • Type systems, Compiler construction
  • Improving Kotlin's Web IDE
  • Web programming, IDE design and implementation

Many other areas are available for exploration.

Requirements

The top requirement is that the student should be willing to understand problems deeply and get things done.

The project is written in Java 1.6 and Kotlin. The tooling we use includes

  • IntelliJ IDEA (open source edition)
  • Git
  • Ant, Maven
  • TeamCity Integration Server

More information on getting started is available here. A web-based demo of Kotlin is available here.

Evaluation

Students will be getting continuos feedback in the form of code review and discussions with the mentor(s). The primary evaluation criteria:

  • Acquired knowledge of Kotlin as a programming language;
  • Acquired knowledge of the subsystem(s) the student worked on;
  • Ability to follow the workflow, use the tooling and communicate with the rest of the team.

Contacts

  • Andrey Breslav andrey.breslav (at) jetbrains (dot) com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment