Pull to refresh
10
0
Send message

LLVM: компилятор своими руками. Введение

Reading time14 min
Views57K
Представим себе, что в один прекрасный день вам пришла в голову идея процессора собственной, ни на что не похожей архитектуры, и вам очень захотелось эту идею реализовать «в железе». К счастью, в этом нет ничего невозможного. Немного верилога, и вот ваша идея реализована. Вам уже снятся прекрасные сны про то, как Intel разорилась, Microsoft спешно переписывает Windows под вашу архитектуру, а Linux-сообщество уже написало под ваш микропроцессор свежую версию системы с весьма нескучными обоями.
Однако, для всего этого не хватает одной мелочи: компилятора!
Да, я знаю, что многие не считают наличие компилятора чем-то важным, считая, что все должны программировать строго на ассемблере. Если вы тоже так считаете, я не буду с вами спорить, просто не читайте дальше.
Если вы хотите, чтобы для вашей оригинальной архитектуры был доступен хотя бы язык С, прошу под кат.
В статье будет рассматриваться применение инфраструктуры компиляторов LLVM для построения собственных решений на её основе.
Область применения LLVM не ограничивается разработкой компиляторов для новых процессоров, инфраструктура компиляторов LLVM также может применяться для разработки компиляторов новых языков программирования, новых алгоритмов оптимизации и специфических инструментов статического анализа программного кода (поиск ошибок, сбор статистики и т.п.).
Например, вы можете использовать какой-то стандартный процессор (например, ARM) в сочетании с специализированным сопроцессором (например, матричный FPU), в этом случае вам может понадобиться модифицировать существующий компилятор для ARM так, чтобы он мог генерировать код для вашего FPU.
Также интересным применением LLVM может быть генерация исходных текстов на языке высокого уровня («перевод» с одного языка на другой). Например, можно написать генератор кода на Verilog по исходному коду на С.



КДПВ

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

«Страшные» абстракции Haskell без математики и без кода (почти). Часть I

Reading time31 min
Views47K
— Для чего нужны монады?
— Для того, чтобы отделить чистые вычисления от побочных эффектов.
(из сетевых дискуссий о языке Haskell)

Шерлок Холмс и доктор Ватсон летят на воздушном шаре. Попадают в густой туман и теряют ориентацию. Тут небольшой просвет — и они видят на земле человека.
— Уважаемый, не подскажете ли, где мы находимся?
— В корзине воздушного шара, сэр.
Тут их относит дальше и они опять ничего не видят.
— Это был математик, – говорит Холмс.
— Но почему?
— Его ответ совершенно точен, но при этом абсолютно бесполезен.
(анекдот)

Когда древние египтяне хотели написать, что они насчитали 5 рыб, они рисовали 5 фигурок рыб. Когда они хотели написать, что насчитали 70 людей, они рисовали 70 фигурок людей. Когда они хотели написать, что насчитали в стаде 300 овец, они… — ну, в общем, вы поняли. Так и мучились древние египтяне, пока самый умный и ленивый из них не увидел нечто общее во всех этих записях, и не отделил понятие количества того, что мы подсчитываем, от свойств того, что мы подсчитываем. А потом другой умный ленивый египтянин заменил множество палочек, которыми люди обозначали количество, на значительно меньшее количество знаков, короткой комбинацией которых можно было заменить огромное количество палочек.

То, что сделали эти умные ленивые египтяне, называется абстракцией. Они подметили нечто общее, что свойственно всем записям о количестве чего-либо, и отделили это общее от частных свойств подсчитываемых предметов. Если вы понимаете смысл этой абстракции, которую мы сегодня называем числами, и то, насколько она облегчила жизнь людям, то вам не составит труда понять и абстракции языка Haskell — все эти непонятные, на первый взгляд, функторы, моноиды, аппликативные функторы и монады. Несмотря на их пугающие названия, пришедшие к нам из математической теории категорий, понять их не сложнее, чем абстракцию под названием «числа». Для их понимания совершенно не требуется знать ни теорию категорий, ни даже математику в объёме средней школы (арифметики вполне достаточно). И объяснить их тоже можно, не прибегая к пугающим многих математическим понятиям. А смысл абстракций языка Haskell точно такой же, как и у чисел — они значительно облегчают программистам жизнь (и вы пока даже не представляете, насколько!).
Читать дальше →
Total votes 53: ↑49 and ↓4+45
Comments36

