Как стать автором
Обновить
60.73
Рейтинг

Компиляторы *

Из исходного кода в машинный

Сначала показывать
  • Новые
  • Лучшие™
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

Ускоряем hugo на 20% простым изменением в пакете™ reflect

Высокая производительность *Open source™ *Программирование *Компиляторы *Go *

Найти значительное узкое место в производительности стандартной библиотеки или зрелого приложения — это редкость.


Я был удивлён, когда в top10 списке™ CPU-профиля hugo при сборке™ digitalgov.gov на первой™ позиции находился метод reflect.Type.MethodByName().


      flat  flat%   sum%        cum   cum%
     8.84s  6.28%  6.28%     57.85s 41.10%  reflect.(*rtype).MethodByName
     7.93s  5.63% 11.92%      8.50s  6.04%  reflect.name.readVarint
     7.56s  5.37% 17.29%    111.79s 79.43%  reflect.Value.call
     7.53s  5.35% 22.64%     23.33s 16.58%  runtime.mallocgc
     7.29s  5.18% 27.82%     16.10s 11.44%  reflect.name.name

В этой статье™ я расскажу вам о том, как так вышло и что с этим можно было бы сделать.

Читать™ дальше™ →
Всего голосов 26: ↑25 и ↓1 +24
Просмотры 3.2K
Комментарии 9

Новости

Rust 1.58.0: захватываемые идентификаторы, пути поиска™ в Windows, больше™ #[must_use] в стандартной библиотеке

Open source™ *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

Команда Rust рада представить новую версию™ языка — 1.58.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия™ Rust, установленная через rustup™, то для обновления до версии™ 1.58.0 вам достаточно выполнить команду:


rustup™ update™ stable™

Если у вас ещё нет rustup™, то можете™ установить его со страницы на нашем веб-сайте, а также ознакомиться с подробным описанием выпуска 1.58.0 на GitHub™.


Что стабилизировано в 1.58.0


В Rust 1.58 появились захваченные идентификаторы в форматируемых строках, изменился путь поиска™ в Windows для Command, в стандартной библиотеке стало больше™ аннотаций #[must_use], а также были стабилизированы некоторые функции.

Читать™ дальше™ →
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 4.1K
Комментарии 42

Новый язык обычного и параллельного программирования Planning C 2.0

Программирование *C++ *Компиляторы *Параллельное программирование *

Здравствуйте, уважаемые читатели.

Хочу написать здесь об одном из своих проектов -- языке Planning C (v2.0). Он является расширением C++, дополняющим базовый язык рядом новых конструкций. В настоящее время проект™ доступен в репозитории (исходный код прототипного транслятора-препроцессора, множество примеров, конвертер простых программ MPI->Planning C). От других™ языков™ Planning C отличается тем, что многие™ его новые конструкции построены на базе так называемых процедур с планированием повторного входа, которые в первую™ очередь удобны™ для программирования некоторых алгоритмов, использующих стек, дек или очередь (но могут использоваться и для программирования произвольных алгоритмов). Язык содержит различные средства алгоритмизации и распараллеливания, более-менее унифицированные и для обычных в наше время компьютеров с многоядерными процессорами, и для видеокарт, и для кластерных систем™. Во второй™ версии™ языка были введены стандартные средства расширения языка новыми™ конструкциями, «интеллектуальная» мемоизация и еще некоторые возможности. Надеюсь, кому-нибудь™ данный™ язык покажется интересным, может быть даже перспективным для применения и/или развития. Сам я иногда™ им пользуюсь для быстрого написания некоторых расчетных параллельных программ.

В этой статье™ напишу™ лишь о самых базовых возможностях языка, преимущественно на примерах. Если тема вызовет интерес, то, возможно, впоследствии напишу™ еще одну-две статьи™ о «продвинутых»/необычных возможностях.

Читать™ далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 5.6K
Комментарии 8

Как мы используем LLVM для ускорения формирования отчётов

Блог компании 1С Алгоритмы *Компиляторы *

