Skip to content

Instantly share code, notes, and snippets.

@abreslav
Last active August 29, 2015 14:08
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/b35b948f537511f23cbf to your computer and use it in GitHub Desktop.
Save abreslav/b35b948f537511f23cbf to your computer and use it in GitHub Desktop.
Kotlin Project Theme(s) for Open Academy - 2014/15

Kotlin (Programming Language)

Kotlin is a modern statically typed programming language targeting the Java and JavaScript platforms. It is conceived as a "modern language for industry", keeping a balance between flexibility and readability, expressiveness and safety.

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
  • JVM runtime supports reflection and other similar capabilities on the Java platform
  • JS runtime supports run-time behavior on the JavaScript platform
  • 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 and Android Studio
  • Eclipse plugin provides similar services in Eclipse
  • Online IDE enables users to write Kotlin code in the browser.
  • Interoperability services
  • Java-to-Kotlin converter turns Java source code into Kotlin source code Build tools
  • Ant, Maven and Gradle integration

Objectives

The first objective is to become familiar with the language. Most of the code you are going to write will be in Kotlin.

Once the stage of first acquaintance is passed, the objective will be set according to the student's interests. Examples of possible topics:

  • Eclipce plugin: implementing IDE features on teh Eclipse platform
    • You will learn: extending large systems, writing performance-critical code, making complex services user-friendly, source code analysis/transformation.
  • Kotlin REPL: fixing issues, adding new functionality
    • You will learn: Copmiler internals, programming language translation, JVM bytecode.
  • Improving Kotlin's Online IDE experience: writing browser extensions to enable, e.g., running gists on the browser or providing a Kotlin console in addition to JS one in Chrome/Firefox
    • You will learn: web programming, extending browsers, client-side scripting, asynchronous client-server interaction.

Many other areas are available for exploration.

Past years' experiences

In the past years students worked very efficiently on the IntelliJ IDEA plugin, made dozens of contributions, including rather elaborate ones.

Best students developed a rather deep understanding of Kotlin's internals and, along with their assigned tasks, contributed fixes and enhancements to core subsystems, such as Lexer/Parser and Type checker.

This year we are going to try and make students' contributions more diverse by including other IDEs and REPL.

Requirements

We are expecting advanced coding skills. Experience shows that this project is too tough for beginners in programming

A very important requirement is that the student should be willing to understand problems deeply and get things done.

The project is written in Kotlin and Java 1.6 (web-based parts involve HTML and JavaScript). The tooling we use includes

  • IntelliJ IDEA (open source Community 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