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

Жуткий сценарий использования ChatGPT

Время прочтения 2 мин
Просмотры 88K
Компиляторы *FPGA *Производство и разработка электроники *Искусственный интеллект Будущее здесь
Мнение

Вчера у меня в ленте на фейсбуке (жаль что в закрытом посте) проявился еще один аспект ChatGPT, жуть которого я не вполне осознавал. Представьте, что ваш менеджер присылает вам емейл: "я вот тут сгенерил с помощью ChatGPT код на языке описания аппаратуры SystemVerilog, который реализует мою идею, ты его поправь немного и в продакшн, а то нас сроки поджимают".

Почему это жутко? Потому что в обсуждаемом посте ChatGPT сгенерил так называемый несинтезируемый код. Это означает: код вроде и есть, и после массажирования даже будет компилироваться в симуляторе, но вот чип из него сделать нельзя. Никак, вообще никак. Для решения этой задачи нужно написать совсем другой код, у которого не будет ни одной строчки общего с тем, что прислал менеджер.

То есть менеджер думает, что вместе с ChatGPT сделал за вас 90% работы, а на самом деле.

Читать далее
Всего голосов 137: ↑125 и ↓12 +113
Комментарии 212

Facebook представила Superpack, технологию сжатия данных для мобильных приложений

Время прочтения 2 мин
Просмотры 1.6K
Разработка мобильных приложений *Компиляторы *Хранение данных *Смартфоны IT-компании

IT-гигант Facebook разработал технологию асимметричного сжатия данных Superpack, сообщает пресс-релиз компании. Технология сочетает анализ компилятора и сжатие данных для оптимизации хранения информации.

В компании это решение объясняют тем, что приложения продолжают увеличиваться в размерах, и это плохо сказывается на производительности мобильных устройств, поэтому такие компиляторы, как Deflate и LZMA, несмотря на то, что на сегодняшний день справляются с оптимизацией данных, в скором времени потеряют актуальность.

Superpack основана на теории сложности Андрея Колмогорова, согласно которой информационное содержание фрагмента данных определяется размером самой короткой программы, которая может генерировать эти данные. Facebook не претендует на звание первопроходцев, базисы теории время от времени используют многие другие компании для организации данных, однако Superpack стремится усовершенствовать нынешние технологии, используя как методы компилятора, так и современные подходы оптимизации данных.

Читать далее
Всего голосов 17: ↑14 и ↓3 +11
Комментарии 3

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

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

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

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

Вышел Rust 1.60

Время прочтения 4 мин
Просмотры 2.4K
Программирование *Компиляторы *Rust *

Стал доступен релиз Rust 1.60, который развивает некоммерческая организация Rust Foundation. Он предоставляет средства для достижения высокого параллелизма выполнения заданий без использования сборщика мусора и runtime.

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

Оптимизируем код, или перегоним Огнелиса в скорости

Время прочтения 2 мин
Просмотры 551
Чулан
Почитал топик об новых супероптимизациях в Огнелисе и долго думал.
Для меня не очень понятно, почему вокруг такого рода работы устроен праздник с феерверком и снегурочкой. Давайте подробнее рассмотрим что же было сделано.
Читать дальше →
Всего голосов 24: ↑13.5 и ↓10.5 +3
Комментарии 13

Обзор LLVM

Время прочтения 13 мин
Просмотры 81K
Программирование *
LLVM (Low Level Virtual Machine) — это универсальная система анализа, трансформации и оптимизации программ или, как её называют разработчики, «compiler infrastucture».

LLVM — не просто очередной академический проект. Его история началась в 2000 году в Университете Иллинойса, а теперь LLVM используют такие гиганты индустрии как Apple и Adobe. В частности, на LLVM основана подсистема OpenGL в MacOS X 10.5, а iPhone SDK использует GCC с бэкэндом на LLVM. Apple является одним из основных спонсоров проекта, а вдохновитель LLVM — Крис Латтнер — теперь работает в Apple.

В основе LLVM лежит промежуточное представление кода (intermediate representation, IR), над которым можно производить трансформации во время компиляции, компоновки (linking) и выполнения. Из этого представления генерируется оптимизированный машинный код для целого ряда платформ, как статически, так и динамически (JIT-компиляция). LLVM поддерживает генерацию кода для x86, x86-64, ARM, PowerPC, SPARC, MIPS, IA-64, Alpha.

