Pull to refresh
-1
0
Алексей @daleleo

Пользователь

Send message

Kotlin, компиляция в байткод и производительность (часть 1)

Reading time12 min
Views34K


О Kotlin последнее время уже очень много сказано (особенно в совокупности с последними новостями c Google IO 17), но в то же время не очень много такой нужной информации, во что же компилируется Kotlin.
Давайте подробнее рассмотрим на примере компиляции в байткод JVM.

Это первая часть публикации. Вторую можно посмотреть тут

Процесс компиляции это довольно обширная тема и чтобы лучше раскрыть все ее нюансы я взял большую часть примеров компиляции из выступления Дмитрия Жемерова: Caught in the Act: Kotlin Bytecode Generation and Runtime Performance. Из этого же выступления взяты все бенчмарки. Помимо ознакомления с публикацией, настоятельно рекомендую вам еще и посмотреть его выступление. Некоторые вещи там рассказаны более подробно. Я же больше внимания акцентирую именно на компиляции языка.

Содержание:


Функции на уровне файла
Primary конструкторы
data классы
Свойства в теле класса
Not-null типы в публичных и приватных методах
Функции расширения (extension functions)
Тела методов в интерфейсах
Аргументы по умолчанию
Лямбды

Но прежде чем рассмотрим основные конструкции языка и то, в какой байткод они компилируются, нужно упомянуть о том, как непосредственно происходит сама компиляция языка:
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments15

Мои любимые примеры функционального программирования в языке Kotlin

Reading time5 min
Views29K

Одной из замечательных особенностей Kotlin является то, что он поддерживает функциональное программирование. Давайте посмотрим и обсудим некоторые простые, но выразительные функции, написанные на языке Kotlin.


Мои любимые примеры функционального программирования в языке Kotlin

Читать дальше →
Total votes 36: ↑25 and ↓11+14
Comments17

Пятничные вебинары: учимся программировать бесплатно

Reading time2 min
Views14K
Тема сегодняшней подборки вебинаров — программирование. Как всегда, вебинары бесплатны, а спектр тем достаточно широк: мобильная разработка, Java, веб-разработка. Полезную информацию в них может почерпнуть как начинающий программист, так и уже опытный кодер.

image
Total votes 10: ↑7 and ↓3+4
Comments1

Пишем CSS лучше и красивее

Reading time9 min
Views24K


Скажем честно: писать хороший CSS-код бывает сложно.
Многие разработчики не любят писать CSS. Все что угодно, но только не это! Только не CSS.

Когда при разработке приложений приходилось браться за CSS, это была не самая радостная часть работы. Но ее ведь не избежать, верно? Сегодня порадовать пользователя дизайном приложения настолько важно, что без CSS — никак.

Когда проект только начинается, все идет хорошо. У вас всего пару селекторов: .title, input, #app — проще простого.

Но постепенно приложение разрастается, и заглядывать в CSS становится страшновато: во всех этих селекторах разобраться уже не так просто. Вы начинаете писать что-то вроде div#app .list li.item a, какие-то куски кода повторяются снова и снова, а всю свою писанину сваливаете в конец файла: вам уже плевать, потому что CSS — отстой. Итог — 500 строк CSS-кода, поддерживать который невозможно.


Это я, когда сражаюсь с CSS

Переведено в Alconost
Читать дальше →
Total votes 18: ↑12 and ↓6+6
Comments30

25 ошибок начинающего программиста

Reading time19 min
Views128K

Научитесь выявлять их. Выработайте привычки избегать их.


Цель этой статьи не загнобить новичков за типичные ошибки, а научить выявлять их и избегать. Порядок перечисления – случайный.

От переводчика


Иногда бывает трудно объяснить простыми словами казалось бы банальные вещи: зачем использовать гит, в чем фишка инкапсуляции, зачем писать тесты, как планировать свой код, рефакторить чужой и т.д. Мне показалось, что в этой статье компактно собраны важные «гуманитарные» аспекты программирования. Что-то вроде морального кодекса, ориентира и мотиватора в принятии решений, связанных с написанием кода.

Как бы это смешно не звучало, я работал над этим текстом с середины марта, стараясь подобрать подходящие формулировки и упростить для восприятия. Ещё пару дней воевал с хабра-редактором. Поэтому, если вы найдёте недочёты, прошу не винить меня в нерадении, а оповестить, я их сразу же исправлю. Я думал украсить статью картинками, но решил, что это только раздует её до совсем неприличных размеров. Приятного чтения.
Читать дальше →
Total votes 78: ↑69 and ↓9+60
Comments231

Асинхронное параллельное исполнение в PHP

