Pull to refresh
4
0

Пользователь

Send message

Создание процессора с нуля для чайников

Reading time18 min
Views52K

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

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

В данной статьей мы пройдем путь создания процессора от единичного транзистора до работающего 8-битного процессора, и напишем свой ассемблер для него.

Читать далее

Микрообучение при просмотре фильмов на английском языке. Это возможно?

Level of difficultyEasy
Reading time4 min
Views13K

Для начала, давайте рассмотрим концепт микрообучения. В принципе, здесь всё просто: вам нужно отработать навык — вы дробите его на более мелкие кусочки и отрабатываете по кусочку за один раз. Микрообучение также подразумевает, что человек занимается не стандартно, по 45–60 минут два раза в неделю, а, например, по 10–15 минут ежедневно, что для многих взрослых студентов более удобно.

Я возьму аудирование. На занятии с учебником преподаватель берёт стандартное аудио, начитанное актёрами с достаточно медленной понятной речью. Вы проходите несколько этапов:

Читать далее

Открытый онлайн-курс по цифровой схемотехнике: от истоков до первого устройства

Level of difficultyEasy
Reading time4 min
Views21K

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

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

Читать далее

Компилятор за выходные: наконец-то ассемблер

Level of difficultyMedium
Reading time8 min
Views9K

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

Ну а когда оно заработает, предлагаю решить задачу: как сэмулировать побитовые операции and-not-xor-or при помощи четырёх арифметических.

Читать далее

Побеждаем компилятор в скорости при помощи ассемблера

Level of difficultyMedium
Reading time13 min
Views8.9K

В наше время все знают, что писать ассемблерный код — занятие для дураков. Компиляторы — это результат буквально человеко-веков разработки, и они понимают процессор гораздо лучше, чем вы.

Тем не менее, иногда до нас доносятся слухи.

Написанные в древних томах, подслушанные в тайных покоях, начертанные на стенах разрушенных храмов, упоминаемые в загадочных текстах, они рисуют чёткую картину:

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

Культурно-независимый тест интеллекта повышенной сложности

Level of difficultyHard
Reading time2 min
Views4.6K
Виктор Серебряков (17 октября 1912 — 1 января 2000) был одним из первых членов Mensa.

Менса (лат. Mensa — «стол») — крупнейшее и старейшее общество людей с высоким коэффициентом интеллекта; некоммерческая организация, открытая для всех, кто сдал стандартизованные тесты на IQ лучше, чем 98 % населения. Тест должен сдаваться в присутствии наблюдателей.



Это «культурно-независимый тест интеллекта повышенной сложности».
Тест для измерения высокого IQ (до 160 баллов) был изобретен выдающимся английским исследователем интеллекта Виктором Серебряковым.
Текст программы для Windows разработан на языке Flat Assembler. Это я :)
Но что важно — дана экзешник!

splushka.narod.ru/IQ-fasm.zip
Читать дальше →

Теория сознания

Level of difficultyMedium
Reading time35 min
Views13K

Предлагать теории сознания очень неблагодарное занятие, потому, что практически каждый считает себя специалистом в этом вопросе и имеет своё мнение. Ведь сознание это то с чем каждый имеет дело, каждый так или иначе его воспринимает непосредственно, а поэтому точно знает, что это такое. Эта тема всегда вызывает много критики и споров. Но, если разобраться, то даже слово «сознание» не имеет общепринятого определения. Словом «сознание» обозначают состояние бодрствования, говоря: «человек в сознании» или «человек без сознания», а иногда в это слово вкладывается нечто более глубокое то, что позволяет воспринимать окружающий мир и осознавать себя и свое положение в этом мире, процесс мышления и всего такого.

Получается много споров о том, что каждый воспринимает субъективно, и что объективно никак не измерить. Плюс существует много кандидатов на теорию сознания и их апологетов, зачастую эти теории весьма абстрактны и непонятны. Главное, что эти гипотезы о сознании обычно игнорируют главный критерий истинности теории сознания — связь субстрата мозга с сознанием. Теория сознания должна опираться на физическую основу работы живых клеток, сетей нейронов, конкретной активности нервной ткани. Все аспекты теории должны иметь, хотя бы теоретическую, возможность воспроизведения.

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