Можно ли совместить юнит тесты и профилирование памяти?

Reading time5 min
Views8K
Профиляторы памяти с трудом можно назвать «утилитами для ежедневного использования». Чаще всего разработчики задумываются о профилировании своего продукта перед самым релизом. Подобный подход вполне может работать, но лишь до тех пор, пока какая-нибудь проблема с памятью, обнаруженная в последний момент (например, утечка памяти или большой трафик памяти) не разрушит все ваши планы. Одним из решений могло бы быть профилирование на регулярной основе, но вряд ли кто-то захочет тратить на это столь драгоценное время. Тем не менее, решение кажется есть.

Если юнит-тестирование — неотъемлемая часть вашего процесса разработки, значит вы регулярно запускаете многочисленные тесты проверяющие функциональность приложения. А теперь представьте, что вы можете написать некие специальные «тесты на использование памяти». Например, тест, обнаруживающий утечку при помощи проверки памяти на наличие объектов определенного типа, или тест, который отслеживает трафик памяти и «падает», если трафик (аллоцированный объем) превысит заданный порог. Это в точности то, что позволяет делать dotMemory Unit фреймворк. dotMemory Unit распространяется в виде NuGet пакета и позволяет выполнять следующие сценарии:
  • Проверка памяти на наличие объектов определенного типа.
  • Проверка трафика памяти.
  • Сравнение снимков (далее 'снэпшотов') памяти.
  • Сохранение снэпшотов на диск с целью последующего анализа в dotMemory (профиляторе памяти от JetBrains).

Иными словами, dotMemory Unit расширяет возможности вашего юнит-тестинг фреймворка функциональностью профилятора памяти.
Читать дальше →
Total votes 21: ↑16 and ↓5+11
Comments23

Архитектура сервера онлайн-игры на примере Skyforge

Reading time12 min
Views190K
Привет, Хабр! Я Андрей Фролов, ведущий программист, работаю в Mail.Ru над Next-Gen MMORPG Skyforge. Вы могли читать мою статью про архитектуру баз данных в онлайн-играх. Сегодня я буду раскрывать секреты, касающиеся устройства сервера Skyforge. Постараюсь рассказать максимально подробно, с примерами, а также объясню, почему было принято то или иное архитектурное решение. По нашему серверу без преувеличения можно написать целую книгу, поэтому для того, чтобы уложиться в статью, мне придется пройтись только по основным моментам.

image

Читать дальше →
Total votes 141: ↑127 and ↓14+113
Comments179

3D на D

Reading time8 min
Views14K
Доброго времени суток, хабр!

С языком D я познакомился на 3 курсе, но решил его использовать только через год, когда вышла книга Александреску. Сразу взялся писать лабораторные, курсовые. Основной проблемой являлось отсутствие нужных библиотек (графика, удобная математика) или неудобная их установка. Сейчас многое изменилось, пишутся библиотеки (gfm, dlib, dlangui и тд), появился dub. С одной из таких библиотек хочу познакомить в этом посте. Имя ей DES. Выросла она из институтских наработок, поэтому, возможно, кому-то она будет полезной в учёбе и/или станет катализатором изучения языка.Сразу следует оговорить: статья для новичков, всё предельно просто.

Напишем простое приложение, рисующее на экране некий абстрактный mesh.



Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments0

Восстановление удаленных данных с помощью Scalpel

Reading time5 min
Views42K
У каждого человека в жизни возникает такая ситуация как rm -rf на той папке, где этого не следовало делать. Бекапы это хорошо, но что делать если их нет? Для Linux систем существует утилита Scalpel, которая позволяет восстановить удалённые файлы по заданным паттернам, включая применение регулярных выражений.
Читать дальше →
Total votes 29: ↑26 and ↓3+23
Comments7

