Как стать автором
Поиск
Написать публикацию
Обновить
105.63

C# *

Объектно-ориентированный язык программирования

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

Уменьшаем размер двоичного файла на C# в 90 раз

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

Я написал на C# консольный клон Wordle, но попытался сделать двоичный файл максимально крошечным.

Я взял популярную игру Wordle с такими правилами:

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

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

В работе с консолью мне помогла игра Console Games - Snake

Проект запускается в новой консоли dotnet.

Читать далее

Что будет, если скрестить конструирование компиляторов, DDD и Clean Architecture? Опыт HydraScript

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


В этой статье я расскажу о двухлетнем эксперименте, проводимом над моим пет-проектом, интерпретатором ЯП HydraScript. Почему к разработке из области системного программирования были применены промышленные практики, и зачем конструированию компиляторов нужен Domain Driver Design с чистой архитектурой?

Исходники проекта
Читать дальше →

Ускоряем pow

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

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

Сравнить точность алгоритмов можно прямо сейчас на этой странице.

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

Ускорь мои степени!

Теория программирования: Вариантность

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

Здравствуйте, меня зовут Дмитрий Карловский и я… хочу поведать вам о фундаментальной особенности систем типов, которую зачастую или вообще не понимают или понимают не правильно через призму реализации конкретного языка, который ввиду эволюционного развития имеет много атавизмов. Поэтому, даже если вы думаете, что знаете, что такое "вариантность", постарайтесь взглянуть на проблематику свежим взглядом. Начнём мы с самых основ, так что даже новичок всё поймёт. А продолжим без воды, чтобы даже профи было полезно для структурирования своих знаний. Примеры кода будут на псевдоязыке похожем на TypeScript. Потом будут разобраны подходы уже нескольких реальных языков. А если же вы разрабатываете свой язык, то данная статья поможет вам не наступить на чужие грабли.


а вдруг там лис?

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

Запланированные новые возможности C# 8.0

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


Все ранее представленные в минорных версиях C# средства, разработаны так, чтобы не сильно изменять язык. Они представляют собой скорее синтаксические улучшения и небольшие дополнения к новым возможностям C# 7.0.


Этот подход был преднамеренным, и он остается в силе.


Более серьезные изменения, которые требуют большей работы на всех этапах разработки (проектировании, внедрении и тестировании), по-прежнему будут выпускаться только с основными релизами языка. И хотя окончательная минорная версия C# 7 еще не выпущена, команда уже активно работает над следующей основной версией языка: C# 8.0.


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

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

ASP.NET Core: Механизмы предотвращения атак 2.0

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

По встроенным механизмам безопасности ASP .NET Core написано мало статей. Даже официальная документация имеет пробелы. В этой статье мы пройдём по всем основным компонентам, имеющим отношение к безопасности, и разберём, как это работает внутри.


Если вы используете старый добрый ASP .NET, то для вас будет полезна информация по внутреннему устройству компонентов безопасности и лучшим практикам их использования. Здесь вы найдёте ответы на следующие вопросы: как реализованы современные анти-XSS механизмы и как их правильно использовать в ASP .NET Core? Как правильно работать с cookies и какие подводные камни там могут встретиться? Как был переписан механизм защиты от CSRF? Как правильно работать с криптографическими алгоритмами? Кроме того, рассказывается про опыт участия в Bug Bounty по поиску уязвимостей в ASP .NET Core.


Перед чтением рекомендуется освежить в памяти атаки из списка OWASP Top 10.


Прототипом статьи является доклад Михаила Щербакова на конференции DotNext 2017 Moscow. Михаил — Microsoft .NET MVP, участник .NET Core Bug Bounty Program, соорганизатор сообщества .NET программистов (Московское комьюнити называется MskDotNet, питерское — SpbDotNet). По работе последние 5 лет занимается безопасностью. Работал в Positive Technologies, в Cezurity, сейчас как консультант работает напрямую с заказчиками, по большей части в этой же сфере. Профессиональные интересы: статический и динамический анализ кода, информационная безопасность, автоматизация отладки кода, исследование внутреннего устройства .NET CLR.


В этом тексте огромное количество картинок со слайдов. Осторожно, трафик!

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

2D магия в деталях. Часть вторая. Структура

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


Помните небезызвестный мем про "корованы"? Наверное, каждый, кто разрабатывает игры (или хотел бы этим заняться) раздумывает о неком "проекте мечты", где можно будет "грабить корованы" и "набигать". А ещё, чтобы погода менялась динамически, и на грязи следы от сапог оставались, и деревья росли в реальном времени. И ещё, чтобы ...


