Pull to refresh

Добавляем в Flex-компилятор MXML параметры конструктора

Reading time 6 min
Views 3.1K
Adobe Flash
Sandbox
26 Апреля 2007 года. Adobe делает заявление, что Flex Framework переводят на open source. Данная новость вызвала бурю оваций среди флешеров всего мира, что появятся принципиально новые фреймворки на его основе, но дальше пары-тройки проектов это не пошло.

В то время я делал проекты с использованием Flex-а, и чем больше проекты становились, тем сильнее мне не нравилось некоторые нюансы его внутреннего устройства.
Думаю, каждому, кто работал с Flex-ом, известны его проблемы, а так же низкое качество кода как уже написанного, так и генерируемого из MXML, поэтому я решил вмешаться в этот процесс с целью навести порядок и разобраться в устройстве Flex компилятора, и начал с добавления «сахара» в MXML, стараясь сделать это как можно сильнее в духе остальных фич детища Adobe-а. Спустя два года, я принял решение поделиться своими знаниями с Вами.
Читать дальше →
Total votes 36: ↑35 and ↓1 +34
Comments 8

MXML компилятор. Часть 2. Не строковые инициализаторы параметров

Reading time 4 min
Views 1.5K
Adobe Flash
Привет, Хабр!

В предыдущей статье я провёл некий ликбез по внутренностям Flex-компилятора (по части MXML) и рассказывал, как избавить себя от проблем работы с классами в MXML, требующими параметры конструктора. Сейчас мы разберём другую сторону вопроса — установка параметров в custom-значения (к примеру, константы) без использования механизма Binding (хотя, очень похоже на него).

Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 5

Для чего нужны оптимизирующие компиляторы?

Reading time 4 min
Views 13K
Intel corporate blog
image


Сегодня практически все компиляторы, которые можно найти на рынке, являются оптимизирующими. Т.е. они не просто переводят написанный программистом код на машинный язык, но также могут улучшать его с точки зрения производительности или объема.

Но что конкретно может сделать компилятор для улучшения кода?

Прежде всего, следующие три вещи:
  1. компилятор может эффективно реализовать средства языка программирования
  2. может по максимуму задействовать возможности аппаратуры, на которой будет исполняться программа
  3. а также устранить некоторые недостатки реализованного программистом алгоритма.
Читать дальше →
Total votes 44: ↑34 and ↓10 +24
Comments 38

Saltarelle: open source C# — JavaScript компилятор

Reading time 2 min
Views 7.9K
Website development *Open source *JavaScript *
Sandbox
Добрый день. Наша команда (без ссылок, это не важно) решила попробовать новый инструмент-компилятор Saltarelle в разработке своего проекта и, так как Хабр часто нам помогал полезной информацией, решили внести и свой скромный вклад в его копилку знаний и перевести запись в блоге разработчика.
Читать дальше →
Total votes 29: ↑25 and ↓4 +21
Comments 61

MXML компилятор. Часть 3. Разбираемся в работе Flex-компилятора

Reading time 5 min
Views 6K
Adobe Flash Compilers *
Translation

Привет, %habra_user%!

Решил в продолжение цикла статей о Flex-компиляторе перевести хорошую статью автора сего творения о том, какие же процессы происходят внутри компилятора при сборке приложения. Датируется она 2008м годом, но при этом в русскоязычном сообществе (да и в других особо тоже) замечена не была. А так как ближайшее время именно этот компилятор остаётся актуальным для сборки подавляющего большинства Flash-проектов, то я решил продолжить цикл статей о его расширении.

Как обычно всех, кто не устал дочитав до этой строчки — прошу под кат!
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Comments 7

Assembler для Brainfuck