Reading time14 min
Views62K
Много пик сломано в мире на тему того, можно ли и как создавать многопоточность в PHP. Чаще всего все сводится к тому, что так делать нельзя или дискуссия материализуется в какие-то ужасные костыли (ох, сколько я их уже повидал). Я хочу изложить свою точку зрения на этот вопрос. Легко догадаться, что если бы моя позиция была “так нельзя” или “это зло”, то я бы не писал эту статью. Вот только погодите, не спешите доставать тухлые яйца и вооружаться мелкими бытовыми предметами для рукопашной схватки. Я постараюсь дипломатично изложить тему и максимально объективно раскрыть ситуацию. Так что самые смелые из моих читателей могут прочитать молитву от ереси и открыть статью.


Читать дальше →
Total votes 25: ↑13 and ↓12+1
Comments23

Учимся использовать Glade

Reading time3 min
Views43K
В прошлый раз я обещал, что напишу про программу Glade.

Glade — это приложение для визуального создания графических интерфейсов на GTK+. Оно имеет открытый исходный код и распространяется совершенно бесплатно.

Помните, как мы пытались нарисовать окошко через код? Прочитав этот топик вы сможете создавать хоть тысячи таких окошек просто перемещая виджеты из палитры.


Читать дальше →
Total votes 39: ↑29 and ↓10+19
Comments5

Создание приложений на GTK+ с использованием среды Glade

Reading time10 min
Views46K
Данный пост посвящен созданию приложений с использованием кроссплатформенной библиотеки GTK+. Ориентирован он в основном на новичков? поэтому какие-то вещи возможно для многих покажутся очень простыми и банальными, но я постарался максимально подробнее всё описать, чтобы было понятно для всех.

Немалым достоинством этой библиотеки является то, что она бесплатна для коммерческого использования. В интернете не так много документации и действительно качественных статей по работе с GTK+. В очень многих примерах интерфейс программы пишется «ручками», что порой очень неудобно. Я сам с этим столкнулся и довольно часто больше времени тратил на то, чтобы правильно расположить виджеты (объекты) на форме, в контейнеры, а не сосредоточиться на решении поставленной задачи.

Я продемонстрирую как можно очень быстро создать интерфейс для GTK+ с помощью приложения для визуального создания графических интерфейсов Glade и интегрировать его в вашу программу. Glade не является ни компилятором, ни отладчиком. Он позволяет лишь описать интерфейс и представить его в файлах XML-формата GladeXML.

Базовым интерфейсом для библиотеки GTK+ является язык C. Но я в данном примере буду ипользовать C++. Соответственно появятся небольшие особенности, о которых я обязательно расскажу. Дистрибутив Linux я использую Ubuntu 10.04.

Задача будет такая: написать небольшое приложение состоящее из холста, бокового меню (выбора того, что нарисовать на холсте), главного меню и строки состояния. При этом боковое меню и холст при изменении размера всего окна приложения должны оставаться постоянного размера. Но тот контейнер, в котором находится холст может изменять свой размер в зависмости от увеличения/уменьшения размеров главного окна. И при необходимости должны появляться полосы прокрутки.
Читать дальше →
Total votes 52: ↑51 and ↓1+50
Comments34

Указатели, ссылки и массивы в C и C++: точки над i

Reading time10 min
Views619K
В этом посте я постараюсь окончательно разобрать такие тонкие понятия в C и C++, как указатели, ссылки и массивы. В частности, я отвечу на вопрос, так являются массивы C указателями или нет.

Обозначения и предположения


  • Я буду предполагать, что читатель понимает, что, например, в C++ есть ссылки, а в C — нет, поэтому я не буду постоянно напоминать, о каком именно языке (C/C++ или именно C++) я сейчас говорю, читатель поймёт это из контекста;
  • Также, я предполагаю, что читатель уже знает C и C++ на базовом уровне и знает, к примеру, синтаксис объявления ссылки. В этом посте я буду заниматься именно дотошным разбором мелочей;
  • Буду обозначать типы так, как выглядело бы объявление переменной TYPE соответствующего типа. Например, тип «массив длины 2 int'ов» я буду обозначать как int TYPE[2];
  • Я буду предполагать, что мы в основном имеем дело с обычными типами данных, такими как int TYPE, int *TYPE и т. д., для которых операции =, &, * и другие не переопределены и обозначают обычные вещи;
  • «Объект» всегда будет означать «всё, что не ссылка», а не «экземпляр класса»;
  • Везде, за исключением специально оговоренных случаев, подразумеваются C89 и C++98.


Указатели и ссылки


Указатели. Что такое указатели, я рассказывать не буду. :) Будем считать, что вы это знаете. Напомню лишь следующие вещи (все примеры кода предполагаются находящимися внутри какой-нибудь функции, например, main):

int x;
int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель

Читать дальше →
Total votes 70: ↑48 and ↓22+26
Comments73

