Иногда при компиляции программы из исходников и применение команды make
или make install
появляются сообщение типа: ''Нет правила для сборки цели `install'. Останов.''
Предлагаю изящное решение не раз помогавшее мне.
Читать полностью »
Рубрика «Компиляторы» - 57
Компиляция пакетов
2012-08-25 в 13:11, admin, рубрики: linux, Компиляторы, компиляция, Убунтариум, установка, метки: linux, компиляция, установкаЗапускаем Java-программы на GPU
2012-08-14 в 11:17, admin, рубрики: CUDA, gpgpu, gpu, java, Компиляторы, Параллелизм, метки: CUDA, gpu, java, ПараллелизмНа Github выложен исходный код компилятора Rootbeer, с помощью которого можно почти любой Java-код запустить на графическом процессоре, а также легко разделить Java-программу на фрагменты для CPU/GPU.
Компилятор опубликован под свободной лицензией GNU GPLv3, он прошёл тщательное тестирование и вполне пригоден для использования. По словам автора, это самый продвинутый транслятор байткода Java на платформу CUDA. Судя по всему, OpenCL тоже поддерживается.
Автор программы — преподаватель Сиракузского университета Фил Пратт-Желига (Phil Pratt-Szeliga).
Читать полностью »
Компиляция программного проекта на Fortran
2012-08-01 в 19:31, admin, рубрики: fortran, vbscript, Visual Studio, Компиляторы, Песочница, разработка, метки: fortran, vbscript, Visual Studio, компиляторы, разработка Всем известны плюсы ночной сборки и тестирования: утром мы знаем всю информацию о проекте:
собрался ли проект, сколько тестов прошли, имеем собранный экзешник, который можно предъявить заказчику.
Одной из самых больших проблем наладки процесса автоматической сборки и тестирования проекта на фортране является построение исполнимого файла в неинтерактивном режиме, в первую очередь в режиме командной строки.
Напомним, что файлы в фортрановском проекте зависят друг от друга через модули. Если в одном файле есть module A
, а в другом — use A
, то первый файл должен быть скомпилирован раньше. При этом подобная информация нигде не прописывается и генерируется на лету. Интеграция компилятора Intel Fortran с Visual Studio в большинстве случаев правильно определяет последовательность компиляции, однако и она может ошибиться, что уж говорить о специальных утилитах, нацеленных на создание make-файлов.
Ниже приводится метод определения зависимостей в файлах проекта и описание процесса автоматической сборки проекта без использования специальных программ.
Читать полностью »
Используем быстрое возведение матриц в степень для написания очень быстрого интерпретатора простого языка программирования
2012-08-01 в 16:57, admin, рубрики: Алгоритмы, интерпретаторы, Компиляторы, матрицы, Песочница, метки: Алгоритмы, интерпретаторы, матрицыНедавно на хабре появилась неплохая статья про вычисление N-ного числа фибоначи за O(log N) арифметических операций. Разумный вопрос, всплывший в комментариях, был: «зачем это может пригодиться на практике». Само по себе вычисление N-ого числа фибоначи может и не очень интересно, однако подход с матрицами, использованный в статье, на практике может применяться для гораздо более широкого круга задач.
В ходе этой статьи мы разберем как написать интерпретатор, который может выполнять простые операции (присвоение, сложение, вычитание и урезанное умножение) над ограниченным количеством переменных с вложенными циклами с произвольным количеством итераций за доли секунды (конечно, если промежуточные значения при вычислениях будут оставаться в разумных пределах). Например, вот такой код, поданный на вход интерпретатору:
loop 1000000000
loop 1000000000
loop 1000000000
a += 1
b += a
end
end
end
end
Незамедлительно выведет a = 1000000000000000000000000000, b = 500000000000000000000000000500000000000000000000000000, несмотря на то, что если бы программа выполнялась наивно, интерпретатору необходимо было бы выполнить октиллион операций.
Читать полностью »
Маленькая C-функция из преисподней
2012-07-04 в 12:26, admin, рубрики: gcc, icc, LLVM, Компиляторы, переводы, Программирование, метки: c++, gcc, icc, LLVM, компиляторыНедавно мой студент и я пытались понять одну тонкость в стандарте C. Самый простой способ прояснить подобные вопросы — это узнать, учли ли её разработчики компиляторов, то есть написать код и посмотреть, что с ним будут делать разные компиляторы.
Я написал такую функцию:
int foo (char x) {
char y = x;
return ++x > y;
}
Так как ++x
увеличивает на 1 значение x
, очевидно, что функция должна возвращать "1" для большинства значений x
. Вопрос состоит в том, что она вернет для значения CHAR_MAX?
Быстрое целочисленное деление на константу
2012-07-04 в 8:54, admin, рубрики: Алгоритмы, Компиляторы, оптимизация программ, Песочница, метки: Алгоритмы, компиляторы, оптимизация программНа всех CPU операция деления выполняется сравнительно медленно, с этим ничего поделать нельзя. Но если делитель константа, то деление можно заменить на умножение на какую-то другую константу (обратное число, которое вычисляется во время компиляции). Тогда код будет чуть быстрее работать (и потреблять меньше энергии). Такую оптимизацию делают многие компиляторы (gcc, MSVC), но оказывается, многие разработчики не знают, как вычисляется сомножитель, а это не тривиально.
Дальше будет рассказано, как вычисляется сомножитель.
Язык программирования Gentee
2012-06-18 в 5:00, admin, рубрики: open source, байт-код, компилятор, Компиляторы, Программирование, язык программирования, метки: байт-код, компилятор, язык программирования Уважаемое сообщество, я хочу рассказать вам о языке программирования Gentee. Я уверен, что вы о нем ничего не слышали, но это не новинка. Первая рабочая версия компилятора увидела свет в 2008 году, а в конце 2010 была выпущена последняя на данный момент 3-я версия. Gentee является open source проектом и распространяется под MIT лицензией, то есть без всяких условий и ограничений. Кроме меня над компилятором, библиотеками и всей документацией работал еще один человек. В начале я хочу написать об истории возникновения языка. Начиная с 2000 года я работал над инсталляторами, в которых пользователь мог строить сценарии из определенных команд. То есть, каждая команда из параметров на форме должна была конвертироваться в код на каком-то языке, который можно было бы компилировать в байт-код и создавать исполняемый файл. Начинали с примитивного языка, но в конце концов решили сделать язык широкого применения. Основные требования были следующие: быстрый компилятор, легкая работа с Windows API, маленький размер движка виртуальной машины, лаконичный и понятный синтаксис, возможность использования компилятора и виртуальной машины из любого языка программирования. На языке C был написан компилятор в байт-код и виртуальная машина. Gentee.dll (компилятор и ВМ) занимает всего 112 КБ и может быть включена в любой проект, которому требуется встроенный язык программирования. Программа на Gentee может быть выполнена сразу после компиляции или можно создать исполняемый файл с байт-кодом и вшитой виртуальной машиной.
Читать полностью »
Состоялся релиз LLVM 3.1
2012-05-23 в 15:27, admin, рубрики: AddressSanitizer, clang, LLVM, компилятор, Компиляторы, метки: AddressSanitizer, clang, LLVM, компилятор22 мая состоялся релиз LLVM 3.1, семейства компиляторных инструментов, построенных на модульной основе. Проект активно развивается как альтернатива GCC такими компаниями, как Apple и Google.
Наиболее заметные изменения включают в себя улучшенную поддержку нового стандарта C++'11 Clang'ом (включая лямбды, списки инициализации, константные выражения, пользовательские литералы и атомики); появление AddressSanitizer — инструмента для динамического отлова ошибок работы с памятью; серьёзные улучшения времени компиляции и появление новых фич для ARM архитектуры; заметно улучшенная поддержка архитектуры MIPS (включая MIPS64).
Для тех, кому интересны подробности — добро пожаловать под кат.Читать полностью »
Не зная брода, не лезь в воду. Часть третья
2012-04-11 в 11:34, admin, рубрики: c plus plus, c++, c++11, pvs-studio, битовые операции, Компиляторы, метки: c plus plus, c++, c++11, pvs-studio, битовые операции
Продолжу рассказы о том, как программисты ходят по краю, даже не подозревая об этом. Поговорим об операциях сдвига <<, >>. Принципы работы операторов сдвига очевидны и многие программисты даже не знают, что их использование согласно стандарту Си/Си++ может приводить к неопределенному или к неуточненному поведению (undefined behaviour/unspecified behavior).
Читать полностью »
Создание конечного автомата для разбора HTTP запроса
2012-04-09 в 12:49, admin, рубрики: .net, DFA, http, parser, ДКА, Компиляторы, метки: DFA, http, parser, ДКАДетерминированный конечный автомат можно использовать для реализации очень быстрого способа разбора входной последовательности. Требуется всего один проход по входной последовательности, и минимальные действия на каждом шаге. К сожалению эта модель имеет ограничения — не всегда возможно построить ДКА, для имеющегося Недетерминированного конечного автомата (регулярного выражения, грамматики). Или даже если возможно построить, автомат может иметь слишком большое число состояний.
Тем не менее я решил попробовать создать парсер для HTTP запроса на основе ДКА. Основная задача не просто проверить корректность HTTP запроса, а именно выделить во входной строке элементы соответствующие определенным значениям полей HTTP запроса. Автомат должен генерироваться из BNF правил (разбросанных по) RFC2616. Реализовано все на C#, автомат на выходе тоже на C#. Хотя понятно что когда автомат готов, сгенерировать его на любом языке, в любом виде не проблема.
Читать полностью »