love5an: (Default)
[personal profile] love5an
Сейчас я опишу одну из главных причин по которым я недолюблюваю Ъ ф.п, и люблю CL.


Понимаете, рассуждая о развитии IT-индустрии, можно провести аналогию с классической промышленностью.

В истории классической промышленности были периоды когда всё делали единично и ручками. Я мог бы сравнить такие периоды с ранним развитием IT. Со временами расцвета UNIX или DOS. С языками вроде Си.

Потом были периоды рабовладельческого строя и раннего капитализма, когда любую задачу закидывали необходимым количеством человеков. Я бы сказал, что сейчас в IT-индустрии как раз такой подобный период, со всеми этими Java и PHP.

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

И IT-индустрию ждет когда-нибудь то же самое, то есть массовая автоматизация, программы которые пишут программы(понимаете, к чему я клоню, да?), и это неминуемо.

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

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

Кстати, скоро напишу на хабр статью о макросах и метапрограммировании в лиспе, как только продумаю её.

Date: 2011-11-01 05:00 pm (UTC)
From: [identity profile] usovalx.livejournal.com
Хорошо, а если посмотреть на это с другой стороны?

Как уже заметили написание кода ближе к инженерной деятельности чем к машиностроению. И если посмотреть с этой стороны то динамические системы как раз больше похожи на кустарную разработку: тут скотчем примотали, там тестом подпёрли ;)

Date: 2011-11-01 05:16 pm (UTC)
From: [identity profile] love5an.livejournal.com
>И если посмотреть с этой стороны то динамические системы как раз больше похожи на кустарную разработку: тут скотчем примотали, там тестом подпёрли

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

Все сложные системы превращаются в итоге в склеенную соплями кучу с миллионом подпорок.
С этом только автоматизация(метапрограммирование) может справиться в какой-то мере.

Date: 2011-11-01 05:45 pm (UTC)
From: [identity profile] usovalx.livejournal.com
> С этом только автоматизация(метапрограммирование) может справиться в какой-то мере.

Ага, компьютер удобен тем, что за секунду он сожет совершить больше ошибок чем толпа людей. Вот как-раз генерация соплей и подпорок это последнее что хочется видеть в проэкте.

Date: 2011-11-01 05:49 pm (UTC)
From: [identity profile] love5an.livejournal.com
Генерировать сопли и подпорки как раз не потребуется, потому что сопли и подпорки это следствие человеческого фактора.

Date: 2011-11-01 05:57 pm (UTC)
From: [identity profile] usovalx.livejournal.com
Ага, шас.

Сопли и подпорки это результат роста и именений системы. И при отсутсвии формальных и верифицируемых спецификаций генерация кода ничего не даст -- никто не в состоянии полностью переделывать описание системы при каждом изменении.

Date: 2011-11-01 06:10 pm (UTC)
From: [identity profile] love5an.livejournal.com
>Сопли и подпорки это результат роста и именений системы.

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

Date: 2011-11-02 12:32 am (UTC)
From: [identity profile] usovalx.livejournal.com
И? Ты же сам повторил то что я сказал. Как только система дорастает до определённоо размера начинается построение подпорок при внесении новой функциональности. Потому что всё выбросить и переделать уже невозможно -- совместимость, поддержка, расходы и т.п.

Вот и будешь ты в конце концов генерить все те-же костыли. Только в твоём случае будет ещё хуже -- потому что костыли потребуются и в самом DSL или что ты там будешь использовать и в макросах которые из него будут генерить код.

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 10:09 am (UTC) - Expand

(no subject)

From: [identity profile] usovalx.livejournal.com - Date: 2011-11-02 12:01 pm (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 12:12 pm (UTC) - Expand

(no subject)

From: [identity profile] usovalx.livejournal.com - Date: 2011-11-02 12:24 pm (UTC) - Expand

Date: 2011-11-01 08:39 pm (UTC)
From: [identity profile] 9zloy.livejournal.com
>И при отсутсвии формальных и верифицируемых спецификаций

Вы под этим что имеете ввиду? Доказательство корректности работы программы или просто тесты?

Date: 2011-11-02 12:35 am (UTC)
From: [identity profile] usovalx.livejournal.com
Тесты и достаточно мощная система типов (на этапе сборки).

В доказательства я пока не особенно верю. И уж тем более в переделку доказательства при изменении требований. Чисто теоретически это можно сделать, но на сейчас это очень трудоёмкий процесс и окупается только для сверх-критичного софта.

Date: 2011-11-01 05:28 pm (UTC)
From: [identity profile] love5an.livejournal.com
Я что хотел сказать в постинге то - ф.п. это как раз инструменты самой первой "эпохи" - "алмазные лопаты" для единичных мастеров. Этот подход проигрывает даже второму описанному, то есть заваливанию задачи большим количеством низкоквалифицированных людей.

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

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

Date: 2011-11-01 05:44 pm (UTC)
From: [identity profile] love5an.livejournal.com
И, я ни в коем случае не ассоциирую периоды расцвета UNIX или DOS с "кустарной" разработкой.
Наоборот, чтобы писать хороший код на Си(чтобы писать операционные системы, например) нужна огромная квалификация и навыки, код должен быть до мельчайших деталей продуман.
Томпсон, Ритчи, да ну Кармак, в конце-концов - таких людей единицы, и эти единицы даже с современными запросами к индустрии разработки ПО не справятся, по причине малочисленности, я уж не говорю о будущем.

И в перспективе, даже современный подход с этими запросами не справится, и это уже видно.

Date: 2011-11-01 05:53 pm (UTC)
From: [identity profile] usovalx.livejournal.com
Ты пропустил основную мотивацию ленивого функционального программирования -- композиционность.

Date: 2011-11-01 06:01 pm (UTC)
From: [identity profile] love5an.livejournal.com
И что?
Я должен сейчас вдруг внезапно понять, что это серебряная пуля, которая определенно зарулит метапрограммирование и автоматизацию? Вряд ли.

Date: 2011-11-01 06:05 pm (UTC)
From: [identity profile] usovalx.livejournal.com
Нет конечно, это автоматизация и метапрограммирование являются серебрянной пулей которая .... и далее по тексту.

Date: 2011-11-01 06:13 pm (UTC)
From: [identity profile] love5an.livejournal.com
Они не являются серебряной пулей, они являются единственным реальным средством уменьшения сложности систем.

(no subject)

From: [identity profile] usovalx.livejournal.com - Date: 2011-11-02 12:45 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 09:55 am (UTC) - Expand

(no subject)

From: [identity profile] usovalx.livejournal.com - Date: 2011-11-02 11:34 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 09:42 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 09:59 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 10:20 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 10:33 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 10:36 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 11:06 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 11:27 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 11:42 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 11:46 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 12:11 pm (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 12:30 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 01:00 pm (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2011-11-03 02:01 am (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2011-11-02 12:34 pm (UTC) - Expand

Date: 2011-11-02 09:39 am (UTC)
From: [identity profile] thesz.livejournal.com
Фред Брукс. "Если вам требуется метапрограммирование, то вам требуется язык выше уровнем." Алан Кей: Лиспу было бы проще с ленивыми вычислениями (http://thesz.livejournal.com/1131354.html).

Специальные формы часто (очень часто) выполнимы в виде ФВП в языке с нормальным порядком вычислений.

Date: 2011-11-02 09:57 am (UTC)
From: [identity profile] love5an.livejournal.com
>Если вам требуется метапрограммирование, то вам требуется язык выше уровнем.
Верно, но лисп это постоянное метапрограммирование, мы там можем вынести язык на сколь угодно высокий уровень. Это не язык, это метаязык.

>Специальные формы часто (очень часто) выполнимы в виде ФВП в языке с нормальным порядком вычислений.

Это фигня, этим покрывается 1% использования макросов от силы. Плюс, это добавляет издержек по производительности.

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 10:19 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 10:59 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 11:47 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 12:00 pm (UTC) - Expand

Date: 2011-11-02 12:38 pm (UTC)
From: (Anonymous)
> Специальные формы часто (очень часто) выполнимы в виде ФВП в языке с нормальным порядком вычислений.

В ленивом языке приходится ввести спецформу, эквивалентную begin, в энергичном - эквивалентную if. 1-1.

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2011-11-02 12:52 pm (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2011-11-03 01:39 am (UTC) - Expand

Date: 2011-11-01 06:03 pm (UTC)
From: [identity profile] usovalx.livejournal.com
Пролистай "Why FP" -- там эта мотивация хорошо описана.
Я не буду утверждать тот-же Haskell уже там, но как метод борьбы с сложностью композиционность и чистота (точнее не столько сама чистота, сколько явные эффекты) мне кажутся более правильным подходом.

Date: 2011-11-01 06:12 pm (UTC)
From: [identity profile] love5an.livejournal.com
Я глубоко убежден, что со сложностью помогает бороться только абстрагирование, а не чистота и прочее, которые тем более ставят палки в колеса при необходимости общаться с реальным миром, таким образом добавляя сложности.

Date: 2011-11-01 08:44 pm (UTC)
From: [identity profile] 9zloy.livejournal.com
Гы. Полностью согласен. Повышение уровня абстракции единственное, что помогает.

(no subject)

From: [identity profile] usovalx.livejournal.com - Date: 2011-11-02 12:48 am (UTC) - Expand

(no subject)

From: [identity profile] love5an.livejournal.com - Date: 2011-11-02 10:04 am (UTC) - Expand

Date: 2011-11-01 10:52 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
А можно что-нибудь кроме why fp? С ФВП все понятно, вопросы возникают дальше.

Date: 2011-11-02 12:48 am (UTC)
From: [identity profile] usovalx.livejournal.com
С этим лучше к thezs -- я так, сбоку стоял.

(no subject)

From: [identity profile] usovalx.livejournal.com - Date: 2011-11-02 12:51 am (UTC) - Expand

Date: 2011-11-02 02:21 am (UTC)
From: [identity profile] usovalx.livejournal.com
Да, и ещё один момент. Why FP не столько о ФВП, сколько о них в ленивом функциональном языке.
Потому что как только мы убираем линивость, то ФВП превращаются или в тыкву (компилятор не может упрощать код поскольку это будет нарушением семантики языка) или же в стандартный кошмарик где нам приходится руками сворачивать/переписывать код, протаскивать аккумуляторы или параметры ограничивающие глубину рекурсии и т.п.

Date: 2011-11-02 09:44 am (UTC)
From: [identity profile] thesz.livejournal.com
Алан Кей считает, что Лиспу бы не повредила ленивость по умолчанию: http://kazimirmajorinc.blogspot.com/2010/02/alan-kay-on-fexprs.html

Это как минимум.

Profile

love5an: (Default)
Dmitry Ignatiev

June 2020

S M T W T F S
 123456
78910 111213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 26th, 2025 10:13 pm
Powered by Dreamwidth Studios