Как стать автором
Обновить
Сначала показывать

Увлекательный лексический анализ языка Rust

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

Давайте поговорим о лексическом анализе. Сначала я собирался назвать этот пост «Реализуем токенайзер», но ветер переменился, времена изменились… и, чтобы не утонуть в потоке комментариев вида «фыр, а где мой BPE-токенизатор LLama, который вы мне обещали», ограничимся пока лексическим анализом.

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

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

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

Довольно слов, приступим.

Читать далее
Всего голосов 18: ↑16 и ↓2 +14
Комментарии 5

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

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 6.1K
Когда я только начинал изучать компиляторы, я не понимал одного важного момента: Разработка языка программирования и написание компилятора — это два почти совершенно разных навыка. Конечно, между ними есть некоторое пересечение, но меньшее, чем может показаться на первый взгляд!

Я думаю, что это важно знать, потому что обе эти задачи очень сложны! Легче овладеть этими навыками, если решать их по очереди. Ваше первое решение сложной задачи, скорее всего, будет… ну, не таким хорошим, как десятое! Однако довольно часто разработчики создают игрушечный язык, когда пишут свой первый компилятор, а это значит, что они совершают ошибки и учатся сразу на двух сложных проблемах. Хуже того, эти две проблемы взаимосвязаны: Ошибка в одной из них усложняет жизнь в другой. Кроме того, как мы увидим, хотя компиляторы и сложны на первых порах, они, по сути, являются решенной проблемой, в то время как разработка языка программирования — это, скажем так, область продолжающихся исследований.
Читать дальше →
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 5

Книга «C++ для начинающих. 2-е изд."

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 7.7K
image Привет, Хаброжители!

Книга Герберта Шилдта начиная с таких базовых понятий языка, как типы данных, массивы, строки, указатели и функции, книга охватывает также важнейшие элементы объектно-ориентированного программирования — классы и объекты, наследование, виртуальные функции, потоки ввода-вывода, исключения и шаблоны. Каждый раздел сопровождается простыми и наглядными примерами, позволяющими получить практические навыки программирования. Книга предназначена для приступающих к изучению языка С++ — одного из самых универсальных и распространенных на сегодня языков программирования.
Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 5

Как я пишу на C по состоянию на конец 2023 года

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 24K
Этот год выдался переломным для моих навыков по программированию на C. Можно сказать, что я пережил слом парадигмы, что побудило меня пересмотреть привычки и весь стиль программирования. Это была крупнейшая метаморфоза моего личного профессионального стиля за долгие годы, так что я решил написать этот пост в качестве «мгновенного снимка» моих нынешних суждений и профессионального существования. Эти перемены во многом пошли на пользу моей продуктивности и организованности, поэтому, при всей субъективности того, что я скажу, в посте наверняка будут описаны и вполне объективные вещи. Я не утверждаю, что на С нужно писать именно так, как рассказано ниже, а я сам, выступая контрибьютором некоторого проекта, придерживаюсь того стиля, который там заведен. Но описанные ниже приёмы, как оказалось, очень пригодились мне при работе.
Читать дальше →
Всего голосов 49: ↑37 и ↓12 +25
Комментарии 91

Черная пятница в издательстве «Питер»

Время на прочтение 1 мин
Количество просмотров 12K
image

Добрый день, Хаброжители!

Настало время больших скидок, подробности внутри…
Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 7

Книга «BPF: профессиональная оценка производительности»

Время на прочтение 19 мин
Количество просмотров 1.6K
image Привет, Хаброжители!

Инструменты оценки производительности на основе BPF дают беспрецедентную возможность анализа систем и приложений. Вы сможете улучшить производительность, устранить проблемы в коде, повысить безопасность и сократить расходы. Книга «BPF: профессиональная оценка производительности» — ваш незаменимый гайд по применению этих инструментов.

