Статья представляет собой очень краткое введение в Pike. Признайтесь — мало кто из вас слышал об этом языке. Однако язык Pike даже применяется в продакшене (для работы Opera в режиме Turbo).
Читать полностью »
Рубрика «java» - 136
По щучьему велению… (язык программирования Pike)
2017-06-10 в 9:01, admin, рубрики: java, pike, Программирование, метки: pikeСтолкнулся я с необходимостью перевода материала, касающегося языка Java. Причем, перевод должен быть сделан не для себя, а так сказать, для общего пользования. Поэтому, он должен быть максимально приближен к оригиналу и выполнен в соответствии с требованиями спецификации языка. Как оказалось, эти два требования не всегда означают одно и то же. Ну, во-первых, сам оригинал позволяет себе довольно вольное обращение с терминами, «но это так мелочь», а во вторых, в который раз пришлось столкнуться с разночтениями в русской трактовке Java-язычных терминов. А это, на мой взгляд, уже довольно большая и давно существующая проблема. Читать полностью »
Распределенные структуры данных (часть 2, как это сделано)
2017-06-08 в 10:58, admin, рубрики: Apache Ignite, big data, java, Блог компании GridGain, Программирование, распределённые вычисления, распределенные системыВ предыдущей статье — часть 1, обзорная — я рассказал о том, зачем нужны распределенные структуры данных (далее — РСД) и разобрал несколько вариантов, предлагаемых распределенным кешем Apache Ignite.
Сегодня же я хочу рассказать о подробностях реализации конкретных РСД, а также провести небольшой ликбез по распределенным кешам.
Итак:
Побеждаем Android Camera2 API с помощью RxJava2 (часть 1)
2017-06-08 в 9:29, admin, рубрики: android, camera2 api, java, rxjava2, Блог компании Badoo, разработка мобильных приложений, Разработка под android
Как известно, RxJava идеально подходит для решения двух задач: обработки потоков событий и работы с асинхронными методами. В одном из предыдущих постов я показал, как можно построить цепочку операторов, обрабатывающую поток событий от сенсора. А сегодня я хочу продемонстрировать, как RxJava применяется для работы с существенно асинхронным API. В качестве такого API я выбрал Camera2 API.
Ниже будет показан пример использования Camera2 API, который пока довольно слабо задокументирован и изучен сообществом. Для его укрощения будет использована RxJava2. Вторая версия этой популярной библиотеки вышла сравнительно недавно, и примеров на ней тоже немного.
Для кого этот пост? Я рассчитываю, что читатель – умудрённый опытом, но всё ещё любознательный Android-разработчик. Очень желательны базовые знания о реактивном программировании (хорошее введение – здесь) и понимание Marble Diagrams. Пост будет полезен тем, кто хочет проникнуться реактивным подходом, а также тем, кто хочет использовать Camera2 API в своих проектах. Предупреждаю, будет много кода!
Исходники проекта можно найти на GitHub.
Почему стоит полностью переходить на Ceylon или Kotlin (часть 1)
2017-06-07 в 9:25, admin, рубрики: ceylon, java, kotlin, Программирование, метки: ceylonВ последнее время активную популярность набирает Kotlin. А что если попробовать выбрать более экзотические языки, и применим к ним те же аргументы? Статья написана по мотивам этой, практически повторяя все аргументы за Kotlin. Основная задача — показать, что Ceylon может практически тоже самое, что и Kotlin, применительно к Java. Но кроме этого у Ceylon есть кое что еще, что будет описано в следующей статье.
Хочу рассказать о новом языке программирования, который называется Ceylon, и объяснить, почему вам стоит использовать его в своём следующем проекте. Раньше я писал на Java (много и долго, более 10 лет, начиная с Java 1.4 и заканчивая Java 8), и Java мне нравилась. Затем на меня большое впечатление произвела Scala, в результате чего Java как язык стал любить несколько меньше. Но судьба свела меня с языком Сeylon, и в последние полтора года мы пишем на Ceylon везде, где только можно. В реальных коммерческих проектах, правда внутренних. И в данный момент я не представляю себе ситуации, в которой лучше было бы выбрать Java, я не рассматриваю Java как язык, на котором стоит начинать новые проекты.
Ceylon разработан в Red Hat, автор языка — Gavin King, известный по такому фреймворку как Hibernate. Он создавался людьми, которые хорошо понимают недостатки Java, основная цель заключалась в решении сугубо прикладных задач, обеспечение максимально легкой читаемости кода, избегание любых необнозначностей и подводных камней, во главу всего стала предсказуемость и структурная красота языка. Также большое внимание уделялось приемлемому времени компиляции. В настоящее время версия языка 1.3.2, непосредственно я познакомился с языком, когда вышла версия 1.2.0.
Хотя Ceylon компилируется в JavaScript, я сконцентрируюсь на его первичной среде — JVM.
Итак, несколько причин, почему вам следует полностью переходить на Ceylon (порядок совпадает с одноименными пунктами соответствующей Kotlin статьи):
В качестве приветствия
2017-06-05 в 14:39, admin, рубрики: agile, BigData, confluence, Hadoop, IBM, java, jira, oracle, scrum, Блог компании Райффайзенбанк, финансы в IT, ХакатоныВсем привет.
С сегодняшнего дня Райффайзенбанк начинает свое вещание на Хабрахабр. За последние 2-3 года мы многое сделали с точки зрения внутренних преобразований, запуска и реализации ИТ-проектов. И нам есть, о чем рассказать.
Читать полностью »
Динамическое подключение внешних собственных модулей в Gradle
2017-06-05 в 6:52, admin, рубрики: dependency injection, gradle, java, ПрограммированиеПреамбула
Есть своя «внешняя» библиотека и есть своё приложение, использующее эту библиотеку (подгружается через внешний репозитарий). Требуется внести изменение и в библиотеку и в приложение.
Казалось бы, собери библиотеку и выложи её в локальный maven-репозитарий, а потом уже собирай приложение. Но хочется, чтобы можно было поправив код в библиотеке сразу попробовать изменения в приложении и при этом сохранить раздельное хранение кода библиотеки и приложения, включая настройки IDE и прочее.
С помощью gradle и и символических связей в файловой системе такое можно легко устроить.
Читать полностью »
Kotlin, компиляция в байткод и производительность (часть 2)
2017-06-02 в 10:10, admin, рубрики: java, kotlin, байткод, Блог компании ИНФОРИОН, Компиляторы, Программирование, разработка
Это продолжение публикации. Первую часть можно посмотреть тут
Содержание:
Циклы
When
Делегаты
Object и companion object
lateinit свойства
coroutines
Выводы
Читать полностью »
Kotlin, компиляция в байткод и производительность (часть 1)
2017-06-02 в 10:09, admin, рубрики: java, kotlin, байткод, Блог компании ИНФОРИОН, Компиляторы, Программирование, разработка
О Kotlin последнее время уже очень много сказано (особенно в совокупности с последними новостями c Google IO 17), но в то же время не очень много такой нужной информации, во что же компилируется Kotlin.
Давайте подробнее рассмотрим на примере компиляции в байткод JVM.
Это первая часть публикации. Вторую можно посмотреть тут
Процесс компиляции это довольно обширная тема и чтобы лучше раскрыть все ее нюансы я взял большую часть примеров компиляции из выступления Дмитрия Жемерова: Caught in the Act: Kotlin Bytecode Generation and Runtime Performance. Из этого же выступления взяты все бенчмарки. Помимо ознакомления с публикацией, настоятельно рекомендую вам еще и посмотреть его выступление. Некоторые вещи там рассказаны более подробно. Я же больше внимания акцентирую именно на компиляции языка.
Содержание:
Функции на уровне файла
Primary конструкторы
data классы
Свойства в теле класса
Not-null типы в публичных и приватных методах
Функции расширения (extension functions)
Тела методов в интерфейсах
Аргументы по умолчанию
Лямбды
Но прежде чем рассмотрим основные конструкции языка и то, в какой байткод они компилируются, нужно упомянуть о том, как непосредственно происходит сама компиляция языка:
Читать полностью »
StringBuffer, и как тяжело избавиться от наследия старого кода
2017-06-02 в 7:07, admin, рубрики: java, legacy, stringbuffer, stringbuilder, жизнь-больВсем привет.
Эта статья — вольный перевод поста StringBuffer, and how hard it is to get rid of legacy code. Как-то очень он мне запал в душу, поэтому решил перевести. Поехали.
В 2006-м, в 5-й java появился StringBuilder
. Более легковесная и разумная альтернатива StringBuffer
. Вот, что говорит официальная документация по StringBuffer
:
Этот класс дополнен аналогичным классом предназначенным для использования в одном потоке — StringBuilder. В общем случае нужно отдавать предпочтение классу StringBuilder, так как он поддерживает все те же операции, что и этот (StringBuffer), но быстрее, так как не выполняет никаких синхронизаций.
Иметь synchronized
в StringBuffer
вообще никогда не было хорошей идеей. Основная проблема в том, что одной операции никогда не достаточно. Одиночная конкатенация .append(x)
бесполезная без других операций, таких как .append(y)
и .toString()
. В то время, когда каждый конкретный метод потокобезопасный, вы не можете сделать несколько вызовов без конкуренции между потоками. Ваша единственная опция — внешняя синхронизация.
Так, что? Получается, 10 лет спустя уже никто не использует StringBuffer!? Ну, по крайней мере, точно не для нового функционала!?
Сколько объектов создает этот код?
Как я уже писал раньше, виртуальная машина создает много объектов на старте или при загрузке основных библиотек. Гораздо больше, чем Вы могли бы представить, задавая вопрос выше:
public class Main {
public static void main(String... args) {
System.out.println("Hello " + "world");
}
}
Oracle JVM 8-й версии создает приблизительно 10_000 объектов для выполнения этой программы.