LINUX.ORG.RU

Представлены исходные тексты компилятора и библиотек Kotlin

 ,


0

1

Компания JetBrains, во многом известная благодаря своему продукту IDE IntelliJ IDEA, сегодня открыла исходный код собственного языка программирования, компилирующегося в байт-код для виртуальной машины Java и в JavaScript.

Kotlin — статически типизированный язык программирования, основные свойства:

  • Максимальная совместимость с Java и JVM, с расчетом на совместное использование вместе с Java кодом
  • Быстрая компиляция (не медленее Javac)
  • Больший уровень безопасности, в том числе избегание NullPointerException за счет более совершенной системы типов, проверки generic-типов во время исполения и др.
  • Более краткий и выразительный код благодаря выводу типов локальных переменных, наличию функций высшего порядка, возможности добавления функций в существующие классы и т.п.
  • Проще Scala при том же уровне выразительности кода

JetBrains сделала доступными следующие инструменты для разработки (в дополнение к уже известной веб-консоли Kotlin Web Demo, в которой кстати появилось несколько примеров кода и небольших заданий для ознакомления):

  • Компилятор Kompiler;
  • Расширения для базовых библиотек Java из состава JDK;
  • Интеграция с инструментами для сборки приложений Ant, Gradle и Maven;
  • Плагин для IntelliJ IDEA (требуется обновление до последней версии IDE)

Исходные тексты доступны на GitHub под лицензией Apache 2.

Стоит заметить, что это первый вариант Kotlin, который разработчики представляют сообществу, причем стадия готовности продукта - pre-alpha, поэтому всячески приветствуются любые мнения и отчеты об ошибках от пользователей.

В дополнение к вышесказанному, команда разработчиков будет рада любой помощи, в том числе в виде патчей-исправлений.

(спасибо ins3y3d за помощь в составлении новости)

>>> Подробности

★★★★★

Ответ на: комментарий от tailgunner

так что полезность введения в язык аж целых новых парадигм остается сомнительной.

Ну да, кое-кому уже три года сложно перейти на новую мажорную версию языка, а тут аж целую новую парадигму ввели.

У меня спросили примеры, я их привел. Судить о полезности фич языка, которого не знаешь и с которым не работаешь, по меньшей мере непрофессионально. Тем более, если об этом с галерки накричали.

unlog1c ★★★ ()
Ответ на: комментарий от unlog1c

Судить о полезности фич языка, которого не знаешь и с которым не работаешь, по меньшей мере непрофессионально.

Аргумент слишком похож на «спердобейся» и поэтому отклоняется.

У меня спросили примеры, я их привел.

А можешь привести пример _широко распространенного_ расширения языка (уровня того же паттерн матчинга)?

tailgunner ★★★★★ ()
Ответ на: комментарий от unlog1c

изначально pattern matching в Кложуре отсутствует

это свинство какое-то. Даже в прологе, написанном 50 лет назад уже был, без всяких извратов с макросами.

anonymous ()
Ответ на: комментарий от tailgunner

Да весь CLOS написан на макрах. Правда говорят, что кто-то из авторов спился.

anonymous ()
Ответ на: комментарий от tailgunner

Мнение заторможенной на всю голову галерки, уже пять лет не способной даже Ocaml осилить, почтенной публике глубоко по барабану.

anonymous ()
Ответ на: комментарий от anonymous

Мнение заторможенной на всю голову галерки, уже пять лет не способной даже Ocaml осилить

Если ты обо мне, то это не мое мнение :-P

tailgunner ★★★★★ ()
Ответ на: комментарий от anonymous

1) В прологе вообще ничего нет, кроме унификации (а это - более общий и более медленный случай pattern matching)

2) Практически все остальное в Прологе делается именно через метапрограммирование

anonymous ()
Ответ на: комментарий от tailgunner

Аргумент слишком похож на «спердобейся» и поэтому отклоняется.

Нет, аргумент слишком похож на здравый смысл. Если бы я сказал про Питон (который я не знаю и не пишу на нём) «полезность использования PyPy в продакшене остается сомнительной», то это было бы просто глупо. Как моя неосведомленность в этом предмете может позволить мне делать такие заявления?

А можешь привести пример _широко распространенного_ расширения языка (уровня того же паттерн матчинга)?

Я не понимаю, почему это обязательно должно быть расширение языка? С использованием макросов написана часть основной библиотеки. Это мультиметоды, протоколы, future'ы, интероп с Java. Практически все существующие тест-фреймворки для Clojure используют макросистему для создания удобного DSL'а. Те же самые еще CL-овские with-open и прочие with- - это макросы. Расширенная библиотека для работы с exception'ами (позволяет выбрасывать и ловить не только обьекты класса Exception, а вообще любые обьекты - списки, массивы, словари, хоть примитивные типы) в принципе невозможна без макросов.

Я не совсем понимаю что ты хочешь услышать. Макросистема - это идиоматический инструмент в Лиспах. Она позволяет расширять язык там, где без нее пришлось бы выпускать его нову версию (вот with-open только в Java 7 появился. В кложуре это 14 строк кода).
Если ты спрашиваешь стоит ли использовать макросы везде без разбора (в том числе в решении прикладных пользовательских задач) - то нет. Макросы добавляют сложность, которая будет ненужной если можно обойтись без них (в разумных пределах).

unlog1c ★★★ ()
Ответ на: комментарий от anonymous

это свинство какое-то. Даже в прологе, написанном 50 лет назад уже был, без всяких извратов с макросами.

Пока другие меряются существующими фичами и чувствуют жжение в заднем проходе из-за отсутствующих, лисперы недостающие фичи просто реализуют. Так где же свинство?

unlog1c ★★★ ()
Ответ на: комментарий от unlog1c

Если бы я сказал про Питон (который я не знаю и не пишу на нём) «полезность использования PyPy в продакшене остается сомнительной», то это было бы просто глупо.

Это было бы правдой, или достаточно близко к правде.

Я не понимаю, почему это обязательно должно быть расширение языка?

Потому что разговор начался с:

ugoday> в лиспе можно на лету добавлять новые фичи с помощью макросов. А в жабе для этого приходится делать новый язык.

По-моему, речь именно о расширениях языка (оставим в стороне то, что угодай - тролль).

Я не совсем понимаю что ты хочешь услышать.

Всё, что ты сочтешь важными применениями метапрограмирования. Больше всего, конечно, хочется услышать о примерах расширении Кложуры настолько, насколько Котлин расширяет Яву. Наверное, это технически возможно, но вот сделано ли...

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Как только столкнетесь с необходимостью доказательства правильной работы кода (своего или чужого - не существенно) иллюзии исчезнут.

A-234 ★★★★★ ()
Ответ на: комментарий от A-234

Понятное дело, что программирование пока находится в зародыше

Бгг.

Как только столкнетесь с необходимостью доказательства правильной работы кода [...] иллюзии исчезнут.

Как только столкнешься с необходимостью доказать эквивалентность утверждений «программирование находится в зародыше» и «техника доказательства корректности кода неразвита», у тебя самого исчезнут иллюзии (я надеюсь).

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Что делает производственную компанию уважаемым брендом? Качество продукции. Мерседес хорошо ездит не потому что у него такой шильдик на капоте а потому что каждая машина проходит ряд серьезных тестов. А лада собирается полуголодными рабочими труд которых лучше вообще не оценивать иначе завод закрыть придется. Так вот, математика это мерседес, а программирование это автоваз. Нет, даже хуже, на поделия автоваза хоть какую то гарантию дают а найти EULA с гарантией правильной работы... Ну вы понимаете.

A-234 ★★★★★ ()
Ответ на: комментарий от ugoday

Да ты просто тявкаешь как бобик, услышал слово лисп, и сработал условный рефлекс. Про расширение лиспа через макры - сказка для детей. Для этого надо быть чуваками класса Питера Ландина, который придумал SECD-машину, а затем написали CLOS и MOP. Ни одной работы такого уровня, я лет 15 не видел. Так что закройся, убогий и не смеши людей.

anonymous ()
Ответ на: комментарий от anonymous

Батенька, да вы, по ходу, дебил. Макросы писать вообще много ума не надо. Посмотри на Racket, он весь из одних только макросов состоит, и делали его не Ландины, а обычные средние туповатые студни.

Ну что может быть сложного, например в (defmacro when (cnd &rest rest) `(if ,cnd (begin ,@rest)))? Такое любой недоумок напишет.

Да и (defmacro super-puper-dsl (&rest code) (compile-dsl-to-lisp code)) тоже любой дебил осилит.

anonymous ()
Ответ на: комментарий от A-234

Еще один лошара на шильдик повелся. По качеству сборки, по гениальности технических решений, по надежности ВАЗ рвет всех этих фрицев как тузик грелку. Мерседес только за шильдик и раздутую цену и покупают всякие лошары.

anonymous ()
Ответ на: комментарий от unlog1c

Ах, да так вот (:

Действительно приведенные вами примеры достаточно интересны, но мне все еще не понятно где здесь так уникален лисп.

Мета-библиотеки подобные этим можно написать например на Groovy. Из примеров: Groovy++, где абсолютно прозрачно для программиста сделан автовывод типов и скорость работы за счет этого увеличивается на порядок. Так же на Groovy повсюду есть DSL-языки.

Так-же как я понимаю подобное умеют Haskell и D, но примеров привести не могу (хотя на хаскеле, ЕМНИП исключения и тот самый case, сделаны как обычные функции)

Безусловно, для создания простых и удобных макросов лиспу нет конкурентов, но действительно важные вещи можно сделать и без «вся-программа-список» и «программа-генерит-программу-которая-генерит-программу» и прочее.

ЗЫ Интересно также примеры мета-программирования не на этапе компиляции, а динамическое ибо это как раз то что умеет только Lisp. Но видел я использование этого только во всяких «лисп-лучше-всех» (:

uhbif19 ()
Ответ на: комментарий от uhbif19

Да я собственно и не пытаюсь доказать уникальность. Я привожу примеры того, что можно сделать с помощью макросов. Если где-то это можно сделать без них - так отлично.

хотя на хаскеле, ЕМНИП исключения и тот самый case, сделаны как обычные функции

Собственно потому что Хаскель сам себе хозяин и может сделать себе любые исключения. Clojure же пытается насколько можно интегрироваться в Java-экосистему, поэтому и исключения используются Джавовские. А вот для их расширения уже приходится использовать макросы.

Безусловно, для создания простых и удобных макросов лиспу нет конкурентов, но действительно важные вещи можно сделать и без «вся-программа-список» и «программа-генерит-программу-которая-генерит-программу» и прочее.

Да любые важные вещи можно сделать как угодно. Полнота по Тюрингу и вперед. Другой вопрос насколько это удобно программисту и какие вообще варианты решения этих важных вещей в языке есть. В лиспе есть макросы и они удобны для определенных задач - я их использую. Если в языке Х есть другой способ решения этих задач, то это просто замечательно. Вопрос звучал для чего в лиспе макросистема, а не «назовите то, что можно сделать лиспом, но нельзя сделать другим языком».

unlog1c ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.