love5an: (Default)
Dmitry Ignatiev ([personal profile] love5an) wrote2011-01-19 12:00 am

WPF

WPF охуенно. WPF круто, нереально круто.

GTK+ - говно. Qt - говно. wxWidgets - говно. Tk - говно. Pure Winapi, MFC, ATL, WTL - говно. Windows.Forms - говно. Cocoa - говно. SWT - говно. Swing - говно. Все это блевотное говно.

А WPF пиздато.

Проблема в том, что WPF переусложнено. Сильно переусложнено. Да, оно многое позволяет, оно очень хорошо отделяет интерфейс от реализации, оно расширяемо, оно интероперабельно с WinAPI, оно использует ресурсы видеокарт для отрисовки. Но, WPF очень сложное, слишком. И подпертое костылями со всех сторон.

И, да, это проблема не только WPF - это проблема практически всех продуктов и технологий Microsoft.

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

MS, например, прямым текстом признается, что семантика .NET-языков, и самого дотнета - слишком примитивна, убога и нерасширяема, и недостаточна для красивой реализации dataflow gui-фреймворка:
http://msdn.microsoft.com/en-us/library/ms750441.aspx#System_Windows_DependencyObject
Отсюда все эти костыли типа DependencyObject и прочая.

Кроме того, рефлекшн, и вообще, динамика - один из ключевых столпов WPF, в самом дотнете совершенно неюзабельны. Объектная система невероятно убога и примитивна. Интроспекция - очень сильно ограничена и неудобна в использовании. Система типов скорее мешает разработке, чем помогает. Про функциональное программирование я вообще промолчу(хотя где-то версии с третьей дотнета с этим стало получше, конечно).

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


На Common Lisp парадигмы event-driven и dataflow программирования ложатся идеально.
http://common-lisp.net/project/cells/

И динамичности в нем предостаточно.

Но Microsoft никогда бы не стала реализовывать свой передовой фреймворк на платформе типа CL. Он слишком отличается от других языков. Он сложен. А где найдешь программистов на нем? И кто будет этим пользоваться? Кучка энтузиастов?

Любую корпорацию, даже связанную с высокими технологиями, технологии не интересуют. Ее интересует стабильность и финансовые потоки.

[identity profile] love5an.livejournal.com 2011-01-19 08:14 am (UTC)(link)
AST это абстрактное понятие.

Короче, это уже демагогия. Представлений AST для CL через лисповые объекты может быть бесконечное количество. Чтобы узнать правила, по которым синтаксис второго уровня(набор объектов лиспа) преобразуется в стандартное представление AST(стандартный синтаксис), надо знать состояние лисп-системы в конкретный момент времени. В общем случае, таким образом, описать синтаксис CL нельзя == говорить о нем бессмысленно == его нет.

(Anonymous) 2011-01-19 08:30 am (UTC)(link)
> Представлений AST для CL через лисповые объекты может быть бесконечное количество.

Да хватит уже жопой вилять. Ты в правилах редукции собираешься описывать куски АСТ? собираешься. Значит, у АСТ есть грамматика. Это и есть синтаксис лиспа.

[identity profile] love5an.livejournal.com 2011-01-19 08:53 am (UTC)(link)
И он для каждого состояния лисп-системы свой.
Врубаешься?

Единственно, что можно точно сказать насчет синтаксиса второго уровня(насчет синтаксиса первого уровня сказать нельзя вообще ничего), так это то, что он ограничен объектами лиспа.

Но учитывая то, что множество всех объектов лиспа, т.е. типа T - универсальное множество, т.е. бесконечное множество "чего угодно", то приходим к выводу, что и о синтаксисе парсера нельзя сказать совершенно ничего.

Такие дела.

(Anonymous) 2011-01-19 08:55 am (UTC)(link)
> Единственно, что можно точно сказать насчет синтаксиса второго уровня(насчет синтаксиса первого уровня сказать нельзя вообще ничего), так это то, что он ограничен объектами лиспа.