Введение в GTK

Reading time4 min
Views135K
На ХабраХабре наконец-то появился новый блог, посвящённый GTK. Присоединяйтесь! :-)

Привет, %username%!

В сети бытуют страшные слухи об этом фреймворке, однако серией статей о нём на ХабраХабре я попытаюсь разрушить сложившиеся стереотипы.

GTK+ — это фреймворк для создания кроссплатформенного графического интерфейса пользователя (GUI). Наряду с Qt он является одной из двух наиболее популярных на сегодняшний день библиотек для X Window System.

Изначально эта библиотека была частью графического редактора GIMP, но позже стала независимой и приобрела популярность. GTK+ — это свободное ПО, распространяемое на условиях GNU LGPL и позволяющее создавать как свободное, так и проприетарное программное обеспечение.


Читать дальше →
Total votes 72: ↑64 and ↓8+56
Comments68

Пишем приложение на GTK+ используя C++ и GTKMM библиотеку

Reading time5 min
Views24K

Эпиграф


Однажды попросила меня жена написать ей простенькую программку, которая сможет вычислять площади фигур, периметры, и другие параметры при наличии достаточных данных. Например, нужна площадь треугольника, указаны его стороны. Вводим стороны нажимаем кнопочку и получаем площадь. Или указана только сторона и два угла. В общем любые данные, достаточные для того чтобы вычислить остальное.
Стоит отметить, что я являюсь последние лет 5 только веб-разработчиком, в основном PHP, хотя конечно иногда что-то нужно сделать и на ruby и на perl. В общем язык для меня особо не проблема, главное понять смысл процессов в компьютере, а дальше хоть Assembler (когда-то даже занимался дизасемблированием и небольшим патчингом приложений под Windows). Но все-таки когда писал десктопные приложения уже и не помню. Но тут решил написать именно десктопное, чтобы жене было удобно им пользоваться при отсутствии интернета и не нужно было на ее ноутбук ставить вебсервер с PHP. Кроме того уже давно хотел попробовать себя в использовании языка C++. Ну что ж. У жены стоит на ноутбуке Linux Ubuntu. Графическая система — Unity, основанная на Gnome3. А там где Gnome, там GTK+.
Вот так и было решено написать десктопное приложение под Linux используя Gtk+. Интересно? Добро пожаловать под кат!
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments20

Удивительно полезный инструмент: lsof

Reading time9 min
Views135K
Я привык искать проблемы в коде или в системе, пользуясь логами или показателями мониторинга, которые выводятся на симпатичных панелях управления с простым и понятным интерфейсом. Однако, если по какой-то причине данные на панель управления не поступают, или логи какой-нибудь службы недоступны, отладка усложняется. Теперь подобных проблем немного, встречаются они редко, но они, всё же, случаются. Поэтому и в наше время весьма ценно знание инструментов, которые помогают понять, что не так с неким процессом на каком-нибудь компьютере.

image
Читать дальше →
Total votes 73: ↑69 and ↓4+65
Comments30

7 выводов программиста самоучки за 1 год

Reading time3 min
Views96K
Я тут когда-то обещал, что буду делиться своими профессиональными достижениями. Что ж. Через неделю будет ровно год как я работаю web software разработчиком в своей второй компании, и я хотел бы поделиться своими наблюдениями — возможно кому-то они покажутся забавными и надеюсь даже познавательными. Сразу скажу, что тезисы будут общими и не относятся к какому-то конкретному месту или ситуации. Итак.
Читать дальше →
Total votes 66: ↑43 and ↓23+20
Comments229

Linux для начинающего разработчика или как навсегда забыть о Windows

Reading time7 min
Views102K

Дисклеймер


Внимание, очень много букв! Предлагаю запастись попкорном и выделить время для данного мероприятия.

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

В статье рассматривается установка Ubuntu 16.04 и настройка оной исключительно для работы.
Читать дальше →
Total votes 71: ↑18 and ↓53-35
Comments135

Настройка WMS на складе с узкопроходной технологией

Reading time10 min
Views17K

О статье


Внедрение системы управления складом — задача сложная, но интересная. Наиболее распространенная ошибка конечного пользователя обычно заключается в том, что он уверен во всесильности программного продукта, а начинающего внедренца — в его уверенности в «лучших практиках» и «отраслевых решениях». Склады больше похожи не с точки зрения отраслевой направленности, а с точки зрения технологии хранения и переработки грузов, а «лучшие практики» требуют дополнения реальным опытом. В этой статье я постараюсь охватить основные различия между двумя наиболее часто используемыми технологиями хранения, а также нюансы, которые необходимо учесть для проведения действительно качественного внедрения. Куда уж лучше знать это заранее, чем столкнуться во время go-live, когда каждая минута простоя будет стоить невероятно дорого.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments8

