Search
Write a publication
Pull to refresh
6
0
Send message

Изучение комбинаторных парсеров с Rust

Reading time40 min
Views13K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Learning Parser Combinators With Rust".


Эта статья учит основам комбинаторных парсеров людей, которые уже знакомы с Rust. Предполагается, что никаких других знаний не требуется, а всё, что не имеет прямого отношения к Rust, а также некоторые неожиданные аспекты его использования, будут объяснены. Эта статья не поможет вам выучить Rust, если вы его ещё не знаете, и в этом случае, вы, вероятнее всего, не поймёте комбинаторные парсеры хорошо. Если вы хотите изучить Rust, я рекомендую книгу "Язык программирования Rust".

Читать дальше →

Особенности применения языков программирования С и С++ при разработке ПО, связанного с функциональной безопасностью

Reading time11 min
Views9.6K
image

Крис Хоббс (Chris Hobbs) в своей фундаментальной работе «Embedded Software Development for Safety-Critical Systems» [1] приводит распространенное среди программистов мнение о том, что накладывать ограничения на языки программирования, это как заказывать Пикассо создание картины, при этом запрещать ему использовать желтый цвет. Тем не менее, сложно представить себе предприятие, которое серьезно занимается разработкой программного обеспечения для систем ответственного назначения, у которого в писанных или неписанных стандартах не было бы указаний о том, какой язык программирования применять и, мало того, как его применять.

Данная статья посвящена подходу, который определен в стандарте IEC 61508 и который состоит в применении для разработки ответственного программного обеспечения безопасных подмножеств языков программирования С и С++.

Читать дальше →

«Самый опасный геймер» (про четвертое измерение, про игры Braid, Witness и их загадочного творца Джонатана Блоу)

Reading time29 min
Views19K
Статья 2012 года

Видеоигры сейчас один из самых прибыльных видов развлечений в Америке, а также один из самых подростковых, глупых и не «нагружающих» мозг. Серьезно? По крайней мере, так считает Джонатан Блоу. Он — самый жесткий критик игровой индустрии и ее самый ценный разработчик, который стремится изменить наше представление об играх и сторителлинге. Следующим релизом, The Witness, Блоу может укрепить свое наследие или закончить карьеру. Может ли истинное искусство процветать в индустрии с многомиллиардным доходом от лазерных пушек и плотоядных пришельцев?



Как и многие состоятельные люди, Джонатан Блоу хорошо помнит момент, когда он стал богатым. В то время, в конце 2008 года, он был в минусе на 40 000 $ и жил в скромной квартире в Сан- Франциско, более трех лет тщательно оттачивая свою видеоигру, Braid — в жанре платформер-головоломка с возможностью изменения масштаба времени. (как если бы, Super Mario Bros. встретился с Борхесом), в которую Блоу влил еще 200 000 $. Хотя Braid был выпущена и разрекламирована прессой, на августовском сервисе Microsoft’s Xbox Live Arcade, Блоу не увидел ни цента от игры, пока в один осенний день он не сел в кафе in the city’s Mission district.



«Я открыл свой веб-браузер и, святые угодники, теперь я богат», — вспоминает он. «На моем банковском счете было много нулей».

Однако, на этом сходство Блоу со средним миллионером заканчивается, потому, что в отличие от большинства богатых людей, он, кажется, слегка раздражен воспоминанием о том, как разбогател. Когда Блоу сказал мне во время типично метафизического разговора в парке возле его офиса в Беркли, что его неожиданность оказалась «абсурдной», он не имел в виду это в причудливом смысле «Можете ли вы поверить в мою удачу?» он имел в виду это в философском, разочарованно-горьком смысле глубоко ироничной шутки Провидения.

volatile vs. volatile

Reading time10 min
Views9.4K
Всем привет! Мы подготовили перевод данной статьи в преддверии старта курса «Разработчик C++»




Повесть о двух, казалось бы, похожих, но все же разных инструментах

Херб — автор бестселлеров и консультант по вопросам разработки программного обеспечения, а также архитектор ПО в Microsoft. Вы можете связаться с ним на www.gotw.ca.



