Deleted Deleted
Андрей Прокопюк @Andre_487
Пользователь
JIT-компилятор как учебный проект в Академическом Университете
10 min
29KОколо шестнадцати лет назад вышла первая версия Hotspot – реализация JVM, впоследствии ставшая стандартной виртуальной машиной, поставляемой в комплекте JRE от Sun.
Основным отличием этой реализации стал JIT-компилятор, благодаря которому заявления про медленную Джаву во-многих случаях стали совсем несостоятельными.
Сейчас почти все интерпретируемые платформы, такие как CLR, Python, Ruby, Perl, и даже замечательный язык программирования R, обзавелись своими реализациями JIT-трансляторов.
В рамках этой статьи я не планирую проливать свет на малоизвестные детали реализации промышленных JIT-компиляторов, скорее это будет совсем поверхностное ознакомление с азами и рассказ про учебный проект по соответствующей тематике.
Таким образом вам может быть интересно под катом, если:

Основным отличием этой реализации стал JIT-компилятор, благодаря которому заявления про медленную Джаву во-многих случаях стали совсем несостоятельными.
Сейчас почти все интерпретируемые платформы, такие как CLR, Python, Ruby, Perl, и даже замечательный язык программирования R, обзавелись своими реализациями JIT-трансляторов.
В рамках этой статьи я не планирую проливать свет на малоизвестные детали реализации промышленных JIT-компиляторов, скорее это будет совсем поверхностное ознакомление с азами и рассказ про учебный проект по соответствующей тематике.
Таким образом вам может быть интересно под катом, если:
- Вы принципиально не понимаете, что такое JIT-компилятор, или у вас есть легкое непонимание, чем такой подход существенно лучше интерпретации.
- Вы хотели бы написать простой JIT для своего интерпретируемого языка.
- Вы преподаете курс «Языки программирования и компиляторы», и не против сделать практическое задание для студентов еще интересней.
- Вам интересно, как нарисована эта картинка.

