Все потоки
Поиск
Написать публикацию
Обновить
226.22

C *

Типизированный язык программирования

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

Начальная генерация пещер

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

Всем привет, в 3D графике помимо решения задач тени/света, и примитивов, а так же физики и возможно каких-то базовых задач, которые сегодня могут заменить библиотеки по математике, стоит отметить генерацию поверхностей. Какие-то поверхности впуклые, какие-то поверхности выпуклые, поверхности можно комбинировать. Как это влияет на процесс в графике? Например, иммерсив - погружение. Влияет следующим образом, конечно все вкусы учесть невозможно. Задаём какие-то характеристики, которые характеризуют площадь поверхности и далее если она "подходит" в целом по ощущениям и по логике, её можно использовать как декорацию, возможно оптимизировав - если постараться, или оставить как есть. В этой статье хочу продемонстрировать как удалось добиться генерации пещер, конечно при помощи открытых источников все источники будут указаны в конце обзора, гит.

Итак, приступим

Читать далее

Самый странный лексический синтаксис, который я обнаружила, исследовав 42 языка программирования

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

Программирование — это не только алгоритмы и логика, но и удивительное разнообразие синтаксиса языков. Работая над новым средством подсветки синтаксиса для llamafile, разработчик Justine Tunney* исследовала 42 языка программирования — от классического C и экзотического Tcl до мощного Ruby. 

Justine делится своими открытиями о том, насколько причудливым и непредсказуемым может быть лексический синтаксис. Например, триграфы в C — устаревший инструмент для поддержки клавиатур с ограниченными символами, фиксированные длины строк в FORTRAN, вложенные комментарии в Haskell или строки с двойными квадратными скобками в Lua. Ruby вообще оказался чуть ли не самым сложным языком для подсветки из-за его контекстно-зависимого синтаксиса.

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

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис

Читать далее

RuStore не так уж и плох, как PirateStore

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

Могут ли современные тренды превратить keygen (Генератор ключей) в легальный инструмент, доступный для скачивания из любого Android или iPhone маркетплейса?!

Выгодно ли тому же ruStore размещать у себя пиратский контент?!

Как можно докатиться до Android разработчика, будучи разработчиком Windows приложений?!

Читать далее

Кросскомпилируем под macOS с OSXCross

Время на прочтение7 мин
Количество просмотров776

Давно интересовал вопрос возможности кросскомпиляции под macOS. Как оказалось, на самом деле это не составит особых проблем.

В этой статье мы установим тулчейн, а так же кросскомпилируем пару учебных примеров на языках C и Rust. В качестве host будет выступать Ubuntu 24.04 на amd64, а в качестве target - macOS 14 (Sonoma) на Apple Silicon.

Читать далее

tuple в CPython – мутабельный! И другие шокирующие детали из C-шной реализации

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

Привет! Меня зовут Никита Соболев, я core-разработчик языка программирования CPython, а так же автор серии видео про его устройство.

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

Под катом будет про: мутабельность кортежей (и планы по отмене такого поведения), дичь с ctypes, переиспользование памяти и другие оптимизации.

Ну и конечно – мое полное видео на полтора часа, где будет множество дополнительной информации о деталях работы VM.

Если вам такое интересно или целиком незнакомо – добро пожаловать!

Читать далее

Операционная система в 1 000 строках кода (часть 1)

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

Всем привет! В этой небольшой книге (серии статей, — прим. пер.) мы с нуля, шаг за шагом, напишем скромную ОС.

▍ Навигация по частям



Вы можете насторожиться, услышав, что разработка ОС или ядра, в частности, их базовых функций на удивление проста. Даже система Linux, которая воспринимается как масштабный опенсорсный проект, на стадии версии 0.01 включала всего 8 413 строк кода. Сегодня ядро Linux действительно огромно, но начиналось оно, как и типичный хобби-проект, с крохотной базы кода.

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

Но сразу предупрежу — процесс окажется не так прост, как выглядит на первый взгляд. Самой сложной частью создания собственной ОС является отладка. И мы не сможем использовать для этого printf, пока её не реализуем. Здесь вам потребуется освоить различные техники и приёмы отладки, которые в разработке ПО вы никогда не использовали. В частности, начиная «с нуля», вы будете встречать сложные этапы вроде процесса загрузки и страничной организации памяти. Но не пугайтесь, «отлаживать ОС» мы тоже научимся!

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

Внутрипроцессная трассировка системных вызовов с использованием цепочного загрузчика

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

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

Именно на примере системных вызовов удобно продемонстрировать цепочную загрузку, и на то есть три причины...

Читать далее

Крестики-нолики на printf

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

Представляем вам реализацию игры в крестики-нолики на С с помощью одного вызова printf. Написана для участия в IOCCC в 2020 году.

Читать далее

Упрощаем «простой» ELF

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

Давайте-ка напишем простую программу для Linux. Насколько трудной она может быть? Только тут надо учесть, что простота противоположна сложности, но не трудности*, и создать нечто простое на удивление трудно. А что останется, если избавиться от сложности стандартной библиотеки, всех современных средств безопасности, отладочной информации и механизмов обработки ошибок?
Читать дальше →