Грандиозное тестирование батареек

Reading time4 min
Views360K
Каждый раз при покупке батареек у меня возникало много вопросов:

Насколько дорогие батарейки лучше дешёвых?
Насколько ёмкость литиевых батареек больше обычных?
Насколько ёмкость солевых батареек меньше, чем у щелочных?
Отличаются ли батарейки для цифровых устройств от обычных?
Какие из батареек, стоящих одинаково, лучше покупать?

Чтобы получить ответы на эти вопросы я решил протестировать все батарейки АА и ААА, которые удастся найти в Москве. Я собрал 58 видов батареек АА и 35 видов ААА. Всего было протестировано 255 батареек — 170 АА и 85 ААА.


Читать дальше →
Total votes 234: ↑232 and ↓2+230
Comments117

20 самых популярных выступлений всех времен на конференции TED

Reading time3 min
Views353K
Привет, Хабр. Я знаю, что здесь уважают и любят выступления TED. Поэтому я не мог пройти мимо новости о том, что сайт ted.com после редизайна обновил плейлист «20 самых популярных выступлений на TED всех времен». Это яркий пример того, как путем послабления копирайта (все лекции TED находятся в открытом доступе, распространяются по лицензии CC, согласно которой разрешено все, кроме коммерческого использования) и организации краудсорсинга (все переводы выполняют волонтеры) можно добиться впечатляющих результатов…



Ранее на Хабре уже публиковался этот плейлист, но с тех пор он заметно обновился. Не изменился разве что лидер рейтинга — Кен Робинсон с выступлением «Как школы подавляют творчество».

Рейтинг составлен по количеству просмотров (в статистике учитывались данные с TED.com, Youtube, iTunes, Hulu, встроенных фреймов, количества скачиваний и т.д.)

Большинство лекций переведены на русский язык, с субтитрами или в озвучке. Не буду много писать, это нужно смотреть. Остальное под катом.
Читать дальше →
Total votes 117: ↑109 and ↓8+101
Comments22

Реанимация серверов Ubuntu на Hetzner или немного полезных команд

Reading time3 min
Views38K


Этот небольшой пост-шпаргалка предназначен для тех у кого внезапно в ходе неудачного эксперимента или обновления перестал пинговаться сервер, отвалился ssh и прочее. Проще говоря он о восстановлении сервера после обновлений, взломов и тому подобного. По моим ощущениям последнее бывает гораздо реже.
Так что кому интересна эта тема прошу под кат.
Total votes 45: ↑41 and ↓4+37
Comments13

Откровенные фото Дженнифер Лоуренс и еще десятков знаменитостей утекли через iCloud

Reading time2 min
Views925K
Личные фото некоторых знаменитостей, включая Дженнифер Лоуренс, Кейт Аптон и Ариана Гранде были опубликованы анонимным хакером на сайте 4Chan. Судя по всему, утечки стали возможными благодаря взлому аккаунтов от облачного хранилища Apple iCloud, в которое автоматически копируется информация со всех устройств Apple, о чем большинство пользователей даже не задумываются.

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

Пресс-секретарь Дженнифер Лоуренс сделал заявление, подтверждающее, что фотографии являются подлинными:


Читать дальше →
Total votes 206: ↑183 and ↓23+160
Comments328

Секреты Metasploit

Reading time4 min
Views227K

Вступление


В 2003 году, хакеру, известному как «HD Moore», пришла идея разработать инструмент для быстрого написания эксплоитов. Так был рожден хорошо известный во всех кругах проект Metasploit. Первая версия фреймфорка была написана на языке Perl, содержавшая псевдографический интерфейс на базе библиотеки curses.

К 2007 году разработчики консолидировались, основав компанию Metasploit LLC; в это же время проект полностью переписали на Ruby и, частично на Си, Python и Ассемблер.

В октябре 2009 года, проект Metasploit был приобретен компанией Rapid7 с условием, что HD Moore останется техническим директором фреймворка, на что согласилась компания Rapid7.
Читать дальше →
Total votes 91: ↑70 and ↓21+49
Comments18

