Эта инструкция - приложение к книге об учебной ОС xv6.
Xv6 работает на RISC-V. Для сборки кода xv6 и запуска под QEMU понадобятся RISC-V версии инструментов: QEMU 5.1+, GDB 8.3+, GCC, и Binutils.
Искусство создания компьютерных программ
Эта инструкция - приложение к книге об учебной ОС xv6.
Xv6 работает на RISC-V. Для сборки кода xv6 и запуска под QEMU понадобятся RISC-V версии инструментов: QEMU 5.1+, GDB 8.3+, GCC, и Binutils.
Привет, Хабр!
Julia зародилась в 2012 году, благодаря усилиям четырех энтузиастов-разработчиков: Джефф Безансон, Стефан Карпински, Вирал Би Шах, и Алан Эдельман. Они стремились создать язык, который сочетал бы легкость Python, скорость C, динамичность Ruby, лингвистическую чистоту Lisp и возможности математических систем вроде Matlab. Им удалось! Julia – это слияние простоты и мощи.
Благодаря JIT-компиляции, код Julia может выполняться с скоростью, сопоставимой с кодом, написанным на C или Fortran.
Один из самых частых вопросов в нашем сообществе разработке игр на Go — это с чего начать.
В этой серии статей мы будем изучать движок Ebitengine и создадим RPG в процессе.
О применении Liquibase в проектах разработки
Под впечатлением от недавнего обсуждения Liquibase с коллегами, и на основе ранее сложившегося впечатления о распространенном отношении к этому инструменту со стороны разработчиков, я решил написать о своем видении предназначения Liquibase, и ему подобных инструментов, в проектах разработки enterprise-приложений с использованием баз данных.
На Хабре было опубликовано уже достаточно статей, посвященных «spaceship operator» operator<=>
([1], [2], [3], [4]) И этой статьи бы не было, если бы все они были идеальны и описывали его во всей полноте. Но ни одна из них в деталях не рассказывает: а какой тип, собственно, должен возвращать наш operator<=>
, если мы реализуем его своими руками: std::strong_ordering
, std::weak_ordering
или std::partial_ordering
? И какая вообще между ними разница?
Привет, Хабр!
Полиморфизм - это принцип в программирование, который позволяет нам писать гибкий, масштабируемый и поддерживаемый код. В Rust, как и во многих других языках программирования, полиморфизм позволяет одному интерфейсу представлять множество реализаций.
Один из способов, с помощью которого Rust достигает полиформизма, - использование Trait-объектов.
В одной из предыдущих статей, посвященных анализу этого (все того же) Поста, я написал что «не возьмусь переписать всю эту хитрую логику, связанную с формированием последовательности вызовов сгенерированной функции на человеческом языке». Но подробно разбирая 5-ю главу того Поста у меня это вроде бы все-таки получилось сделать. Прошу вас оценить результаты этого труда.
Там где мне придется цитировать (назовем это так) содержание исходного текста в переводе, оно будет выделено подчеркнутым курсивом.В предыдущей статье я попробовал поэкспериментировать с особым форматированием, но это не всегда удобно читателю, на сколько я понимаю.
Несмотря на то, что про async/await
уже было сказано много слов и записано множество докладов, тем не менее, в своей практике преподавания и наставничества, я часто сталкиваюсь с недопониманием устройства async/await
даже у разработчиков уровня Middle+. В данной статье мы подробно рассмотрим машину состояний, сгенерированную компилятором из асинхронного метода для понимания принципа работы асинхронности в C#, разберемся где именно там аллокации и порешаем задачи для самопроверки. Если вы уже раз сто видели как выглядит асинхронная машина состояний, но все равно недопонимаете ее, тогда эта статья для вас.
Операционная система выполняет несколько процессов одновременно. ОС распределяет время работы с ресурсами компьютера между процессами. ОС даст каждому процессу шанс на выполнение, даже если число процессов больше числа процессоров.
ОС изолирует процессы друг от друга так, что ошибка в одном процессе не нарушит работу других.
ОС позволяет процессам взаимодействовать - обмениваться данными и работать совместно.
Глава 2 рассказывает, как xv6 выполняет эти требования, о процессах xv6 и как xv6 запускает первый процесс.
Все люди в мире делятся на… На кого они делятся? Этот сакраментальный вопрос все решают по-своему: философы делят на идеалистов и материалистов, биологи — на старомозговых (кто живет одной только лимбической системой) и новомозговых на тех (кто хоть иногда включает новую кору головного мозга), психологи — на эмоционалов и логиков (на людей с женским и мужским складом характера), моралисты — на злых и добрых, люди верующие — на темных и светлых, педагоги — на невежественных и образованных (“нет тьмы — есть невежество”, как говорил Шекспир) и т.д. и т.п.
Есть и такие, кто говорит, что все люди хорошие. Или — что все плохие. Сказать так — все равно, что ничего не сказать. Это нам ничего не дает. Иные вовсе утверждают, что делить людей нельзя. Дескать, нехорошо людей делить — тут и до разжигания не далеко. Статья 282 УК РФ.
Вообще говоря, делением окружающих на категории каждый, хочет он того или нет, начинает заниматься еще в ранние школьные годы, когда впервые сталкивается с людьми, которые принципиально отличаются от него самого, не совместим с его системой ценностей. Чтобы примириться с этим шокирующим фактом и объяснить себе, в чем лежит эта несовместимость и где стоит искать точки соприкосновения, человек и начинает расспрашивать знакомых, прислушиваться к разговорам, искать и анализировать другие похожие случаи в литературе, фильмах. То есть фактически ведет вполне себе исследовательскую работу длиною в жизнь. Поэтому запрещать делить людей на категории равносильно запрещению думать о людях, запрету думать в принципе. Подобные запретители могут дальше не читать.
Зачастую судьба цифрового продукта заботит не только компанию, которой он принадлежит, но и специалистов, непосредственно участвовавших в его разработке. Для многих программистов (и команда beeline cloud — не исключение) проект, к которому они приложили руку, — это не просто набор кода, а настоящее детище, чья судьба не перестает волновать даже после ухода из компании. Перевели для вас статью, которая поможет обеспечить своему начинанию долгую жизнь.
В статье речь пойдет об одной из основных причин гибели проекта после ухода программиста. Несколько практических примеров из реальной жизни помогут вам избежать подобной ситуации.
Программирование в Roblox для детей – это распространенное увлечение среди современных школьников, интересующихся компьютерными играми. Виртуальная вселенная, населенная миллионами игроков из разных уголков планеты, стала настоящим феноменом в мире детского досуга. Школьники получили возможность не только проводить время в популярных играх, но и разрабатывать собственные виртуальные миры, учиться программированию и создавать уникальную трехмерную графику. Благодаря Roblox каждый ребенок может стать геймдизайнером и воплотить мечту о разработке собственной игры.
Доброго времени суток.
Ты ж у нас один программист !!!
Небольшая вводная. Я для друзей, по их запросам, выгружаю данные из MS SQL Server'а. Друзья дают исходные данные, для которых надо сделать выгрузку в файлах .csv. Исходных данных (ИД) может быть от 1 до ... строк. Я загружал данные в sql таблицу с помощью задачи или Task в английской версии в SQL Server Management Studio (SSMS). Исторически сложилось, что все sql файлы со скриптами хранятся на моем ПК. Я файлы открывал в SSMS и запускал на выполнение. Результаты записывал в файл и отправлял сообщение, что обработка выполнена. Друзья забирали файлы с результатами.
Но в один творческий день пришла идея автоматизировать этот процесс, чтобы Друзья все делали сами, с минимальным моим участием.
В этом посте я буду говорить о страничной организации только в контексте PML4 (Page Map Level 4), потому что на данный момент это доминирующая схема страничной организации x86_64 и, вероятно, останется таковой какое-то время.
Окружение
Это необязательно, но я рекомендую подготовить систему для отладки ядра Linux с QEMU + gdb. Если вы никогда этого не делали, то попробуйте такой репозиторий: easylkb (сам я им никогда не пользовался, но слышал о нём много хорошего), а если не хотите настраивать окружение самостоятельно, то подойдёт режим практики в любом из заданий по Kernel Security на pwn.college (вам нужно знать команды vm connect
и vm debug
).
Я рекомендую вам так поступить, потому что считаю, что самостоятельное выполнение команд вместе со мной и возможность просмотра страниц (page walk) на основании увиденного в gdb — хорошая проверка понимания.
Когда-то я писал пост про различные интересные структуры данных. Среди них был т.н. sparse set. Там мы описали его в общих чертах, опустив некоторые детали (которыми позже статья была дополнена). Но кроме sparse set существуют и другие разреженные структуры данных! На них сегодня и посмотрим : )
Если вы хотите написать проект, связанный с рыночными данными или торговлей на бирже, и вы знакомы с Java или Kotlin и слышали про Spring Boot, то эта статья для вас
Языки прошли длинный путь. Начиная с тех дней, когда ассемблер и машинный код были единственными средствами взаимодействия с компьютеров (которых еще нельзя было никак назвать портативными), и до эпохи, когда Swift и другие современные языки программирования предоставляют разработчикам высокоуровневые абстракции и эффективные инструменты.
История языков — хроника поиска оптимальных способов выражения логики и решения задач.
Почти три года назад, в эпистолярном порыве, написал я значит дискуссионную статью посвященному текущему состоянию рынка IT. Для нашей отрасли три года — это достаточно большой срок, поэтому самое время подвести промежуточный итог с моей не самой высокой колокольни. Побудила меня к этому статья «Вас просто стало слишком много / Хабр (habr.com) » и комменты в ней, которые почти полностью противоречат моему текущему опыту как собеседующего и собеседующегося. Хочется начать как раз с разбора тезисов статьи и комментов, сравнить их со своим опытом и проверить свои прогнозы из 2021 года.
Ключевое слово return
неразрывно соседствует с функциями в большинстве языков программирования. Но почему мы зовём эту инструкцию именно return, почему это «возврат»? Часто думают, что return используется здесь в смысле возврата значения из функции. Логика такая: мы хотим, чтобы функция вернула какое‑то значение, поэтому команда называется return.
Но, если задуматься, то мы найдём это странным…
Ваш аккаунт