Понятно, что в реальном игровом проекте такая погоня за хотелками — смерти подобна. А вот в техно-демке — самое то.

Документируем код эффективно при помощи Doxygen

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


Данная статья входит в получившийся цикл статей о системе документирования Doxygen:

  1. Документируем код эффективно при помощи Doxygen
  2. Оформление документации в Doxygen
  3. Построение диаграмм и графов в Doxygen

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

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

Consulo: ~1000 коммитов, или как прошла осень

Время на прочтение3 мин
Количество просмотров16K
Для тех, кто пропустил мои посты:

Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript(NodeJS) и многое другое. Проект собрал множество открытых плагинов в себе. При этом код остался открытым.

Несмотря на то, что многие мои знакомые уже вовсю используют его в production разработки Unity3D под Mac OS, я все еще не могу похвастаться stable релизом.


Ниже я расскажу вам, как прошла моя осень, и как эти три месяца постоянной работы повлияли на плагины .NET + C#, и на многое другое.
Читать дальше →

dotPeek 1.1: обновление бесплатного декомпилятора от JetBrains

Время на прочтение2 мин
Количество просмотров14K
Давно мы не выпускали обновлений для декомпилятора.
А вчера выпустили: dotPeek 1.1 теперь доступен для широкой публики.

dotPeek 1.1: бесплатный .NET-декомпилятор от компании JetBrains

Напомним, dotPeek — это бесплатный декомпилятор .NET-сборок, который показывает результирующий код на языке C# и позволяет изучать его с помощью многообразных функций навигации и поиска, что знакомы и, будем надеяться, симпатичны пользователям другого нашего продукта, ReSharper. В частности, в dotPeek можно проводить поиск конкретного типа, символа или члена класса во всех загруженных сборках; переходить от деклараций символов к их использованиям и наоборот; анализировать иерархии наследования. Кроме того, при наличии файлов отладочной информации (.pdb) dotPeek показывает оригинальный исходный код сборок и дружит с серверами символов, такими как Microsoft Reference Source Center и SymbolSource.org, с которых при необходимости может скачивать исходный код различных библиотек.
Читать дальше →

Программный синтезатор

Время на прочтение8 мин
Количество просмотров46K
И так господа, решил наконец разобраться с программным синтезом музыки, а именно с практической частью реализации подобной задачи. Давайте посмотрим что из это вышло и как оно реализовано…


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

Миграция моей игры с Rust

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

Когда я начал работу над Architect of Ruin в декабре 2023 года, то решил делать её в игровом движке Bevy. Мой выбор был мотивирован собственным интересом к Rust — языку, от работы с которым я получаю много удовольствия. Ещё больше меня привлекла в этом движке модель ECS, с которой мне тоже нравится работать, а также сообщество Bevy, которое мне очень симпатично.

Поэтому стало неожиданностью то, что в январе 2025 года мы выполнили миграцию нашей игры с Rust и Bevy. Я потратил примерно шесть недель, чтобы полностью переписать игру на C#, и последние три месяца мы работаем в Unity.

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

Но мы решились на это, и в посте я объясню, почему.

Читать далее

Создание .NET библиотеки от А до Я

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

Думаете о создании .NET библиотеки, но не знаете, в какую сторону двигаться? Уже разрабатываете нечто подобное, но хочется открыть для себя что-то новое? Ищете варианты расширить автоматизацию? Не знаете, что делать с пользователями?

Надеюсь, данная статья поможет ответить на эти и другие вопросы. На примере своей библиотеки с открытым исходным кодом – DryWetMIDI – рассмотрим различные аспекты создания подобных проектов. И хотя речь будет идти про .NET/C#, уверен, многое применимо и к другим популярным платформам и языкам программирования.

Читать далее

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

Я принес вам решение проблемы с исключениями в C#. Но вам не понравится

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


Я каждый день пишу код на сишарпе, и натыкаюсь на одну проблему: я трачу кучу времени на то, чтобы решить, как быть, если что-то идёт не по плану.

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

Эти размышления меня измучили, и я систематизировал свои знания и идеи по обработке исключительных случаев.
Читать дальше →

[DotNetBook] Stackalloc: забытая команда C#

Время на прочтение8 мин
Количество просмотров30K
С этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Вся книга будет доступна на GitHub (ссылка в конце статьи).

