Как стать автором
Обновить
783.05

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Xv6: учебная Unix-подобная ОС. Инструменты для сборки и запуска xv6 под QEMU

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 1.7K

Эта инструкция - приложение к книге об учебной ОС xv6.

Xv6 работает на RISC-V. Для сборки кода xv6 и запуска под QEMU понадобятся RISC-V версии инструментов: QEMU 5.1+, GDB 8.3+, GCC, и Binutils.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 2

Новости

Каково это, создавать язык программирования сегодня?

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 9.3K

«Эта книга – классика. Относитесь к ней бережно».

Такую фразу произнёс архитектор из нашей команды, передавая мне The Dragon Book. Разработкой компиляторов я увлёкся где-то 15 лет назад ещё на заре своей карьеры. Как-то раз, читая эту книгу поздно вечером, я заснул, небрежно уронив её на пол. Надеюсь, владелец не заметил небольшую вмятину на обложке после того, как я ему её вернул.

Вышла эта книжка в 1986 году. В те времена создание компиляторов было крайне сложной задачей, требовавшей обладания различными навыками в области компьютерных наук в целом и программирования в частности. Теперь, почти четыре десятилетия спустя, этой задачей занимаюсь я. Насколько сложна она сегодня? Приглашаю вместе разобрать процесс создания языка и посмотреть, насколько современные инструменты его упростили.
Читать дальше →
Всего голосов 47: ↑45 и ↓2 +43
Комментарии 2

Julia в машинном обучение: база

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 1.8K

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

Julia зародилась в 2012 году, благодаря усилиям четырех энтузиастов-разработчиков: Джефф Безансон, Стефан Карпински, Вирал Би Шах, и Алан Эдельман. Они стремились создать язык, который сочетал бы легкость Python, скорость C, динамичность Ruby, лингвистическую чистоту Lisp и возможности математических систем вроде Matlab. Им удалось! Julia – это слияние простоты и мощи.

Благодаря JIT-компиляции, код Julia может выполняться с скоростью, сопоставимой с кодом, написанным на C или Fortran.

Читать далее
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 6

Делаем RPG на Go: часть 0

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 7K

Один из самых частых вопросов в нашем сообществе разработке игр на Go — это с чего начать.


В этой серии статей мы будем изучать движок Ebitengine и создадим RPG в процессе.


Читать дальше →
Всего голосов 31: ↑30 и ↓1 +29
Комментарии 4

Истории

О применении Liquibase в проектах разработки

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 2.6K

О применении Liquibase в проектах разработки

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

Читать далее
Всего голосов 10: ↑3 и ↓7 -4
Комментарии 1

Какой тип ordering должен возвращать мой operator<=> в C++?

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 2.6K

На Хабре было опубликовано уже достаточно статей, посвященных «spaceship operator» operator<=> ([1], [2], [3], [4]) И этой статьи бы не было, если бы все они были идеальны и описывали его во всей полноте. Но ни одна из них в деталях не рассказывает: а какой тип, собственно, должен возвращать наш operator<=>, если мы реализуем его своими руками: std::strong_ordering, std::weak_ordering или std::partial_ordering? И какая вообще между ними разница?

Читать далее
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 9

Trait-объекты и полиморфизм в Rust

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 3.2K

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

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

Один из способов, с помощью которого Rust достигает полиформизма, - использование Trait-объектов.

Читать далее
Всего голосов 10: ↑6 и ↓4 +2
Комментарии 19

Async/Await в C#. Часть 5. Функция-перечисление и цикл через рекурсию, асинхронный вызов без Async/Await

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 3.1K

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

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

Читать далее
Всего голосов 6: ↑4 и ↓2 +2
Комментарии 6

Еще раз про асинхронную машину состояний и где именно там аллокации

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 11K

Несмотря на то, что про async/await уже было сказано много слов и записано множество докладов, тем не менее, в своей практике преподавания и наставничества, я часто сталкиваюсь с недопониманием устройства async/await даже у разработчиков уровня Middle+. В данной статье мы подробно рассмотрим машину состояний, сгенерированную компилятором из асинхронного метода для понимания принципа работы асинхронности в C#, разберемся где именно там аллокации и порешаем задачи для самопроверки. Если вы уже раз сто видели как выглядит асинхронная машина состояний, но все равно недопонимаете ее, тогда эта статья для вас.

Читать далее
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 5

Xv6: учебная Unix-подобная ОС. Глава 2. Устройство операционной системы

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 2.4K

Операционная система выполняет несколько процессов одновременно. ОС распределяет время работы с ресурсами компьютера между процессами. ОС даст каждому процессу шанс на выполнение, даже если число процессов больше числа процессоров.

ОС изолирует процессы друг от друга так, что ошибка в одном процессе не нарушит работу других.

ОС позволяет процессам взаимодействовать - обмениваться данными и работать совместно.

Глава 2 рассказывает, как xv6 выполняет эти требования, о процессах xv6 и как xv6 запускает первый процесс.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 6

Об объективщиках и субъективщиках

Уровень сложности Сложный
Время на прочтение 19 мин
Количество просмотров 1.5K

Все люди в мире делятся на… На кого они делятся? Этот сакраментальный вопрос все решают по-своему: философы делят на идеалистов и материалистов, биологи — на старомозговых (кто живет одной только лимбической системой) и новомозговых на тех (кто хоть иногда включает новую кору головного мозга), психологи — на эмоционалов и логиков (на людей с женским и мужским складом характера), моралисты — на злых и добрых, люди верующие — на темных и светлых, педагоги — на невежественных и образованных (“нет тьмы — есть невежество”, как говорил Шекспир) и т.д. и т.п. 