Читать далее

UB или не UB – вот в чём вопрос: как gcc и clang обрабатывают статически известное неопределённое поведение

Reading time7 min
Views3.6K

Недавно у нас в команде зашла дискуссия о неопределённом поведении (UB) в C. Напомню для тех, кто не знает: если мы пишем такой код, эффект от выполнения которого (и события в процессе его выполнения) строго не определён в спецификации языка, то возникает неопределённое поведение. Таким образом, встретив такой код, компилятор может действовать по собственному усмотрению, и нет никаких гарантий, что выполнение этого кода пойдёт по предсказуемому пути. Следовательно, нужно избегать неопределённого поведения любой ценой, поскольку мало того, что оно может приводить к глюкам программы, но и часто становится источником уязвимостей и угрозой безопасности. Примеры кода, в котором проявляется неопределённое поведение: выход за границы массива при его индексировании, целочисленное переполнение, деление на ноль, разыменование указателя на null [1].

Компиляторы нередко пользуются неопределённой семантикой языка, чтобы делать те или иные допущения о программе. Например, если написать что-то вроде int x = y/z, компилятор может предположить, что z не может быть равно нулю, так как деление на ноль приводит к неопределённому поведению, а программист явно не собирался писать такой код. На основе этой информации он может попытаться далее оптимизировать программу так:

Читать далее

Структуры и классы в C++ и D

Level of difficultyMedium
Reading time21 min
Views10K

Реализации объектно-ориентированного программирования в разных Си-подобных языках, конечно, похожи, и все такие языки, созданные после C++, пытаются сделать ООП более удобно используемым. Сравним в этой статье ООП в D и С++.

Читать далее

Книги, которые нас выбирают

Level of difficultyEasy
Reading time6 min
Views21K

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

Я не планировал продолжать эту тему, но сейчас вижу, что кое в чем, статью надо дополнить. Это дополнение не будет повторять или расширять статью очередными мыслями и наблюдениями; все это в ней уже есть и добавить мне нечего. Просто, читая комментарии, я понял, что об одной детали я упомянул, но толком не рассказал. Из‑за чего у части комментаторов возникли сомнения в сегодняшней ценности книг, доступных мне в то время, когда я начинал карьеру программиста. Мне кажется, это не очень справедливо и хотя я, бесспорно, не объективен, но, тем не менее, решил немного об этом рассказать.

Я расскажу о тех книгах, что были мне доступны в 1987–1993 гг., т. е. тогда, когда я совмещал работу инженера с программированием. Конечно, я упомяну только те книги, что мне действительно помогли; полный список литературы слишком обширен и упоминание их всех больше походило бы библиотечный каталог, чего я делать не намерен. Условно эти книги можно отнести к одной из нижеследующих категорий. Итак — вот мой «золотой фонд».

Читать далее

Создание собственного компилятора

Level of difficultyMedium
Reading time17 min
Views20K

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

В рамках данной статьи будет написан простой компилятор на C++, транслирующий код в ассемблер для MS-DOS, а также опробован на реальных боевых задачах.

Читать далее

Решаем криптографическую задачу: Из России с любовью

Level of difficultyEasy
Reading time5 min
Views5K

Ранее в блоге FirstVDS уже была статья с разбором решения криптографической задачи с MysteryTwister. В этом топике разберём задачу с довольно многозначительным названием «Из России с любовью» ("From Russia with Love"). Автор задачи Sansibar.

Задание достаточно простое, и основано на шифре простой замены (подстановки), а конкретно на шифре с использованием кодового слова (при таком образовании шифралфавита ключевое слово пишется сначала, затем пишутся остальные буквы алфавита по порядку кроме букв, использованных в ключе). Есть две основные проблемы стойкости шифров замены: простота формирования шифралфавита и чувствительность к частотному анализу. В нашей задаче допущен ещё один очень серьёзный с точки зрения уязвимости пробел. А именно, не используется блочный метод шифрзаписи, который позволил бы скрыть границы слов в исходном тексте.

Перейдём к задаче

5 обучающих игр для разработчиков