Что означает ключевое слово volatile? Как его следует использовать? К всеобщему замешательству, существует два распространенных ответа, потому что в зависимости от языка, на котором вы пишете код, volatile относится к одной из двух различных техник программирования: lock-free программированию (без блокировок) и работе со «необычной» памятью. (См. Рисунок 1.)


Рисунок 1: повесть о двух технических требованиях.

Усугубляет путаницу и то, что эти два различных случая использования имеют частично совпадающие предпосылки и накладываемые ограничения, что заставляет их выглядеть более схожими, нежели они являются на самом деле. Давайте же четко определим и поймем их, и разберемся, как их правильно употреблять в C, C++, Java и C# — и всегда ли именно как volatile.
Читать дальше →

Новые фичи в Python 3.9

Reading time4 min
Views32K
Обзор лучших функций, включенных в последнюю итерацию Python.

image

Пришло время, выход новой версии Python неизбежен. Сейчас она в бета-версии (3.9.0b3), но скоро мы увидим полную версию Python 3.9.

Некоторые из новейших функций невероятно интересные, и будет восхитительно видеть их использование после релиза. Мы рассмотрим следующее:

  • Операторы объединения словарей
  • Тайп хинтинг
  • Два новых строковых метода
  • Новый Python Parser — это очень круто

Давайте сначала рассмотрим новые функции и то, как мы их будем использовать.

Объединение словарей


Одна из новых и уже моих любимых фич с синтаксисом. Если у нас есть два словаря a и b, которые нам нужно объединить, мы теперь используем операторы объединения.

У нас есть оператор слияния “|”:

a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
c = a | b
print(c)

[Out]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

И оператор обновления “|=”, который обновляет исходный словарь:

a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
a |= b
print(a)

[Out]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

Если наши словари имеют общий ключ, будет использована пара ключ-значение из второго словаря:

a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}
b = {4: 'd', 5: 'e', 6: 'but different'}
print(a | b)

[Out]: {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
Читать дальше →

Повышаем эффективность распределения точек на сфере

Reading time9 min
Views8.3K
Наложение решётки Фибоначчи (она же золотая спираль или сфера Фибоначчи) на поверхность сферы — чрезвычайно быстрый и эффективный приближенный метод равномерного распределения точек на сфере. Я продемонстрирую, как небольшие изменения, внесённые в каноническую реализацию, могут привести к значительным улучшениям показателей ближайших соседей.


Рисунок 1. Небольшая модификация канонической решётки Фибоначчи может привести к улучшению расстояния упаковки (максимального расстояния между ближайшими соседями) на 8,3%.
Читать дальше →

Strace в Linux: история, устройство и использование

Reading time17 min
Views70K


В Unix-подобных операционных системах общение программы с внешним миром и операционной системой происходит через небольшой набор функций — системных вызовов. А значит, в отладочных целях полезно бывает подсмотреть за выполняемыми процессами системными вызовами.


Следить за «интимной жизнью» программ на Linux помогает утилита strace, которой и посвящена эта статья. К примерам использования «шпионского» оборудования прилагаются краткая история strace и описание устройства подобных программ.

Читать дальше →

Как вирус Эбола научил нас работать с данными про заражения, а мы забыли все его уроки

Reading time6 min
Views42K
Меня зовут Роман Нестер, я профессор НИУ ВШЭ. Я занимаюсь данными последние 10 лет. Например, мы с партнёрами сделали стартап Segmento, который использует большие данные в рекламе, и его купил у нас «Сбербанк». Сегодня я развиваю магистратуру по управлению продуктом и маркетингом на основе данных в департаменте коммуникаций НИУ ВШЭ. Меня беспокоит бесчисленное количество статей с цифрами, выводами и решениями, связанными с коронавирусом. Нельзя забывать — мы часто ошибаемся из-за неверных данных. Пример этого — борьба с вирусом Эбола в 2014 году. Смотрю на борьбу с COVID-19, и мне кажется, что мы не выучили ни один из тех уроков.

Я хочу привести ряд цитат из моей любимой книги Factfulness шведского статистика и врача, доктора наук Ганса Рослинга. По ней мы в ВШЭ сделали, по-моему, клёвый курс по решениям, основанным на данных. И вот сейчас меня осенило — ведь то, что происходит сейчас, очень похоже на то, уже происходило 6 лет назад. Рослинг был непосредственным участником тех событий. Ощущение усилилось, когда я прочитал про московскую "Тактику устрашения", когда публикуются пугающие цифры и заголовки про заражённых.
Читать дальше →

Всесторонний статический анализ с применением продуктов Polyspace

Reading time10 min
Views3.3K

В данной публикации представлена транскрипция вебинара «Всесторонний статический анализ с применением продуктов Polyspace». Вебинар проводил Михаил Песельник, инженер ЦИТМ Экспонента).