Есть и такие, кто говорит, что все люди хорошие. Или — что все плохие. Сказать так — все равно, что ничего не сказать. Это нам ничего не дает. Иные вовсе утверждают, что делить людей нельзя. Дескать, нехорошо людей делить — тут и до разжигания не далеко. Статья 282 УК РФ. 

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

Читать далее
Всего голосов 12: ↑3 и ↓9 -6
Комментарии 38

Почему некоторые проекты угасают после ухода программиста из компании

Время на прочтение 5 мин
Количество просмотров 14K

Зачастую судьба цифрового продукта заботит не только компанию, которой он принадлежит, но и специалистов, непосредственно участвовавших в его разработке. Для многих программистов (и команда beeline cloud — не исключение) проект, к которому они приложили руку, — это не просто набор кода, а настоящее детище, чья судьба не перестает волновать даже после ухода из компании. Перевели для вас статью, которая поможет обеспечить своему начинанию долгую жизнь.

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

Читать далее
Всего голосов 24: ↑14 и ↓10 +4
Комментарии 11

Программирование в Roblox для детей: как создать игру при помощи нейросети

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 1.4K

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

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Комментарии 1

Ближайшие события

Открытый урок «Behaviour Tree в Unity»
Дата 8 февраля
Время 19:00
Место
Онлайн

Outlook как сервер микросервисов

Время на прочтение 8 мин
Количество просмотров 2.2K

Доброго времени суток. 

Ты ж у нас один программист !!!
Небольшая вводная. Я для друзей, по их запросам, выгружаю данные из MS SQL Server'а. Друзья дают исходные данные, для которых надо сделать выгрузку в файлах .csv. Исходных данных (ИД) может быть от 1 до ... строк. Я загружал данные в sql таблицу с помощью задачи или Task в английской версии в SQL Server Management Studio (SSMS). Исторически сложилось, что все sql файлы со скриптами хранятся на моем ПК. Я файлы открывал в SSMS и запускал на выполнение. Результаты записывал в файл и отправлял сообщение, что обработка выполнена. Друзья забирали файлы с результатами. 

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

Читать далее
Всего голосов 9: ↑6 и ↓3 +3
Комментарии 6

Как устроена страничная организация памяти x86_64

Уровень сложности Простой
Время на прочтение 15 мин
Количество просмотров 4.7K

В этом посте я буду говорить о страничной организации только в контексте PML4 (Page Map Level 4), потому что на данный момент это доминирующая схема страничной организации x86_64 и, вероятно, останется таковой какое-то время.

Окружение

Это необязательно, но я рекомендую подготовить систему для отладки ядра Linux с QEMU + gdb. Если вы никогда этого не делали, то попробуйте такой репозиторий: easylkb (сам я им никогда не пользовался, но слышал о нём много хорошего), а если не хотите настраивать окружение самостоятельно, то подойдёт режим практики в любом из заданий по Kernel Security на pwn.college (вам нужно знать команды vm connect и vm debug).

Я рекомендую вам так поступить, потому что считаю, что самостоятельное выполнение команд вместе со мной и возможность просмотра страниц (page walk) на основании увиденного в gdb — хорошая проверка понимания.

Читать далее
Всего голосов 44: ↑44 и ↓0 +44
Комментарии 0

Разреженные структуры данных

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 7.2K

Когда-то я писал пост про различные интересные структуры данных. Среди них был т.н. sparse set. Там мы описали его в общих чертах, опустив некоторые детали (которыми позже статья была дополнена). Но кроме sparse set существуют и другие разреженные структуры данных! На них сегодня и посмотрим : )

Разредиться!
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 7

Рыночные данные в кармане: как получать их быстро и просто с помощью Java/Kotlin и Spring Boot + TinkoffApi

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 3.1K

Если вы хотите написать проект, связанный с рыночными данными или торговлей на бирже, и вы знакомы с Java или Kotlin и слышали про Spring Boot, то эта статья для вас

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 2

От безумного ассемблера до Swift: История развития языков программирования

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 6.7K

Языки прошли длинный путь. Начиная с тех дней, когда ассемблер и машинный код были единственными средствами взаимодействия с компьютеров (которых еще нельзя было никак назвать портативными), и до эпохи, когда Swift и другие современные языки программирования предоставляют разработчикам высокоуровневые абстракции и эффективные инструменты. 

История языков — хроника поиска оптимальных способов выражения логики и решения задач.

Читать далее
Всего голосов 21: ↑3 и ↓18 -15
Комментарии 6

Суровая правда о разработчиках и разработке. Part 2. Три года спустя

Время на прочтение 9 мин
Количество просмотров 5.5K

Почти три года назад, в эпистолярном порыве, написал я значит дискуссионную статью посвященному текущему состоянию рынка IT. Для нашей отрасли три года — это достаточно большой срок, поэтому самое время подвести промежуточный итог с моей не самой высокой колокольни. Побудила меня к этому статья «Вас просто стало слишком много / Хабр (habr.com) » и комменты в ней, которые почти полностью противоречат моему текущему опыту как собеседующего и собеседующегося. Хочется начать как раз с разбора тезисов статьи и комментов, сравнить их со своим опытом и проверить свои прогнозы из 2021 года.

Читать далее
Всего голосов 14: ↑10 и ↓4 +6
Комментарии 119

Что возвращает return?

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 16K

Ключевое слово return неразрывно соседствует с функциями в большинстве языков программирования. Но почему мы зовём эту инструкцию именно return, почему это «возврат»? Часто думают, что return используется здесь в смысле возврата значения из функции. Логика такая: мы хотим, чтобы функция вернула какое‑то значение, поэтому команда называется return.

Но, если задуматься, то мы найдём это странным…

Читать далее
Всего голосов 67: ↑20 и ↓47 -27
Комментарии 66

Вклад авторов