+53
Пуленепробиваемые тесты JavaScript
5 min
15KTranslation
Писать тесты скорости JS не так легко, как кажется. Даже не касаясь вопросов кроссбраузерной совместимости, можно попасть во множество ловушек.
Именно поэтому я и сделал jsPerf. Простой веб-интерфейс для того, чтобы каждый мог создавать и делиться тестами, и проверять быстродействие различных фрагментов кода. Ни о чём не нужно беспокоиться – просто вводите код, быстродействие которого необходимо измерить, и jsPerf создаст для вас новую задачу по тестированию, которую вы затем сможете запустить на разных устройствах и в разных браузерах.
Именно поэтому я и сделал jsPerf. Простой веб-интерфейс для того, чтобы каждый мог создавать и делиться тестами, и проверять быстродействие различных фрагментов кода. Ни о чём не нужно беспокоиться – просто вводите код, быстродействие которого необходимо измерить, и jsPerf создаст для вас новую задачу по тестированию, которую вы затем сможете запустить на разных устройствах и в разных браузерах.
+17
Категории Клейсли
9 min
27KTranslation
Композиция логирования
Вы видели, как сделать категорию типов и чистых функций. Я также упомянул, что есть способ смоделировать побочные эффекты, или нечистые функции, в рамках теории категорий. Давайте рассмотрим пример: функции, которые логируют или записывают ход своего выполнения.
+13
Расширение для нормального выделения текста внутри ссылки в браузерах
1 min
45KВо вчерашнем посте про браузер Vivaldi опять всплыла тема нормального выделения текста внутри ссылки, как в старой Опере. Особенно она актуальна для браузеров на WebKit/Blink.
Для многих проблема решается установкой специального расширения для браузера.
Для многих проблема решается установкой специального расширения для браузера.
+54
Оптимизируем производительность JavaScript для V8
6 min
28KTutorial
Translation
Предисловие
Дэниел Клиффорд сделал на Google I/O прекрасный доклад, посвященный особенностям оптимизации кода JavaSсript для движка V8. Дэниел призвал нас стремиться к большей скорости, тщательно анализировать отличия между С++ и JavaScript, и писать код, помня о том, как работает интерпретатор. Я собрал в этой статье резюме самых главных моментов выступления Дэниела, и буду обновлять её по мере того, как движок будет меняться.
+71
Краткая шпаргалка по tmux (менеджеру терминалов)
1 min
437Ktmux
— это менеджер терминалов, к которому удобно подключаться и отключаться, не теряя при этом процессы и историю. Как screen
, только лучше (в первую очередь потому, что использует модель клиент—сервер).
Вашему вниманию предлагается минималистическая шпаргалка, позволяющая быстро начать использовать
tmux
, а уж тонкую настройку, продвинутые команды и бесконечные хот-кеи желающие найдут, набрав man tmux
.+47
Web Components — будущее Web
12 min
116K
Спустя какое время стало ясно, что основная идея Prototype вошла в противоречие с миром. Создатели браузеров ответили на возрождение Javascript добавлением новых API, многие из которых конфликтовали с реализацией Prototype.
— Sam Stephenson, создатель Prototype.js, You Are Not Your Code
Создатели браузеров поступают гармонично. Решение о новых API принимают с учётом текущих трендов в opensource сообществах. Так prototype.js способствовал появлению
Array.prototype.forEach()
, map()
и т.д., jquery вдохновил разработчиков на HTMLElement.prototype.querySelector()
и querySelectorAll()
.Код на стороне клиента становится сложнее и объёмнее. Появляются многочисленные фреймворки, которые помогают держать этот хаос под контролем. Backbone, ember, angular и другие создали, чтобы помочь писать чистый, модульный код. Фреймворки уровня приложения — это тренд. Его дух присутствует в JS среде уже какое-то время. Не удивительно, что создатели браузеров решили обратить на него внимание.
+83
Категории, большие и малые
8 min
36KTranslation
Это четвертая статья в цикле «Теория категорий для программистов».
Понять пользу категорий можно изучая различные примеры. Категории бывают всех форм и размеров и часто появляются в самых неожиданных местах. Мы начнем с самых простых.
Самая простая категория — без объектов и, как следствие, без морфизмов.
Понять пользу категорий можно изучая различные примеры. Категории бывают всех форм и размеров и часто появляются в самых неожиданных местах. Мы начнем с самых простых.
Без объектов
Самая простая категория — без объектов и, как следствие, без морфизмов.
+30
Пишем быстрый и экономный код на JavaScript
16 min
69KTranslation
Такой движок JS, как V8 (Chrome, Node) от Google, заточен для быстрого исполнения больших приложений. Если вы во время разработки заботитесь об эффективном использовании памяти и быстродействии, вам необходимо знать кое-что о процессах, проходящих в движке JS браузера.
Что бы там ни было — V8, SpiderMonkey (Firefox), Carakan (Opera), Chakra (IE) или что-то ещё, знание внутренних процессов поможет вам оптимизировать работу ваших приложений. Но не призываю вас оптимизировать движок для одного браузера или движка – не делайте так.
Задайте себе вопрос:
— можно ли что-то в моём коде сделать более эффективным?
— какую оптимизацию проводят популярные движки JS?
— что движок не может компенсировать, и может ли сборка мусора подчистить всё так, как я от неё ожидаю?

Есть много ловушек, связанных с эффективным использованием памяти и быстродействием, и в статье мы изучим некоторые подходы, которые хорошо показали себя в тестах.
Что бы там ни было — V8, SpiderMonkey (Firefox), Carakan (Opera), Chakra (IE) или что-то ещё, знание внутренних процессов поможет вам оптимизировать работу ваших приложений. Но не призываю вас оптимизировать движок для одного браузера или движка – не делайте так.
Задайте себе вопрос:
— можно ли что-то в моём коде сделать более эффективным?
— какую оптимизацию проводят популярные движки JS?
— что движок не может компенсировать, и может ли сборка мусора подчистить всё так, как я от неё ожидаю?

Есть много ловушек, связанных с эффективным использованием памяти и быстродействием, и в статье мы изучим некоторые подходы, которые хорошо показали себя в тестах.
+66
Советы по правильной настройке телевизора
6 min
917KДля начала, что есть «правильная настройка». Если вы хотя бы раз были в магазине электроники, то наверняка замечали, что все выставленные телевизоры показывают по-разному. С чем это связано? Какой из них лучше? Давайте разберемся.
Я думаю, вы согласитесь, что телевизор должен не просто показывать какую-то картинку, но и вносить как можно меньше искажений в исходный контент. Сам контент всегда создается с оглядкой на стандарты и рекомендации индустрии, и главная цель любого телевизора — донести до вас именно то изображение, которое вам хотели показать. Тут важно всё: и оттенок кожи у актера, и цвет неба на закате, и какие детали изображения должны быть видны, а какие спрятаны. Существуют международные стандарты, описывающие каким должно быть изображение на экране вашего телевизора. Все вы, наверняка, встречали аббревиатуры PAL, NTSC, или HDTV, вот за этими буквами и скрываются свойства видеосигнала и различные параметры изображения. С приходом HDTV в нашу жизнь, большая часть стандартов сразу же устарела, и, фактически, наиболее актуальным сейчас является стандарт REC709, который используется в телевидении высокой четкости (HD) и в Blu-Ray видео.
Я думаю, вы согласитесь, что телевизор должен не просто показывать какую-то картинку, но и вносить как можно меньше искажений в исходный контент. Сам контент всегда создается с оглядкой на стандарты и рекомендации индустрии, и главная цель любого телевизора — донести до вас именно то изображение, которое вам хотели показать. Тут важно всё: и оттенок кожи у актера, и цвет неба на закате, и какие детали изображения должны быть видны, а какие спрятаны. Существуют международные стандарты, описывающие каким должно быть изображение на экране вашего телевизора. Все вы, наверняка, встречали аббревиатуры PAL, NTSC, или HDTV, вот за этими буквами и скрываются свойства видеосигнала и различные параметры изображения. С приходом HDTV в нашу жизнь, большая часть стандартов сразу же устарела, и, фактически, наиболее актуальным сейчас является стандарт REC709, который используется в телевидении высокой четкости (HD) и в Blu-Ray видео.
+158
Всё ли так просто с многоточием?
7 min
96K
Многоточие (эллипсис, от греч. ellipsis — незаполненность) — самостоятельный типографский знак, разновидность отточия, состоящий из трёх точек идущих подряд, используется для обозначения скрытого смысла, особенностей устной речи (вздох, пауза, задумчивость), недосказанности либо для исключения из текста некоторых слов, например при цитировании.
+112
Тройка полезных монад
4 min
48KTranslation
Внимание: перед тем как читать текст ниже, вы уже должны иметь представление о том, что такое монады. Если это не так, то прежде прочитайте вот этот пост!
Перед нами функция

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

Что ж, отлично. Но что будет если вы теперь захотите применить
Вот то, что мы хотели бы, чтобы происходило:

Спойлер: автоматически так не сделается. Придётся всё расписывать ручками:
Фу! Это ни капли не похоже на лаконичное
А что, если у вас есть ещё функции, имеющие лог? Напрашивается такая схема: для каждой функции, возвращающей вместе со значением лог, мы бы хотели объединять эти логи. Это побочный эффект, а никто не силён в побочных эффектах так, как монады!
Перед нами функция
half
:
И мы можем применить её несколько раз:
half . half $ 8
=> 2
Всё работает как и ожидалось. Но вот вы решили, что хорошо бы иметь лог того, что происходит с этой функцией:

half x = (x `div` 2, "Я только что располовинил " ++ (show x) ++ "!")
Что ж, отлично. Но что будет если вы теперь захотите применить
half
несколько раз?half . half $ 8
Вот то, что мы хотели бы, чтобы происходило:

Спойлер: автоматически так не сделается. Придётся всё расписывать ручками:
finalValue = (val2, log1 ++ log2)
where (val1, log1) = half 8
(val2, log2) = half val1
Фу! Это ни капли не похоже на лаконичное
half . half $ 8
А что, если у вас есть ещё функции, имеющие лог? Напрашивается такая схема: для каждой функции, возвращающей вместе со значением лог, мы бы хотели объединять эти логи. Это побочный эффект, а никто не силён в побочных эффектах так, как монады!
+53
Функторы, аппликативные функторы и монады в картинках
5 min
195KTranslation
Вот некое простое значение:

И мы знаем, как к нему можно применить функцию:

Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:

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

Позже мы увидим разницу в поведении функции для

И мы знаем, как к нему можно применить функцию:

Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:

Теперь, когда вы примените функцию к этому значению, результаты вы будете получать разные — в зависимости от контекста. Это основная идея, на которой базируются функторы, аппликативные функторы, монады, стрелки и т.п. Тип данных
Maybe
определяет два связанных контекста:
data Maybe a = Nothing | Just a
Позже мы увидим разницу в поведении функции для
Just a
против Nothing
. Но сначала поговорим о функторах!+166
Новый пуленепробиваемый синтаксис @font-face
3 min
71KTutorial
Translation
С самого начала «вебошрифтовой революции» мы полагались на неизящные хаки деклараций @font-face, чтобы шрифты из Паутины загружались во всех браузерах. Может ли существовать лучший путь? Вполне изящный и совместимый с будущими браузерами?
Вкратце об истории вопроса
В сентябре 2009 года Пол Айриш (Paul Irish) огласил пуленепробиваемый синтаксис для записи деклараций
Синтаксис Fontspring @Font-Face
А вот таким этому коду следовало бы быть с самого начала. Чистым, ясным и простым:
@font-face {
font-family: 'MyFontFamily';
src: url('myfont-webfont.eot?') format('eot'),
url('myfont-webfont.woff') format('woff'),
url('myfont-webfont.ttf') format('truetype'),
url('myfont-webfont.svg#svgFontName') format('svg');
}
Что? Я не понял.
Как это срабатывает
+123
Когда Photoshop отображает совсем не то, что надо
3 min
290K
Такая вот ситуация: дизайнер присылает макет, а у верстальщика открывается какая то лабуда светлая, или темная (если верстальщик испольует МасOS, а дизайнер Win.). Или же верстальщик сохраняет картинку, а там цвета другие стали.
Разберемся почему так и как с этим жить.
+143
Теория категорий для программистов: предисловие
5 min
110KTranslation
Вот уже некоторое время я обдумываю идею написать книгу о теории категорий для программистов. Не компьютерных теоретиков, программистов — скорее инженеров, чем ученых. Я знаю, что это звучит безумно, и я сам достаточно напуган. Я знаю, что есть огромная разница между наукой и техникой, потому, что я работал по обе стороны баррикад. Но у меня всегда был очень сильный порыв объяснить вещи. Я восхищаюсь Ричардрм Фейнманом, который был мастером простых объяснений. Я знаю, я не Фейнман, но я буду стараться изо всех сил. Я начинаю с публикации этого предисловия, которое должно мотивировать читателя изучить теорию категорий, и надеюсь на начало дискуссии и обратную связь.
Я постараюсь в нескольких параграфах убедить вас, что эта книга написана для вас, и развеять все ваши сомнения в необходимости изучения этой, одной из самых абстрактных областей математики, в свое драгоценное свободное время.
Я постараюсь в нескольких параграфах убедить вас, что эта книга написана для вас, и развеять все ваши сомнения в необходимости изучения этой, одной из самых абстрактных областей математики, в свое драгоценное свободное время.
+47
Лицензия для вашего open-source проекта
98 min
191KВ этой статье я хочу немного поговорить об авторском праве и свободных лицензиях на ПО. Текст является результатом самостоятельного выбора лицензий и их применения к своим проектам.
Статья будет полезна тем, кто хочет:
— в общих чертах понять, что такое авторское право (но лучше обратиться к юристу);
— подобрать свободную лицензию для своего проекта;
— разобраться, что нужно писать в шапке файла исходного кода.
Статья будет полезна тем, кто хочет:
— в общих чертах понять, что такое авторское право (но лучше обратиться к юристу);
— подобрать свободную лицензию для своего проекта;
— разобраться, что нужно писать в шапке файла исходного кода.
+128
Размышления о стандартной библиотеке JavaScript. Core.js
64 min
105KОдин пацан писал все на JavaScript, и клиент, и сервер, говорил что нравится, удобно, читабельно. Потом его в дурку забрали, конечно.
— С просторов интернета
К чему это я? Занятная штука — JavaScript. Основа современного web и на фронтэнде альтернатив как таковых не имеет.
JavaScript это, в том числе, и стандартная библиотека, о которой здесь и пойдёт речь. Под стандартной библиотекой я подразумеваю модули, конструкторы, методы, что должны присутствовать на любой платформе, будь то браузер или сервер, без лишних действий со стороны программиста, не включая API, специфичный для платформы. Даже если вы пишите не на JavaScript, а на языке в него компилируемом, скорее всего, вам придется иметь дело с его стандартной библиотекой.
Ванильная стандартная библиотека JavaScript, в целом, неплоха. Это не только стандартная библиотека по спецификации языка ECMA-262 актуальных версий — от 3 до черновика 6. Часть API вынесена в отдельные спецификации, например, API интернационализации ECMA-402. Многие возможности, без которых сложно представить JavaScript, например,
setTimeout
, относятся к web-стандартам. Консоль не стандартизована вовсе — приходится полагаться на стандарт де-факто.Вот только не такая уж она и стандартная — везде разная. Есть старые IE, в которых из коробки мы получаем стандартную библиотеку ES3 90-бородатого года даже без
Array#forEach, Function#bind, Object.create
и консоли, и есть, например, Node.js, на которой многие уже вовсю используют возможности грядущего ES6.Хочется иметь универсальную, действительно стандартную библиотеку, как на сервере, так и в любом браузере, максимально соответствующую современным стандартам, а также реализующую необходимый функционал, что (пока?) не стандартизован. Статья посвящена библиотеке core.js — реализация моих соображений по поводу стандартной библиотеки JavaScript. Кроме того, эта статья еще и шпаргалка по современной стандартизованной стандартной библиотеке JavaScript и заметки о её перспективах.
Содержание, или что получим на выходе:
Подходы
-
Часть первая: Костыли
- ECMAScript 5
- ECMAScript 6
- ECMAScript 6: Символы
- ECMAScript 6: Коллекции
- ECMAScript 6: Итераторы
- ECMAScript 6: Обещания
- Mozilla JavaScript: Статические версии методов массива
- Отложенное исполнение: setTimeout, setInterval, setImmediate
- Консоль
-
Часть вторая: Велосипеды
- Классификация данных
- Словари
- Частичное применение
- Форматирование даты
- Объектное API
- Массивы
- Числа
- Экранирование спецсимволов
Заключение
+77
Тонкости nodejs. Часть II: Работа c ошибками
5 min
19KTutorial
Обработка ошибок в JS – та еще головная боль. Не ошибусь, если скажу, что ошибки – самое слабое место всего языка. При чем проблема состоит из двух других: сложности отлова ошибки в асинхронном коде и плохо спроектированного объекта Error. И если первой проблеме посвящено множество статей, то о второй многие незаслуженно забывают. В этом материале я постараюсь восполнить недостаток и рассмотреть объект Error более пристально.
+23
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Works in
- Registered
- Activity