Это был Стратонович, линейный фильтр Калмана является частным случаем его нелинейного фильтра. Его работы не были засекреченными, более того Калман встречался со Стратоновичем в Москве в 1960 году.
О как, спасибо за информацию!
Единственное, что смущает — автор статьи. Сложно было не ожидать от русского автора множества упоминаний русской роли в мировой науке.
Не, стоп. Я комментировал конкретное сообщение, в котором было следующее:
Между вычиткой ячейки памяти и последующей записью поксоренного содержимого исходное значение может измениться. В результате запись модифицированного содержимого затрёт произошедшие изменения. Для того, чтобы такого не происходило
Так вот, чтобы «такого не происходило» — есть LDREX/STREX. Вот собсна и все, атомарные инструкции тут приплетать незачем, тем более что bit banding выглядит менее универсальным средством, чем LL/SC.
И, к слову, чем вам не понравилась SWP, если уж мы тут все равно извращаемся? Ну, кроме того, что она deprecated. Формально отлично подходит для записи значения.
Прошу простить, а что не так с виртуальными функциями?
С шаблонами тоже нет никаких граблей, просто там такая лапша всегда получается, что лучше не смотреть даже. И не использовать, благо очевидной необходимости нет.
Ну, как бы это сказать… Все познается в сравнении. Да, он сложнее Бейсика или Алгола, например, но на них вы ничего не напишете. А если сравнить его с другими языками, столь же хорошо поддержанными в распространенных тулчейнах для эмбеда, то какой же интересно окажется проще, чем Си?
Стон же насчет небезопасности — ну он вечный же, ну. Однако большинству удается как-то не утонуть в UB, пусть даже и за счет избыточно тщательного интеграционного тестирования.
По-моему в эмбеде его очень любят… потому что не знают. И используют как «высокоуровневый ассемблер».
Понимаете в чем дело — вам легко это говорить, вы эксперт в этом языке. Любому здесь (и не только здесь пожалуй) вы можете сказать «ты чмо, да как ты смеешь использовать этот язык, ты не познал его!!!». Но это как с японским — степень ненависти нативных мунспикеров к гайдзинам и их плохому произношению мало влияет на популярность изучения японского среди определенных категорий извращенцев.
Насчет «высокоуровневого ассемблера» — был бы рад услышать внятные возражения этому, весьма популярному и отнюдь не дураками придуманному утверждению. Впрочем, вероятно, что в формате ответа на сообщение это просто невозможно. Пока скажу только одно — если, например, расположить Java и C# (на чем тоже писал, представление имею) на одном полюсе, а Си на другом, а потом попытаться где-то здесь расположить любой ассемблер, то он скорее к Си притянется, что как бы намекает.
А когда получают «простреленную ногу» из-за незнания — начинаются какое-то дикое бурление говён
Ну ладно вам, нытье не зависит от языка.
Всё это очень странно, потому что тот же, упомянутый чуть выше, Forth — куда как более предсказуем… но в эмбеде, в последние годы — нелюбим.
По очень простой причине — сложен для понимания необученными массами. И это приговор не массам, а языку.
Угу. Как-то давно утверждалось, что за пять лет до Калмана полностью аналогичные работы по оптимальным регуляторам (из которых потом вырос соответствующий наблюдатель, ставший впоследствии "фильтром") провел некий советский математик, однако его работы были засекречены — поскольку делались для военов. Ну и что теперь делать? Вообще не заявлять о приоритете, а то вдруг секретные учёные аж ещё в Рейхе это придумали?
Смотря какой новичок. Си любят в эмбеде, потому что там и без собственно технологии программирования хватает вопросов для изучения, так что если вы новичок в эмбеде — лучше начать с Си. Если же писать под ПК, то лучше что-то уровнем повыше, потому что реально есть возможность на этом сконцентрироваться.
Хм, а я и не знал, что это понятие вымарано… А чем оно, собственно, плохо? Фиктивные силы хороши на определенном уровне рассуждений. И они как раз упрощают жизнь школьникам, если им пояснили, что это фиктивные силы.
Рука-лицо. Да, здесь не использовано, конечно — но зато вся остальная программа может обращаться к foo, считая, что это просто глобальный объект.
А, ну это да. Просто это к самой инициализации не относится, вот я и спросил.
И вообще — не будьте строги к идиотам. :)
Компилятор, видя, что foo ссылается на foo_placeholder просто заменит все ссылки на foo_placeholder во всех местах
Да, так и есть, спасибо за очередной пример.
вам не нужно будет городить никакого синтаксического сахара и вообще помнить о том, что объекты у вас — это не просто глобалы, а что они размещены через placement new
Зато имеет место дополнительный код при объявлении и создании объекта. Впрочем это все попросту неизбежно, если нужно создать объект в конкретном хранилище.
Понятно, произошло недопонимание. Видимо вы сразу (с первого сообщения) имели в виду, что выделяете статическое хранилище и дальше через placement new на нем размещаете объекты, а я почему-то подумал, что вы предлагает замаллочить память, а потом передать ее в placement new (что как бы непонятно чем лучше в контексте борьбы с динамическим выделением). Я там выше специально malloc упомянул для уточнения, но никто не возразил, а то вопрос был бы снят сразу…
А, теперь кажется понял. Да, для корректного удаления объектов нужен список того, что удаляем. И он создаваться, что логично, должен на куче. И если __aeabi_atexit фактически пустая, то и список создаваться не будет. Но вот что непонятно — неужели этот список настолько большой, что автор статьи в него уперся?
Я в курсе, зачем нужен placement new (буду теперь всегда тут так писать, ок). Мой вопрос был именно в том, почему вдруг это становится vice versa к «динамическому выделению».
А вот ваш второй пример (спасибо за него) я не совсем понял. Зачем нужна строка 12? Мне показалось, что Foo& foo впоследствии не использовано.
Дык еще раз — почему в этом случае что-либо вдруг становится более безопасным itself? Память-то вы все равно выделять будете динамически. Вы же против динамического выделения как такового высказывались.
Я понял, о чем речь, просто вместо placement new написал new () — как в реале оно и пишется (в скобках указывается ссылка на выделенную память, ну или указатель).
Собственно да, использование динамического выделения памяти не хорошо влияет на надежность программы
Да ладно, экстремизм это все (впрочем — сам с этим жил и не жаловался). Если один раз в начале программы, ну или по крайней мере в процессе инициализации (который может быть не только в самом начале) — то и не страшно. Нужно только возвращаемые значения проверять аккуратно (само собой я про malloc).
Можно взамен использовать плейсмент нью с выравниванием
Вот тут не понял. Как new () принципиально облегчает описанную ситуацию и делает создание объектов более безопасным?
Это так, я этот тезис и отстаиваю. Просто пытался понять, почему вы именно виртуальные функции отметили — они-то как раз просты для понимания.
О как, спасибо за информацию!
Единственное, что смущает — автор статьи. Сложно было не ожидать от русского автора множества упоминаний русской роли в мировой науке.
К слову, sci-hub сумеет ее скачать?
Так вот, чтобы «такого не происходило» — есть LDREX/STREX. Вот собсна и все, атомарные инструкции тут приплетать незачем, тем более что bit banding выглядит менее универсальным средством, чем LL/SC.
И, к слову, чем вам не понравилась SWP, если уж мы тут все равно извращаемся? Ну, кроме того, что она deprecated. Формально отлично подходит для записи значения.
С шаблонами тоже нет никаких граблей, просто там такая лапша всегда получается, что лучше не смотреть даже. И не использовать, благо очевидной необходимости нет.
Ну, как бы это сказать… Все познается в сравнении. Да, он сложнее Бейсика или Алгола, например, но на них вы ничего не напишете. А если сравнить его с другими языками, столь же хорошо поддержанными в распространенных тулчейнах для эмбеда, то какой же интересно окажется проще, чем Си?
Стон же насчет небезопасности — ну он вечный же, ну. Однако большинству удается как-то не утонуть в UB, пусть даже и за счет избыточно тщательного интеграционного тестирования.
Понимаете в чем дело — вам легко это говорить, вы эксперт в этом языке. Любому здесь (и не только здесь пожалуй) вы можете сказать «ты чмо, да как ты смеешь использовать этот язык, ты не познал его!!!». Но это как с японским — степень ненависти нативных мунспикеров к гайдзинам и их плохому произношению мало влияет на популярность изучения японского среди определенных категорий извращенцев.
Насчет «высокоуровневого ассемблера» — был бы рад услышать внятные возражения этому, весьма популярному и отнюдь не дураками придуманному утверждению. Впрочем, вероятно, что в формате ответа на сообщение это просто невозможно. Пока скажу только одно — если, например, расположить Java и C# (на чем тоже писал, представление имею) на одном полюсе, а Си на другом, а потом попытаться где-то здесь расположить любой ассемблер, то он скорее к Си притянется, что как бы намекает.
Ну ладно вам, нытье не зависит от языка.
По очень простой причине — сложен для понимания необученными массами. И это приговор не массам, а языку.
Ну, для исключения таких ситуаций есть эксклюзивные чтение и запись. Так что вряд ли bit banding только ради этого придуман.
Угу. Как-то давно утверждалось, что за пять лет до Калмана полностью аналогичные работы по оптимальным регуляторам (из которых потом вырос соответствующий наблюдатель, ставший впоследствии "фильтром") провел некий советский математик, однако его работы были засекречены — поскольку делались для военов. Ну и что теперь делать? Вообще не заявлять о приоритете, а то вдруг секретные учёные аж ещё в Рейхе это придумали?
Смотря какой новичок. Си любят в эмбеде, потому что там и без собственно технологии программирования хватает вопросов для изучения, так что если вы новичок в эмбеде — лучше начать с Си. Если же писать под ПК, то лучше что-то уровнем повыше, потому что реально есть возможность на этом сконцентрироваться.
Гм, а пруфы есть? А то я в основном как-то про другое слышу.
Я внезапно обратил внимание на ник автора!
Хм, а я и не знал, что это понятие вымарано… А чем оно, собственно, плохо? Фиктивные силы хороши на определенном уровне рассуждений. И они как раз упрощают жизнь школьникам, если им пояснили, что это фиктивные силы.
А, ну это да. Просто это к самой инициализации не относится, вот я и спросил.
И вообще — не будьте строги к идиотам. :)
Да, так и есть, спасибо за очередной пример.
Зато имеет место дополнительный код при объявлении и создании объекта. Впрочем это все попросту неизбежно, если нужно создать объект в конкретном хранилище.
Так вот я потому и не пойму, при чем тут вообще куча, если речь выше про глобальные переменные.
Ну не под объект же?
UPD: Кажется ниже пояснили…
А вот ваш второй пример (спасибо за него) я не совсем понял. Зачем нужна строка 12? Мне показалось, что Foo& foo впоследствии не использовано.
Да ладно, экстремизм это все (впрочем — сам с этим жил и не жаловался). Если один раз в начале программы, ну или по крайней мере в процессе инициализации (который может быть не только в самом начале) — то и не страшно. Нужно только возвращаемые значения проверять аккуратно (само собой я про malloc).
Вот тут не понял. Как new () принципиально облегчает описанную ситуацию и делает создание объектов более безопасным?