Что такое WMS?

Reading time12 min
Views76K
WMS – аббревиатура от английского «Warehouse Management System», или «система управления складом». Часто можно встретить русскоязычную аббревиатуру СУС, а некоторые производители относят свои системы даже не к WMS, а к IMS (inventory management system), WCMS (warehouse complex management system), и так далее. Те, кто чуть больше остальных погружен в складскую тематику, при упоминании об управлении складом сразу вспоминают радиотерминалы, этикетки, штрихкоды и прочие обязательные атрибуты внедрения. Те, кто погружен меньше, ассоциирует выражение «управление складом» со «складским учетом», что порой приводит к некоторым терминологическим разногласиям: если штрихкоды — это отсылка на технологии автоматической идентификации, то «складской учет» чаще ассоциируется с оформлением товаросопроводительной документации и ведением информации о складских остатках.

Перед тем, как мы перейдем к первому разделу, хотелось бы сказать, что статья не ставит перед собой цель рассмотреть весь возможный функционал. Она является, скорее, ознакомительной – как раз для тех, кто слышал или знает общие слова о WMS, но хочет узнать больше.
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments0

Покорим Ruby вместе! Капля восьмая

Reading time3 min
Views28K
Давайте прямо сейчас перечитаем четвертую каплю, чтобы вспомнить о реализации ООП в Руби. Повторили? Идем дальше. В этой капле мы подрежем все образовавшиеся хвосты, связанные с объектно-ориентированным программированием на Руби.

Читать дальше →
Total votes 45: ↑34 and ↓11+23
Comments33

Автоматизация CI/CD для Java приложений с помощью Microsoft Visual Studio Team Services

Reading time11 min
Views8.2K
Привет, Хабр! На первый взгляд название этой статьи может показаться вам странным: Java и Visual Studio – что между ними общего? Зачем вообще Visual Studio, когда есть множество других классных инструментов для разработки на Java: Eclipse, NetBeans, IntelliJ IDEA и прочих (холивар устраивать не будем). На самом деле, Visual Studio сейчас – это не просто среда для разработки, а целое семейство продуктов, где IDE Visual Studio лишь один из инструментов. Под катом мы поговорим о Microsoft Visual Studio Team Services (VSTS).


Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments2

Что меня раздражает в MacBook

Reading time8 min
Views111K
Я пользуюсь макбуком уже примерно 1 год, я использую его ежедневно и очень много. До этого я сидел на Ubuntu и Windows. И когда я покупал MacBook то я ожидал, что продуманность ОС и удобство пользования будут выше всяких похвал. Как никак это ведь Apple, да и завышенная цена формирует у меня завышенные ожидания по поводу качества. Но увы на практике все оказалось не настолько идеальным как я считал. Многие недочеты происходят из фундаментального подхода Apple, в котором они дизайн ставят выше удобства и очень часто получается так, что то, что они делают красивым с эстетической точки зрения не удобно использовать на практике. Вообще я сторонник того, что бы красивый дизайн не портил функциональность. Есть еще и другой класс недостатков, которые просто есть и не понятно по каким причинам Apple решила реализовать этот функционал именно так, а не иначе. Но обо все по порядку.



Читать дальше →
Total votes 231: ↑117 and ↓114+3
Comments591

Консоль для маководов: Beyond the GUI

Reading time6 min
Views220K
Доброго дня, уважаемые хабравчане-маководы!

Сегодня я расскажу как увеличить эффективность работы в Mac OS X за счёт использования консоли.

Лирическое отступление


Думаю, ни для кого не секрет, что Mac OS является Unix-based системой, но переработанной почти до неузнаваемости. Даже консоль засунули куда подальше — не сразу и найдёшь. И вся система нацелена на использование GUI, при дефолтных настройках даже переключение между кнопками по Tab не работает — без мыши никуда. И тем не менее, Мак — это не только окошки, не только док и лаунчер. Мак это ещё и вся мощь shell скриптов и консоли!

Если Вы пришли из мира M$, то для начала неплохо бы поучить общие команды shell'а, например, по вот этому учебному пособию. Как минимум, нужно усвоить команды перехода по каталогам и способы запуска программ и скриптов.

Если Вы пришли в мир Mac OS из мира Linux'а и FreeBSD, то, скорее всего, знаете как минимум основы shell-скриптинга. Но и для вас в статье может оказаться кое-что интересное, ведь в маке есть уникальные консольные команды, которые так же полезно знать.

Вот о некоторых особенностях маковской консоли далее и пойдёт речь.
Поехали!
Total votes 104: ↑91 and ↓13+78
Comments126

Information

Rating
Does not participate
Location
Хабаровск, Хабаровский край, Россия
Date of birth
Registered
Activity