LINUX.ORG.RU

Что такое «императивность»?

 


0

1

Имхо, в наше время идет тотальная путаница с данным термином в связи с расцветом ФП парадигмы.

Кое-кто даже умудряется увязывать это определение с отсутствием ссылочной прозрачности.

Это все идет из-за противопоставления императивный-функциональный.

ИМХО, все тут просто должно быть. Императивный - инструкции для исполнителя. Декларативный — описательный стиль, как будто нет исполнителя. На этом разница заканчивается. Никакого отношения к ФП или ссылочной прозрачности, чистоте, эти термины иметь не должны. А как думаете вы?


Сколько людей столько и понятий тебе будет. Императивность - последовательное выполнение как по мне, если не вдаваться в демагогию.

umren ★★★★★
()
Ответ на: комментарий от umren

Вот из-за этого путаница и возникает, что каждый по своему трактует, а потом хрен поймешь, что имеется в виду. Само слово imperative нам как бы намекает. Пора вернуть ему изначальный смысл. Хотя вряд-ли это будет:)

phill
() автор топика
Ответ на: комментарий от phill

Пора вернуть ему изначальный смысл

Что такое «изначальный смысл», где гарантии, что до зарегистрированного изначально смысла не было другого?

umren ★★★★★
()

Вон из Development и иди пиши код, коли погроммист. Даже если напишешь очередной калькулятор, пользы будет больше.

Virtuos86 ★★★★★
()

А как думаете вы?

А мы думаем, что перед тем, как постить УГ в Development, нужно хотя бы почитать определение из Wikipedia.

tailgunner ★★★★★
()
Ответ на: комментарий от umren

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

phill
() автор топика
Ответ на: комментарий от Virtuos86

коли погроммис

Не, я не программист. Просто хобби.

phill
() автор топика
Ответ на: комментарий от phill

Контраст к декларации — это конвенция, а не императив. Хватит сравнивать теплое с мягким. Например, в Хаскелле функции можно определять в двумерно-декларативном стиле (с помощью паттерн-матчинга) или в линейно-функциональном (вся терминология выдумана тут же на коленке, штангисты, сильно не бейте).

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Что такое вообще декларативность в хаскеле? Независимость от порядка вычислений? Это ложь. Один шаг — одна редукция, местами редукции Вы не поменяете. Я уж про двумерно-декларативный и не заикаюсь.

phill
() автор топика

Противопоставлять императивность функциональности довольно глупо. STG, например, вполне чистый функциональный и всё же императивный язык программирования.

KblCb ★★★★★
()
Ответ на: комментарий от KblCb

STG, например, вполне чистый функциональный и всё же императивный язык программирования.

Почему ты считаешь его императивным?

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от KblCb

императивность функциональности довольно глупо

Ну, я и говорю, правильно противопоставлять императивный-декларативный. Так никакой путаницы не возникает.

phill
() автор топика
Ответ на: комментарий от Virtuos86

Во! Калькулятор был моей первой программой. На Visual Basic'е писал. Тогда в магазинах было книг мало, нашел только по нему. Интернета не было вообще.

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

Weres ★★★
()

Мимопроходил

Риторический вопрос: вот тебе заняться больше нечем, кроме как такой тупняк в девелопмент нести?

HerrWeigel ★★★★
()
Ответ на: комментарий от Weres

Во! Калькулятор был моей первой программой. На Visual Basic'е писал.

Это не книга Сафронова случаянно? «Visual Basic в задачах и примерах» ? :P просто, я ее тоже сто лет назад как-то купил, помню калькулятор там был.

umren ★★★★★
()
Ответ на: комментарий от stevejobs

Определи «хороший калькулятор». Чего тебе не хватает от gnome-calculator, kcalc, bc, bash, python, etc?

ddos3
()

Императивность - это когда юзер как император. «Убейся об стену!» - говорит император. «Слава Императору!» - отвечает коНпелятор и убивается об стену.

Декларативность - это когда юзер декларирует. Это, мол, уравнение. Это коэффициенты. А это алгоритм решения. Мне нужны корни уравнения. И коНпелятор решает уравнение и пишет корни. Или так: вот это сокет, а это протокол. А ну-ка обслужи клиента! И коНпелятор обслуживает.

Императивность ещё может быть такая.

nanoolinux ★★★★
()
Ответ на: комментарий от nanoolinux

Ваше определение, тащемта, соответствует тому, что обозначил ТС. Вы так и сказали бы, все_правильно_сказал. Другие то в этом топике не согласны с этим. Я вот тоже запутался с этой вашей императивностью. Щас ФП почему то все декларативным называют. Оно может и декларативное, но не обязательно декларативность же должна быть ФП, так?

durak1
()
Ответ на: комментарий от durak1

Это ты у меня спрашиваешь? Я вообще на спп пишу, я не в кукргсе, ребята. Ну бывает на ерланге там. Сейчас кстати небольшой сервак пишу, может в продакшн пойдёт. Но там всё совсем по-деревянному. Даже хитрых штук с рекурсией нету, сплошной otp.

nanoolinux ★★★★
()

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

В хаскеле традиционно вычисления в монаде IO называют императивными. В тоже время IO является MonadFix, а потому в этой монаде можно создавать рекурсивные определения, а там во всю используется магия с ленивостью. Получается, что такой код выглядит и императивно, и функционально, и декларативно. Такая селяви.

dave ★★★★★
()
Ответ на: комментарий от umren

Нет, какая-то забугорная была. Visual Basic шаг за шагом", что ли. Калькулятора там не было, были примеры типа нажми на кнопочку — хеллоу ворлд выскочит. С фантазией было плоховато, поэтому ничего лучше калькулятора не придумалось.

Weres ★★★
()

Забаньте ушлёпка уже, ну.

anonymous
()
Ответ на: комментарий от Weres

А вы калькулятор как писали? Вы не использовали нативные данные, типа, числа нативные там, арифметические операции? Что вы брали за основу? Какая минимальная база была из языка?

anonymous
()
Ответ на: комментарий от Weres

И я вот не пойму, если, вы, например, числа родные не использовали, Вы наверное числа как-то по-другому обозначали? Я обозначал, когда писал one two three ... Может покомпактней способ есть? Неплохо было бы использовать именно символы цифр для своей арифметики, но они везде константы, наверное мало таких ЯП найдешь, которые разрешат их сбросить.

anonymous
()
Ответ на: комментарий от anonymous

Писать свой интерпретатор, а там уже реализовывать на низшем уровне.

anonymous
()

Статус: анонимный (заблокирован) Блокирован 11.06.2014 15:44:30, модератором beastie по причине: виртуал anonimous

Разоблачили, значит.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

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

anonymous
()

Какое счастье, этого клоуна, наконец, забанили. Слава beastie.

mix_mix ★★★★★
()
Ответ на: комментарий от tailgunner

Во-первых это довольно чёткая последовательность действий с явными аллокациями объектов в куче и явным форсированием вычислений. Собственно потому он довольно просто транслируется в код целевой платформы. Во-вторых stg подразумевает ту нотацию записи которую то ли SPJ, а вероятнее Вадлер где-то называл императивной в противовес декларативной нотации без явных case'ов с паттерн-матчингом в аргументах многократно связанной функции.

KblCb ★★★★★
()

сдулся филя как дырявый презик

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.