Цель всех процессов разработки и верификации ПО заключается в том, чтобы убедиться в том, что в финальном программном обеспечении больше нет дефектов. Почему так важно убедиться, что ПО является надежным? Давайте подумаем о последствиях и затратах, связанных с ошибками в программном обеспечении.



Читать дальше →

Как забраться на дерево

Reading time20 min
Views3.2K

Picture 2

Точнее, как с него спуститься. Но обо всем по порядку. Эта статья немного выбьется из привычного формата статей от PVS-Studio. Мы часто пишем о проверке других проектов, но почти никогда не приоткрываем дверь нашей внутренней кухни. Пришло время это исправить и рассказать о том, как анализатор устроен изнутри. Точнее, о наиболее важной из его частей – синтаксическом дереве. Речь в статье пойдет о той части PVS-Studio, которая относится к языкам C и C++.
Читать дальше →

В подходе к математике столетней давности найдены новые ключи к разгадке природы времени

Reading time13 min
Views65K

Из законов физики следует, что течение времени – всего лишь иллюзия. Чтобы избежать такого заключения, нам, возможно, придётся переосмыслить реальность чисел с бесконечной точностью.



Если числа нельзя записывать бесконечными последовательностями цифр, то и будущее не предопределено

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

К примеру, в теории относительности Эйнштейна время переплетено с тремя измерениями пространства, и формирует гибкий четырёхмерный пространственно-временной континуум – "блок-вселенную", охватывающую прошлое, настоящее и будущее. Уравнения Эйнштейна описывают всё в блок-вселенной, как предрешённое с самого начала; изначальные условия космоса определяют, что будет дальше, и никаких сюрпризов не происходит – они только кажутся сюрпризами. «Для нас, верящих в физику, — писал Эйнштейн в 1955, за несколько недель до смерти, — различие между прошлым, настоящим и будущим является лишь упорной и настойчивой иллюзией».
Читать дальше →

Umka: новый статически типизированный скриптовый язык

Reading time3 min
Views16K

Только что вышла первая версия разработанного мной статически типизированного встраиваемого скриптового языка Umka. Он призван сочетать гибкость привычных скриптовых языков с защитой от ошибок типов на этапе компиляции в байт-код. Основная идея языка — Explicit is better than implicit — позаимствована из «дзена Python», однако должна приобрести здесь несколько иной и более очевидный смысл.

Сколь бы частными и субъективными ни были впечатления, побудившие меня взяться за разработку языка, я надеюсь, что замысел оказался не наивным. Под катом я кратко расскажу о возможностях языка и мотивах его создания.
Читать дальше →

Программист должен решать

Reading time5 min
Views24K


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


Программист должен решать проблемы бизнеса
Программист не должен решать задачи бизнеса


Я почти согласен с авторами обеих статей, однако есть несколько нюансов, о которых я хотел бы поделиться.


Уровни разработчиков


Начну я, пожалуй, с вопросов иерархии и уровней. Раньше я думал, что существует 3 уровня:

Читать дальше →

Программист должен решать проблемы бизнеса

Reading time4 min
Views45K

image


Недавно вышла статья, мимо которой я не мог пройти — "Программист не должен решать задачи бизнеса". Неожиданно мой комментарий вырос до мини-статьи. Я не согласен с мнением автора статьи, все сказано ниже ИМХО, с удовольствием подискутирую в комментариях. Сразу замечу, что я веб-разработчик, и все примеры я привожу в контексте своего опыта.

Читать дальше →

Зачем (не)нужны геттеры?

Reading time3 min
Views24K
Прошлая статья про сеттеры/геттеры как способ работы с сущностью (на примере Symfony в PHP) получила бурное обсуждение. В данной статье попробую выразить свои мысли отдельно по поводу геттеров: зачем и когда что-то получать, какую ответственность они решают и когда их уместно использовать, когда не уместно. Постарался собрать мысли в одном месте и формализовать их вместе с вами.