Можно ли собрать в одном большом гайде всё, что полезно знать о языке C и его применениях

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

Мне показалась очень интересной тема открытая в недавней статье

Собрал в одном большом гайде всё, что хотел бы знать, когда изучал язык C

 Во вступлении там написано:

"Очевидный факт: язык C — это основа большого количества современных экосистем программирования. Он обеспечивает фундамент многих операционных систем, базовых библиотек и системных инструментов."

Мне кажется полезно все таки обозначить в каком смысле язык C — это основа, и чем он обеспечивает фундамент. Я рад что имею возможность сформулировать что-то в данном направлении не со слов иностранного авторитета, а не базе собственного опыта который, тем не менее, формировался на основе анализа-применения действующих решений-теорий сформулированных во многом иностранными специалистами, но надеюсь с примесью собственной креативности в какой-то степени. Ну и хочется озвучить свой ответ на вопрос: "Когда C — идеальный выбор?", может в интерпретации: "А бывает ли язык Си идеальным выбором?"

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

Читать далее

Сонар из Диктофона

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

Что если из диктофона сделать акустический локатор?

В этом тексте я попробовал использовать два смартфона в качестве сонара.

Все вычисления осуществлены в пост обработке.

Читать далее

Собрал в одном большом гайде всё, что хотел бы знать, когда изучал язык C

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

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

Своим постом автор Jenny Jam* пытается заполнить этот пробел. Он рассуждает, когда C — идеальный выбор, а когда лучше обратиться к другим языкам. Описывает, как настроить среду разработки и выбрать инструменты, разобраться в версиях, особенностях сборки и тонкостях работы с библиотеками.

Цель статьи — упорядочить представление о языке C и его экосистеме, и, конечно, дать практические советы, которые пригодятся в реальных проектах.

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис

Читать далее

Можно ли уместить игру Minecraft всего в один QR-код?

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

Ответ: да! И вот же он:

Игра запускается, и вы можете перемещаться по миру 64x64x64 при помощи клавиш WASD. Пробелом прыгаем, мышью осматриваемся. Щёлкнув левой кнопкой мыши, можно разрушить блок, а правой — установить землю.

Можно просмотреть QR-код при помощи следующей команды под Linux:

zbarcam -1 --raw -Sbinary> /tmp/m4k &&chmod +x /tmp/m4k  && /tmp/m4k

-1: выйти после того, как код будет просканирован

--raw: не обрабатывать его как текст

--Sbinary: воспользоваться двоичной конфигурацией

Проект выложен на GitHub здесь:TheSunCat/Minecraft4k

Читать далее

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

Программирование в машинных кодах

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

Я остался под впечатлением от прочитанной первой или второй главы про хакерство в книге Криса Касперского «Техника отладки программ без исходных текстов».

Хоть я и знал о том, что раньше писали в машинных кодах, но когда Крис так подал интересно материал, что я замотивировался сделать небольшой компьютер эмулятор, который бы позволял обрабатывать мой машинный код. Тут дело проще чем кажется, так как я решил взять всего 16 инструкций для этого дела. Плюс ко всему я как‑то давно мечтал сделать hex редактор на ncurses, но каждый раз не было смысла его делать просто так, а теперь сделал.

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

Читать далее

Стековая виртуальная машина на языке Си

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

Разработка виртуальных машин может быть не только интересным занятием на вечер, но также и полезным приложением при обучении студентов языку ассемблера на предметах ОАиП (основы алгоритмизации и программирования) и ААС (архитектура аппаратных средств). Целью данной статьи станет создание простой стековой виртуальной машины с собственным языком ассемблера, способным выполнять операции условного и безусловного переходов, инкрементирования и декрементирования чисел, загрузки и выгрузки значений в стек. Машина получится минималистичной и будет обладать лишь 10-ью инструкциями, на основе которых можно будет далее вполне корректно создать собственный высокоуровневый язык программирования.

Читать далее

RP2040. Асинхронный вывод в UART по прерываниям

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

Это статься для «ардуинщиков» на платформе RP2040. В ней расскажу, как программировать асинхронный вывод в UART на C с помощью прерываний. А также затрону тему почему я выбрал для себя PR2040 и мигрировал на него с платформы STM32.

Читать далее

Использование Assembler'a. Фишка 1

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

Решил по мере сил делиться примерами использования ассемблера в своих проектах. Я не буду рассуждать о том, надо это или не надо конкретно в вашем проекте. Просто показываю, а выводы делаете вы сами.

Читать далее

​Как создать собственное расширение компилятора C++

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


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

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

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

Обновление датчиков присутствия

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

В марте этого года я написал статью о датчике присутствия на сенсоре LD-2410. Он вполне себе пошел в массы и с учетом пожеланий пользователей я стал его дорабатывать.

Читать далее

Судный день: топ-10 ошибок в C и C++ проектах за 2024 год

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

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

Читать далее

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