Для бизнес™-приложений очень важна возможность быстро™ сформировать нужный™ отчёт. Для этого, в частности, важно быстро™ получить результат запроса (часто – очень сложного запроса) к СУБД. Что не всегда™ просто™, потому™ что с этой СУБД работают на чтение™ и запись™ тысячи™ (а иногда™ - десятки тысяч) пользователей.

 Чтобы не нагружать рабочую СУБД запросами для отчетов мы разработали механизм копий баз данных™, копирующий данные™ (все или их часть) из рабочей БД в отдельную БД для отчетности. Пользователи могут строить отчеты™ на «отчетной» БД, быстрее получая результат и не нагружая рабочую базу.

 Для дальнейшего ускорения формирования отчетности мы разработали Дата акселератор — собственную SQL-совместимую in-memory™ базу данных™, ориентированную на максимальную производительность в задачах OLAP. Дата акселератор может использоваться в качестве «отчетной БД» и позволяет существенно (иногда™ – на порядки) ускорить формирование отчетов.

Читать™ далее
Всего голосов 29: ↑28 и ↓1 +27
Просмотры 4.7K
Комментарии 13

Достоинства и недостатки языка программирования MSH

Компиляторы *
Recovery mode

Описывать преимущества языка программирования задача™ неблагодарная и наврятли выполнимая. В свое время я написал на эту тему несколько статей™. Все они были приняты общественностью очень прохладно. Те кто никогда не программировал на MUMPS ничего™ не поняли™, мои доводы™ о преимуществе этого языка вызвали только™ недоумение . Те кто выучился на традиционных языках™ с трудом™ осваивают другие™ принципы. А для тех кто программировал на MUMPS мои рассуждения показались тривиальными и абсолютно очевидными. Оценить преимущества и недостатки языка невозможно основываясь только™ на наборе™ слов, какими™ бы правильными они не были. Любое познание это работа™ и не выполнив ее оценить язык нельзя™. Все языки разные™ и как бы они не были похожи™, чтобы начать™ на них программировать, надо погрузиться в их среду. А если языки разные™ то и затраты труда значительно возрастают. Доморощенные языки программирования возникают постоянно. Я себя так же отношу™ к их числу. И всегда™ на форумах авторам этих языков™ задают™ вопрос™ об их преимуществе перед другими языками. И не разу я не встречал вразумительного ответа™ на этот вопрос™. Ответы™ обычно™ бывают™ скорее™ эмоциональные, чем вразумительные. Мол мне так нравится.

Но я все таки попытаюсь в очередной раз ответить на этот вопрос™. Я ведь тоже себе его задаю. Изложение не будет коротким и потому™ прошу терпения.

Читать™ далее
Всего голосов 24: ↑9 и ↓15 -6
Просмотры 3.4K
Комментарии 58

Дзен Nim

Программирование *C++ *Компиляторы *C *
Из песочницы
Перевод

1. Копирование плохого дизайна — плохой™ дизайн™.

2. Если компилятор не может рассуждать о коде, то и программист не может.

3. Не стой на пути у программиста.

4. Перенеси работу™ на этап компиляции: программы запускаются гораздо чаще, чем компилируются.

5. Настраиваемое управление памятью.

6. Лаконичный код не мешает™ читабельности, он ей способствует.

7. (Задействовать метапрограммирование, чтобы оставить язык компактным).

8. Оптимизация это специализация: если вам нужно больше™ скорости, пишите™ кастомный код.

9. Должен™ быть только™ один язык программирования для всего. Этот язык — Nim.

Читать™ далее
Всего голосов 18: ↑15 и ↓3 +12
Просмотры 5.6K
Комментарии 24

Компилятор C# 10, .NET 6 и интерполяция строк

Блог компании SkillFactory Программирование *.NET *Компиляторы *C# *
Перевод

К старту™ курса по разработке на C# делимся материалом из блога .NET о том, как компилятор C# 10 и .NET 6 упрощают программирование, как они обращаются с форматированием, а также о причинах конкретных решений команды .NET. И это далеко™ не всё. За подробностями приглашаем под кат.

Читать™ далее
Всего голосов 29: ↑27 и ↓2 +25
Просмотры 10K
Комментарии 59

Нельзя™ копировать код с помощью memcpy™, всё намного сложнее

Программирование *C++ *Компиляторы *
Перевод

В своё время один из клиентов сообщил нам, что на Itanium его программа завершалась аварийно.

Постойте, не закрывайте статью™!

На Itanium клиент™ выявил™ проблему, но она свойственна и всем остальным архитектурам, так что продолжайте чтение™.
Читать™ дальше™ →
Всего голосов 31: ↑29 и ↓2 +27
Просмотры 15K
Комментарии 28

