Pull to refresh
47
0
Анна Удовиченко @AnutaU

Инженер-короед

Send message

История предсказания переходов с 1 500 000 года до н.э. по 1995 год

Reading time18 min
Views43K
Это приблизительная расшифровка лекции о предсказании переходов (предсказании ветвлений) на localhost, новом цикле лекций, организованном RC. Выступление состоялось 22 августа 2017 года в Two Sigma Ventures.

Кто из вас использует ветвления в своём коде? Можете поднять руку, если применяете операторы if или сопоставление с образцом?

Большинство присутствующих в аудитории поднимают руки

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

Цель моего выступления — объяснить, как и почему процессоры осуществляют предсказание переходов, а затем вкратце объяснить классические алгоритмы предсказания переходов, о которых вы можете прочитать в современных статьях, чтобы у вас появилось общее понимание темы.
Читать дальше →
Total votes 77: ↑74 and ↓3+71
Comments77

Как работает yield

Reading time6 min
Views694K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Total votes 141: ↑136 and ↓5+131
Comments41

Ликбез по типизации в языках программирования

Reading time12 min
Views514K
image

Эта статья содержит необходимый минимум тех вещей, которые просто необходимо знать о типизации, чтобы не называть динамическую типизацию злом, Lisp — бестиповым языком, а C — языком со строгой типизацией.

В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки программирования и показательными картинками.
Читать дальше →
Total votes 239: ↑232 and ↓7+225
Comments180

Язык Terra — низкоуровневый партнёр Lua

Reading time12 min
Views17K
Terra — низкоуровневый язык системного программмирования, встраиваемый и имеющий возможность метапрограммирования с помощью языка Lua.

Читать дальше →
Total votes 57: ↑57 and ↓0+57
Comments28

Создание языка программирования с использованием LLVM. Часть 6: Расширение языка: Операторы, определяемые пользователем

Reading time33 min
Views12K
Оглавление:
Часть 1: Введение и лексический анализ
Часть 2: Реализация парсера и AST
Часть 3: Генерация кода LLVM IR
Часть 4: Добавление JIT и поддержки оптимизатора
Часть 5: Расширение языка: Поток управления
Часть 6: Расширение языка: Операторы, определяемые пользователем
Часть 7: Расширение языка: Изменяемые переменные
Часть 8: Компиляция в объектный код
Часть 9: Добавляем отладочную информацию
Часть 10: Заключение и другие вкусности LLVM



6.1. Введение


Добро пожаловать в главу 6 руководства “Создание языка программирования с использованием LLVM”. К данному моменту у нас есть полнофункциональный язык, хотя и минимальный, но, тем не менее, полезный. Но по-прежнему осталась одна проблема. В нашем языке мало полезных операторов (нет, например, деления, логического отрицания, и даже сравнений, за исключением оператора сравнения «меньше»).
Читать дальше →
Total votes 47: ↑47 and ↓0+47
Comments5

Погружение в F#. Пособие для C#-разработчиков

Reading time12 min
Views83K

Этот пост будет не о том, как «перевести» код с C# на F#: различные парадигмы делают каждый из этих языков лучшим для своего круга задач. Однако вы сможете оценить все достоинства функционального программирования быстрее, если не будете думать о переводе кода из одной парадигмы в другую. Настало время любопытных, пытливых и готовых изучать совершенно новые вещи. Давайте начнем!



Все материалы из серии переводов русскоязычного сообщества F#-разработчиков вы сможете найти по тегу #fsharplangru.
Читать дальше →
Total votes 48: ↑47 and ↓1+46
Comments74

JetBrains MPS — IDE для разработки проблемно-ориентированных языков программирования

Reading time4 min
Views15K

Введение


MPS — это среда разработки языков программирования на платформе Intellij Idea. Она предоставляет возможность моделировать языки программирования, описывать структуры, сосредотачиваясь конкретно на дизайне и бизнес-логике, не отвлекаясь на парсеры, лексеры и различные сторонние фичи языка. Что нужно сразу обозначить: язык, который разрабатывается с помощью MPS, не компилируется в рабочую программу. Чаще всего он генерируется в модели других языков либо в текстовую форму.

Почему я решил написать этот пост? Я считаю, что это очень недооцененная возможность, а недооценена она потому что порог вхождения очень высок, плюс это один из самых непопулярных продуктов JetBrains.

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

Я планирую написать серию постов об этой замечательной среде, чтобы по окончанию прочтения у энтузиастов оставалось как можно меньше вопросов «как сделать эту штуку», и как можно больше понимания структуры, чтобы можно было эффективно пользоваться документацией. Познавать MPS мы будем во время создания языка для описания закономерностей погоды. Почему, собственно говоря, и нет?
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments28

Kotlin, компиляция в байткод и производительность (часть 1)

Reading time12 min
Views35K


О Kotlin последнее время уже очень много сказано (особенно в совокупности с последними новостями c Google IO 17), но в то же время не очень много такой нужной информации, во что же компилируется Kotlin.
Давайте подробнее рассмотрим на примере компиляции в байткод JVM.

Это первая часть публикации. Вторую можно посмотреть тут