LLVM написана на C++ и портирована на большинство *nix-систем и Windows. Система имеет модульную структуру и может расширяться дополнительными алгоритмами трансформации (compiler passes) и кодогенераторами для новых аппаратных платформ. Пользовательский фронтенд, как правило, линкуется с LLVM и использует C++ API для генерации кода и его преобразований. Однако LLVM включает в себя и standalone утилиты.

Для тех, кто не без оснований считает C++ не лучшим языком для написания компиляторов, с недавних пор в LLVM включена обертка API для OCaml.

Чтобы понять, что можно сделать с помощью LLVM, и на каком уровне придётся работать, давайте разберёмся,
что из себя представляет LLVM IR.
Всего голосов 52: ↑51 и ↓1 +50
Комментарии 25

Функциональное программирование :: реккурсивные функции

Время прочтения 3 мин
Просмотры 594
Чулан
Итак, решил я писать компилятор/интерпретатор функционального языка. По началу сделал в виде вычисляющего дерева Черча, где каждая команда-нейрон представляла из себя отдельный объект, к которому прицеплены параметры. При вызове функции get() выполнялось обращение к необходимым входным данным. Я даже соорудил некое подобие strchr, и оно даже работало.
Читать дальше →
Всего голосов 33: ↑12 и ↓21 -9
Комментарии 7

Алгоритмы на графах — Часть 2: Сортировка сетей

Время прочтения 5 мин
Просмотры 22K
Алгоритмы *

Пролог

В продолжение опубликованной на выходных статьи.

Компиляторы — пожалуй одна из самых интересных тем системного программирования.
Эта статья не расскажет как написать идеальный, или, хотя бы, работающий компилятор, но она поможет прояснить пару аспектов его работы, при помощи метода топологической сортировки сети.
Читать дальше →
Всего голосов 68: ↑65 и ↓3 +62
Комментарии 22

Проблемы разработки реально быстрого ПО в наше время

Время прочтения 2 мин
Просмотры 915
Чулан
Дрова пилятся, пилы совершенствуются, доски всё длинные и длинные,
а вот скорость наших программ не сопоставляется с размером этих досок…
Как-то задумал я раз в свои 18 писать компилятор большой-широкий, идей для него выписал целый блокнот.
Так и умер он за вечной оптимизацией собственного кода… =)

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

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

Ну начнём…
Читать дальше →
Всего голосов 39: ↑15 и ↓24 -9
Комментарии 25

Придётся ли Intel убрать из компилятора функцию, намеренно выдающую плохой код для процессоров AMD?

Время прочтения 10 мин
Просмотры 39K
Компьютерное железо
Перевод
Многие программисты считают компилятор Intel лучшим оптимизирующим компилятором из имеющихся на рынке, и предпочитают использовать именно его для наиболее требовательных к производительности программ. Кроме того, Intel поставляет много сильно оптимизированных библиотек для различных технических и научных целей. Во многих случаях достойных альтернатив библиотекам Intel не существует.

К сожалению, программы, скомпилированные с помощью компилятора или библиотек Intel, работают значительно хуже на процессорах AMD и VIA.
Читать дальше →
Всего голосов 200: ↑182 и ↓18 +164
Комментарии 213

Особенности работы CLR в .NET framework

Время прочтения 8 мин
Просмотры 86K
.NET *
Начиная изучать язык C# и .NEt Framework я ни как не мог понять, как же работает CLR. Я либо находил огромные статьи, которые не осилить за 1 вечер либо слишком краткое, скорее даже запутывающее описание процесса (как в книге Г. Шилдта).
Некоторое время назад я решил, что было бы неплохо собирать знания, полученные из книг, «фичи» и часто используемые приемы в одном месте. А то новая информация быстро оседает в голове, но также быстро забывается и спустя несколько недель приходится вновь рыться в сотнях и тысячах строк текста, чтобы найти ответ на вопрос. Читая очередную книгу по программированию, я делал краткие пометки самого важного, что мне показалось. Иногда описывал некоторый процесс понятным мне языком с придуманным примером и т.д. Я не претендую на абсолютную правильность излагаемого материала. Это всего лишь мое понимание процесса, с моими примерами и информацией, которую я посчитал ключевой для понимания Проработав некоторый материал, я решил сохранить это для всех тех, кому это может быть полезно. А кто уже знаком — тот просто освежит это в памяти.
Читать дальше →
Всего голосов 63: ↑35 и ↓28 +7
Комментарии 54

Большой брат помогает тебе

Время прочтения 7 мин
Просмотры 18K
Блог компании Intel
В очередной раз убедился, что программисты пишут программы совершенно безалаберно. И работают они не благодаря их заслугам, а благодаря удачному стечению обстоятельств и заботе разработчиков компиляторов в Microsoft или Intel. Да, да, именно они заботятся и в нужный момент подставляют костылики нашим кривобоким программкам.

Читайте далее байтораздирающую историю про класс CString и дочь его, функцию Format.
Всего голосов 93: ↑64 и ↓29 +35
Комментарии 109

LLVM изнутри: как это работает

Время прочтения 10 мин
Просмотры 25K
Программирование *
Приветствую хабраюзеров, в этой статье пойдет речь о внутреннем устройстве компилятора LLVM. О том, что LLVM вообще такое, можно прочитать здесь или на llvm.org. Как известно, LLVM (условно) состоит из трех частей — байткода, стратегии компиляции и окружения aka LLVM infrastructure. Я рассмотрю последнее.

Содержание:
  • Сборка LLVM
  • Привязка к Eclipse
  • Архитектура окружения
  • LLVM API
  • Оптимизация Hello, World!
Читать дальше →
Всего голосов 59: ↑54 и ↓5 +49
Комментарии 18

Ликвидатор велосипедов, часть 3: языки программирования

Время прочтения 4 мин
Просмотры 2.6K
Разработка веб-сайтов *.NET *C# *
Вообще говоря, речь пойдет о разработке компиляторов не Just for fun, а для каких-либо проектов. Это могут быть проекты для внутреннего использования, или может быть это будут проекты, которые направлены на продажу. А может быть, на самововлечение сообщества для последующего доения этого сообщества. Я не буду разбирать причины, по которым может показаться, что создание нового языка программирования выведет компанию на новый уровень, однако причины находятся, языки пишутся, создавая, на мой взгляд, огромные проблемы, как самой компании, так и сотрудникам этой компании.

Ссылка на первую часть серии: оконные системы
Ссылка на вторую часть серии: построение графиков

Читать дальше →
Всего голосов 17: ↑10 и ↓7 +3
Комментарии 15

Тест Си компиляторов под Windows

Время прочтения 4 мин
Просмотры 7.2K
Чулан
После многочисленных споров на тему «Какой компилятор лучше генерирует код», появилась идея провести самому испытания. Основной целью испытания была проверка скорости работы программы с оптимизацией по скорости. Результат тестирования: среднее арифметическое время выполнения тестовой функции в миллисекундах (1/1000 сек). т.е. чем меньше тем лучше.

В тестировании участвовали:
  • Intel C++ Compiler Pro 11.1.054;
  • GCC 4.5.0 (MinGW);
  • MS C/C++ Compiler 15.00.21022.08 (VS 2008);
  • CodeGear C++ Builder 11.0 (C++Builder 2007);
  • Tiny C Compiler 0.9.25.
Читать дальше →
Всего голосов 23: ↑18 и ↓5 +13
Комментарии 12

Пишем LR(0)-анализатор. Простыми словами о сложном

Время прочтения 10 мин
Просмотры 26K
Алгоритмы *
Из песочницы

Введение



Добрый день.
Не нашел простого и внятного описания данного алгоритма на русском языке. Решил восполнить сей пробел. Прежде всего что это такое? LR(0)-анализатор в первую очередь это синтаксический анализатор. Цель синтаксического анализатора обработать входной поток лексем(базовые элементы языка, которые производит лексический анализатор на основе входного потока символов, примеры лексем — число, запятая, символ) и сопоставить его с описанием языка заданного в определенном формате. Сопоставление заключается в построении определенной структуры данных, чаще всего — дерева. Дальше эта структура пойдет на следующий этап — семантический анализ, где уже компилятор пытается понять смысл, заключенный в дереве.

Существует 2 класса синтаксических анализаторов — восходящие анализаторы и нисходящие. Первые строят дерево начиная с листьев, которые являются входными лексемами, вторые соответственно наоборот начинают с корня дерева. Собственно LR и значит то, что анализатор будет читать поток слева направо (L — 'Left') и строить дерево снизу вверх (пусть не смущает буква R, которая значит Right, объяснения даны чуть ниже). Индекс 0 обозначает то что мы не предпросматриваем следующие лексемы, а работаем только с текущей. Какие же плюсы даёт нам выбор этого типа анализаторов?
  • Он быстр.
  • Покрывает множество языков. То есть если вы придумали язык и описали его, то с большой долей вероятности LR-анализатор его сможет обработать.
  • Синтаксические ошибки обнаруживаются так быстро как это возможно. Сразу же как встречается символ, который не соответствует предыдущему входному потоку, мы можем вывести ошибку об этом.

Есть и недостатки:
  • Относительная сложность построения.
  • Можно вогнать анализатор в ступор неоднозначностью описания языка.


Читать дальше →
Всего голосов 75: ↑71 и ↓4 +67
Комментарии 17

Уж такой элементарный C/С++: может->является

Время прочтения 3 мин
Просмотры 2.6K
C++ *
Вопрос на пять: что напечатает эта простая программа:
    #include <stdio.h>

    typedef int a;
    a b = 5;

    int main()
    {
       a(b);
       printf("%d\n", b);
       return 0;
    }
Уже натерпевшиеся от своего любимого языка, но ещё не прошерстившие всех бизонов gcc, почувствуют подвох — и правильно. Подсказка номер ноль: это скушает С++, но и простой С не подавится.
Если не догадались, милости прошу!
Всего голосов 121: ↑80 и ↓41 +39
Комментарии 79

Скрипты в .NET/Mono средствами самой платформы

Время прочтения 6 мин
Просмотры 4.6K
.NET *
Из песочницы

Введение


Работая тут над одним проектом, потребовалось мне, что бы функциональность проекта расширялась на лету и сторонними разработчиками, причём возможностей к расширению было как можно больше, с возможностью правки кода на лету. Соответственно плагины для этого не очень годились из-за необходимости их постоянной перекомпиляции после любой правки. Выход: скрипты. До этого со скриптами я работал достаточно давно и это была Lua на C++. Вариант хороший, если бы не несколько минусов:
  • Отсутствие нормальной реализации или прослойки под .NET/Mono — во всех что я видел были какие-то недоработки (может и плохо искал — как минимум пропустил Lua в TaoFramework)
  • По всей видимости, нужно было писать кучу биндингов что бы среда исполнения .NET/Mono могла нормально взаимодействовать со средой Lua и обратно.

Тогда-то я и задался вопросом — а может быть в .NET/Mono уже есть что-нибудь для реализации скриптов? И ответ был да. Пространство имён "System.CodeDom.Compiler" было как раз то, что мне надо — возможность реализовать скрипты которые максимально соединялись со средой .NET/Mono.
Читать дальше →
Всего голосов 37: ↑32 и ↓5 +27
Комментарии 35

PVS-Studio vs Clang

Время прочтения 7 мин
Просмотры 3.1K
Блог компании PVS-Studio
PVS-Studio vs CLANG
Мы случайно проверили проект Clang. Думаю, результат будет любопытен ряду разработчиков. Подробности под катом.
Читать дальше →
Всего голосов 69: ↑57 и ↓12 +45
Комментарии 88

GAZ Compiler — замена стандартным BAT-файлам в операционной системе Windows

Время прочтения 4 мин
Просмотры 2.8K
Компиляторы *
Из песочницы
Моему брату было 9 лет, и он очень хотел научиться программировать. Я долго думал, что бы ему такое предложить. Большинство начинало с Турбо-Паскаля. Но так как на втором курсе примата мы проходили компиляторы, то я решил написать собственный компилятор.

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

В процессе написания я слишком увлёкся и получилось не совсем то, что изначально предполагалось (язык программирования для обучения). Нет, синтаксис языка предельно простой, с этим всё в порядке. Для обучения его вполне можно использовать, только у него два недостатка:

1) Нет литературы для обучения. Есть только список файлов с примерами.
2) Я думаю, некоторые свойства языка, такие как нестрогая типизация, не есть хорошо для первого языка программирования.

Получился 1С-подобный язык, который я сам стал использовать для автоматизации операций на компьютере. И соответственно, «нашпиговывать» его всё новыми, мыслимыми и немыслимыми функциями.

Читать дальше →
Всего голосов 26: ↑16 и ↓10 +6
Комментарии 10