Как стать автором
Обновить

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

Время на прочтение 3 мин
Количество просмотров 2.5K
Разработка под iOS *Swift *Разработка под MacOS *Системы сборки *Софт

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

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

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

Время на прочтение 2 мин
Количество просмотров 2K
Информационная безопасность *Компиляторы *Исследования и прогнозы в IT *

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

Читать далее
Всего голосов 12: ↑11 и ↓1 +10
Комментарии 2

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

Время на прочтение 1 мин
Количество просмотров 27K
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-файл
Всего голосов 13: ↑10 и ↓3 +7
Комментарии 33

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

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

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

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

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

Время на прочтение 3 мин
Количество просмотров 1.1K
Ruby *

Предисловие


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

Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Далее в посте


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

Читать дальше →
Всего голосов 37: ↑32 и ↓5 +27
Комментарии 13

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

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

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

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

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

Время на прочтение 17 мин
Количество просмотров 9.8K
Программирование *
Первый этап — разбор синтаксиса нашего джей-скрипа — пройден; подбираемся к генерации кода.

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

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

  1. Выбор кода
  2. Компиляция
  3. Выполнение
  4. Backpatching
Читать дальше →
Всего голосов 53: ↑51 и ↓2 +49
Комментарии 14

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

Время на прочтение 18 мин
Количество просмотров 4.9K
Программирование *
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. Что получилось?
Читать дальше →
Всего голосов 62: ↑60 и ↓2 +58
Комментарии 11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как жарить кофе?
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 5

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

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

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

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

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

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



Читать дальше →
Всего голосов 48: ↑36 и ↓12 +24
Комментарии 19