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

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

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

    • Tutorial
    С этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Вся книга будет доступна на GitHub (ссылка в конце статьи). Так что Issues и Pull Requests как всегда приветствуются :)

    Существует область памяти, про которую редко заходит разговор. Однако эта область является, возможно, основной в работе приложения. Самой часто используемой, достаточно ограниченной с моментальным выделением и освобождением памяти. Область эта называется «стек потока». Причем поскольку указатель на него кодируется по своей сути регистрами процессора, которые входят в контекст потока, то в рамках исполнения любого потока стек потока свой. Зачем же он необходим? Давайте вместе окунемся в мир низкоуровневых структур, на основе которых работает все: начиная от DOS программ и заканчивая .NET Framework, установленным поверх Windows 10.

    Итак, разберем элементарный пример кода:

    void Method1()
    {
        Method2(123);
    }
    
    void Method2(int arg)
    {
        // ...
    }
    

    В данном коде не происходит ничего примечательного, однако не будем его пропускать, а наоборот: посмотрим на него максимально внимательно.
    Читать дальше →
  • [DotNetBook] Структура экземпляров типов и VMT

    • Tutorial
    С этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом.

    Вся книга будет доступна на GitHub: CLR Book. Так что Issues и Pull Requests приветствуются :)

    Это — выжимка из главы про структуру типов и их VMT.

    Структура объектов в памяти


    До сих, говоря про разницу между значимыми и ссылочными типами, мы затрагивали эту тему с высоты конечного разработчика. Т.е. мы не смотрели на то как они в реальности устроены на уровне CLR, как сделаны те или иные механики внутри каждого из них. Мы смотрели фактически на конечный результат. Однако, чтобы понимать суть вещей глубже и чтобы отбросить в сторону последние оставшиеся мысли о какой-либо магии, происходящей внутри CLR стоит заглянуть в самые ее потроха.
    Читать дальше →
    • +33
    • 8,7k
    • 3
  • [DotNetBook] Особенности выбора class/struct. Свой boxing, превращение Int в структуру, пул боксинга

    • Tutorial
    С этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Тема IDisposable была выбрана в качестве разгона, пробы пера. Теперь коснемся разницы между типами. Вся книга будет доступна на GitHub: DotNetBook. Так что Issues и Pull Requests приветствуются :)

    Это — выжимка из главы про Struct / Class и их разницу.

    Особенности выбора между class/struct


    Давайте подумаем об особенностях обоих типов, об их достоинствах и недостатках и решим, где ими лучше пользоваться. Тут, конечно же стоит вспомнить классиков, дающих утверждение что выбор в сторону значимых типов, стоит дать если у нас тип не планирует быть наследуемым, он не станет меняться в течении своей жизни, а его размер не превышает 16 байт. Но не все так очевидно. Чтобы сделать полноценное сравнение нам необходимо задуматься о выборе типа с разных сторон, мысленно продумав сценарии его будущего использования
    Читать дальше →
  • [DotNetBook] Реализация IDisposable: правильное использование

    • Tutorial
    С этой статьей я начинаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Тема IDisposable была выбрана в качестве разгона, пробы пера. Вся книга будет доступна на GitHub: DotNetBook. Так что Issues и Pull Requests приветствуются :)

    **UPD: статья доработана и многие комментарии уже не актуальны**. Следить за исправлениями можно тут: GitHub: Disposed Pattern: 4 opened

    Disposing (Disposable Design Principle)



    Сейчас, наверное, практически любой программист, который разрабатывает на платформе .NET, скажет, что ничего проще этого паттерна нет. Что это известный из известнейших шаблонов, которые применяются на платформе. Однако даже в самой простой и известнейшей проблемной области всегда найдется второе дно, а за ним еще ряд скрытых кармашков, в которые вы никогда не заглядывали. Однако, как для тех, кто смотрит тему впервые, так и для всех прочих (просто для того, чтобы каждый из вас вспомнил основы (не пропускайте эти абзацы (я слежу!))) — опишем все от самого начала и до самого конца.

    IDisposable



    Если спросить, что такое IDisposable, вы наверняка ответите что это

    public interface IDisposable 
    {
    	void Dispose();
    } 
    


    Для чего же создан интерфейс? Ведь если у нас есть умный Garbage Collector, который за нас чистит всю память, делает так, чтобы мы вообще не задумывались о том, как чистить память, то становится не совсем понятно, зачем ее вообще чистить. Однако есть нюансы.
    Читать дальше →
  • Что мы ненавидим в собеседованиях?



      Все мы ходили по собеседованиям, разговаривали с представителями компаний и постоянно встречаемся с особенностями, которые рекрутеры либо культивируют, обучая друг друга, либо не обращают внимания, но при этом выглядят отталкивающими — со стороны человека, пришедшего в компанию. В моей 10-летней карьере я сменил порядка 10 компаний (в последней — Luxoft — уже 3 года, так что практику перебежчика закончил). И за это время провел как около 100 собеседований на стороне соискателя, так и порядка 150 — на стороне собеседующего, что дало мне возможность собрать Топ5 ошибок рекрутеров, которые могут так испортить собеседование, что я больше не захочу идти в компанию.
      Читать дальше →
    • Logeek Night в Воронеже



        Приглашаем вас посидеть с нами в баре PITNICA одной большой компанией. Давайте договоримся: мы вам — пиво, закуски и две отличные темы «на поговорить», а вы нам — компанию и вопросы :). Итак, наше мероприятие, которое начнется послезавтра в Воронеже, в баре PITNICA. Как и всегда, Logeek Night пройдет вечером, с 19:00 до 21:30 в формате двух выступлений и беседы как о выступлениях, так и на смежные темы.

        За подробной информацией и ссылками на страницы регистрации просьба пройти под кат
        Читать дальше →
      • Logeek Night в Воронеже



          Всем короткой пятницы, хабравчане! Спешим анонсировать наше мероприятие, которое начнется через неделю в Воронеже, в баре PITNICA. Как и всегда, Logeek Night пройдет вечером, с 19:00 до 21:30 в формате двух выступлений и беседы как о выступлениях, так и на смежные темы.
          Читать дальше →
        • QA: Conference. Сибирь



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

            • Галина Галкина — Расчет категории риска – подход к управлению регрессионной ТМ
            • Дарья Ефремова — FMEA — подход к тестированию с ретроспективой
            • Станислав Сидристый — Грамотное использование Groovy/Geb при автоматизации тестирования Web-приложений на Java
            • Константин Нерадовский — Функциональный подход в разработке автотестов на Java
            • Роман Иовлев — Jedi Power of Model-based testing
            • Роман Иовлев — JDI — Future of UI Automation
            • Алексей Белёв и Михаил Мациевский — Автоматизация тестирования или как мы с нуля всё поднимали
            • Александр Шиповалов — Чем пахнут ваши авто-тесты
            • Александр Шиповалов — BDD — Золотая книжечка, столь же полезная, сколь и забавная..
            • Леншмидт Анастасия и Орлов Артур — Автотесты: QA vs Dev

            Покупая билет, вы получаете:
            • Возможность получить запись докладов с Москвы и Питера
            • Возможность попасть на QA: Conference Новосибирск
            • Питание во время конференции

            Хотите подсмотреть что было в Москве и Питере? Добро пожаловать в наши фотоальбомы:

            Читать дальше →
            • +11
            • 4,7k
            • 3
          • Паттерны и антипаттерны Cucumber BDD

            • Tutorial
            Потратив множество человеко-часов над разработкой автотестов для нескольких огромных проектов, я с полной уверенностью могу сообщить, что составил может быть далеко не полный, но уж точно достаточно крупный набор практик, с которыми хочется поделиться с каждым. Итак, следуя стопам классиков, хочу (надеюсь увидеть дополнения от вас в комментариях) составить:

            Шаблоны проектирования Cucumber BDD сценариев


            Цели:

            • получить готовый инструмент, при помощи которого станет возможным стандартизировать процессы разработки и контроля качества исполняемых сценариев, построенных для работы в Cucumber-based технологических стеках (cucubmer jvm, SpecFlow и проч.)
            • получить набор правил, позволяющих специалистам с разных проектов легко мигрировать между проектами без длительной фазы привыкания
            • получить чистый, легко-читаемый код сценариев, который легко расширяется и слабо подвержен полным переписываниям текстов сценариев при минимальных изменениях UI

            Итак, поехали!
            Читать дальше →