Заметки по Си++

Информация для гостей блога


Добра читающим. Вы находитесь в блоге, посвященному некоторым аспектам языка программирования Си++, которые я, автор данного блога, открывал (и открываю) для себя в процессе освоения данного языка.

Важно

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

Миссия блога

Говорят, что C++ невозможно выучить. Чем больше изучаешь этот язык, тем больше соглашаешься с этим утверждением. Если же вам кажется, что вы владеете этим языком полностью, скорее всего вы или выдающийся гений, или еще не успели столкнуться с чем-то новым :) Но C++ можно понять, можно научиться пользовать его идеально, а весь массивный слой знаний, который, ввиду человеческих возможностей, запомнить или помнить всегда невозможно – законспектировать, и при необходимости обращаться к конспектам как к проверенному источнику знаний.

В cpp-code.ru уделяется максимум внимания деталям, иногда, в тех местах, где возможны тонкости, строки кода разбираются вплоть до каждого оператора в строке. Обычно, в статьях, не уделяется такого внимания самому языку. Но считаю полезным писать так подробно, на случай если что-то будет забыто – это исключает возможное недопонимание. Так же, такое внимание, облегчает понимание новичкам в языке. Предупреждаю: рассмотрение спускается на довольно низкий уровень сущностей, разбирается их поведение или код их реализации, и может делаться вывод о поведении на конкретной платформе конкретных языковых или библиотечных сущностей, с дальнейшим причислением выделенного поведения в категорию "по стандарту языка", или же "неопределенное поведение", "неуточняемое поведение" – в некоторых таких причислениях могут быть ошибки, надеюсь однажды все это перечитать и поправить.

Тем не менее, собранный материал в блоге достаточно подробно проверяется, и иногда это позволяет замечать ошибки или неточности, даже в очень серьезных источниках, например, в таких как cppreference.com. При этом, если в таких серьезных источниках могут быть неточности, то что говорить о непогрешимости информации, предоставленной здесь. Всегда будьте критичны, и не ленитесь проверять. Это увлекательно.

Предыстория появления данного сайта.

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

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

Добро пожаловать :)

Популярные записи

28 September 2016. Аллокаторы в C++. Или свой распределитель памяти.
23 June 2016. Метапрограммирование. Часть 1. Взгляд издалека.
16 June 2016. Умные указатели.
25 May 2016. Немного про архитектуру STL итераторов.
01 April 2016. Кастуем.

немало полезных заметок собрано в комментариях к теме "Простые заметки про Си++".

Рекомендуемая литература

Т.А. Павловская, "C/С++ Программирование на языке высокого уровня", 2003 год.
Т.А. Павловска, Ю.А. Щупак "С++ Объекто-ориентированное программирование Практикум", 2006 год.

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

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

О тупости.

Хотелось бы не быть тупым. Но это сложно, особенно когда тупость, это просто часть тебя. Т.е. можно даже надрессировать себя делать сложные вещи, делать сложные вещи хорошо, но однажды моя природа обязательно возьмёт верх.
Читать далее...

Исходники DC++

Возможно тут буду коллекционировать увиденные интересности в исходных кодах DC++.

  1. //dcpp/GetSet.h
  2.  
  3. #include <type_traits>
  4.  
  5. #define GETSET(t, name, name2) \
  6. private: t name; \
  7. public: std::conditional<std::is_class<t>::value, const t&, t>::type get##name2() const { return name; } \
  8. template<typename GetSetT> void set##name2(GetSetT&& name) { this->name = std::forward<GetSetT>(name); }
  9.  
  10. // usage example
  11. GETSET(string, fileName, FileName);

Читать далее...

Жиза

Я эту тендецию (по деградации десктоп интерфейсов) ещё со времён Windows 7 заметил, правда потом как раз в 8ке они частично исправились (а частично конечно уже замахнулись на деградацию).

В общем вот статья, солидарен с нею.

Некоторые аспекты работы "железа" и памяти.

Как правило всплески заинтересованностью аппаратной частью у меня возникают перед появлением или после появления в пользовании некоторого девайса.

Перед - естественно это решение вопросов выбора, после - как правило пустой интерес.

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

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

MS Windows Philosophy [сборник интересных архитектурных решений]

1. Заметил что Win8 весьма быстро загружается. (Да линукс проще кастомизировать и т.д и т.п.) Но технология Prefetcher действительно позволяет загружать операционную систему и все необходимое окружение значительно быстрее. Т.е. от включения компьютера, последующего логина, кликанья на иконку файрфокса и его прогрузки на моей текущей конфигурации - Win8 тратит около 40 секунд. Различным дистрибутивам Linux (fedora,debian), с различными ui (lxde, gnome, kde) требуется от включения до прогрузки файрфокса около 1.5-2 минут.
Читать далее...

Unix Philosophy [bookmarks]

В данном топике буду оставлять для себя пометки по ходу чтения книги Искусство программирования Unix. Похоже что книга полезная, поэтому приведу ссылку на неё (взято с Royallib).


























Читать далее...

Я устал, и си++ который так и не узнал, забыл [завершение айти карьеры]

Работаю конечно (upd 2018.01 - уже не работаю), но что-то нет сил вести блог, узнавать что-то новое. Работаю Си++ разрабочиком с января этого года, но, забавно, кодить разучился вообще, и теорию всю забыл. Возможно айти не моё. Тут голову нужно здоровую иметь а не диагнозы черепного давления (как следствие тугодумость, утомляемость что даже в армию с таким не призывают).

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

Удобная программа таймер рабочего времени

Единственный минус - написана на джава, а все остальное в ней збс =)
ссылка на сайт программы.
rachota


























Права на bind

В Linux (в используемых мной) дистрибутивах, для присвоению сокету адреса функцией bind требуются привелегии, невходящие в набор стандартного пользователя. Это безопасно, но не удобно при разработке.
Поэтому очень удобно сделать так:
#setcap CAP_NET_BIND_SERVICE=+eip /path/to/binary.
Читать далее...

Страницы