Reading time 3 min
Views 22K
Abnormal programming *Brainfuck *
Sandbox
Одним холодным майским днем от скуки решил я таки приступить к изучению этого удивительного языка — Brainfuck'a.
Его интерпретаторы публиковали на Хабре уже очень много раз.
Но мне хотолось изучить поглубже сам язык и алгоритмы на нем, а не писать очередной интерпретатор. Поэтому было решено сделать из мухи слона компилятор какого-нибудь высокоуровневого языка в brainfuck.
Однако очень быстро начался реальный brainfuck: отсутствие оператора if, отсутствие произвольного доступа к ячейкам и куча других проблем сразу свалилась на меня. Пришлось повременить с высокоуровневым языком и сделать для начала ассемблер, в который и будет компилироваться высокоуровневый язык.
О реализации ассемблера под катом.
Читать дальше →
Total votes 44: ↑42 and ↓2 +40
Comments 12

Sweet.js: Синтаксические расширения для JavaScript

Reading time 5 min
Views 12K
JavaScript *Programming *Compilers *
Tutorial
Давайте попробуем посмотреть на Sweet.js, компилятор, который реализует гигиенические макросы для JavaScript.

Работает он довольно просто — вы определяете набор шаблонов, по которым выполняется поиск по синтаксическому дереву. При совпадении макрос получает кусок дерева, который ему нужен и тело макроса определяет как этот кусок дерева должен трансформироваться. Далее результат встраивается обратно в дерево и процедура продолжается с того самого места.

Sweet.js оперирует своим собственным форматом синтаксического дерева, почти на уровне токенов, с минимальной структурой. С одной стороны это делает возможным определять довольно экзотические синтаксисы для своих макросов, с другой — делает написание макросов несколько сложнее, как если бы они были определены над стандартным AST JavaScript.

Читать дальше →
Total votes 32: ↑27 and ↓5 +22
Comments 27

Создание и использование плагина для Clang в Xcode

Reading time 9 min
Views 6.1K
C++ *Compilers *Xcode *
Tutorial
Translation

Данный туториал описывает создание плагина для Clang и покрывает следующие шаги:


  • настройка окружения
  • создание базового плагина
  • создание Xcode-проекта для разработки плагина
  • генерирование предупреждений
  • генерирование ошибок
  • интеграция плагина в Xcode
  • интерактивные подсказки по устранению предупреждений и ошибок


TL;DR

Готовый плагин можно найти здесь
Читать дальше →
Total votes 23: ↑22 and ↓1 +21
Comments 0

Демо: Инкрементальный парсер для Web IDE

Reading time 3 min
Views 14K
Programming *Scala *Compilers *


Уважаемые коллеги,

я сделал Демонстрационное веб-приложение, наглядно иллюстрирующее, что такое инкрементальный парсер, и как он работает. Посмотрите его, пожалуйста. Буду рад услышать ваши отзывы и критику.

А под катом я расскажу, о том, как работают современные IDE. И как проект, над которым я сейчас работаю, может помочь вывести индустрию разработки веб-редакторов на новый уровень.
Как сделать настоящую IDE для Java, работающую полностью в вебе
Total votes 57: ↑55 and ↓2 +53
Comments 19

Наследование грамматик в Sprache (или еще один настраиваемый калькулятор выражений для .NET)

Reading time 13 min
Views 12K
.NET *Compilers *C# *
Tutorial
Статья демонстрирует технику создания парсеров с использованием наследования грамматик. Наследование позволяет описывать новые грамматики на основе уже существующих путем добавления новых правил или переопределения унаследованных, что существенно упрощает реализацию новых парсеров. Изменения в базовой грамматике автоматически становятся доступными во всех порожденных грамматиках. Основная область применения такой техники — поддержка нескольких диалектов или версий языков.
Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Comments 2

Анонс новых возможностей Typescript 1.4

Reading time 3 min
Views 13K
Website development *JavaScript *Programming *Visual Studio *TypeScript *
Translation
Выпустив версию Typescript 1.3, мы сфокусировались на усовершенствовании системы типов и добавлении функционала ECMAScript 6 в TypeScript. Давайте рассмотрим некоторые новые возможности, которыми вы сможете пользоваться в новой версии.

Все описанные в статье вещи уже реализованы в мастер-ветке нашего репозитория на Github — вы можете выкачать ее и попробовать их уже сейчас.