Как же ты заебал, а. Я еще раз задам конкретный вопрос - у АСТ, представляющего аппликацию функции, есть синатксис или нет? Если есть - это и есть синтаксис лиспа. Если нет - то ты не сможешь написать семантику.

[identity profile] love5an.livejournal.com 2011-01-19 09:00 am (UTC)(link)
Да ты тоже заебал. Я заебался объяснять, тривиальные, казалось бы, вещи.

Есть стандартный синтаксис(в курсе, какой он, да?)
Но:

1) Мы не можем сказать, что это аппликация функции без анализа состояния лисп-системы(это может быть макрос, а у него может быть другой синтаксис).
2) Стандартное представление можно изменить, и такая форма синтаксиса уже не будет валидным видом аппликации функции.

(Anonymous) 2011-01-19 09:04 am (UTC)(link)
И как из этого следует отсутствие синтаксиса? Типа, если внешний вид лавсанчика зависит от состояния вселенной, то лавсанчик никак не выглядит? Лол.

(Anonymous) 2011-01-19 09:06 am (UTC)(link)
> 1) Мы не можем сказать, что это аппликация функции без анализа состояния лисп-системы(это может быть макрос, а у него может быть другой синтаксис).

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

[identity profile] love5an.livejournal.com 2011-01-19 09:24 am (UTC)(link)
Ок, можешь считать, что и семантики у CL нет.
Я предпочитаю думать, что у него нет только синтаксиса.

(Anonymous) 2011-01-19 11:37 am (UTC)(link)
Ок, то есть твоя точка зрения сводится к: "я не знаю, какова семнатика CL, и даже в душе неебу, как ее можно было бы описать, но думаю, семантика есть".

[identity profile] love5an.livejournal.com 2011-01-20 02:40 am (UTC)(link)
Нет, правда, я тут подумал.

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

Кстати, слова "компилятор" и "загрузчик" - ничего не напоминают? С лексером - хуй с ним.

CL это не язык программирования, это операционная система.

Какой синтаксис у Windows 7? Ладно хуй с ним, с Windows 7. У QNX хоть какой синтаксис то?

А семантика? Какова денотационная семантика QNX? Операционная семантика? А аксиоматическая то хоть какая?

Вот-вот.

Можно, конечно, с натягом, сказать, что что-то там, что ОС умеет базово - это и есть семантика ОС. Но это как-то нихуя не стыкуется с определением понятия "Формальная семантика [ языка [ программирования ] ]".

Common Lisp это операционная система, а не язык.

Когда ты в это врубишься, ты охуеешь. Я на полном серьезе.

(Anonymous) 2011-01-20 03:55 am (UTC)(link)
> Common Lisp это операционная система, а не язык.

То, что CL - не язык программирования, сразу следовало из отсутствия синтаксиса, я к этому факту и пытался тебя подвести. Наконец, дошло. Что до твоего предположения "CL = операционная система" - ты путаешь лисп-систему и лисп, я уже об этом говорил. Есть некий конкретный язык (лисп) и он крутится под какой-то конкретной лисп-системой. Лисп имеет некоторый конкретный синтаксис и семантику (стандартные), которые задаются стандартной лисп-машиной под которой он крутится. Мы можем переопределить лисп-машину, но это будет _другая_ лисп-машина и _другой_ лисп. Стандарт (того же CL) описывает и лисп-машину и сам лисп. Вот ты когда запускаешь sbcl то он ведет себя вполне определенным образом в соответствии со стандартом (исключая расширения, что непринципиально). Сейчас ты там всего попереопределял, сделал save-lisp-and-die и у тебя получился некоторый образ, ты этот образ можешь запустить так же, как sbcl, но работать он будет совершенно по-другому, вне соответствия со стандартом CL. Вывод? Это уже НЕ CL.

[identity profile] love5an.livejournal.com 2011-01-20 04:50 am (UTC)(link)
>Лисп имеет некоторый конкретный синтаксис и семантику

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

Но для самого CL:

Что такое синтаксис? Это набор правил, которые описывают преобразование текста или объектов в AST. Но этих правил у CL нет, мы не можем их формализировать, так как его "стандартная" семантика подразумевает изменение этих правил.