Процесс компиляции это довольно обширная тема и чтобы лучше раскрыть все ее нюансы я взял большую часть примеров компиляции из выступления Дмитрия Жемерова: Caught in the Act: Kotlin Bytecode Generation and Runtime Performance. Из этого же выступления взяты все бенчмарки. Помимо ознакомления с публикацией, настоятельно рекомендую вам еще и посмотреть его выступление. Некоторые вещи там рассказаны более подробно. Я же больше внимания акцентирую именно на компиляции языка.

Содержание:


Функции на уровне файла
Primary конструкторы
data классы
Свойства в теле класса
Not-null типы в публичных и приватных методах
Функции расширения (extension functions)
Тела методов в интерфейсах
Аргументы по умолчанию
Лямбды

Но прежде чем рассмотрим основные конструкции языка и то, в какой байткод они компилируются, нужно упомянуть о том, как непосредственно происходит сама компиляция языка:
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments15

Регулярные выражения, пособие для новичков. Часть 2

Reading time18 min
Views260K
В первой половине этого пособия мы раскрыли лишь малую часть возможностей регулярных выражений. Во второй, большей, половине мы рассмотрим некоторые новые метасимволы, то, как использовать группы для получения частей совпавшего текста, разбивать строки, находить и замещать части текста. В конце немного поговорим о распространенных ошибках.
Читать дальше →
Total votes 67: ↑66 and ↓1+65
Comments20

Регулярные выражения, пособие для новичков. Часть 1

Reading time14 min
Views914K
Регулярные выражения (РВ) это, по существу, крошечный язык программирования, встроенный в Python и доступный при помощи модуля re. Используя его, вы указывается правила для множества возможных строк, которые вы хотите проверить; это множество может содержать английские фразы, или адреса электронной почты, или TeX команды, или все что угодно. С помощью РВ вы можете задавать вопросы, такие как «Соответствует ли эта строка шаблону?», или «Совпадает ли шаблон где-нибудь с этой строкой?». Вы можете также использовать регулярные выражения, чтобы изменить строку или разбить ее на части различными способами.
Читать дальше →
Total votes 105: ↑99 and ↓6+93
Comments32

Грааль и Трюфель (Graal & Truffle)

Reading time12 min
Views22K
Малоизвестный исследовательский проект, который может значительно ускорить инновации в проектировании языков программирования

От переводчика


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


Введение


Со времён расцвета компьютерной индустрии многие были увлечены квестом в поисках идеального языка программирования. Квест очень сложный: создание нового языка — задача не из лёгких. И очень часто в процессе происходит дробление сложившейся экосистемы программирования и возникает необходимость заново строить базовые инструменты для нового языка: компилятор, отладчик, HTTP стек, IDE, библиотеки и бесконечное число базовых блоков пишутся с нуля для каждого нового языка. Совершенство в дизайне языков программирования недостижимо, и новые идеи возникают постоянно. Мы похожи на Сизифа: приговоренного богами на вечное толкание камня в гору, чтобы в итоге увидеть, как тот скатывается вниз снова и снова … целую вечность.


Как можно разорвать этот порочный цикл? Давайте помечтаем, чего бы нам хотелось.

Читать дальше →
Total votes 48: ↑46 and ↓2+44
Comments31

Перевод отрывков из книги Роберта Хайнлайна «Заберите себе правительство»

Reading time11 min
Views111K

Предисловие переводчика


С сегодняшнего дня начинаю публикацию переведенных мною с английского языка отрывков из произведения Роберта Хайнлайна «Заберите себе правительство» («Take Back Your Government») – руководства для начинающих политиков, написанного Хайнлайном в конце 40-х годов. Часть этого материала уже опубликована мною в ЖЖ, но, думаю, начинать читать хорошую книгу сразу с середины — неправильно, поэтому начинаю публиковать с начала.

На мой взгляд, книга интересна тем, что, во-первых, написана Мэтром фантастики и сохраняет его фирменный лаконичный яркий стиль, а во-вторых — изнутри показывает американскую политическую жизнь того времени, без прикрас и без недомолвок.

И, надеюсь, ее прочитают люди, подобные комментаторам статье Про открытую бухгалтерию в украинском Минобрнауки, считающие, что обычных людей нельзя подпускать к процессу принятия важных решений, ибо, как сказал Уинстон Черчилль,— «Демократия несовершенна, но ничего лучше человечество пока не придумало».
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments41

Прощай, объектно-ориентированное программирование

Reading time8 min
Views105K


Я в течение десятилетий программировал на объектно-ориентированных языках. Первым из них стал С++, затем был Smalltalk, и наконец .NET и Java. Я фанатично использовал преимущества наследования, инкапсуляции и полиморфизма, этих трёх столпов парадигмы объектно-ориентированного программирования. Мне очень хотелось воспользоваться обещанным повторным использованием и прикоснуться к мудрости, накопленной моими предшественниками в этой новой и захватывающей сфере. Меня волновала сама мысль о том, что я могу мапить объекты реального мира в классы и думал, что весь мир можно аккуратно разложить по местам.

Я не мог ошибаться сильнее.
Читать дальше →
Total votes 225: ↑118 and ↓107+11
Comments329
12 ...
8

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity