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

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

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

Сначала показывать
Порог рейтинга

Nanopass или как я писал компилятор этой осенью

Lisp *Компиляторы *Функциональное программирование *

image


Сразу прошу прощения за несколько надоевший всем стиль «lytdybr», но уж очень хочется поделиться крайне приятным опытом и рассказать о по-своему замечательном компиляторном курсе. И это ещё хорошо, что я пишу сейчас, когда эмоции подугасли, а не когда я только закончил вторую главу курса и от эйфории чувствовал себя как «хомячок, которого капля никотина разрывает на части»! Сразу предупреждаю, наверняка для кого-то эта заметка — «ребёнок познаёт мир», тех прошу сразу закрыть вкладку и не судить строго. Здесь и далее, всегда и всюду, во всех четырёх сферах прошу учитывать, что я не только не создаю компиляторы, но даже и не обучаю этому и не пишу методички! ;-)

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

Новости

Незаслуженно забытые герои Computer Science

Блог компании JUG Ru Group Компиляторы *История IT Биографии гиков

В IT все знают про Тьюринга, Страуструпа, Ритчи и Торвальдса. Эти люди много сделали для становления компьютерной науки. Но, как и везде, в IT-индустрии есть свои невоспетые герои. Поэтому в этой подборке мы решили рассказать об ученых и инженерах, которые внесли большой вклад в развитие Computer Science, но которых нечасто вспоминают на Хабре.

Читать далее
Всего голосов 42: ↑42 и ↓0 +42
Просмотры 6.8K
Комментарии 31

Новый язык программирования

Блог компании Timeweb Cloud Программирование *C++ *Компиляторы *Машинное обучение *
image
Более года назад я начал публикацию статей с описанием особенностей нового языка программирования. С тех пор утекло много воды, было протестировано множество идей, в итоге несколько раз все поменялось кардинальным образом и сейчас представляю на суд читателей описание предфинальной версии языка и его особенностей.

Данная статья предназначена в первую очередь для проверки основных концепций нового языка программирования, а также для получения обратной связи от читателей Хабра. Ведь согласно наблюдению «Хабр-ума палата», не замыленный взгляд со стороны очень сильно помогает в проработке новых идей.

Этот проект очень долго был без собственного названия и в публикациях назывался просто и абстрактно «новый язык». Но после нескольких статей, временное название «новый язык» постепенно превратилось в имя собственное NewLang, которое я и решил в конечном итоге оставить (что еще раз подтверждает поговорку, что нет ничего более постоянного, чем что-то временное).

Читать дальше →
Всего голосов 29: ↑24 и ↓5 +19
Просмотры 13K
Комментарии 42

Как не выстрелить себе в ногу, обрабатывая ошибки в голанге

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


А пока мы все сидим и ждём выхода Go 2 с его новой схемой обработки ошибок, программы писать надо прямо сейчас. Так что от обработки ошибок никуда не деться.

У меня в руках реальный проприетарный проект, который работает на одной из моих серверных ферм. Всё запущено и крутится на golang от начала и до конца. В этой статье я собрал и описал большое количество вариантов обработки ошибок, с которыми столкнулся в проде.

Итак, поехали.
Читать дальше →
Всего голосов 23: ↑19 и ↓4 +15
Просмотры 3.7K
Комментарии 18

Обзор языка функционального программирования Koka

Компиляторы *Функциональное программирование *
✏️ Технотекст 2021

Как-то заглянув на GitHub, обнаружил Koka — язык функционального программирования со статической типизацией. Koka разрабатывается с 2012 года Daan Leijen в Microsoft Research, USA. Его исходники выкладываются на GitHub под лицензией Apache 2.0. Как признаются его авторы, он ещё не готов для промышленного применения: у него нет библиотек, менеджера пакетов и полной поддержки в средах разработки. При этом сам язык достаточно стабилен, а компилятор полностью разработан. Отдельными моментами язык напоминает Rust, Haskell и Scala. Сам же по себе он интересен контролем побочных эффектов. Это его основная фишка. Приглашаю познакомиться с Koka и обсудить его свойства.


fun main(): console ()
  println("Hello, World!")

Сначала пробежимся по свойствам языка, а затем рассмотрим один небольшой пример.

Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 5.8K
Комментарии 27

Анализируем bound checks в Go по CPU профилю

Высокая производительность *Assembler *Системное программирование *Компиляторы *Go *

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


Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 2.9K
Комментарии 0

С++23 — итоги февральской встречи международного комитета

Блог компании Яндекс Программирование *C++ *Компиляторы *IT-стандарты *

Без лишних слов, прямо к делу — вот какие новые вкусности будут нас ждать в C++23:

  • std::expected — новый механизм сообщения об ошибках без использования исключений и без недостатков кодов возврата.
  • constexpr-математика — теперь на этапе компиляции можно доставать разные части чисел с плавающей запятой, копировать знаки и округлять числа.
  • std::ranges::to — результаты работы алгоритмов можно легко превратить в контейнер.
  • std::views::join_with — добавление разделителя между элементами.

Что мы не увидим в C++23, на что ещё можно надеяться и что ещё приняли в текущий черновик стандарта? Всё это ждёт вас под катом.
Читать дальше →
Всего голосов 47: ↑46 и ↓1 +45
Просмотры 11K
Комментарии 146

Ускоряем 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

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

Читать дальше →
Всего голосов 28: ↑27 и ↓1 +26
Просмотры 4.4K
Комментарии 11

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.7K
Комментарии 42

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дзен Nim

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Нельзя копировать код с помощью 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
Просмотры 9.3K
Комментарии 11

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

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

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

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

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

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
Просмотры 5K
Комментарии 0

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

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

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

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

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

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

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

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

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

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