суббота, 26 ноября 2011 г.

[prog] Разработчики Scala хвастаются ростом популярности своего языка

Свежая заметка на www.scala-lang.org: Scala - Popularity and Use Grow.

Мол и используется Scala в крутых конторах (Twitter, LinkedIn, Foursquare, the guardian, Morgan Stanley, Credit Swiss, UBS, HSBC), и количество посетителей сайта scala-lang.org выросло, и количество загрузок Scala увеличилось, и вакансии для Scala-разработчиков уже не редкость… Лепота, в общем.

Из всего перечисленного там внимание привлекают разве что цифры количества посетителей и загрузок. Использование чего-либо в больших конторах – это вовсе не показатель. На то они и большие конторы, чтобы там находилось место для всего.

Меня же интересует вот что: либо я совершенно не в теме, либо же Рунет со своими профессиональными форумами (RSDN, LOR, OpenNet) совершенно не отражает тенденции в буржуинии. Поскольку у меня сложилось впечатление, что чем дальше, тем меньше в Рунете говорят о Scala (а если говорят, то не очень хорошее). Куда больше мне доводится слышать про Erlang и Haskell, чуть реже про OCaml и различные Lisp-ы.

Так вот интересно – есть ли рост какой-нибудь востребованности Scala на просторах бывшего Союза? Или то, о чем рапортуют Scalaделы, касается только Запада?

[prog.thoughts] Что native, а что не native?

Оказалось, что на RSDN разгорелся нешуточный флейм в духе старых-добрых времен: Конец нересурсов. Что особенно приятно, в нем даже дали ссылку на заметку в моем блоге. В принципе, данный флейм был достоин упоминания только за это :) Но в нем было еще несколько интересных моментов.

В частности, довольно долго участники спора противопоставляли native-приложения managed-приложениям. Но когда дело дошло до выяснения того, чем же native отличается от не-native, ничего путного родиться не смогло (вероятно, тот ламер, который больше всех верещал о доминировании managed, слабо разбирается в этом вопросе, а его более матерые собеседники откровенно стебались и не спешили просвещать человека). Хотя вопрос, как мне думается, не так прост, как может показаться. Я и сам бы с ходу не смог сформулировать что есть native, а что managed.

Когда я в бытность активным RSDN-ером бодался с .NET-евангелистами все казалось просто: .NET и JVM – это managed, С/C++ – это native, Python/Perl/Ruby/PHP/Bash и пр. – это managed, Objective-C – это native и т.д. Вроде бы все интуитивно понятно. Но, как показал упомянутый RSDN-овский флейм, интуиция может быть у каждого своя. Поэтому нужно придумать что-то более-менее формальное.

Так вот, мне представляется, что native-приложение – это такое приложение, для запуска и работы которых достаточно только штатных возможностей ОС и которое работает на “голом железе” (т.е. инструкции приложения сразу же выполняются процессором, а не какой-либо виртуальной машиной). А вот для managed-приложения требуется некий промежуточный слой между кодом приложения и ОС. Таким слоем может быть либо интерпретатор (как в случае со скриптовыми языками вроде Python/Perl/Ruby), либо виртуальная машина (JVM), либо JIT-среда, которая компилирует инструкции VM в нативный код при первом обращении (как в .NET).

Вот такое вот простое разграничение. Никакие сборщики мусора, никакие средства трассировки и контроля за исполнением (вроде проверок выхода за рамки массива), никакие средства рефлексии и предоставления метаинформации о коде в расчет не принимаются. Просто потому, что есть примеры вполне себе native-приложений, у которых есть и GC, и контроль за кодом, и подробная диагностика мест возникновения исключений, и прочая лабуда. Например, у разработанных на Eiffel, OCaml, D или Go приложений.

При этом нужно говорить именно о приложениях. А не о коде. И уж тем более не о языках программирования. Просто потому, что один и тот же язык может иметь транслятор как в native-код, так и в код какой-либо виртуальной машины. Как у Eiffel или OCaml, например. И один и тот же код может работать как в native-, так и в managed-приложении. Хотя, если код затачивается под использование возможностей конкретной managed-платформы, то тогда имеет смысл называть код managed-кодом.

Но самое забавное, что даже такие, казалось бы, низкоуровневые языки, как C++ и C, имеет интерпретаторы! Пусть поддерживающие ограниченное подмножество языков, но тем не менее позволяющие запускать довольно-таки серьезные приложения. Первый из них – это CINT. Второй – Ch. Вот такие дела, и C++ приложения могут быть вполне себе managed. По крайней мере согласно моему определению ;)

среда, 23 ноября 2011 г.

[prog] Язык Ceylon от RedHat вышел в свет

Соответствующая новость и обсуждение на OpenNet.

Сегодня утром краем глаза глянул на сайт ceylon-lang.org. Полного впечатления о языке, конечно же, не получил. Но какие-то моменты в глаза бросились.

Из очень хороших вещей в языке встретились nullable-типы, а так же (долгожданный мной) аналог typedef из C/C++.

Так же заметно, что элементы из функциональных языков (вроде паттерн-матчинга) мигрируют в сторону мейнстрима. Но в более примитивной, а значит и более приспособленной к массовому применению ;), форме. В Ceylon это проявляется, например, в возможности указывать объединение типов. Что-то вроде:

//union type
void printName(String|Named name) {
    switch (name)
    case (is String) {
        println(name);
    }
    case (is Named) {
        println(name.first + " " + name.last);
    }
}

Здесь тип аргумента name – это или String, или Named. Чтобы работать с таким аргументом нужно использовать приведенный выше вариант оператора switch. Аналогичная штука может использоваться и для выстраивания объектных иерархий:

abstract class Node() of Leaf | Branch {}

Node node = ...;
switch (node)
case (is Leaf) { ... }
case (is Branch) { .... }

В целом же, читая Quick introduction и первые главы Tour of Ceylon складывается впечатление, что язык получился намного более простым и, вероятно, более приспособленным для “повседневных” задач мейнстрима, чем Scala. Несколько смущает количество дополнительных деклараций – shared, formal, actual, default и пр. для методов классов. Закрадывается подозрение, что авторы языка в чем-то перемудрили и напрасно отказываются от уже привычной терминологии (тех же public или override). Но, может быть, я ошибаюсь из-за незнания предмета.

Так что, на первый взгляд, у RedHat действительно получился язык, который более удобен, чем Java, и более прост, чем Scala. Но вот нужен ли он для JVM – отдельный большой вопрос. Впрочем, меня он пока не волнует, т.к. я все еще C++ программист ;)

вторник, 22 ноября 2011 г.

[life] И еще раз на тему публичных телефонных разговоров

Вчера вечером возвращался домой в средней наполненности автобусе. Недалеко от меня какой-то мужчина лет сорока, вероятно подвыпивший, по телефону выяснял отношения со своей знакомой. И делал это, что совершенно удивительно, хорошим литературным языком. Этакий образчик старого доброго эпистолярного жанра, но по телефону.

Поскольку говорил он громко, то произносимые фразы были слышны изрядному количеству невольных слушателей. На особенно невероятных для автобуса речевых оборотах попутчики переглядывались, но старались делать безучастный вид. Однако, на фразе “Неужели у меня совсем нет шансов растопить этот лед между нами?” лично я не выдержал и стал улыбаться уже открыто.