Брендан Грегг — эксперт и пионер проекта BPF — представляет более 150 готовых инструментов анализа и отладки, рекомендации по их применению, а также пошаговые инструкции по разработке ваших собственных инструментов. Вы узнаете, как анализировать процессоры, память, дисковый ввод/вывод, файловую систему, сети, языки программирования, приложения, контейнеры, гипервизоры, безопасность и ядро. Вы сможете выработать глубокое понимание того, как улучшить буквально любую Linux-систему или приложение.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 1

Книга «Настоящий CTO: думай как технический директор»

Время на прочтение 20 мин
Количество просмотров 3.9K
image Привет, Хаброжители!

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

Книга на примерах из реальной практики показывает, как преуспеть в быстро меняющейся роли технического директора. Прочитав ее, вы научитесь создавать успешные технологические платформы и формировать эффективные команды, грамотно выбирать и внедрять программные продукты, проводить собеседования и перформанс ревью в беспристрастной манере, а также сможете по праву занять место за столом топ-менеджмента. Вы оцените деловые советы, идеи и истории из практики от наставника CTO Алана Уильямсона.
Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 6

Издательство Питер. Колонка редактора

Время на прочтение 4 мин
Количество просмотров 4.7K
image

Привет, Хаброжители!
Предлагаем ознакомиться с краткими обзорами новинок, отправленных в типографию.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 3

Регулярные выражения — это не трудно

Время на прочтение 6 мин
Количество просмотров 22K
image

Регулярные выражения имеют дурную славу из-за присущей им сложности. Это справедливо, но я также считаю, что если сосредоточиться на определенном ключевом подмножестве регулярных выражений, то это не так уж и сложно. Большая часть трудностей возникает из-за различных «шорткатов», которые трудно запомнить. Если не обращать на них внимания, то сам язык достаточно мал и хорошо переносится из одного языка программирования в другой.

Знать regex стоит потому, что с его помощью можно добиться очень многого, используя очень мало кода. Если я пытаюсь с помощью обычного процедурного кода воспроизвести то, что делает моё выражение, то код часто получается очень пространным, полным багов и тормознутым. Могут потребоваться часы или дни, чтобы найти альтернативное решение, а ведь можно было за пару минут написать regex.
Читать дальше →
Всего голосов 18: ↑14 и ↓4 +10
Комментарии 21

Конкурентный отказ

Время на прочтение 11 мин
Количество просмотров 3.6K
Любая задача может быть завершена несколькими способами:
  1. Нормальное завершение, после которого мы получаем результат (например, Ничего/Единица).
  2. Сообщение об ошибке.
  3. Принудительное завершение, после которого программа может остаться в неопределённом состоянии.

В корутинах Python есть известные точки для безопасной приостановки выполнения. Пользуясь ими, можно автоматически подводить программу к результатам #1 и #2. Поскольку приостановка потоков происходит по принципу вытеснения, именно программист, реализующий потоки, отвечает за достижение результатов #1 и #2. При работе с потоками всегда сохраняется вероятность исхода #3 – поток может быть уничтожен извне, а задача этого даже не заметит, и не получит ни одного шанса осуществить очистку после выполнения и аккуратно завершиться. С потоками существуют две фундаментальные проблемы: (A) невозможно узнать, когда их работа может быть прервана из-за переключения контекста в операционной системе и (B) никогда не угадаешь, когда поток может быть принудительно завершён. Поэтому при работе с потоками принято писать код так, чтобы A и B не имели значения. При конкурентной обработке это неприемлемо, поэтому, если речь идёт о конкурентности, то вариант #3 мы должны полностью исключить.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 3

Книга «Искусство Agile-разработки. Теория и практика гибкой разработки ПО»

Время на прочтение 13 мин
Количество просмотров 4.4K
image Привет, Хаброжители!

Большинство компаний, разрабатывающих ПО, якобы используют Agile, но на самом деле не понимают, что это такое Agile. Хотите повысить гибкость своей команды? В книге вы найдете четкие, конкретные и подробные рекомендации о том, что, как и почему следует делать, а когда стоит пойти на компромиссы.