image
Изображение из блога Фаулера: TellDontAsk

Читать дальше →

Леммы о разрастании для регулярных и контекстно-свободных языков

Reading time12 min
Views13K

Две леммы о разрастании — утверждения, использующиеся для доказательства ограниченности важных классов формальных языков: регулярных и контекстно-свободных. Важность этих классов для программистов понять легко: регулярные выражения (один из видов описания регулярных языков) в работе используются достаточно часто, а уж языки программирования, синтаксис которых описывается контекстно-свободными грамматиками, и подавно.


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


План такой: разбираемся, что такое регулярные языки и какова связь между регулярными выражениями и конечными автоматами, формулируем и доказываем лемму о разрастании для регулярных языков, используем её для доказательства нерегулярности нескольких языков. Затем похожий трюк проделываем с контекстно-свободными языками, по пути выясняя, как они связаны с регулярными языками и как обходить обнаруженные ограничения при помощи грамматик общего вида. Поехали!




КДПВ иллюстрирует процесс разрастания для КС-грамматик

Читать дальше →

9 навыков программирования на Python, которые отличают новичка от опытного

Reading time9 min
Views14K
Перевод статьи подготовлен в преддверии старта курса «Разработчик Python».




Python – фантастический язык. Его синтаксис настолько прост, что вам даже не придется искать лишнюю точку с запятой в своем коде. Я бы даже сказал, что для новичка Python один из лучших языков.

Вы начинаете с обширного набора библиотек и добавляете к ним все новые и новые по мере получения опыта в программировании.

Через некоторое время вы можете почувствовать, что застряли, когда окажется, что вы написали слишком много кода для одной простой операции. На самом деле это не так плохо, как вам может показаться. Понимание логики того, над чем вы работаете, гораздо важнее, чем количество строк. Короткий код лучше, но, если при этом логика нарушена, ваш код не будет работать, как задумано. Но с опытом и творческим подходом к работе ваш код будет становиться все короче и лучше.
Читать дальше →

Сердце разработчика: девкиты Sony PlayStation 1

Reading time4 min
Views38K
Отец платформы, Кен Кутараги, проектировал PlayStation не просто как ответ на неуместные действия со стороны Nintendo, он стремился создать эталонный продукт, на который будут ориентироваться все геймдевы поколения. Учитывая опыт и ошибки ближайших конкурентов, Кутараги создал максимально дружественную разработчику систему, снискавшую в итоге феноменальный успех у геймеров девяностых. И причиной этому, с одной стороны, послужили наработки по Nintendo Play Station, с другой стороны, определённый опыт в производстве семейства компьютеров Sony Network Engineering Workstation (NEWS), но главное, неуёмное желание Кутараги создать консоль своей мечты.



Логично, что первые прототипы PlayStation под названием MW.2 (ревизия DTL-H500), а затем и доработанный MW.3 (ревизия DTL-H505) получили полностью совместимое с Sony NEWS железо, тем самым, открывая возможность к разработке первых игр для ещё проектируемой консоли. В принципе, подобная практика была не нова и активно использовалась при создании FM Towns Marty и Amiga CD32 силами Fujitsu и Commodore соответственно. MW.3 по факту был и девкитом, и самой консолью. А дабы на первых порах не пришлось мудрить с экстерьером, его полностью заимствовали у Sony NWS-3710.
Читать дальше →

Коллеги: и не друг, и не враг, а как?

Reading time16 min
Views67K
На самой заре карьеры мой молодой начальник сказал в отделе: «Дружбы на работе не бывает». У нас был классный коллектив вчерашних студентов и принять этот тезис было сложно — все мы больше походили на однокашников или garage brothers, смотрящих в безоблачное будущее. Романтика! Однако после смены верховного руководства компании нам пришлось узнать, что начальник чертовски прав — а каждый из нас стал другим, просто коллегой, конкурентом, кто-то не выдержал и ушёл… Прошло 12 лет. Я успела побывать начальником, сменила 5 официальных мест работы и примерно столько же неофициальных и, кажется, знаю, какие бывают коллеги. А вы знаете?

Читать дальше →

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity