Pull to refresh

Spotify представила XCRemoteCache — инструмент удаленного кеширования для iOS, сокращающий время чистой сборки на 70%

Development for iOS *Swift *Development for MacOS *Build automation *Software

Разработчики Spotify открыли исходный код библиотеки XCRemoteCache, которая помогает ускорить время сборки iOS-проектов. Инженеры компании заявляют, что использование инструмента внутри команды позволило сократить время чистой сборки на 70%. Библиотека построена на принципе использования удаленного кэширования с целью повторного использования целевых артефактов в Xcode. Инструмент совместим кодом, написанным на Swift, Objective-C и на связке двух языков сразу.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Views 2.3K
Comments 0

Кембридж: особенность компиляторов позволяет добавлять в исходный код вредоносы и обходить ручной аудит

Information Security *Compilers *Research and forecasts in IT *

Исследователи Кембриджского университета описали способ вставки в исходный код программ уязвимости или вредоносного кода, который позволяет успешно проходить ручной аудит. Фактически, они рассказали о методе атак, который использует особенность компиляторов.

Читать далее
Total votes 12: ↑11 and ↓1 +10
Views 1.9K
Comments 2

Компиляция QT-программы под Windows — зависимости

Qt *
Ради интереса решил пощупать Qt.

Соответственно, скачал Qt Creator, создал проектик, поигрался с экшнами и прочим. И захотелось проектик этот собрать в .exe-файл.

Дебаг в рамках Creator выполнялся идеально, а вот после Build — .exe выдал мне требование зависимости mingwm10.dll.

Полез в Google, и после некоторого времени поиска сообразил скопировать

C:\QT\QTCreator\bin\mingwm10.dll, а так же
C:\QT\QTCreator\qt\bin\QtCore4.dll
C:\QT\QTCreator\qt\bin\QtGui4.dll

в папку с билдом. Только после этого и заработало.

Но остаётся проблема последующего распространения программы. Неужели для того, чтобы передать другому человеку своё творение размером в 100 килобайт, надо делать инсталлер, чтобы закидывать вышеуказанные файлы в System32?

Уважаемые знатоки, просвятите меня — разве никак нельзя собрать проект вместе с зависимостями?
Может, как-то можно уменьшить объём 13-ти мегабайт библиотек для работы 100 килобайтной программы?

UPD: Знатоки пишут, что библиотеки обязательны.

Выбор невелик тогда — или паковать NSISом (получилось 4.5 мегабайта на пустой проект), или же делать сетевой инсталлер с вспомогательной программкой, которая будет тянуть зависимости, или же делать solid — как есть.

Даже если собирать библиотеки static — то получится просто раздутый .exe-файл
Total votes 13: ↑10 and ↓3 +7
Views 27K
Comments 33

Компиляция страниц ASP.NET: генерация кода

.NET *
Сейчас пришла пора разобраться с тем, что происходит с кодом от момента написания ASPX/ASCX- разметки и CS-кода до момента их физического выполнения в виде некоторого скомпилированного кода на сервере.
Читать дальше →
Total votes 16: ↑10 and ↓6 +4
Views 6.8K
Comments 4

Linux DC++ и многопоточность

Configuring Linux *
Всем доброго времени суток. В данном хабра топике хочу рассказать о работе в сетях DC под ос Linux. Сам я пишу из под Linux Mint 7, но на Ubuntu 9.04 всё идентично!
Итак, я обладатель доволь но медленного канала в Интернет. Всего, как заявлено в тарифе, 250 кбит(31.25кбайт). На деле обычно 26-28. И если мне что-то требуется то, ищу это сначала в сети DC. Благо у меня есть пиринг по городу Красноярску, так что проблем с поиском не бывает.
Читать дальше...
Total votes 41: ↑26 and ↓15 +11
Views 7.5K
Comments 40

Особенности компиляции в MacRuby

Ruby *

Предисловие


Давеча слушал я Ruby NoName Podcast (кстати, весьма всем рекомендую), в котором услышал новость, что MacRuby 0.5 вышел из стадии бета-версии. Также господа ведущие сообщили, что в состав пакета MacRuby входит великолепный компилятор Ruby — MacRubyC, который теперь умеет компилировать в динамические библиотеки. Я, естественно, заинтересовался и решил поэкспериментировать.

Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 1.1K
Comments 11

Компиляция. 1: лексер

Programming *
Меня всегда завораживало таинство рождения программой программы. К сожалению, российские вузы уделяют мало внимания сей интереснейшей теме. Рассчитываю написать серию постов, в которых поэтапно создадим маленький работоспособный компилятор.

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

