• Что же там такого тяжелого в обработке исключений C++?

      image
      Исключения и связанная с ними раскрутка стека – одна из самых приятных методик в C++. Обработка исключений интуитивно понятно согласуется с блочной структурой программы. Внешне, обработка исключений представляется очень логичной и естественной.

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

      Тем не менее, в C++, исключения традиционно рассматриваются буквально как исключительные ситуации, связанные с восстановлением после ошибок. Трудно сказать, является ли это причиной или следствием того, что реализация обработки исключений компиляторами чрезвычайно дорога. Попробуем разобраться почему.
      Читать дальше →
    • С++ exception handling под капотом или как же работают исключения в C++

      • Перевод

      От переводчика


      В мире победили языки высокого уровня и в мирах руби-питон-js разработчиков остается только разглагольствовать, что в плюсах не стоит использовать то или иное. Например, исключения, потому что они медленные и генерируют много лишнего кода. Стоило спросить "и какой же код он генерирует", как в ответ получил мямленье и мычание. А и правда — как же они работают? Ну что ж, компилируем в g++ с флагом -S, смотрим что получилось. Поверхностно разобраться не сложно, однако то, что остались недопонимания — не давали мне спать. К счастью, готовая статья нашлась.

      На хабре есть несколько статей, подробных и не очень (при этом все равно хороших), посвященных тому, как работают exceptions в C++. Однако нет ни одной по-настоящему глубокой, поэтому я решил восполнить этот пробел, благо есть подходящий материал. Кому интересно как работают исключения в C++ на примере gcc — запаситесь pocket-ом или evernote, свободным временем и добро пожаловать под кат.
      Читать дальше →
    • MMU в картинках (часть 1)

        Хочу поговорить об устройстве управления памятью (Memory Management Unit, MMU). Как вы, разумеется, знаете, основной функцией MMU является аппаратная поддержка виртуальной памяти. Словарь по кибернетике под редакцией академика Глушкова говорит нам, что виртуальная память — это воображаемая память, выделяемая операционной системой для размещения пользовательской программы, ее рабочих полей и информационных массивов.

        У систем с виртуальной памятью четыре основных свойства:
        1. Пользовательские процессы изолированы друг от друга и, умирая, не тянут за собой всю систему
        2. Пользовательские процессы изолированы от физической памяти, то есть знать не знают, сколько у вас на самом деле оперативки и по каким адресам она находится.
        3. Операционная система гораздо сложнее, чем в системах без виртуальной памяти
        4. Никогда нельзя знать заранее, сколько времени займет выполнение следующей команды процессора

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

        К сожалению, по какой-то причине все вышеперечисленные товарищи недостаточно почтительно относятся к MMU, а их знакомство с виртуальной памятью обычно начинается и заканчивается изучением страничной организации памяти и буфера ассоциативной трансляции (Translation Lookaside Buffer, TLB). Самое интересное при этом остается за кадром.
        Читать дальше →
      • Ваш персональный курс по Big Data

          Привет, хабр!

          После публикации нескольких статей по Big Data и Машинному обучению, ко мне пришло немало писем от читателей с вопросами. За последние несколько месяцев мне удалось помочь многим людям сделать быстрый старт, некоторые из них — уже решают прикладные задачи и делают успехи. А кто-то уже устроился на работу и занимается решением реальных задач. Моя цель — чтобы вокруг меня были умные люди, с которыми в том числе и я смогу работать в дальнейшем. Поэтому я хочу помочь тем, кто действительно хочет научиться решать настоящие задачи на практике. В сети присутствует большое количество мануалов о том, как стать ученым по данным (Data Scientist). В свое время я прошел все, что там есть. Однако, на практике порой нужны совсем другие знания. О том, какие именно навыки нужны — я расскажу в сегодняшней статье и постараюсь ответить на все Ваши вопросы.
          Читать дальше →
        • Лекции Технопарка. 1 семестр. С/С++

          • Tutorial
          Мы продолжаем наши еженедельные публикации учебных материалов Технопарка. Предыдущие лекции были посвящены web-технологиям в целом, а также алгоритмам и структурам данных. В третьем блоке лекций рассказывается о языках С и С++.

          Лекция 1. Язык С. Основы организации и использования оперативной и сверхоперативной памяти


          Лекция начинается с введения в язык С: рассказывается об истории его появления, особенностях, преимуществах и недостатках, о сферах применения. Описываются основы препроцессорной обработки, рассматриваются вопросы управления памятью (модели управления памятью, области видимости объектов хранения) и производительность программ на языке С. Обсуждается связывание объектов хранения и их инициализация. Затем рассказывается о классах памяти в языке С. Следующая часть лекции посвящена проблематике указателей, а также работе с одномерными массивами. В заключение рассматривается стандарт POSIX и вопросы переносимости.


          Читать дальше →
        • Сделай сам: MSc Computer Science на уровне топ американских университетов из дома

            Вступление


            Давно хотел написать статью про образование в Computer Science, но руки не доходили. Решил все-таки это наконец сделать. Итак, о чем пойдет речь? Речь о том, что из себя представляет диплом MSc Computer Science топовых университетов США (во всех подробностях, включая основные курсы, книги и проекты) и как ему соответствовать.

            Почему именно MSc? Это — некая развилка: с одной стороны после MSc — вы уже готовый к жизни инженер (да, речь идет о инженерной подготовке, как мне кажется это самое больное место в нашей системе образования), с другой — можно спокойно идти по пути PhD. Как известно, в PhD программу можно попасть и не особо умея программировать — особенно это касается теоретического Computer Science. С другой стороны найти работу программиста тоже дело не очень сложное, и часто не требует мощного образования. Но достигнув уровня MSc — вы получаете возможность разбираться как во всех новый идеях в Computer Science, так и возможность их воплотить в практику. То есть с одной стороны круто разобраться в каком-нибудь deep learning и сделать в нем что-то новое, а также взять и написать свою операционную систему (кто так сделал?). Причем вы не зажаты в рамки узкой специализации (если конечно продолжаете учиться). То есть вы теперь — универсальный солдат, готовый на все.

            Надеюсь что эта статья будет полезна:
            1. Студентам, которые хотят соответствовать высоким стандартам топ вузов США, или собирающиеся туда в аспирантуру по Computer Science
            2. Профессионалам, которые хотят закрыть «дыры» и пробелы
            3. Может кто-то из преподавателей возьмет на заметку для своих курсов.
            4. Студентам, аспирантам американских вузов — хотелось бы тоже получить фидбэк, особенно касается последних трендов в образовании

            Что же здесь будет написано? Минимум философии и общих мыслей: конкретная программа undergraduate и graduate курсов, конечно из дисциплин наиболее мне близких. Все курсы были лично прочувствованы на собственной шкуре, по этому и пишу. (Я пытался записаться на все интересные курсы, которые были, но мой основной упор — системное программирование, базы данных и искусственный интеллект. Отсюда конечно некий bias, но пытаюсь предложить более-менее универсальную программу).
            Читать дальше →
          • Научно-популярные фильмы о физике

              Всем привет!

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

              Недавно случайно наткнулся на ютубе на фильм с Брайаном Грином «Тайны мироздания» и удивился, что у видео так мало просмотров.

              Не сказать, чтобы такая подача материала мне очень нравилась, но все равно, местами довольно интересно :) Может быть, будет интересно не только мне.

              Сами видео под катом.
              Читать дальше →
            • HTC Desire за ~16К — реальность! Но как?!

                HTC DesireНаверное, многие из вас, как и я, были «приятно» удивлены официальной рекомендуемой ценой (RRP) HTC Desire в России. 25990 руб — немаленькая сумма для телефона на базе молодой, развивающейся свободной ОС.

                Рекомендуемая цена на Nexus One подсказывала, что и HTC Desire должен был стоить на порядок меньше. Беглый осмотр иностранных интернет-магазинов показал, что цена на HTC Desire колеблется в районе 18-20К у таких монстров, как Amazon.de, и 16-17К в онлайн e-Tailer'ах. Вот уж поистине — привет российские налоги и жадность локальных ритейлеров…

                Поразмыслив о гарантии и итоговой сумме телефона, я решилась на покупку.
                Читать дальше →
              • Высшее образование в Германии стало бесплатным. Для иностранных студентов тоже

                  Прекрасная возможность учиться в Германии появилась у желающих со всего мира. С нового учебного года 2014/2015 высшее образование в Германии стало бесплатным на всей территории страны. Последней из семи федеральных земель об отмене платы за обучение распорядилась Нижняя Саксония в декабре 2013 года. Доротея Штапельфельдт, сенатор Комитета по науке в Гамбурге, назвала платное образование «социальной несправедливостью», пишет «Таймс» (via). Сенатор по науке считает, что ключевой задачей политики является предоставление молодёжи в Германии возможности учиться и получать качественное высшее образование бесплатно.


                  Фото Шона Гэллапа, Getty Images
                  Читать дальше →
                • BookTitres.com — изучайте языки по иностранной литературе в оригинале, слушая и читая

                    Многие используют фильмы с субтитрами, чтобы слушать речь и одновременно читать. Хочу предложить альтернативу — слушать аудио книги и читать их текст с подстрочным переводом и доступом к каждой отдельной фразе. Они доступны онлайн на сайте BookTitres.com .

                    Самое интересное


                    Уже доступные для чтения книги вы можете найти в разделе "Слушайте и читайте" на сайте. Книга "Хоббит" закончена — это 11 часов аудио и 13800 фраз. Пройдя её полностью, вы ощутите заметное улучшение своего английского. Особенно, если будете повторять за чтецом каждую фразу. От других книг в основном сделаны несколько первых глав. Если хотите продолжения — ответьте на опрос и укажите желаемую книгу.

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

                    В конце статьи приводятся вопросы, на которые мне бы очень хотелось получить ответы хабра людей.
                    Читать дальше →
                  • «Learning how to learn»: краткий обзор материалов курса

                    Как учиться лучше и быть эффективнее: простые и полезные техники

                    Просмотрела курс на Coursera «Learning how to learn», который рассказывает, как лучше учиться, запоминать информацию и быть более эффективным, и составила список из 17 советов-приемов. Возможно, вы найдете их полезными.
                    Читать дальше →
                  • 27+ ресурсов для онлайн-обучения


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

                      Статья содержит перечень ресурсов для онлайн-обучения, представляющих интерес преимущественно для программистов.

                      Читать дальше →
                    • Учим язык, смотря сериалы: vlc + lua + stardict + wordnet + anki = l'amour

                        Очень уж мне нравится смотреть сериалы, а еще я учу с их помощью языки. И если раньше я прилежно останавливал видео на непонятном месте, перематывал назад, включал субтитры и забивал незнакомые слова в Анки, то сейчас я делаю то же самое. Разве что лень заставила этот процесс автоматизировать, что привело к созданию расширения Say It Again для проигрывателя VLC со следующими особенностями:

                        • Навигация по субтитрам (переход к предыдущей, следующей фразе) — клавиши y, u;
                        • Сохранение слова, его транскрипции и перевода вместе с контекстом (см. скриншот) — клавиша i;
                        • Функция «Еще раз»: переход к предыдущей фразе, показ субтитра и пауза — клавиша backspace;
                        • Подключение любых словарей в формате Stardict (в сети лежат словари из Lingvo x3);
                        • Экспорт в Anki или другую программу, понимающую файлы в формате csv;


                        Say It Again screenshot


                        Зачем все это нужно и как это работает?
                      • Олимпиадное хобби. Разминка

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

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

                        Задачи я буду брать с сайта http://uva.onlinejudge.org/, где располагается достаточно большая коллекция задач на любой вкус, и там же можно проверить свое решение. Выбирать буду случайным образом и всегда доводить начатое до финального решения, которое ознаменуется оценкой «Accepted» (Принято). Для решения этих задач нам потребуется знание одного из языков программирования: c, c++, java, pascal, а также терпение, логика и базовое знание английского языка, т.к. условия задач мы получаем на английском языке.

                        Итак, начнем мы с простой задачки из набора «Для новичков» для разминки, чтобы проверить свои способности.
                        Читать дальше →
                      • Мечта параноика или Еще раз о шифровании

                          В свете последних событий с torrents.ru и активизации государственных группировокорганов по борьбе с пиратством, думаю многие задумались как же обезопасить себя или свой сервер на случай если придут нежданные «гости». Вот и мне подвернулась задача защитить локальный медиасервер от посягательств, проведя пару дней за гугленнием и чтением мануалов/howto — мне удалось это реализовать. Скажу сразу, статей по шифрованию очень много, но в основном они рассчитаны на шифрование только определенных разделов, либо устарели/содержат много ошибок.

                          ЦЕЛИ:

                          1. Весь винт(винты) должны быть надежно зашифрованы
                          2. На винтах не должно быть абсолютно никакой разбивки, так как будто это новый(или стертый) винт
                          3. ОС должна стоять на зашифрованных разделах
                          4. Должна быть возможность увеличения дискового пространства, путем добавления новых винтов
                          5. Загрузка системы без ввода ключа от шифрованных данных

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