Джеймс Шор предлагает реальные решения по освоению, планированию, разработке и управлению, основанные на более чем двадцатилетнем опыте Agile. Он объединяет актуальные идеи экстремального программирования, Scrum, Lean, DevOps и многих других в единое целое. Узнайте, как успешно внедрить гибкую разработку в вашей команде и организации, или разберитесь, почему Agile вам не подходит.
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 1

Запускаем нативную конфигурацию Linux как виртуальную машину при помощи HyperV

Время на прочтение 5 мин
Количество просмотров 4.8K
Несколько дней назад я собрал первоклассную рабочую станцию, чтобы возиться с хобби-проектами и играть. Купил себе наилучший и новейший процессор (Ryzen 3900x — 12 ядер, 24 потока), производство AMD, а также 32 ГБ ОЗУ – как говорится, «компромиссы – не для нас». Собрал ПК, оказалось, он просто летает. Сконфигурировал систему так, чтобы в ней можно было одновременно работать с Windows и Linux (PopOS), пользуясь двойной загрузкой. От прошлой сборки у меня сохранился твердотельный диск (SSD), на котором был установлен и сконфигурирован дистрибутив Linux. Там я настроил поисковые роботы для Twitter, а также установил и приспособил для работы другие сервисы. Linux я использовал для задач, где требуется продуктивность, а под Windows в основном играл – впрочем, так и принято.

Некоторое время спустя я осознал, что у такой конфигурации есть явный недостаток. Пока я играл, мои поисковые роботы и прочие сервисы, в сущности, оставались выключены. Чтобы это исправить, я изменил порядок загрузки так, чтобы по умолчанию загружалась именно ОС Linux. Но даже в таком случае я не был готов смиряться с такой нагрузкой, которую испытывал процессор – фактически, он был вынужден тянуть обе эти ОС одновременно, хотя и более чем справлялся с этим. Если бы мне удалось как-то виртуализовать уже установленный у меня образ Linux, то процессор бы смог обслуживать обе ОС, даже не напрягаясь. Я к тому же ленив и обнаружил, что переключаться с одной действующей ОС на другую, фактически, деактивируя при этом первую – очень сложно, в особенности, если делать это часто. Мне хотелось просто снизить издержки.
Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 31

Книга «Linux для сетевых инженеров»

Время на прочтение 20 мин
Количество просмотров 24K
image Привет, Хаброжители!

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

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

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

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

Поскольку внимание здесь сосредоточено на Linux, вы обнаружите, что бюджет как для развертывания обсуждаемых служб, так и для их защиты выражается скорее в вашем энтузиазме и времени для изучения новых интересных вещей, чем в долларах и центах!
Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 9

Книга «Здесь должен быть текст. Профессиональный UX-райтинг»

Время на прочтение 18 мин
Количество просмотров 2.1K
image Привет, Хаброжители!

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

Для кого предназначена эта книга?
Для технических или UX-писателей1. Если вы пишете текст, который видят и с которым взаимодействуют пользователи, эта книга поможет вам применить к этому процессу дизайн-методики. Называете ли вы себя UX-райтером, дизайнером, специалистом по контент-стратегии или еще как-нибудь, эта книга сделает вас более эффективным.
Читать дальше →
Всего голосов 13: ↑11 и ↓2 +9
Комментарии 1

Осваиваем модуляризацию: Руководство для начинающих по организации сложных программных систем

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

⚡ Tl;dr


  • Модуляризация — это метод разделения сложных систем на более мелкие удобоваримые части для лучшего управления и восприятия.
  • Она повышает эффективность, надежность и ремонтопригодность программных проектов за счет организации кода в модули.
  • Она снижает когнитивную нагрузку на разработчиков за счет уменьшения объема информации, которую им приходится обрабатывать за один раз, что облегчает понимание сложных систем и предотвращает их «выгорание».
  • Модули при разработке программного обеспечения можно рассматривать как строительные кубики, наподобие деталей «Лего».
  • Каждый модуль имеет уникальный набор общедоступных интерфейсов, структур данных или сообщений, которые служат контрактами для других разработчиков.
  • При работе с модулями важно относиться к ним как к «черным ящикам» и взаимодействовать с ними только через определенные общедоступные интерфейсы, чтобы избежать сильного связывания и повысить модульность системы.
  • Сборки используются для группировки кода в .NET, поскольку они обеспечивают более высокий уровень инкапсуляции (использование внутреннего доступа). Это позволяет разработчикам контролировать уровень доступа другого кода к членам типа и помогает защитить детали реализации типа или элемента.
  • Чтобы сделать реализацию прозрачной для тестирования, можно использовать атрибут в файле csproj и указать имя сборки тестового проекта.
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 3

