Если одну задачу можно решить двумя способами, то зачем тогда первому решению давать название второго? Ну ладно, если дали — но это как раз и сбило с толку.
Хотя если честно (это немножко подумав), я забираю слова назад: я ожидал изменения порядка выполнения, потому что С++-исключения его меняют, а в идеале надо было абстрагироваться от известных реализаций исключений.
*теперь торт!!!
з.ы. вот видите, иногда очень полезно поспрашивать после лекции.
Согласен с коментом. Я ждал каких то механизмов для действительного изменения порядка выполнения, возможно через сетжамп/лонгжамп, или без них (хотя и не представляю как — но, думаю было бы интересно).
а вы друзьям своим похвастайтесь, может они оценят, нам то зачем? может мы все тут неадекватные тролли?
то что вам кто-то напишет «Оо, чувак жжеш, круто!!!» не сравнится с похвалой человека, которого знаешь — это еще один минус в огород интернета, из-за него атрофируются нормальные человеческие отношения
Извините, но и ссылки на Haskell я убрать не могу, поскольку то, что о нем упоминается, относиться к «спору», о котором я говорил в начале статьи. То есть это, по сути, цитата.
Спасибо, но по-моему вы невнимательно читали. Из того, что вы назвали действительно только:
1. нумерация с нуля — легко исправить;
2. ненаглядный синтаксис — имеет свое преимущество: пользуясь, вы как бы говорите:
auto f1 = partApply<3, 0>(f)(x, y); // передаю третий аргумент, а потом нулевой
3. и работа с членами — я нарочно специализировал шаблоны только для std::function — так было проще. Это возможно, действительно, минус, но он тоже легко устраняется дополнительной [тривиальной] специализацией.
С вами полностью согласен, но переименовывать статью в «Эмуляция каррирования и частичного применения» не буду=)
Сейчас очень часто приходиться слышать, как некоторые вещи называют не теми именами, но что поделаешь, эти названия модные, и они привлекают к себе внимание. Спекуляция поделила их значения на две группы: точные (те, например, что привели вы) и популярные (те, которыми оперировал я).
Мне самому это не нравиться, но мы как-то не вольно в это втягиваемся — что же, будем бороться.
з.ы. за объяснения огромное спасибо, никогда над этим не задумывался.
Но я же указал, в каком смысле сравнивал эти два понятия.
Что касается уровня встроености чего-то в язык, каюсь, что настолько строго данный вопрос не рассматривал, но нету ведь особой разницы: компилятор этим занимается или библиотечная функция. Я приведу пример с Nemerle: программисты, которые на нем пишут знают, что там есть частичное применение и их не переубедишь, что это не так. Я к тому, что некоторые названия могут не совсем соответствовать своей сути.
з.ы. Вы могли бы мне кинуть информацию о каррировании и частичном применении в Хаскеле? Буду очень благодарен.
Но я же указал, в каком смысле сравнивал эти два понятия.
Нащет уровня встроености чего-то в язык, каюсь, что настолько строго данный вопрос не рассматривал, но нету ведь особой разницы: компилятор этим занимаеться или библиотечная функция. Я наведу пример з Nemerle:
Конечно, пожалуйста.
Каррирование — это представление функции от нескольких аргументов в виде функции, что принимает первый аргумент и возвращает функцию, которая, в свою очередь, принимает второй аргумент и так далее до результата.
Частичное применение — это передача функции части аргументов, получая при этом функцию, что принимает остальные аргументы.
По-этому, если рассматривать данные возможности с точки зрения их одноразового применения, то есть, если имеются две функции, первая из которых каррированна, а с другой можно проводить частичное применение, то в случае с каррированной функцией можно зафиксировать только первый аргумент, а в случае с частично применяемой — любой или любые. То есть в этом смысле каррирование есть частный случай частичного применения.
Что касается «или достаточно иметь только каррирование (как, например, в Haskell)» — это мысль не моя и на нее я уже ответил в топике.
я уже тут ответил, что эта реализация — не сложная, просто маловато опыта у людей с шаблонами нового стандарта. А как было сказано тут, статью можно использовать чтоб лучше разобраться с новыми возможностями.
Хотя если честно (это немножко подумав), я забираю слова назад: я ожидал изменения порядка выполнения, потому что С++-исключения его меняют, а в идеале надо было абстрагироваться от известных реализаций исключений.
*теперь торт!!!
з.ы. вот видите, иногда очень полезно поспрашивать после лекции.
то что вам кто-то напишет «Оо, чувак жжеш, круто!!!» не сравнится с похвалой человека, которого знаешь — это еще один минус в огород интернета, из-за него атрофируются нормальные человеческие отношения
Спасибо, очень эпически, такой себе боевичек с неожиданной концовкой получился
… я имел ввиду, что уже есть возможность написать безопасный printf на C++.
з.ы. вы точно не внимательно читали — об этом было написано.
1. нумерация с нуля — легко исправить;
2. ненаглядный синтаксис — имеет свое преимущество: пользуясь, вы как бы говорите:
3. и работа с членами — я нарочно специализировал шаблоны только для std::function — так было проще. Это возможно, действительно, минус, но он тоже легко устраняется дополнительной [тривиальной] специализацией.
Сейчас очень часто приходиться слышать, как некоторые вещи называют не теми именами, но что поделаешь, эти названия модные, и они привлекают к себе внимание. Спекуляция поделила их значения на две группы: точные (те, например, что привели вы) и популярные (те, которыми оперировал я).
Мне самому это не нравиться, но мы как-то не вольно в это втягиваемся — что же, будем бороться.
з.ы. за объяснения огромное спасибо, никогда над этим не задумывался.
Но я же указал, в каком смысле сравнивал эти два понятия.
Что касается уровня встроености чего-то в язык, каюсь, что настолько строго данный вопрос не рассматривал, но нету ведь особой разницы: компилятор этим занимается или библиотечная функция. Я приведу пример с Nemerle: программисты, которые на нем пишут знают, что там есть частичное применение и их не переубедишь, что это не так. Я к тому, что некоторые названия могут не совсем соответствовать своей сути.
з.ы. Вы могли бы мне кинуть информацию о каррировании и частичном применении в Хаскеле? Буду очень благодарен.
Нащет уровня встроености чего-то в язык, каюсь, что настолько строго данный вопрос не рассматривал, но нету ведь особой разницы: компилятор этим занимаеться или библиотечная функция. Я наведу пример з Nemerle:
Каррирование — это представление функции от нескольких аргументов в виде функции, что принимает первый аргумент и возвращает функцию, которая, в свою очередь, принимает второй аргумент и так далее до результата.
Частичное применение — это передача функции части аргументов, получая при этом функцию, что принимает остальные аргументы.
По-этому, если рассматривать данные возможности с точки зрения их одноразового применения, то есть, если имеются две функции, первая из которых каррированна, а с другой можно проводить частичное применение, то в случае с каррированной функцией можно зафиксировать только первый аргумент, а в случае с частично применяемой — любой или любые. То есть в этом смысле каррирование есть частный случай частичного применения.
Что касается «или достаточно иметь только каррирование (как, например, в Haskell)» — это мысль не моя и на нее я уже ответил в топике.