Pull to refresh

Comments 9

Всё круто и классно, кроме того, что статья в 2008 года.
Да, теория никуда не делась и Херб молодец, но какой сейчас смысл обсуждать и вспоминать «нововведения» С++ 0х и прочие 2010 студии?

Но volatile в С++ своей семантики за это время не поменял…

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

Сравнивается скорее семантика одного ключевого слова в разных языках с указанием на то, что «вот это в языке А» на самом деле не то же самое, что то же самое в язык Б, но имеет вот такой прямой аналог в язык Б.
Подходы к разработке слегка поменялись за 12 лет, как и инструменты.

Вот именно, что «слегка» — основы осталиcь. Потому что любые подходы и инструменты не могут игнорировать свойства оборудования, на котором выполняются программы.
В статье как раз и описаны некоторые особенности функционирования оборудования: атомарные операции чтения/записи и отображаемые в память регистры устройств, которые ведут себя не совсем как обычная память. А также в ней написано про общие концепции реализации языков программирования — исключение лишних операций и переупорядочение операций при оптимизации — которые при их некорректном применении могут конфликтовать с описанными аппаратными особенностями, приводя к нарушению семантики программы.
Любые инструменты и подходы к разработке для работы с оборудованием, в котором эти особенности сущетсвуют, должны учитывать их наличие и, если эти особенности существенны для предметной области, на котоую нацелено средство разработки — давать средства работы с ними.
А эти особенности по-прежнему (и за 12 лет тут мало что поменялось) достаточно часто реализованы в реальном оборудовании и используются достаточно часто реальных предметных областях, чтобы стоило иметь представление об их существовании. Особенно это касается атомарных операции чтения/записи при многопоточном и многопроцессорном выполнении программ, что в наше время стало даже более распространеным явлением нежели тогда, когда была написана статья.
Плюс статья сравнивает разные языки, что опять же, не имеет смысла сейчас.

Статья сравнивает не языки сами по себе, а реализацию поддержки упомянутых особенностей аппаратного уровня на примере нескольких языков. И, что ценно, обращает внимание, что одно и то же ключевое слово может в разных языках быть связано с разными особенностями — что может приводить к путаннице.
Плюс многих языков в сравнении просто нет.

Зная про эти базовые концепции, уже нетрудно выяснить, как эти концепции поддерживаются в конкретном языке и инструменте разрабоки по докоментации на него, и выбрать правильный вариант для корректной реализации программы. А вот не зная про них ничего, легко ошибиться и получить загадочные и трудновоспроизводимые ошибки.
В таблице в ячейке 2.2 должно быть «но не записи», а не «но не чтения» — load и read это синонимы.
Статья 2009 года.
Думаю, что за фигня-то? Какие C++0x atomic? Уже же ж давно же ж std::atomic в стандарте.
А оно вот оно чо.
Привет из 2020: volatile уже частично deprecated.
Про какой язык (или языки) речь? Я так понял что статья как раз не про volatile как таковой, а про то, что одно слово означает разные вещи в разных языках.
Sign up to leave a comment.