• Мифы и заблуждения насчёт CLR и .NET

      Последнее время на популярно-технических форумах я часто встречаю ожесточённые споры приверженцев и противников .NET. Эти споры, как правило, начинаются из-за недоразумения, и заканчиваются жестким троллингом, беседами “за жизнь” и сравнением радиусов и удельных плотностей материала различных сферических коней. Обе стороны силятся доказать и аргументировать, но ни одна не хочет посмотреть на предмет спора другими глазами. Хабрахабр не исключение, увы.

      Накалу страстей такой беседы позавидовали бы религиозные фанатики. Единственное, что спасает противников от крестовых походов друг на друга, вооружившись вилами и LangSpec’ами — то, что они разделены интернетом.

      Так жить нельзя, господа. Мне захотелось исправить эту ситуацию, и выступить с одной из сторон. Этим постом я попробую нанести сообществу непоправимую пользу и разобраться с мифами, на обсуждение которых, а не на взаимное членовредительство, к сожалению, и уходят силы спорщиков. А так как я в своё время перелез с C++ на C# и всё вокруг него, то я буду развенчивать негативные мифы, прибавлять позитива и всячески приукрашивать действительность — а как без этого. И — заметьте — это обойдется совершенно бесплатно для M$. Ну а сделать я это хочу в формате Q&A.
      Едем!
    • Интересная задачка: повышаем стабильность (robustness) приложений (ч. 3) — код под CER и прочие финты ушами

        В продолжение темы устойчивых приложений и CER (начало тут) — рассмотрим, как подготовить произвольный (или почти произвольный) участок кода для выполнения в регионе Constrained Execution.

        Зачем такое надо? Помните, я говорил, что в процессе подготовки к CER происходит инспекция стека и пре-jitt. Но проинспектировать стек, если вызов происходит через интерфейс или виртуальный метод заранее невозможно. Поэтому такой код:
            ...
            RuntimeHelper.PrepareConstrainedRegions();
             try {}
            finally {
                 obj.SomeVirtualMethod();
            }
        
        скомпилируется, но в run-time не достигнет желаемого.
        Как быть?
      • Интересная задачка: повышаем стабильность (robustness) приложений (ч. 2)

          Итак, привожу решение проблемы из топика habrahabr.ru/blogs/net/69545 — про гарантированное освобождение неуправляемого ресурса.

          Как правильно заметил товарищ adontz, проблема решается при помощи CER.
          CER — это технология Constrained Execution Region, при помощи которой можно обезопасить свой код, гарантировав ему то, что на некотором его участке гарантированно _не_ случится асинхронного прерывания типа StackOverflow или ThreadAbort, или «отвалился» jitter — всякое бывает, и не всегда есть возможность оставить внешние ресурсы в консистентном состоянии.

          Чего?
        • Интересная задачка: повышаем стабильность (robustness) приложений

            Продолжаем отрабатывать корпоративный план по формированию правильного общественного мнения о компании Microsoft и ее технологиях :) Время такое.

            Итак, вот вам техническая задачка. Насколько я смог найти, ее разъяснения нет даже у Рихтера. К самому решению я надеюсь придти потом, когда будет возможность «подолее невозбранно» посидеть за компьютером, а пока условие.

            Как известно, .Net проектировался с оглядкой на возможность глубокого взаимодействия с нативным кодом и COM. Не будем разбираться сейчас, было ли это техническим или политическим решением, важно вот что — взаимодействие с неуправляемым кодом является сложной проблемой, и может попить немало крови разработчика там, где он не ожидал. Предлагаемая задача — одна из этих.

            UPD: Решение тут: habrahabr.ru/blogs/net/69650

            Послушать про about
          • Ползучая гадость, или о проблемах с отдельно взятой БД отдельно взятого приложения

              Сегодня я хочу озвучить одну проблему, с которой сталкивается разработчик, как только в поле его зрения попадает работа с БД. Самое грустное заключается в том, что я не знаю, как решать ее правильно, и что делать. Вернее, знаю что, но мне это не помогает и не поможет. Думаю, что и вам тоже.
              Ниже будет длинная ввводная, по результатам коей, я не сомневаюсь, можно наговорить про меня много интересных вещей, которых хватит на несколько формуляров по 7-Б и направлений на пожизненное принудительное лечение, но вы уж дочитайте.
              Поглумиться над дауном
            • Nemerle и спутник, или ФП для самых маленьких


                В последнее время на Хабре зачастило упоминание о Nemerle. Хотите узнать, что это такое и как его едят, а вернее — как с его помощью едят (задачки)?

                Попробую показать на простом примере, но для этого вам придется
                принести свой мозг в жертву богу Nemerle
              • Рефакторинг: миссия (не)выполнима?

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

                  А как делать этот самый рефакторинг, если даже неизвестно, с чего начать? Как осушить болото кода и не утонуть нем?

                  Конечно, идеальный вариант — считать рефакторинг одной из активности на проекте с самого его начала и выделять на него проектное время команды. В жизни, как ни странно, однако чаще всего оказывается, что предыдущий лид проекта не сильно озадачивался этим вопросом, предпочитая плыть по течению; возможно, он надеялся когда-нибудь сбагрить эту ношу менее удачливому лиду — пока проект еще не развалился; а может быть, просто не знал, что делать. Шеф, усё пропало!

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