В C# существует достаточно интересное и очень редко используемое ключевое слово stackalloc. Оно настолько редко встречается в коде (тут я даже со словом «редко» преуменьшил. Скорее, «никогда»), что найти подходящий пример его использования достаточно трудно а уж придумать тем более трудно: ведь если что-то редко используется, то и опыт работы с ним слишком мал. А все почему? Потому что для тех, кто наконец решается выяснить, что делает эта команда, stackalloc становится более пугающим чем полезным: темная сторона stackalloc — unsafe код. Тот результат, что он возвращает не является managed указателем: значение — обычный указатель на участок не защищенной памяти. Причем если по этому адресу сделать запись уже после того как метод завершил работу, вы начнете писать либо в локальные переменные некоторого метода или же вообще перетрете адрес возврата из метода, после чего приложение закончит работу с ошибкой. Однако наша задача — проникнуть в самые уголки и разобраться, что в них скрыто. И понять, в частности, что если нам дали этот инструмент, то не просто же так, чтобы мы смогли найти секретные грабли и наступить на них со всего маху. Наоборот: нам дали этот инструмент чтобы мы смогли им воспользоваться и делать поистине быстрый софт. Я, надеюсь, вдохновил вас? Тогда начнем.

Примечание


Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:





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

Физическое моделирование на GPU с использованием compute shader в среде Unity3D

Время на прочтение17 мин
Количество просмотров39K
В этом руководстве я расскажу, как использовать compute shader для реализации вычислений на видеокарте — на примере модели волос:

«Паттерны» функционального программирования

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

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

До недавнего времени такой взгляд на вещи действительно был недалек от истины: говорим ФП, подразумеваем Хаскель и теорию категорий. В последнее время ситуация изменилась и функциональная парадигма набирает обороты в web-разработке, не без помощи F#, Scala и React. Попробуем взглянуть на «паттерны» функционального программирования, полезные для решения повседневных задач с точки зрения ООП – парадигмы.

ООП широко распространено в разработке прикладного ПО не одно десятилетие. Все мы знакомы с SOLID и GOF. Что будет их функциональным эквивалентом?.. Функции! Функциональное программирование просто «другое» и предлагает другие решения.


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

«IT — это достаточно бедная индустрия» — интервью с Дмитрием Нестеруком из JetBrains

Время на прочтение29 мин
Количество просмотров83K
Всем привет. Это снова «Без слайдов», и сегодня у меня для вас интервью с Дмитрием Нестеруком aka mezastel, техническим евангелистом компании JetBrains. Дмитрия я знаю довольно давно и, не скрою, сам очень долго ждал момента, когда мы наконец поедем на студию и запишемся. Уж больно много вопросов у меня к нему накопилось.



Мы больше часа беседовали с Дмитрием, но не успели затронуть даже половины тем, которые хотелось обсудить. Что Дмитрий успел рассказать мне:
  • Чем технический евангелист отличается от Developer Advocate
  • Как работает евангелизм в JetBrains
  • О восприятии мира настоящими гиками
  • Почему IT — это бедная индустрия
  • Про маржу и инвестиции российских аутсорсеров
  • Про то, какие enterprise решения позорят индустрию и почему
  • Насколько далека JetBrains от своего простого потребителя
  • Об том, как индустрия видеоигр смогла «вырастить» под себя целый сектор железа
  • Что сейчас творится на рынке видеокарт
  • Что еще могут придумать компании, для того, чтобы программы работали быстрее
  • О том, как будет выживать ReSharper и о 64-битных IDE от Microsoft


Вот видео, а под катом, как обычно, текстовая версия этого интервью.


(на одиннадцатой минуте нет звука, к сожалению.)
Читать дальше →

Реалистичное гравитационное линзование на Unity

Время на прочтение4 мин
Количество просмотров28K
image
Эффект гравитационной линзы вызванный скоплением галактик RCS2 032727-132623

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

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

Инструментарий для анализа и отладки .NET приложений

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

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


Во-первых, я должен упомянуть, что хороший отладчик уже присутствует в Visual Studio и VSCode. Также существует множество хороших (коммерческих) профилировщиков .NET и инструментов мониторинга приложений, на которые стоит взглянуть. Например, недавно я попробовал поработать с Codetrack и был впечатлён его возможностями.


Однако оставшийся пост посвящён инструментам для выполнения отдельных задач, которые позволят лучше понять, что происходит. Все инструменты имеют открытый исходный код.


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