Reading time3 min
Views15K

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

Читать далее

Предварительные секции: что спрашивают у разработчиков С++ на собеседовании в Яндексе

Level of difficultyMedium
Reading time5 min
Views14K

Хабр, привет! Меня зовут Владимир Михайлов, я занимаюсь бэкендом в Яндекс Такси — мы создаём внутренние продукты, которые используют в разных юнитах Яндекса. Также я работаю наставником на курсах «Разработчик C++» и «C++ для бэкенда» в Яндекс Практикуме. 

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

Читать далее

Опасность устарела: несколько важных нюансов в новых стандартах C++

Reading time16 min
Views16K
Undefined behavior (UB) — боль, знакомая каждому разработчику со стажем; эдакий «код Шредингера», когда не знаешь, правильно тот работает или нет. К счастью, стандарты языка С++20/23/26 привнесли относительно неопределенного поведения кое-что новое. И довольно важное, если вы — архитектор ПО, а «плюсы» — ключевой стек вашей компании (подробнее о том, как и почему мы в «Лаборатории Касперского» много используем С++, читайте здесь).

В этой статье я со своих позиций Senior Software Architect и Security Champion в микроядерной операционной системе KasperskyOS рассмотрю кейсы-ловушки, в которые можно попасть практически в любом из стандартов, и покажу, что меняется в С++20/23/26, — уменьшается ли количество кейсов с неопределенным поведением, и становится ли С++ безопаснее.


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

Дайте мне 15 минут, и я изменю ваш взгляд на GDB

Level of difficultyMedium
Reading time6 min
Views19K

Материал подготовлен на основе выступления с CppCon 2015 "Greg Law: Give me 15 minutes & I'll change your view of GDB" (доступно по ссылке ). Многие моменты я изменял и корректировал, поэтому учтите, что перевод достаточно вольный.

И да, вынесем за скобки вопрос о том, насколько GDB в целом удобная или неудобная программа, и что в принципе лучше использовать для дебаггинга: в данной статье будет рассматриваться именно работа с GDB.

В статье будет рассматриваться отладка кода на C в ОС Linux.

Читать далее

Нативная рефлексия в C++ уже близко

Level of difficultyMedium
Reading time5 min
Views14K

Почему в 2024 году нам приходится писать каст енума к строке вручную, для каждого кастомного типа нужна своя функция логирования, а биндинги к C++ библиотеке требуют кучу повторяющегося кода?

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

Сегодня рассматриваем пропозалы рефлексии, которые с большОй вероятностью попадут в следующий стандарт - C++26.

Читать далее

Создание парсеров на Rust

Level of difficultyEasy
Reading time7 min
Views6.1K

Привет, Хабр!

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

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

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

Читать далее

Избранные задачи по алгебре с экзаменов в ШАД

Level of difficultyMedium
Reading time4 min
Views9.4K

В этой статье мы разберём несколько важных идей, которые неоднократно применялись в задачах по алгебре на вступительных экзаменах в ШАД. Мы намеренно выбрали далеко не самые сложные задачи, ведь за гробовые задачи мало кто берётся на экзаменах в условиях ограниченного времени. Наша задача — обратить внимание на важные идеи линейной алгебры, знание которых составители нередко ожидают от поступающих. Зная эти идеи, решить задачи будет совсем легко. В противном случае придётся снова "изобретать велосипед" или искать какие-то обходные пути.

Читать далее

Сериализация данных в C++ с библиотекой Cereal

Level of difficultyEasy
Reading time5 min
Views5K

Привет, Хабр!

Сегодня рассмотрим библиотеку Cereal в C++, которая позволяет сохранять и загружать состояние объектов, не теряя производительности.

Cereal — это заголовочная библиотека для C++, предназначенная для сериализации данных. Она поддерживает XML и JSON. Помимо этого поддерживает практически все стандартные типы данных в C++ и имеет инструменты для работы с пользовательскими типами. В отличие от, например, библиотек Boost, Cereal не требует сложных настроек и имеет интуитивно понятный синтаксис, знакомый юзерам Boost.

Читать далее

Information

Rating
7,220-th
Registered
Activity