Путешествие по Стеку. Часть 1

Reading time7 min
Views92K


В предыдущих материалах мы рассмотрели размещение программы в памяти – одну из центральных концепций, касающихся выполнения программ на компьютерах. Теперь обратимся к стеку вызовов – рабочей лошадке большинства языков программирования и виртуальных машин. Нас ожидает знакомство с удивительными вещами вроде функций-замыканий, переполнений буфера и рекурсии. Однако всему свое время – в начале нужно составить базовое представление о том, как работает стек.
Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments15

Всё, что я не понимал про устройство Firefly, было на арктической яхте

Reading time6 min
Views94K
Когда я смотрел сериал, то в упор не понимал, как можно спрятать контрабанду на таком маленьком судне. Когда мы начали грузить еду на арктическую яхту в реале, я как-то сразу быстро разобрался. И вообще потом всю дорогу меня не покидало чувство, что примерно как-то так должен быть устроен маленький космический корабль в будущем.


Двигатель внутреннего сгорания. Слева и справа за стенами – баки с соляром. Итого мы везём чуть более 4,5 тонн топлива при потреблении около 2,5 литров в час.


Панель управления питанием

Расскажу про немного инженерную часть и про быт. Не то чтобы это прямо хардкорный IT-топик, но, думаю, вам будет интересно.
Особенно, про возможность удалённо работать онлайн во время такого путешествия.
Осторожно, трафик.
Читать дальше →
Total votes 188: ↑169 and ↓19+150
Comments126

Создание скрипта для публикации

Reading time5 min
Views4.6K
Время от времени появляется задача: сделать скрипт для публикации, который нужно обновлять но невозможно изменять. Например, это может быть скрипт инициализации, зашитый внутрь образа виртуальной машины или скрипт для установки движка сайта (публикуемый разработчиком движка).

В статье я расскажу о приемах, которые применяю для создания таких скриптов, они помогут избежать некоторых граблей, сохранить простоту и гибкость скриптов. Подход подойдет для тех скриптов, поведение которых должно меняться в зависимости от потребностей автора, обновлений и т.п. Подход НЕ подойдет для скриптов, которые должны работать автономно (без связи с системой автора).

Я использую такой подход в bash-скриптах, но общий принцип можно применять независимо от языка.
Читать дальше →
Total votes 12: ↑7 and ↓5+2
Comments4

Как развивать силу воли

Reading time3 min
Views190K

Одной из самых важных вещей в GTD является сила воли. Без нее вы не будет доводить дела до завершения, любая выбранная вами система не буде работать. Первый же приступ лени не даст вам заглянуть в список дел. GTD, todo list, канбан доска — это всё инструменты. Мы про них много читаем, учимся их использовать, даже программируем. Только самый важный инструмент, который всегда при нас, это сила воли.

До не давнего времени я не понимал, как работает сила воли, не знал, в какой момент времени меня покинет самообладание. Это изменила одна книга. Я рекомендую ее прочесть каждому ITшнику, особенно фрилансерам. У нас, как правило, слабый внешний контроль, поэтому приходиться полагаться только внутренний. Поэтому так важно его настроить. Почему я рекомендую именно эту книгу в качестве руководства под катом.
Читать дальше →
Total votes 98: ↑74 and ↓24+50
Comments62

Мультитест мультиварок: что купить IT-шнику, если хочется плова и борща

Reading time33 min
Views165K
Нам неоднократно поступали предложения о тестировании мультиварок, но до определенного времени мы от них отказывались — ну что такого можно рассказать о мультиварке. Однако, предложения продолжали поступать, и примерно после 5-6 письма редакция Box Overview задумалась, и решили сделать не просто тест одной мультиварки, а глобальное тест-сравнение 8 мультиварок нижнего ценового сегмента от разных брендов.

image

В нашем тесте участвуют 8 мультиварок от компаний Vitek (VT-4209), Kitfort (KT-201), Scarlett (SL-MC411S01), Polaris (PMC 0527D), Rolsen (RMC-5500D), Redmond (RMC-250), Philips (HD2173) и Panasonic (SR-MHS181).

Мы не будем рассказывать вам о дизайне — его можно посмотреть на фотографиях, не будем уточнять наличие контейнера для сбора конденсата — в него он попадает лишь в редких случаях, мы не будем говорить о «эффекте русской печи» и прочей маркетинговой шелухе, которую так любят продавцы.
Мы расскажем о более интересных вещах — об удобстве управления, о качестве рецептов из комплекта, о физической и химической стороне процесса приготовления, о типах антипригарных покрытий, о реальном, а не маркетинговом функционале и о том, что у мультиварок внутри.
Под катом много картинок, фотографий плова и борща, физический и химический ликбез и geek-porn
Total votes 382: ↑363 and ↓19+344
Comments244

GameDev для викторин — я принёс вам кучу бесполезных фактов и немного ветвэра

Reading time10 min
Views39K


Итак, вводная: обычные викторины скучны.

В топике много вопросов, поэтому заходите поиграть, проверить знания, почитать про ещё одну прекрасную уязвимость человеческого разума и просто посмотреть на механики викторины.

Давайте сделаем свою викторину, которая использует потребности основных типов игроков:
  • «Киллеров» — тех, кто охотится за сложными вопросами и получает от этого удовольствие.
  • «Манчкинов» — этот подтип игроков нуждается в признании крутости социальными путями. Очки важнее вопросов.
  • «Ачиверов» — этим парням важно перебрать все квесты игры. В викторине они хотят перебрать все вопросы и узнать на них ответы из любопытства. Для них — специальная категория вопросов.
  • «Приключенцев» — тех, кто ищет социальных взаимодействий, и, скорее всего, не умеет отвечать на вопросы. Для них мы приготовим блеф.


Давайте поиграем


Правила простые. Нужно отвечать на вопросы числами, стараясь попасть точнее. Читаете вопросы, думаете не больше минуты, открываете спойлер проверять ответ. Вот так:

Если масса человека на Земле равна 100 кг, какова будет его масса на Юпитере?
100 кг. Если вы не понимаете, почему, стоит повторить школьный курс физики.

На какое наибольшее количество частей поделят круг 4 прямые линии?
На 11 фрагментов

Какова вероятность того, что в группе из 60 человек у двух из них совпадут число и месяц рождения (в процентах)?
~99% (замечательный пример того, как неинтуитивно воспринимается теория вероятности)

В каком году появился первый компьютерный вирус?
Рабочие примеры программ-вирусов появились в 1961 году, через 10 лет после теории о принципах их работы. Первые вирусы не были зловредами, а просто доказывали свою возможность размножаться внутри системы — McIlroy et al. Darwin, a Game of Survival of the Fittest among Programs. Первые же ПК-совместимые вирусы появились 1981 для платформы Apple II
Читать дальше →
Total votes 85: ↑67 and ↓18+49
Comments75

Azarkant: короткометражный мультфильм, на который ушло три года

Reading time1 min
Views92K


На Хабре не так давно публиковалась новость о создании короткометражного фильма «Крепость», созданного Дмитрием Федотовым.

На днях на глаза попалась еще одна короткометражка, Azarkant, от Андрея Климова. На создание этой короткометражки ушло целых три года, и создавалась она на ПК с процессором i7 930 и 6 ГБ ОЗУ.

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

Читать дальше →
Total votes 123: ↑115 and ↓8+107
Comments64

Использование Vim в качестве C/C++ IDE

Reading time4 min
Views113K
Привет, Хабрахабр. Меня зовут Алексей и я занимаюсь тем, что разрабатываю встраиваемые операционные системы.

Сегодня я хочу рассказать, как я использую Vim в качестве IDE для C/C++ проектов.

Несмотря на то, что я использую Vim для C/C++, многие из рекоммендаций довольно общие и могут использоваться в любом проекте.
Читать дальше →
Total votes 37: ↑32 and ↓5+27
Comments16

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity