Мартин Фаулер в своей книге уделяет большое внимание юнит тестам. Если код не покрыт юнит тестами, то рефакторинг такого кода становится опасным.
Хорошо бы упомянуть как-то этот момент на Вашем сайте, допустим в интерактивных примерах можно добавить шаг с запуском юнит тестов, и т.п.
У Вас ошибка в живом примере на Java refactoring.guru/replace-method-with-method-object:
В шаге 5 отсутствует замена локальных переменных приватным полями.
Хорошо бы добавить кнопку «Сообщить об ошибке».
А так сайт отличный, однозначно в избранное!
>> С++ даёт возможность контроля типов, один из инструментов для этого — шаблоны. Программу того аппарата можно было спроектировать так, что ошибка несогласованности систем мер и весов были бы невозможны.
Кто мешает завести различные типы для систем мер и весов, и зачем для этого применение шаблонов?
inject_as_object делает привязку к одной конкретной реализации, а что, если захочется иметь две разные реализации?
Также что делать, если нужно использовать разные параметры конструктора для разных клиентов?
Мне кажется более удобным и гибким решением делать inject на уровне объектов, а не классов.
>>Оказывается в трекере была установка — удалять неактивных пользователей
Я надеюсь, что после этого вы научились делать резервную копию базы пользователей?
REPL
Почему-то не вижу особого смысла для C++:
>>Для проверки какой-либо конструкции языка или его возможности Вы создаете полноценное тестовое приложение.
Если задача состоит в том, чтобы сделать какой-то эксперимент, можно сделать это в виде юнит-теста, у Вас ведь есть существующая инфраструктура для юнит-тестов? Такой подход даст возможность без особого труда поиграться с объектной структурой Вашего приложения. Ну а если нужно написать какой-то тест для проверки производительности чего-либо, то тут уже не обойтись без отдельного тестового приложения.
>>Для вычисления значения какого-либо сложного выражения, Вы долго мучаетесь с калькулятором…
Калькулятор на C++, а смысл? Думаю проще воспользоваться другими средствами.
Программисты создадут продукт для таких же программистов и этот продукт обычным людям будет не нужен.
Выбирать направление разработки должны бизнес аналитики, учитывая интересы компании и ее клиентов.
Спасибо, теперь стало немного понятней с LoadStore, хотя для реализации такого поведения нужен некий механизм задержки обработки store до завершения чтения, хотелось бы понять устройство такой логики на уровне архитектуры процессоров.
Я понимаю барьер StoreLoad следующим образом:
Допустим операция записи была выполнена через store buffer и данных пока еще нет в кеше. Для того, чтобы упорядочить последующую операцию чтения, данные из store buffer необходимо перенести в кеш линию. Тоесть результат предыдущей операции записи должен быть сохранен в кеше прежде, чем начнется операция чтения.
Большое спасибо за статью, я в первые начал немного понимать зачем нужны барьеры и как они работаю.
Единственное чего не могу понять, так это что такое Load/Store барьер, и как он реализован в схеме store buffer/invalidate queue. Ведь если операция чтения была произведена из ранее инвалидированной кеш линии, то дальнейшая обработка invalidate queue ни к чему не приведет. Или инструкция Load/Store обрабатывает invalidate queue перед выполнением чтения, то есть это будет комбинация read/write барьеров?
smp_rmb(); // барьер чтения
if (a == 0) // чтение
{
smp_wmb(); // барьер записи
b = 1; // запись
}
Было бы здорово разобрать примеры поведения двух процессоров в случаях Load/Store и Store/Load.
Хочу поделиться одной историей с моей жизни.
Дело было на моей первой работе после окончания института.
Взяли меня программистом в одну государственную контору в отдел АСУП
и выдали мне старенький компьютер, пока новый компьютер еще не заказали.
И все бы ничего, но этот старенький компьютер любил пререзагружатся сам по себе, и довольно часто.
В общем работать на нем было практически невозможно,
т.к. в любую минуту можно было потерять не сохраненные изменения.
В общем, в ожидании нового компьютера, я решил поиграть пока в Quake.
И вот, играя в Quake я замечаю, что компьютер то не перезагружается!
Я свернул Quake и поработал немного, компьютер по прежнему не перезагрузился.
В итоге мой рабочий день начинался так: прихожу я на работу,
включаю компьютер и быстро запускаю Quake пока компьютер не успел перезагрузится,
затем сворачиваю Quake и продолжаю работать.
Невероятно, но факт.
Хорошо бы упомянуть как-то этот момент на Вашем сайте, допустим в интерактивных примерах можно добавить шаг с запуском юнит тестов, и т.п.
В шаге 5 отсутствует замена локальных переменных приватным полями.
Хорошо бы добавить кнопку «Сообщить об ошибке».
А так сайт отличный, однозначно в избранное!
Кто мешает завести различные типы для систем мер и весов, и зачем для этого применение шаблонов?
Также что делать, если нужно использовать разные параметры конструктора для разных клиентов?
Мне кажется более удобным и гибким решением делать inject на уровне объектов, а не классов.
>>Оказывается в трекере была установка — удалять неактивных пользователей
Я надеюсь, что после этого вы научились делать резервную копию базы пользователей?
Успехов Вам в развитии сервиса!
Почему-то не вижу особого смысла для C++:
>>Для проверки какой-либо конструкции языка или его возможности Вы создаете полноценное тестовое приложение.
Если задача состоит в том, чтобы сделать какой-то эксперимент, можно сделать это в виде юнит-теста, у Вас ведь есть существующая инфраструктура для юнит-тестов? Такой подход даст возможность без особого труда поиграться с объектной структурой Вашего приложения. Ну а если нужно написать какой-то тест для проверки производительности чего-либо, то тут уже не обойтись без отдельного тестового приложения.
>>Для вычисления значения какого-либо сложного выражения, Вы долго мучаетесь с калькулятором…
Калькулятор на C++, а смысл? Думаю проще воспользоваться другими средствами.
Программист-прагматик. Путь от подмастерья к мастеру
Выбирать направление разработки должны бизнес аналитики, учитывая интересы компании и ее клиентов.
habrahabr.ru/company/itinvest/blog/202526/
Я понимаю барьер StoreLoad следующим образом:
Допустим операция записи была выполнена через store buffer и данных пока еще нет в кеше. Для того, чтобы упорядочить последующую операцию чтения, данные из store buffer необходимо перенести в кеш линию. Тоесть результат предыдущей операции записи должен быть сохранен в кеше прежде, чем начнется операция чтения.
Единственное чего не могу понять, так это что такое Load/Store барьер, и как он реализован в схеме store buffer/invalidate queue. Ведь если операция чтения была произведена из ранее инвалидированной кеш линии, то дальнейшая обработка invalidate queue ни к чему не приведет. Или инструкция Load/Store обрабатывает invalidate queue перед выполнением чтения, то есть это будет комбинация read/write барьеров?
Было бы здорово разобрать примеры поведения двух процессоров в случаях Load/Store и Store/Load.
Похоже для запуска нужно ставить еще Qt и kdelibs.
Ошибка при запуске приложения (0xc000007b).
Для выхода из приложения нажмите кнопку «ОК».
Windows 7 x64
Дело было на моей первой работе после окончания института.
Взяли меня программистом в одну государственную контору в отдел АСУП
и выдали мне старенький компьютер, пока новый компьютер еще не заказали.
И все бы ничего, но этот старенький компьютер любил пререзагружатся сам по себе, и довольно часто.
В общем работать на нем было практически невозможно,
т.к. в любую минуту можно было потерять не сохраненные изменения.
В общем, в ожидании нового компьютера, я решил поиграть пока в Quake.
И вот, играя в Quake я замечаю, что компьютер то не перезагружается!
Я свернул Quake и поработал немного, компьютер по прежнему не перезагрузился.
В итоге мой рабочий день начинался так: прихожу я на работу,
включаю компьютер и быстро запускаю Quake пока компьютер не успел перезагрузится,
затем сворачиваю Quake и продолжаю работать.
Невероятно, но факт.
www.exler.ru/novels/wife.htm