Далее в посте:

  1. С какой стати писать компиляторы?
  2. Общий план
  3. Анализ текста
  4. Практический пример
  5. Как это работает?
Читать дальше →
Total votes 93: ↑89 and ↓4 +85
Views 84K
Comments 42

Компиляция. 2: грамматики

Programming *
В предыдущем посте было много кода и, по некоторым мнениям, недостаточно объяснений. Будем чередовать: в этот раз будет много теории, а до практики почти не дойдёт.

Далее в посте:

  1. Магазинный автомат
  2. Формальные грамматики
  3. LR-парсинг
Читать дальше →
Total votes 56: ↑51 and ↓5 +46
Views 36K
Comments 21

Компиляция. 3: бизон

Programming *
Это единственный пост в серии, в центре внимания которого — старообрядный сишный бизон, так надоевший некоторым. Тем, кто пишет не на Си, пост всё равно должен быть интересен, потому что похожие по принципу работы генераторы LR-парсеров существуют для очень многих языков. Тех же, кто идеологически не приемлет LR-парсеры, мне сегодня привлечь нечем.

Далее в посте:

  1. Компиляция грамматики
  2. Двухступенчатый парсер
  3. Что у него внутри?
  4. Конфликты в грамматике
  5. Как это работает?
Читать дальше →
Total votes 73: ↑71 and ↓2 +69
Views 40K
Comments 14

Компиляция. 4: игрушечный ЯП

Programming *
С грамматиками калькуляторов поиграли достаточно, переходим к языкам программирования. Бета-тестеры статьи подали идею писать JavaScript-подобный язык: начнём с простейшего скобчатого скелета, и будем его постепенно обращивать наворотами — синтаксическим сахаром, типами данных, поддержкой функций, и т.д.

Чтобы неполноценность нашего языка была понятна уже из названия, назовём его JSkrip.

Далее в посте


  1. Синтаксис
  2. Грамматика
  3. Парсер
  4. Синтаксическое дерево
  5. Pretty-printing

Читать дальше →
Total votes 37: ↑32 and ↓5 +27
Views 17K
Comments 13

Компиляция. 5: нисходящий разбор

Programming *
До сих пор занимались восходящим синтаксическим разбором. Какие ещё есть варианты?
Отложим бизона в сторону, и вернёмся к теории.

Далее в посте:

  1. Идея
  2. Воплощение
  3. Холивар
  4. Бэктрекинг
Читать дальше →
Total votes 33: ↑28 and ↓5 +23
Views 23K
Comments 26

Компиляция. 6: промежуточный код

Programming *
Первый этап — разбор синтаксиса нашего джей-скрипа — пройден; подбираемся к генерации кода.

Начнём с генерации п-кода (промежуточного переносимого псевдокода) — нечто вроде «абстрактного машинного языка». Его выбирают так, чтобы
  • его было легко генерировать;
  • его было легко обрабатывать.
Обработка п-кода — это, как правило, его переработка в исполнимый машинно-зависимый код. Тем не менее, можно ограничиться лишь генерацией п-кода, и объявить его готовой скомпилированной программой. Запуск такой программы будет, по сути, интерпретацией п-кода. У этого подхода всё больше и больше сторонников; так что и мы для начала ограничимся компиляцией в п-код.

Далее в посте:

  1. Выбор кода
  2. Компиляция
  3. Выполнение
  4. Backpatching
Читать дальше →
Total votes 53: ↑51 and ↓2 +49
Views 9.3K
Comments 14

Компиляция. 7: назначение регистров

Programming *
File names are infinite in length, where infinity is set to 255 characters.
--Peter Collinson: The Unix File System

Итак, у нас есть программа на п-коде, и в её распоряжении неограниченное количество регистров (т.е. 255). Число регистров у реального процессора куда меньше (предположим, четыре). Что будем делать?

Далее в посте:

  1. Разбор п-кода
  2. Время жизни
  3. Реализация
  4. Простые оптимизации
  5. Расщепление версий
  6. Работа с памятью
  7. Что получилось?
Читать дальше →
Total votes 62: ↑60 and ↓2 +58
Views 4.6K
Comments 11

Компиляция. 8: оптимизация

Programming *
После приятного отдыха продолжаем писать компилятор для нашего джей-скрипа.
В предыдущем посте реализовали взятую с потолка эвристику для назначения регистров, и заодно начали оптимизировать код. А ещё перед этим читатели обнаружили баг в реализации присваивания.

Далее в посте:

  1. Починка бага
  2. Чистка копирований
  3. Что получилось?
  4. Сворачивание констант
  5. Реализация
Читать дальше →
Total votes 43: ↑41 and ↓2 +39
Views 2.9K
Comments 6

Компиляция. 5 и 1/2: llvm как back-end

Programming *
В серии статей от tyomitch «Компиляция» (тут, тут, тут, тут, тут и здесь) было рассмотрено построение транслятора игрушечного языка jsk, описанного в 4 части.
В качестве back-end для этого транслятора tyomitch предложил реализацию байт-кода и интерпретатор этого байт-кода.

На мой взгляд, более разумным подходом было бы использование существующих решений для backend, например llvm, и следуя принципу «Критика без конкретных предложений — критиканство», я предлагаю вариант реализации этого маленького языка jsk с llvm.

Что это даст для jsk? Настоящую компиляцию, то есть результатом будет исполняемый файл, который не зависит ни от каких runtime, возможность серьезной оптимизации, профилирования кода и автоматически получим документацию по back-end (что облегчит сопровождение).
Читать дальше →
Total votes 38: ↑38 and ↓0 +38
Views 5.6K
Comments 9

Компиляция. 9: исполняемый код

Programming *
Напоминаю, что мы пишем компилятор для игрушечного языка джей-скрип. Начали с компиляции в п-код, потратили немало сил на его оптимизацию, и приготовились к заключительному этапу компиляции — к выводу машинно-зависимого выполнимого кода.
Никаких замысловатых алгоритмов тут уже нет: по большому счёту, только замена одной системы команд на другую.

Далее в посте:

  1. Выбор кода
  2. Загрузчик
  3. Изменения в п-коде
  4. Генерация
  5. Что получилось?
Читать дальше →
Total votes 53: ↑52 and ↓1 +51
Views 5.2K
Comments 10

Компиляция. 10: компиляция в ELF

Programming *
В прошлый раз мы ограничились компиляцией джей-скрипа в файл в нашем собственном формате, которому требовался специальный загрузчик. Кроме того, мы задумали было пару оптимизаций исполнимого кода, требующих анализа соседних команд.

Далее в посте:

  1. Оптимизация «в глазок»
  2. Стандартные функции
  3. Вывод в ELF
  4. Как это работает?
  5. Что получилось?
Читать дальше →
Total votes 57: ↑55 and ↓2 +53
Views 6K
Comments 9

Используем Coffeescript на Windows

JavaScript *CoffeeScript *
CoffeeScript — это новый язык/надстройка/сахарная пудра над обычным JavaScript. Если кто ещё не слышал о нём, то можете прочитать эту отличную вводную статью.

По своей магической природе, сам компилятор для coffee-скриптов написан на coffee-скрипте. Но на наше счастье, пакет исходников CoffeeScript уже содержит готовые к употреблению js-скрипты. И сейчас я расскажу вам как их использовать в windows с помощью Node.js, Cygwin и Nant, ибо дело это не совсем простое, на первый взгляд.

Как жарить кофе?
Total votes 10: ↑8 and ↓2 +6
Views 8.7K
Comments 5

Оптимизация компиляции GCC на примере Gentoo

Programming *
Оптимизация сборки — одна из основных прелестей Gentoo, однако все описанное применимо к любому случаю компиляции ПО из исходных кодов. Все параметры сборки в Gentoo задаются в файле make.conf.
По сути нас интересует лишь переменная CFLAGSCXXFLAGS должна быть равна CXXFLAGS="${CFLAGS}", а в MAKEOPTS лишь указывается число параллельно запускаемых процессов компиляции (обычно задают общее число ядер процессоров + 1).
Читать дальше →
Total votes 50: ↑39 and ↓11 +28
Views 18K
Comments 28

Mono.Cecil: делаем свой «компилятор»

.NET *
Одной из самых роскошных тем для программистов, балующихся изобретением велосипедов, является написание собственных языков, интерпретаторов и компиляторов. Действительно, программа, способная создавать или исполнять другие программы, инстинктивно вселяет благоговейный трепет в сердца кодеров — потому что сложно, объемно, но безумно увлекательно.

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

Отличным решением данной проблемы является выбор .NET в качестве целевой платформы. Оставим лексический разбор на следующий раз, а сегодня давайте попробуем сделать простейшую программу, которая создает работающий исполняемый экзешник:



Читать дальше →
Total votes 48: ↑36 and ↓12 +24
Views 12K
Comments 19