Знаете, я никогда не задумывался, насколько плоха или хороша инициализация переменных в языке C++. Я просто использовал ее. И не имел никаких проблем. Но недавно я посмотрел пару видео, пролистал несколько статей и да, я должен признать… она действительно ужасна. Один очень серьезный человек даже сказал, что мы, как сообщество программистов, виновны в том, что C++ не настолько хорош, насколько он мог бы быть.
Рубрика «инициализация»
Как убить единорога или попытка навести порядок с инициализацией переменных в языке C++
2024-08-31 в 10:16, admin, рубрики: инициализация, инициализация переменныхМагические сигнатуры методов в C#
2020-07-01 в 10:30, admin, рубрики: .net, async/await, await, C#, деконструкторы, инициализация, методы, ПрограммированиеПредставляю вашему вниманию перевод статьи The Magical Methods in C# автора CEZARY PIĄTEK.
Есть определенный набор сигнатур методов в C#, имеющих поддержку на уровне языка. Методы с такими сигнатурами позволяют использовать специальный синтаксис со всеми его преимуществами. Например, с их помощью можно упростить наш код или создать DSL для того, чтобы выразить решение проблемы более красивым образом. Я встречаюсь с такими методами повсеместно, так что я решил написать пост и обобщить все мои находки по этой теме, а именно:
- Синтаксис инициализации коллекций
- Синтаксис инициализации словарей
- Деконструкторы
- Пользовательские awaitable типы
- Паттерн query expressionЧитать полностью »
Опасности конструкторов
2019-07-21 в 17:24, admin, рубрики: Rust, инициализация, конструкторы, ооп, Программирование, системное программированиеПривет! Представляю вашему вниманию перевод статьи "Perils of Constructors" автора Aleksey Kladov.
Один из моих любимых постов из блогов о Rust — Things Rust Shipped Without авторства Graydon Hoare. Для меня отсутствие в языке любой фичи, способной выстрелить в ногу, обычно важнее выразительности. В этом слегка философском эссе я хочу поговорить о моей особенно любимой фиче, отсутствующей в Rust — о конструкторах.
Что такое конструктор?
Конструкторы обычно используются в ОО языках. Задача конструктора — полностью инициализировать объект, прежде чем остальной мир увидит его. На первый взгляд, это кажется действительно хорошей идеей:
- Вы устанавливаете инварианты в конструкторе.
- Каждый метод заботится о сохранении инвариантов.
- Вместе эти два свойства значат, что можно думать об объектах как об инвариантах, а не как о конкретных внутренних состояниях.
Конструктор здесь играет роль индукционной базы, будучи единственным способом создать новый объект.
К сожалению, в этих рассуждениях есть дыра: сам конструктор наблюдает объект в незаконченном состоянии, что и создает множество проблем.Читать полностью »
Инициализация в С++ действительно безумна. Лучше начинать с Си
2019-02-01 в 14:51, admin, рубрики: braced-init-list, C, c++, copy-list-initialization, агрегированный тип, инициализация, конструктор, обучение программированию, разрешение перегрузкиНедавно мне напомнили, почему я считаю плохой идеей давать новичкам C++. Это плохая идея, потому что в C++ реальный бардак — хотя и красивый, но извращённый, трагический и удивительный бардак. Несмотря на нынешнее состояние сообщества, эта статья не направлена против современного C++. Скорее она частично продолжает статью Саймона Брэнда «Инициализация в C++ безумна», а частично — это послание каждому студенту, который хочет начать своё образование, глядя в бездну.
Типичные возражения студентов, когда им говорят об изучении C:
- «Кто-то его ещё использует?»
- «Это глупо»
- «Почему мы изучаем C?»
- «Мы должны учить что-то лучшее, например, C++» (смех в зале)
Особенности вызова функций в С++
2018-06-18 в 10:46, admin, рубрики: abi, c++, clang, optional, system v, xeon, виртуальные функции, вызов функции, инициализация, массивы, ненормальное программирование, оптимизация, Программирование, производительность, хвостовая рекурсияНе так давно у меня произошёл очередной разговор с коллегой на извечную тему: "по ссылке, или по значению". В результате возникла данная статья. В ней я хочу изложить результаты моего исследования по этой и смежным темам. Далее будут рассмотрены:
- Регистры и их назначение при вызове функций.
- Передача и возврат простых типов и структур.
- Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
- Как используется место при многочисленных вызовах функций.
- Механизм виртуальных вызовов.
- Оптимизация хвостовых вызовов и рекурсии.
- Инициализация структур, массивов и векторов.
Осторожно! Статья содержит большое количество кода на C++ и ассемблере (с комментариями), а также множество таблиц с оценками производительности.
Humane VimScript: Инициализация редактора
2016-06-06 в 23:01, admin, рубрики: vim, инициализация, плагиныВведение
При каждом запуске редактора Vim, им выполняется процесс инициализации, обеспечивающий удобный интерфейс для пользователя. На первый взгляд модель инициализации может показаться простой и понятно, но это далеко не так.
В этой статье я предлагаю вам ознакомиться с процессом инициализации редактора Vim. Данную тему я считаю одной из наиболее сложных в ходе изучения редактора, от чего материал, изложенный мной, может быть очень полезен как новичкам, начинающим этот тернистый путь, так и опытным пользователям и разработчикам.
Сложность этой темы обусловлена нетривиальной моделью загрузки скриптов редактора, а так же количеством групп, на которые эти скрипты делятся. Запомнить порядок инициализации редактора достаточно сложно, но это очень важно для написания собственных плагинов для него.
Ещё раз (надеюсь, последний) про double-checked locking
2015-01-16 в 10:09, admin, рубрики: dcl, double checked lock, java, singleton, инициализация, параллельное программированиеСтатей про double-checked locking на Хабре было столько, что казалось бы ещё одна — и Хабр лопнет. Вот только по Java неплохие публикации: Реализация Singleton в JAVA, Правильный Singleton в Java, А как же всё-таки работает многопоточность? Часть II: memory ordering или вот замечательный пост от TheShade (слава web-archive!). В наши дни, наверно, каждый Java-разработчик слышал, что если используешь DCL, будь добр объявить переменную volatile. Найти сегодня в коде известных опенсорсных проектов DCL без volatile довольно трудно, но оказалось, что проблемы ещё не полностью решены. Поэтому я добавлю небольшую заметку по теме с примерами из реальных проектов.
Иногда складывается ощущение, что программисты не включают мозги и не пытаются понять, как что работает, а просто следуют простым и понятным правилам вроде «объяви переменную volatile, используй DCL, и всё будет хорошо». К сожалению, такой подход в программировании не всегда работает.
Читать полностью »
AngularJS: настраиваем событие инициализации
2014-08-06 в 6:52, admin, рубрики: $emit, $rootScope, angular, AngularJS, javascript, инициализация, событие Если вы уже знаете, что такое AngularJS и пользуетесь им продолжительное время, вероятно перед вами уже стояла задача выполнения неких действий сразу после инициализации приложения. И после прочтения документации вы обнаруживаете, что такого способа “из коробки” нет)
Читать полностью »