Собираем DOS 2.11 из исходников 80-х годов

Компиляторы *История IT Софт Старое™ железо™
Перевод
Успешно завершив сборку™ ядра PC DOS 1.1 из исходного кода, я решил, что повторю то же самое с исходным кодом DOS 2.11, опубликованным Музеем™ компьютерной истории (CHM). В статье™ представлены заметки, сделанные мной в процессе приведения в форму опубликованного исходного кода. Это оказалось намного сложнее, чем сборка™ DOS 1.1, и на то было две причины.

Во-первых™, опубликованный исходный код DOS 2.11 гораздо более масштабен и содержит в себе исходный код различных утилит™ (CHKDSK™, DEBUG, EDLIN, SYS, и т. д.). Во-вторых™, Музей, к сожалению, при публикации кода создал™ небольшую путаницу и разбираться в отдельных его частях™ было не так уж легко.


Запуск™ DOS 2.11 в стиле Microsoft
Читать™ дальше™ →
Всего голосов 50: ↑50 и ↓0 +50
Просмотры 9K
Комментарии 11

Три архитектуры эльфам™, семь гномам™, девять™ людям… где же искать™ ту, что объединит их все?

Анализ™ и проектирование систем™ *Алгоритмы *Компиляторы *Процессоры
✏️ Технотекст 2021

Проводится сеанс разоблачения магии (CISC, RISC, OoO, VLIW, EPIC, ...).
Без традиционной рубрики “а что, если” тоже не обошлось.

Добро пожаловать под кат, правда™, лёгкого чтения™ ожидать не стоит.

Читать™ далее
Всего голосов 141: ↑141 и ↓0 +141
Просмотры 15K
Комментарии 53

Rust 1.57.0: константный panic!, пользовательские профили в Cargo и обработка ошибок™ выделения памяти™

Open source™ *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

Команда Rust рада сообщить о выпуске новой версии™ — 1.57.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если вы установили предыдущую версию™ Rust средствами rustup™, то для обновления до версии™ 1.57.0 вам достаточно выполнить следующую команду:


rustup™ update™ stable™

Если у вас ещё не установлен rustup™, вы можете™ установить его с соответствующей страницы нашего™ веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub™.


Что стабилизировано в 1.57.0


Rust 1.57 привносит panic! в константные контексты, добавляет поддержку настраиваемых профилей в Cargo и стабилизирует API, позволяющие обработать ошибки™ резервирования памяти™.

Читать™ дальше™ →
Всего голосов 46: ↑46 и ↓0 +46
Просмотры 4.9K
Комментарии 0

Язык программирования Ficus для вычислений и не только™

C++ *Компиляторы *Функциональное программирование *Искусственный интеллект
Из песочницы

Здравствуйте, уважаемые хабровчане. Меня зовут Вадим Писаревский, я являлся лидером OpenCV™ (Open Source™ Computer Vision™ Library) на протяжении примерно 20 лет, и продолжаю участие в этом замечательном проекте. В этой статье™ я рад представить вашему™ вниманию результат другого своего™ проекта, над которым в фоне работаю уже много лет, а последние пару лет как минимум половину своего™ рабочего времени.

Читать™ далее
Всего голосов 67: ↑67 и ↓0 +67
Просмотры 9.7K
Комментарии 45

Си должен™ умереть

Информационная безопасность *Программирование *Системное программирование *Компиляторы *C *
Из песочницы

Язык Си - один из наиболее влиятельных языков™ программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем™, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого™ уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи™ уязвимостей в нём же в придачу.

Попробуем понять™, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать™ далее
Всего голосов 232: ↑194 и ↓38 +156
Просмотры 97K
Комментарии 640

Структурное логирование и интерполированные строки™ в C# 10

Программирование *.NET *Компиляторы *C# *Промышленное программирование *
Из песочницы

В последние годы все большую популярность у разработчиков завоевывает структурное логирование. В этой статье™ я хотел бы рассмотреть, как мы можем добавить поддержку структурного логирования с использованием интерполированных строк при помощи™ новых возможностей C# 10.

Читать™ далее
Всего голосов 29: ↑29 и ↓0 +29
Просмотры 13K
Комментарии 11

Выпуск™ Rust 1.56.0 и 2021 редакция

Open source™ *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

Команда Rust рада сообщить о новой версии™ языка — 1.56.0. С этим выпуском также стабилизируется 2021 редакция. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если вы установили предыдущую версию™ Rust средствами rustup™, то для обновления до версии™ 1.56.0 вам достаточно выполнить следующую команду:


rustup™ update™ stable™

Если у вас ещё не установлен rustup™, вы можете™ установить его с соответствующей страницы нашего™ веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub™.

Читать™ дальше™ →
Всего голосов 40: ↑40 и ↓0 +40
Просмотры 7.9K
Комментарии 11

Bitwise — обучающий проект™ по созданию программного и аппаратного стека компьютера с нуля

Программирование *Анализ™ и проектирование систем™ *Системное программирование *Компиляторы *C *

В процессе обсуждения темы о различных принципах написания кода, я вдруг обнаружил, что на хабре нет ни одного™ упоминания о таком замечательном проекте как Bitwise. 

В 2017 году, Per Vognsen - программист с более чем 15-летним™ стажем™, работавший в таких компаниях как NVIDIA™ и Oculus™ берет паузу и в марте 2018 стартует амбициозный обучающий проект™ Bitwise, в котором он собирается разработать и написать весь программно-аппаратный стек для простого компьютера с нуля и запустить его на FPGA. 

Проект™ должен™ был включать в себя операционную систему, компилятор, системные библиотеки, а также HDL код для центрального процессора и периферийных контроллеров. Пререквизиты к нему минимальны - свободное владение языком™ Cи (и немного Python™), а также знание™ некоторых алгоритмов и структур данных™ из стандартных CS курсов™. Все остальное объясняется по ходу написания кода.

Проекты подобные Bitwise можно пересчитать по пальцам (думаю многие™ еще вспомнят о знаменитом Handmade Hero от Casey Muratori). Автором данного проекта выступает отличный программист, который в формате скринкастов показывает и объясняет каждое™ решение по ходу написания кода. Этой короткой статьей я бы хотел заполнить пробел™ и познакомить большее число людей с проектом Bitwise, так как сам извлек™ из него много нового™.

Читать™ далее
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 4.6K
Комментарии 5

Руководство по выживанию для создателей нейрочипов

Компиляторы *Программирование микроконтроллеров *Искусственный интеллект


В 2018 году мы взялись за первый™ большой контракт по созданию инструментов разработки для нейропроцессора. В то время я знал, что рынок AI быстро™ растёт™ и на нём существуют сотни компаний. Но я не подозревал, что к 2021 году на рынке возникнет ещё пара сотен новых чипмейкеров, разрабатывающих акселераторы для AI, что мы станем™ AI-партнёром Arm, а наши проекты с нейрочипейкерами вырастут в отдельное направление. Не уверен™, что вопрос™, который поднимаю, актуален для российской аудитории: не так много в России™ компаний (откровенно говоря™ – мало), которые выпускают собственные ускорители для нейросетей. Скорее™, эта статья™ — попытка зафиксировать знания™, которые мы получили на американском рынке в результате нескольких проектов и около сотни бесед с чипмейкерами. Но если эта статья™ нанесёт кому-то непоправимую пользу™, буду очень рад.
Читать™ дальше™ →
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 2.2K
Комментарии 0

Лезем в сорцы компилятора — как работает goscheduler (Часть II)

Блог компании FirstVDS Программирование *Анализ™ и проектирование систем™ *Системное программирование *Компиляторы *

Чтение™ рекомендуется начать™ с первой™ части, в которой мы терзаем ОС нереальным количеством потоков, смотрим, что из этого вышло, и видим, что согласованность — это не обязательно многопоточность.
Читать™ дальше™ →
Всего голосов 19: ↑19 и ↓0 +19
Просмотры 2.2K
Комментарии 3

Выявляем ошибки™ в релизе™ LLVM 13.0.0

Блог компании PVS-Studio™ Информационная безопасность *Open source™ *C++ *Компиляторы *

PVS-Studio и LLVM 13


Задача™ коммерческих статических анализаторов выполнять более глубокий и полный™ анализ™ кода, чем компиляторы. Давайте посмотрим, что смог обнаружить PVS-Studio™ в исходном коде проекта LLVM 13.0.0.

Читать™ дальше™ →
Всего голосов 45: ↑42 и ↓3 +39
Просмотры 8K
Комментарии 13

Вклад авторов