Новые возможности позволяют более аккуратно и легко работать с переменными, которые имеют различный тип во время исполнения. Они сокращают количество мест, где нужно явно указывать тип, проверять его или использовать тип any. Авторы типизирующих файлов (.d.ts) могут также использовать эти возможности для описания внешних библиотек. Те, кто следят за развитием компилятора, могли заметить, что мы сами тоже ими пользуемся.
Читать дальше →
Total votes 30: ↑26 and ↓4 +22
Comments 39

Что браузеры делают с вашим JavaScript-кодом: об оптимизациях в JS-движках на примере V8

Reading time 7 min
Views 39K
JUG Ru Group corporate blog Website development *JavaScript *Client optimization *
Оптимизация кода начинается не столько с изучения особенностей языка программирования, сколько с понимания схемы работы всей «технологической цепочки», задействованной при создании приложения — от алгоритма программы до компилятора.

Мы поговорили с Вячеславом Егоровым aka mraleph, инженером из Google, компиляторщиком до мозга костей, который работал над JavaScript движком под названием V8, встроенным в Chromium (и, как следствие в Chrome, Android версию браузера, облачную операционную систему Chrome OS) и в менее известный Maxthone.
JavaScript-программистам Вячеслав, скорее всего, известен как автор постов про внутренности V8 и как докладчик, увлеченно показывающий машинный код на конференциях для Web-разработчиков.

В настоящее время Вячеслав активно работает в Google над Dart VM.
В этом интервью он рассказал о том, что происходит внутри движка, выполняющего динамический JS-код и поделился примерами, как выполняются некоторые оптимизации и почему важно глубоко понимать работу движка, чтобы обеспечить быстрое выполнение кода.

Читать дальше →
Total votes 61: ↑58 and ↓3 +55
Comments 34

Собственная платформа. Часть 0.1 Теория. Немного о процессорах

Reading time 9 min
Views 43K
Compilers *C *FPGA *Programming microcontrollers *

Здравствуй, мир! Сегодня у нас серия статьей для людей со средними знаниями о работе процессора в которой мы будем разбираться с процессорными архитектурами (у меня спелл чекер ругается на слово Архитектурами/Архитектур, надеюсь я пишу слово правильно), создавать собственную архитектуру процессора и многое другое.


4004


Принимаются любые замечания!


Читать дальше →
Total votes 53: ↑43 and ↓10 +33
Comments 58

Архитектура ассемблера Go

Reading time 17 min
Views 26K
Badoo corporate blog Programming *Compilers *C *Go *
Translation
image Привет, Хабр! Меня зовут Марко Кевац, я системный программист Badoo в команде «Платформа», и я очень люблю Go. Если сложить эти две вещи, то вы поймёте, насколько я люблю ассемблер в Go.

Совсем недавно мы рассказывали на Хабре о том, на каких конференциях побывали. Одной из них была GopherCon 2016, где практически всем запомнился доклад Роба «Командира» Пайка про Go-шный ассемблер. Представляю вам перевод его доклада, оформленный в виде статьи. Я постарался дать в тексте как можно больше ссылок на релевантные статьи в «Википедии».
Читать дальше →
Total votes 82: ↑79 and ↓3 +76
Comments 35

[Археология Java] Контекстно-зависимый инлайнинг трейсов в Java

Reading time 48 min
Views 10K
Failover Bar corporate blog Java *
Translation

Коротко о статье


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

Трассирующие JIT-компиляторы собирают не всё подряд, а только часто исполняемые пути, так называемые трейсы. С помощью этого можно получить более быструю компиляцию, уменьшить количество сгенерированного машинного кода, и улучшить его качество. В предыдущих наших работах, мы реализовали инфраструктуру для записи трейсов и трассирующий Java-компилятор, модифицируя код Java HotSpot VM. Основываясь на этой работе, мы посчитали, какой эффект инлайнинг трейсов оказывает на производительность и количество генерируемого кода.
Читать дальше →
Total votes 31: ↑30 and ↓1 +29
Comments 11

Пишем плагин для Babel

Reading time 6 min
Views 7.7K
JavaScript *
Sandbox
Модульность прочно обосновалась в мире javascript. Однако, при всех плюсах, писать в каждом файле одни и те же импорты — утомляет. А что, если убрать подключение часто используемых модулей в сборщик, а в коде использовать их как глобальные переменные? Выглядит, как задача для babel-плагина. Что же, давайте вместе напишем такой плагин, попутно разбираясь, как работает babel.

Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Comments 2

JavaParser. Корёжим код легко и непринуждённо

Reading time 5 min
Views 14K
JUG Ru Group corporate blog Java *Compilers *

В мире существует множество клёвых маленьких библиотек, которые как бы и не знаменитые, но очень полезные. Идея в том, чтобы потихоньку знакомить Хабр с такими вещами. Сегодня расскажу о JavaParser.


JavaParser — это набор инструментов для парсинга, анализа, трансформации и генерации Java-кода. Иначе говоря, если нужно взять кусок джавакода и как-то его покорёжить подручными методами и без необходимости в особых знаниях, эта либа — самое то.


Где-то посреди статьи вы ВНЕЗАПНО можете осознать, какой кошмар и ужас можно сотворить этой либой, и никак не дождётесь дочитать текст и полить меня гневными комментариями. Не сдерживайтесь, не стоит — сразу скрольте до самого низу и изливайте душу :)



Читать дальше →
Total votes 38: ↑35 and ↓3 +32
Comments 28

Компилятор на JavaScript с использованием ANTLR

Reading time 19 min
Views 15K
JavaScript *Compilers *



В начале этого года я присоединилась к команде, работающей над MongoDB Compass — графическим интерфейсом для MongoDB. Пользователи Compass через Intercom запросили инструмент, позволяющий писать запросы к базе данных, используя любой удобный им язык программирования, поддерживаемый драйвером MongoDB. То есть нам нужна была возможность трансформировать (компилировать) язык Mongo Shell в другие языки и обратно.

Данная статья может стать как практическим руководством, помогающим при написании компилятора на JavaScript, так и теоретическим ресурсом, включающим основные понятия и принципы создания компиляторов. В конце приведен не только полный список всех используемых при написании материалов, а также ссылки на дополнительную литературу, направленную на более глубокое изучение вопроса. Информация в статье подается последовательно, начиная с исследования предметной области и далее постепенно усложняя функционал разрабатываемого в качестве примера приложения. Если во время прочтения вам кажется, что вы не улавливаете переход от одного шага к другому, вы можете обратиться к полной версии данной программы и возможно это поможет устранить возникший пробел.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Comments 3

Встреча JUG.ru с Артуром Пилипенко: Falcon — LLVM-based JIT-компилятор в Zing JVM

Reading time 1 min
Views 2.1K
JUG Ru Group corporate blog Java *Compilers *Conferences
Во вторник, 5 июня, в петербургском офисе компании Oracle состоится встреча JUG.ru с Артуром Пилипенко, инженером компиляторной команды компании Azul Systems. Тема встречи — Falcon.

Falcon — JIT-компилятор, построенный на базе инфраструктуры LLVM, уже год как является компилятором по умолчанию в виртуальной машине Zing. Новый компилятор во всю используется в продакшне и показывает существенный прирост производительности по сравнению со старым компилятором C2.

image
Читать дальше →
Total votes 25: ↑21 and ↓4 +17
Comments 0

Каково делать Kotlin: интервью с Андреем Бреславом

Reading time 26 min
Views 12K
JUG Ru Group corporate blog Programming *Java *Compilers *Kotlin *


Дефицита технических материалов о Kotlin нет, узнать о корутинах или nullability можно много где. Но остаётся куда менее освещённой другая сторона: а как вообще выглядит процесс разработки языка? Как принимаются решения? Каковы задачи у «самого главного человека»? Остаётся ли у него в жизни время на что-либо ещё?

И сейчас, когда вот-вот выйдет Kotlin 1.3, мы расспросили «самого главного» Андрея Бреслава не про корутины, а про совсем другое: от того, чем он занимался до Kotlin, до того, чем полезна психотерапия.
Читать дальше →
Total votes 41: ↑37 and ↓4 +33
Comments 13