Pull to refresh
43
2.5
Вадим Румянцев @vadimr

Разработчик аппаратно-программных комплексов

Send message

А Вы вообще понимаете разницу между лямбда функцией, лямбда выражением и обычной функцией? По-вашему получается, что это все одно и то же.

Содержательно, функция – это имя, связанное с лямбда-выражением. Хотя с точки зрения описания синтаксиса C++ в стандарте, тело функции по историческим причинам не называют лямбда-выражением. Лямбда-функция – это менее удачный термин, который означает в точности то же самое, что лямбда-выражение.

У лямбды есть состояние, которое создается из списка захвата лямбда выражением, оно же и место определения ее тела, то что справа от = в примерах выше.

Это называется “лексическая область видимости” (lexical scope).

При рекурсивных вызовах будет 11 одновременно существующих стековых фреймов, разных инстансов, как Вы говорите, а при итеративном их тоже будет 11, но не одновременно, а новый стековый фрейм на каждой итерации. А вот состояние лямбды во всех вариантах будет одно.

Когда мы здесь говорили об итеративных вызовах, то имели в виду конкретный пример, приведённый коллегой. Если данный код будет скомпилирован на машине с использованием стека, то стековых фреймов при разных вызовах будет 10 (хотя фактически и в одном и том же месте стека). А вот состояние у лямбды здесь будет всего одно, так как её контекст фактически состоит из разделяемой локальной переменной и разделяемого же счётчика инструкций.

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

Лямбда (замыкание, closure) собственно и отличается от обычной функции, по мимо отсутствия имени, наличием этого самого сотояния создаваемого лямбда выражением в точке его определения.

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

И да, теория и практическая реализация лямбд в разных языках, удивительно, может существенно отличаться. Вам говорят о том, как это реализовано и работает в С++, а Вы, почему-то, упорно это игнорируете говоря, что Вы не спец в С++.

Я зато, условно говоря, спец в лямбда-выражениях. Хотя и языку C++, в котором не считаю себя спецом, многих мог бы поучить.

Что Вы тут тогда хотиде донести/доказать? К чему эти сотрясения воздуха?

Я человек педантичный и люблю правильное использование терминологии. С которым в программировании вообще беда, а в языке C++ в особенности (достаточно сказать, что в описаниях языка C++ используются два противоречащих друг другу определения термина “переменная”, и никого это особо не смущает). Тут без некоторого погружения в основы не обойтись.

Очень жаль, если обсуждение фундаментальных вопросов вы воспринимаете как сотрясения воздуха.

Ну вообще лямбда-выражения придуманы задолго до классов и даже до программирования, как такового.

Открыть защищённый чат.

США – лидирующая в мире страна по количеству камер слежения на душу населения. Канада, наверняка, не сильно отстаёт. А возбудил их почему-то именно вендинговый автомат.

В третий раз напишу - всё зависит от ситуации.

Смотря в какой ситуации. Например, было дело, рядом со мной рекламный щит падал. Или отлетевшие детали других машин летели.

Это хорошо, если вы (1) законопослушный водитель и (2) всё время находитесь в одной скоростной зоне. И то опасно себя ограничивать, мало ли какая ситуация возникнет.

А у меня по пути из дома на работу, например, сменяются пять скоростных зон 60-110-90-110-60, даже если не обращать внимание на всякие временные знаки.

Вы слишком глубоко копаете. Тут важен юридический прецедент.

Разумной альтернативой было бы напечатать в бумажном письме короткий url документа на сайте банка.

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

Я тоже не смотрю на аналоговый спидометр, только на цифровой. Хотя на предыдущих машинах были только аналоговые спидометры. Видеть сразу число для меня гораздо удобнее, чем думать об отклонении стрелки от делений. То же самое с часами.

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

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

Надо заметить, что, когда почти не было открытого ПО, качество софта было выше, так как было очень дорого тащить в программу лишние зависимости и связанные с ними лишние проблемы.

Плохо, что мы в итоге не договорились о терминологии.

Так значение этой переменной не является частью экземпляра объекта. Что никак не противоречит тому, что сама переменная является частью класса.

У вас много путаницы между именами и значениями.

Я вам показал, что в WIki, на которую вы сослались, термин instance употребляется в двух разных смыслах

И что из этого? Я вам могу любое слово употребить в двух и даже десяти разных смыслах. Меня @qw1попросил привести пример использования, и я это сделал.

А с определениями тут очень сложно, так как это первичные понятия.

Information

Rating
995-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Specialist
Lead