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.
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
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.
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.
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.
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.
- Andrey Breslav andrey.breslav (at) jetbrains (dot) com