С другой стороны, что такое семантика? Например, операционная? Это набор правил, которые преобразуют AST в выполнение программы, грубо говоря.

Но если мы посмотрим стандарт - из "семантики" CL следует переопределяемость этих правил, опять же, и, таким образом, любая семантика(и любой синтаксис - см. выше) все еще будет давать conforming program, потому что оно все еще соответствует семантике CL, которая подразумевает возможность переопределения всего и вся. А это тавтология. Ч.т.д.

>Мы можем переопределить лисп-машину, но это будет _другая_ лисп-машина и _другой_ лисп.
Стандарт CL это как POSIX - он описывает не язык, а исключительно систему, требования к системе. Но, в отличие от POSIX - исключительно к начальному состоянию системы(к состоянию системы после ее установки). Переопределив половину ядра лисп-системы мы не получим другую систему - это будет та же система, тот же процесс, грубо говоря.

>исключая расширения, что непринципиально
Вполне себе принципиально, кстати. Расширения другого какого-либо языка дают новый язык, потому что вводят новые правила в синтаксисе и семантике. Но в случае CL это не так, потому что как языка его не существует, а есть только среда исполнения.

(Anonymous) 2011-01-20 05:54 am (UTC)(link)
> С другой стороны, что такое семантика? Например, операционная? Это набор правил, которые преобразуют AST в выполнение программы, грубо говоря.

Я это тебе пытался объяснить на протяжении всей ветки, можешь не повторять.

> Стандарт CL это как POSIX - он описывает не язык, а исключительно систему, требования к системе. Но, в отличие от POSIX - исключительно к начальному состоянию системы(к состоянию системы после ее установки).

Ты можешь из образа выдрать начальное состояние этого образа? Нет? Так как же ты можешь гарантировать, что начальное состояние соответствовало стандарту? (Если действительно есть какие-то способы загрузить образ и потом "откатить" все изменения, то вопрос снят, конечно). А раз ты не можешь гарантировать соответствие начального состояния, то ты не можешь утверждать, что это CL (если принять твое определение стандарта CL, как стандарта, регламентирующего начальное состояние лисп-системы).

> Вполне себе принципиально, кстати.
Имелось ввиду, что если что-то соответствует стандарту и + каким-то расширениям - то эти расширения соответствия стандарту не отменяют. Может, конечно, оказаться, что эти расширения со стандартом несовместимы - но мы такой случай не рассматриваем, вот в том же SBCL есть расширения, но он соответствует стандарту, так?

(Anonymous) 2011-01-20 05:08 am (UTC)(link)
Лол, ну это уже апофеоз безграмотности. Покажи-ка мне механизм обработки прерываний в SBCL, раз это операционка.

[identity profile] love5an.livejournal.com 2011-01-20 05:15 am (UTC)(link)
condition system

(Anonymous) 2011-01-20 06:01 am (UTC)(link)
Ну для лисп-машины лисп-система действительно будет и осью и биосом и всем чем угодно.

(Anonymous) 2011-01-19 11:45 am (UTC)(link)
Да, чтобы не было непонимания - я лично считаю, что у него есть и то и другое.

(Anonymous) 2011-01-19 08:31 am (UTC)(link)
>AST это абстрактное понятие.
Ах вот как, т.е. парсер строит абстрактное понятие, да? Чёрт, а я-то думал, что действительно строю дерево.
>Представлений AST для CL через лисповые объекты может быть бесконечное количество.
Утверждение в стиле "программ может быть бесконечное количество". Для конкретной же программы существует один единственный AST, который и строится лисп-средой. Причём этот AST абсолютно детерминирован состоянием.
>В общем случае, таким образом, описать синтаксис CL нельзя == говорить о нем бессмысленно == его нет.
Ок.
В общем случае, таким образом, описать синтаксис любой программы нельзя (языки-то разные бывают) == говорить о нём нелья == его нет.
В общем случае, таким образом, описать внешний вид лавсана нельзя == говорить о нём бессмысленно == его нет.
Так более понятна идиотичность высказывания?