Книга «100 ошибок Go и как их избежать»

Время на прочтение 10 мин
Количество просмотров 5.6K
image Привет, Хаброжители!

Лучший способ улучшить код — понять и исправить ошибки, сделанные при его написании. В этой уникальной книге проанализированы 100 типичных ошибок и неэффективных приемов в Go-приложениях.

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

Для опытных Go-разработчиков, хорошо знакомых с синтаксисом языка.
Для кого эта книга
Эта книга предназначена для разработчиков, уже знакомых с языком Go. В ней не рассматриваются его основные понятия — синтаксис или ключевые слова. Предполагается, что вы уже занимались реальным проектом на Go. Но прежде чем углубляться в большинство конкретных тем, удостоверимся, что некоторые базовые вещи понимаются ясно и четко.
Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 13

Книга «Дизайн-мышление для роста бизнеса: проектирование и масштабирование бизнес-моделей и экосистем»

Время на прочтение 1 мин
Количество просмотров 1.4K
Привет, Хаброжители!

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

Издание идеально подходит для основателя компании, менеджера и руководителя в различных областях бизнеса. Оно также будет органично смотреться в библиотеке любого менеджера по продукту, начальника отдела или специалиста некоммерческой организации, которые хотят лучше понимать, как реализовать новые и инновационные идеи, способствующие росту и успеху компании.
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 1

Книга «Грокаем функциональное программирование»

Время на прочтение 2 мин
Количество просмотров 19K
image Привет, Хаброжители!

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

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

Вы начнете с решения простых и маленьких задач, иллюстрирующих базовые понятия, такие как чистые функции и неизменяемые данные, научитесь писать код, лишенный типичных ошибок, обусловленных наличием сложного распределенного состояния, разберетесь с подходами к реализации ввода-вывода, параллельного выполнения и потоковой передачи данных. К концу книги вы будете создавать ясный функциональный код, который легко читается, тестируется и сопровождается.
Читать дальше →
Всего голосов 9: ↑7 и ↓2 +5
Комментарии 13

Принципы работы интегрированных сред разработки

Время на прочтение 7 мин
Количество просмотров 2.9K
Вот некоторые принципы работы IDE (интегрированных сред разработки), которые, на мой взгляд, нужно зафиксировать:

Принцип минимальной навигации


Навигация в IDE раздражает. В тексте, конечно, можно выучить все причудливые навигационные сокращения типа C-a M-< M-f и так далее, но всё равно требуется немало набирать на клавиатуре. А если речь идет о навигации в файловой системе, то требуется еще больше ввода и поиска.

IDE должна минимизировать время, требуемое на навигацию. В частности, можно организовать автоматический импорт функции, когда пользователь набирает call-сайт, чтобы не переходить в верхнюю часть файла, чтобы добраться до импорта, или использование goto определения, чтобы не приходилось выяснять, в каком файле определен тот или иной класс.

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

Вы должны стремиться к тому, чтобы пользователи при наборе кода мыслили линейно. Вспомните, как современный траекторию набора текста, подобно тому, как современный ЦП-ориентированный код избегает ветвлений и переходов.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 1

Идиоматическая обработка ошибок в Rust

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

Вы забудете о необработанных исключениях, если научитесь обращаться с ошибками, как это принято в Rust


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

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

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

image
Читать дальше →
Всего голосов 23: ↑20 и ↓3 +17
Комментарии 6

Информация

Сайт
piter.com
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия