Здравствуйте, z00n, Вы писали:
E>>Продолжая в том же духе, можно сказать, что раз Степанов свои работы писал на английском, то истоки его работ нужно искать в то время, когда он занимался изучением английского языка.
Z>Нет, нельзя.
В идеях STL для Ada и C++ ключевую роль играют пары итераторов (параметризуемых типом элемента последовательности). Покажите таковую в работе о Scheme.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Да где уж мне понять о чем работа.
+1
E>И как один итератор в работе о Scheme вдруг превратился в пару итераторов в работе об Ada.
"Два" — это в смысле begin и end.
E>И как отсуствие описания контейнеров в работе о Scheme вдруг стало описанием целой серии родственных контейнеров в Ada.
Производим поиск по "ADT" и убеждаемся в обратном.
E>И как структуры-итераторы из Ada вдруг стали объектами-итераторами из C++.
Вот удивительно! А это не зависит от способа представления АТД в языке?
E> И почему "Higher Order Programming" вдруг стало главной идеей C++ STL, без учета тучи обобщенных STL-евских контейнеров (и операций над ними на основе пары итераторов, а не одного итератора из работы о Scheme).
Дык особенности и родили STL, а не что-то другое. А уникальной библиотека как раз стала из-за того, что это была первая известная библиотека эксплуатирующая тот самый "Higher Order Programming".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
E>> И почему "Higher Order Programming" вдруг стало главной идеей C++ STL, без учета тучи обобщенных STL-евских контейнеров (и операций над ними на основе пары итераторов, а не одного итератора из работы о Scheme).
VD>Дык особенности и родили STL, а не что-то другое.
А теперь поднимаемся в вершину ветки и видим, что речь шла именно об итераторах (которые парами) и их замены на более многообещающие Ranges. А пары итераторов как раз и возникли из-за особенностей обобщенного программирования в Ada и C++.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>В идеях STL для Ada и C++ ключевую роль играют пары итераторов (параметризуемых типом элемента последовательности). Покажите таковую в работе о Scheme.
Давайте лучше вы покажете, где Степанов сказал что "В идеях STL для Ada и C++ ключевую роль играют пары итераторов (параметризуемых типом элемента последовательности)". Идеи, кстати, самим Степановым датируются 70-ыми годами.
Здравствуйте, z00n, Вы писали:
E>>В идеях STL для Ada и C++ ключевую роль играют пары итераторов (параметризуемых типом элемента последовательности). Покажите таковую в работе о Scheme.
Z>Давайте лучше вы покажете, где Степанов сказал что "В идеях STL для Ada и C++ ключевую роль играют пары итераторов (параметризуемых типом элемента последовательности)".
Ну <censored>, какой интересный расклад получается. Вначале FR заговорил о Ranges, которые Александреску ввел в D вместо C++ных итераторов. И я сказал об STL именно с точки зрения итераторов -- мол, не было бы опыта их использования в C++, возможно в D не было бы сейчас Ranges. И что идеи итераторов в C++ пришли прямиком из Ada. Тут подключаются эрудиты и утверждают, что идеи эти пришли еще из Scheme. Но показать их в Scheme отказываются.
Что до ключевой идеи, то это не Степанов сказал, а я. Да, по-моему, контейнеры и итераторы -- это краеугольные камни C++ного STL (времен стандарта 98-го года). Причем итераторы, наверное, даже краеугольнее, т.к. именно из-за них в C++ных контейнерах есть методы begin()/end(), а не методы each/inject/map.
Если вас эта точка зрения не устраивает, то разговор можно закончить, списав все на мою воинствующую безграмотность.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, z00n, Вы писали:
E>>>В идеях STL для Ada и C++ ключевую роль играют пары итераторов (параметризуемых типом элемента последовательности). Покажите таковую в работе о Scheme.
Z>>Давайте лучше вы покажете, где Степанов сказал что "В идеях STL для Ada и C++ ключевую роль играют пары итераторов (параметризуемых типом элемента последовательности)".
E>Ну ёптыть, какой интересный расклад получается. Вначале FR заговорил о Ranges, которые Александреску ввел в D вместо C++ных итераторов. И я сказал об STL именно с точки зрения итераторов -- мол, не было бы опыта их использования в C++, возможно в D не было бы сейчас Ranges. И что идеи итераторов в C++ пришли прямиком из Ada. Тут подключаются эрудиты и утверждают, что идеи эти пришли еще из Scheme. Но показать их в Scheme отказываются.
Напоминаю: Вы> STL-ю уже скоро двадцать лет исполнится (если мне не изменяет склероз, Степанов начал работать над его идеями еще в конце 80-х, но для Ada) Я> Вообщето первый пробраз STL Степанов написал для Scheme(!) в 86-ом.
И Степанов говорит, и вообще так принято считать, что идеей STL является отделение алгоритмов от контейнеров.
Здравствуйте, z00n, Вы писали:
Z>Напоминаю: Вы>> STL-ю уже скоро двадцать лет исполнится (если мне не изменяет склероз, Степанов начал работать над его идеями еще в конце 80-х, но для Ada) Я>> Вообщето первый пробраз STL Степанов написал для Scheme(!) в 86-ом. Z>И Степанов говорит, и вообще так принято считать, что идеей STL является отделение алгоритмов от контейнеров.
Ну да, итератор, который у Степанова получился в Ada и C++ -- это не идея, это так, мелкая деталь реализации.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>А теперь поднимаемся в вершину ветки и видим, что речь шла именно об итераторах (которые парами) и их замены на более многообещающие Ranges. А пары итераторов как раз и возникли из-за особенностей обобщенного программирования в Ada и C++.
STL и работа Степанова — это не итераторы и не про итераторы. Итераторы там — это абстракция списка в том виде в котором она может быть обобщена в С++.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, eao197, Вы писали:
E>>А теперь поднимаемся в вершину ветки и видим, что речь шла именно об итераторах (которые парами) и их замены на более многообещающие Ranges. А пары итераторов как раз и возникли из-за особенностей обобщенного программирования в Ada и C++.
VD>STL и работа Степанова — это не итераторы и не про итераторы.
Зато у нас с FR разговор был об STL-ных итераторах и Ranges из D, как более совершенной альтернативы итераторам. И в C++ итераторы были введены Степановым на основании его работы над Ada-реализацией.
VD>Итераторы там — это абстракция списка в том виде в котором она может быть обобщена в С++.
Абстракцией какого списка служит, например, istream_iterator?
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, z00n, Вы писали:
Z>>И Степанов говорит, и вообще так принято считать, что идеей STL является отделение алгоритмов от контейнеров.
E>Вообще-то, это не столько идея, сколько цель.
Это, разумеется, ваше мнение — подкрепить его, например, цитатой из Степанова вы не можете.
Здравствуйте, z00n, Вы писали:
Z>Здравствуйте, eao197, Вы писали:
E>>Здравствуйте, z00n, Вы писали:
Z>>>И Степанов говорит, и вообще так принято считать, что идеей STL является отделение алгоритмов от контейнеров.
E>>Вообще-то, это не столько идея, сколько цель. Z>Это, разумеется, ваше мнение — подкрепить его, например, цитатой из Степанова вы не можете.
Ммм, а что на твой взляд было его целью? И чем идея у тебя от цели отличается?
Или чисто спор о терминах?
VladD2 wrote:
> Именно так. В динамических ФЯ к которым относится Схема они просто не > очень нужны. Там все базируется на списках.
Утверждение сомнительное. Итераторы в первую очередь ограничивают
обрабатываемую подпоследовательность. Как список это может сделать ?
Я не знаю, как в схеме, а в common lisp аналоги итераторов есть,
там все последовательности отображены на множество целых неотрицательных
чисел, и два необязательных индекса начала и конца обрабатываемого
диапазона входят в число параметров всех функций обработки последовательностей.
Это — прямой аналог итераторов, хотя сделано всё без дешёвых понтов,
железобетонно и удобно.
Я подозреваю, что в схеме просто нет ничего, кроме списков, из
последовательностей. Т.е. обобщённых последовательностей нет вообще.
Здравствуйте, MasterZiv, Вы писали:
MZ>VladD2 wrote:
>> Именно так. В динамических ФЯ к которым относится Схема они просто не >> очень нужны. Там все базируется на списках.
MZ>Утверждение сомнительное. Итераторы в первую очередь ограничивают MZ>обрабатываемую подпоследовательность. Как список это может сделать ?
Последовательность и список — это одно и тоже. Все что нужно уметь с ними делать для унифицированной обработки — это получить голову и хвост. Остальные операции реализуются на них. CAR CDR как раз и есть встроенные возможности любого диалекта лиспа решающие данный вопрос.
MZ>Я не знаю, как в схеме, а в common lisp аналоги итераторов есть, MZ>там все последовательности отображены на множество целых неотрицательных MZ>чисел, и два необязательных индекса начала и конца обрабатываемого MZ>диапазона входят в число параметров всех функций обработки последовательностей.
Ну, и как это применить к списку у которого попросту нет индексированного доступа?
MZ>Это — прямой аналог итераторов, хотя сделано всё без дешёвых понтов, MZ>железобетонно и удобно.
Как раз итераторы С++ не предполагают наличия индексного доступа (кроме одного поддтипа, который трудно назвать итератором).
MZ>Я подозреваю, что в схеме просто нет ничего, кроме списков, из MZ>последовательностей. Т.е. обобщённых последовательностей нет вообще.
У тебя весьма извращенное понимание обобщенности. "Обобщенный означает переход от частного к общему. Индексированный доступ — это частность, а вот понятие списка — упорядоченное множество — это более общее понятие.
Теперь почему для динамических языков введение четкого интерфейса не имеет особого смысла...
В динамических языках обычно все функции автоматически становятся обобщенными. Достаточно описать функции доступа используемые в алгоритме, как алгоритм автоматически становится обобщенным.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Как я понял это пока не входит в boost ?
A>и что бы не писать кучу скобочек: A>filter1(transformer(filter2(any_adaptor(range))));
A>имеется оператор '|' A>range | any_adaptor A> | filter2 A> | transformer A> | filter1; A>Удобно.
Ну в D еще удобней
Хотя конечно тоже лучше итераторов.
A>На последней BoostСon Александреску выступал на эту тему тута. Плюсовики понимают, что концепция итераторов морально устарела и ни что не мешает, где нибудь сбоку, создать Range-based design.
Это читал.
Осталось еще один шаг сделать, до генераторов с yield
Здравствуйте, VladD2, Вы писали:
VD>В динамических языках обычно все функции автоматически становятся обобщенными. Достаточно описать функции доступа используемые в алгоритме, как алгоритм автоматически становится обобщенным.
Здравствуйте, eao197, Вы писали:
E>Зато у нас с FR разговор был об STL-ных итераторах и Ranges из D, как более совершенной альтернативы итераторам. И в C++ итераторы были введены Степановым на основании его работы над Ada-реализацией.
Зря наверно про функциональщину я писал
Я уже давал ссылку на более близкую чем функциональщина (при этом мало уступающую в выразительности) родню итератором и ranges это итераторы из CLU http://en.wikipedia.org/wiki/CLU_programming_language похоже Степанов о них все-таки не знал, тогда сразу могло получится гораздо лучше.
Здравствуйте, z00n, Вы писали:
Z>>>И Степанов говорит, и вообще так принято считать, что идеей STL является отделение алгоритмов от контейнеров.
E>>Вообще-то, это не столько идея, сколько цель. Z>Это, разумеется, ваше мнение
Разумеется мое.
Отделение алгоритмов от контейнеров -- это одна из идей обобщенных алгоритмов:
The most important technical idea is that of generic algorithms, which are a means of
providing functionality in a way that abstracts away from details of representation and basic
operations.
А STL -- это библиотека, целью которой является воплощение замыслов разработчиков в реальный код.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
FR>>Во всяком случае STL'ным итераторам и алгоритмам такое комбинирование в стиле FR>>функциональщины (уже почти все аналоги основных ФВП есть) и не снится.
E>Да ладно, STL-ю уже скоро двадцать лет исполнится (если мне не изменяет склероз, Степанов начал работать над его идеями еще в конце 80-х, но для Ada). Не было бы никаких range, если бы не было пятнадцати лет широчайшего использования STL-ных итераторов.
Я был не прав. В реализации Степанова для Ada итераторы были совсем другие -- там не было пар итераторов. Пары итераторов возникли уже в C++. Из работ на Ada в C++ пришли, разве что, слои абстракции.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.