WPF

Jan. 19th, 2011 12:00 am
love5an: (Default)
[personal profile] love5an
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. Он слишком отличается от других языков. Он сложен. А где найдешь программистов на нем? И кто будет этим пользоваться? Кучка энтузиастов?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот-вот.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

love5an: (Default)
Dmitry Ignatiev

June 2020

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

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 18th, 2025 04:12 am
Powered by Dreamwidth Studios