![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
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. Он слишком отличается от других языков. Он сложен. А где найдешь программистов на нем? И кто будет этим пользоваться? Кучка энтузиастов?
Любую корпорацию, даже связанную с высокими технологиями, технологии не интересуют. Ее интересует стабильность и финансовые потоки.
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. Он слишком отличается от других языков. Он сложен. А где найдешь программистов на нем? И кто будет этим пользоваться? Кучка энтузиастов?
Любую корпорацию, даже связанную с высокими технологиями, технологии не интересуют. Ее интересует стабильность и финансовые потоки.
no subject
Date: 2011-01-19 07:12 am (UTC)Специально для тебя, няшечка:
>In computer science, the syntax of a programming language is the set of rules that define the combinations of symbols that are considered to be correctly structured programs in that language. The syntax of a language defines its surface form.
Тождество "синтаксис=EBNF" - исключительно поллюция твоего мозга. Утверждение "в CL нет синтаксиса" звучит смешно.
>Таки еще раз - ты что, совсем долбоеб? Иди почитай мои последние посты про CL.
http://love5an.livejournal.com/356336.html?thread=1707504#t1707504 как раз-таки я прекрасно помню твой предыдущий отсос по поводу макросистем. Вот у тебя он уже успел вылететь из головы, видимо.
И да, аналог syntax-parse в студию. Ссылку уже приводили, но, на всякий случай, ещё раз: http://www.ccs.neu.edu/scheme/pubs/icfp10-cf.pdf (или опять будет "НЕ НУЖНО"?)
>Да, потому что Django это переусложненное говно на питоне, а тот - сам говно - отлаживать его сложно.
Бугага. Кто это только что писал о том, что, якобы
>большинство... русскоязычных лисперов пишут какую-то веб-поебень на линуксе(которую... гораздо уместнее писать на PHP, Python или Ruby)
И вот внезапно - питон уже далеко не самый удачный язык для веба!
>Иди-ка попробуй так же просто ее написать, как я это сделал, на каком-нибудь дуднете
Ах, т.е. ты просто ХОРОШО ОСВОИЛ CL, и оно само написалось, так? А зачем тогда либа, если оно и так уже почти готово всё? Я же говорю, тут что-то одно: либо твоя охуенность, либо охуенность CL. И на ёлку залезть, и не поцарапаться - не получится.
>Ты долбоеб, таки да.
Отличный аргумент!
>Какие "биндинги", дебил?
Я могу использовать DX10 из плюсов. Кстати, из питона тоже. И даже движок есть на голом питоне, Ogre, который умеет сам дёргать DX10, когда надо. Из CL, с его МЕГАПРОСТЫМ ПОСТРОЕНИЕМ БИНДИНГОВ - нет.
>Что-то ты меня начинаешь заебывать, знаешь.
Ну конечно, так очень часто происходит, когда тебе кто-то аргументированно объясняет, что ты дебил, а ты этого признавать не хочешь.
И да, я вот не обратил внимания:
>Но Microsoft никогда бы не стала реализовывать свой передовой фреймворк на платформе типа CL. Он слишком отличается от других языков. Он сложен.
>В предыдущем постинге упоминалось, что CL довольно прост в освоении. Но, в ответ на это поступило несколько комментариев на тему того, что он большой и сложный, и учится довольно трудно, особенно по сравнению с Python. Я склоняюсь к мнению, что это не так.
Так к какому же выводу ты пришёл? Что CL простой в освоении и его может понять любой дебил, или что он сложный, и ты ИЛИТА?
no subject
Date: 2011-01-19 08:08 am (UTC)Ты совсем тупой, я смотрю. "set of rules" как раз и описывается EBNF. Для CL таких EBNF может быть бесконечное множество == о синтаксисе CL говорить бессмысленно.
>как раз-таки я прекрасно помню твой предыдущий отсос по поводу макросистем.
Так, начнем сначала, раз ты такой долбоеб.
Макросистемой CL, в теории, можно сделать все то же самое, что и другими макросистемами. Потому что тьюринг-полна. Причем не как брейнфак, а имеет полную силу самого CL.
Более того, так как процесс компиляции и вычисления суть одно, т.е. состояние одно, оно разделяется - это открывает охуительное количество разнообразных возможностей.
В Racket не так. (compile-file нет, опять же, пример так и не был повторен)
>И да, аналог syntax-parse в студию. Ссылку уже приводили, но, на всякий случай, ещё раз
Мне лень его писать, иди нахуй гугли.
>Бугага. Кто это только что писал о том, что, якобы
И как эти два высказывания противоречат друг-другу? Выпей таблеток.
>Ах, т.е. ты просто ХОРОШО ОСВОИЛ CL, и оно само написалось, так? А зачем тогда либа, если оно и так уже почти готово всё? Я же говорю, тут что-то одно: либо твоя охуенность, либо охуенность CL. И на ёлку залезть, и не поцарапаться - не получится.
Т.е. ты признаешь, что написать, по крайней мере, предоставив вменяемый интерфейс - нельзя. Хорошо, это прогресс. Фишка, видишь ли, в том, что в C# нету из коробки биндингов ко всем существующим сишным библиотекам(а многие из них ой какие полезные). Пример с COM - это просто пример. Обобщая, можно сказать, что для биндинга сишных либ к C#, причем так, чтобы еще и производительность не страдала, надо проделывать невероятные выкрутасы и сооружать пирамиды кривых костылей. Ч.т.д.
Вывод такой - охуенны и я, и CL, а ты тупой пидарас.
>Отличный аргумент!
Это констатация факта.
>Я могу использовать DX10 из плюсов.
Поздравляю с открытием. Можешь даже из Си, я разрешаю.
>Кстати, из питона тоже. И даже движок есть на голом питоне, Ogre, который умеет сам дёргать DX10, когда надо.
Это не практично. Пруф оф концепт, не более. Тормоза-с.
>Из CL, с его МЕГАПРОСТЫМ ПОСТРОЕНИЕМ БИНДИНГОВ - нет.
Можно. Точно в таком виде, как и из Си - ручным вытаскиванием указателей на функции из указателей на интерфейсы. Но я пишу библиотеку чтобы это красиво интегрировать в CLOS.
>Ну конечно, так очень часто происходит, когда тебе кто-то аргументированно объясняет, что ты дебил, а ты этого признавать не хочешь.
Действительно, я тебе уже раз 20 это объяснил. Кроме того, еще кучу других простых, вроде бы вещей, которые другие люди понимают максимум со второго раза, ты так и не понял, как я не пытался тебе их в башку вбить.
Хуево тебе, наверное, быть таким кретином(это не оскорбление, это диагноз по МКБ)
>Так к какому же выводу ты пришёл? Что CL простой в освоении и его может понять любой дебил, или что он сложный, и ты ИЛИТА?
Я пришел к выводу, что он сложнее "сисярпа", раз такая макака, как ты, "сисярп" освоила, а до основных концепций CL допереть так и не может.
no subject
Date: 2011-01-19 08:22 am (UTC)Это твоя личная мокрая фантазия. EBNF - всего лишь один из способов. Кроме того, в определении нет ни слова про неизменность синтаксиса.
>Макросистемой CL, в теории, можно сделать все то же самое, что и другими макросистемами. Потому что тьюринг-полна.
И что из этого? Речь не про "можно сделать", а про "сделано". "Можно сделать" на чём угодно что угодно.
>Причем не как брейнфак, а имеет полную силу самого CL.
Эта самая "сила" крайне субъективна.
>В Racket не так.
Тебя уже тыкали лицом в то, что это так в Racket. Ещё раз ткнуть?
>Мне лень его писать, иди нахуй гугли.
Конечно же - ведь его нет в CL. И не будет. Потому что для его реализации CL нужно переписать. Вот это и называется "убогая макросистема" или "строгое подмножество", когда defmacro в стандартной либе Racket есть, а syntax-parse в стандартной либе SBCL нет.
>И как эти два высказывания противоречат друг-другу? Выпей таблеток.
Очень просто: в одном утверждается, что питон неюзабельное говно, в другом - что веб лучше писать на питоне. Получается, CL для веба хуже даже неюзабельного говна?
>Т.е. ты признаешь, что написать, по крайней мере, предоставив вменяемый интерфейс - нельзя.
Я вообще ничего не признавал - я не пишу на сисярпе. Это у тебя какая-то анальная фиксация на нём, во всём видится сисярп, да? Я его ни разу не упоминал, а в твоём посте он раз 5 упоминается. Что-то тут нечисто.
И да, при чём тут биндинги ко всему вообще? К WinAPI в сисярпе биндинги лучше, чем у тебя, на порядок, чисто по определению.
>Это не практично. Пруф оф концепт, не более. Тормоза-с.
Расскажи это авторам EVE, хорошо? А то они, бедняги, мучаются.
>Точно в таком виде, как и из Си
Нет. Для си есть куча готовых графических движков, а не "удобных биндингов".
>до основных концепций CL допереть так и не может.
Вот! Это ещё один типичный инструмент фанбоя. Все, кто критикуют - они просто НЕОСИЛЯТОРЫ. Точно, спасибо, что напомнил.
no subject
Date: 2011-01-19 08:44 am (UTC)Все формы, аналогичные EBNF - эквиваленты. Ты долбоеб, блядь, конечный. Семантику метасинтаксиса осиль.
>Тебя уже тыкали лицом в то, что это так в Racket. Ещё раз ткнуть?
Там load, ебанашка, а не compile-file
>а syntax-parse в стандартной либе SBCL нет.
Есть, блядь, cl-unification, у которого убогий syntax-parse отсасывает с проглотом.
>Очень просто: в одном утверждается, что питон неюзабельное говно, в другом - что веб лучше писать на питоне. Получается, CL для веба хуже даже неюзабельного говна?
Ты неправильно интерпретировал, идиот. Учи русский язык и/или ищи логическую ошибку.
>Я вообще ничего не признавал - я не пишу на сисярпе. Это у тебя какая-то анальная фиксация на нём, во всём видится сисярп, да? Я его ни разу не упоминал, а в твоём посте он раз 5 упоминается. Что-то тут нечисто.
У меня IP записываются, придурок. Поэтому я охуеть как в курсах кто че сказал.
>К WinAPI в сисярпе биндинги лучше, чем у тебя, на порядок, чисто по определению.
Чисто только к COM. Все другие функции нужно точно так же тупо через тупой FFI дергать.
Кроме мессаджлупа в винформс и впс, к которому можно WNDPROC-хук прицепить.
>Расскажи это авторам EVE, хорошо? А то они, бедняги, мучаются.
А ты, придурок, знаешь как оно устроено то, клиент EVE? Я вот интересовался.
Реалтайм рендеринг такого уровня, как там, на битоне был бы непрактичен.
Догадайся, на чем он.
>Нет. Для си есть куча готовых графических движков, а не "удобных биндингов".
Мы не про движки, а про само низкоуровневое api.
>Вот! Это ещё один типичный инструмент фанбоя. Все, кто критикуют - они просто НЕОСИЛЯТОРЫ. Точно, спасибо, что напомнил.
Нет. Многие умные люди CL вполне себе критикуют вполне себе конструктивно, и с ними можно соглашаться. А ты, макака, скачешь тут ебанашкой в комментах и несешь совершенно тупорылую хуйню, постоянно передергивая, а не критикуешь.
no subject
Date: 2011-01-19 08:53 am (UTC)Я какбе намекну на тот факт, что грамматики бывают не только контекстно-свободными.
> Там load, ебанашка, а не compile-file
Пиздец, а тебе не приходило в голову, что функции, которые работают одинаково, могут в разных ЯП называться по-разному? В Racket аналог compile-file только компилирует файл, но не исполняет его. А load компилирует и исполняет - совершенно аналогично compile-file в CL.
> Есть, блядь, cl-unification, у которого убогий syntax-parse отсасывает с проглотом.
1. В Racket есть match, который легко расширяется до unification (а еще есть Racklog, ага)
2. unification и syntax-parse решают разные задачи, то что можно делать в syntax-parse, в unification и близко не сделаешь - совершенно разные вещи.
3. самое главное - syntax-parse невозможно реализовать в CL, не переписав ридер (как минимум), тебе уже об этом говорилось.
no subject
Date: 2011-01-19 09:14 am (UTC)Функция compile-file не исполняет файл. Она компилирует.
А начинает исполнение кода в файле функция load - она тоже может скомпилировать код(SBCL так и делает).
Фишка в том, что в CL состояние то одно(все стадии - interleavable), и любой код можно выполнить при компиляции.
Такие дела.
>Я какбе намекну на тот факт, что грамматики бывают не только контекстно-свободными.
Дак и? Все можно описать EBNF-подобной фиговиной.
А грамматика CL она не то, что даже context-sensitive, она, как бы это сказать, state-sensitive. Нет грамматики, короче, кроме стандартной. Есть просто правила в компиляторе и лексере, которые переопределяются.
>не переписав ридер (как минимум)
Ридер это лексер. Не парсер даже. Именно что лексер. Нахер лексер переписывать?
no subject
Date: 2011-01-19 11:36 am (UTC)Я же тебе объяснял, ридер должен проанализировать лексическую структуру программы и вернуть syntax object, а не s-expr. Иначе не получится макросистему ракетки реализовать.
> Фишка в том, что в CL состояние то одно(все стадии - interleavable), и любой код можно выполнить при компиляции.
Тебе уже говорили, что это везде можно и никакого рокет саенса тут нет. Конкретно твой код в ракетке работать не будет, потому что каждый (require ...) создает свой инстанс модуля, значение переменной поменять можно (и тут не важно вообще в рантайме или в компайлтайме), но это изменение будет распространяться только вдоль одной линии provide/require, чтобы гарантировать консистентность. А функции для компиляции произвольных top-level форм с выполнением compile-time эффектов я не нашел, хотя она есть, потому что raco ее вызывает. Но мне лень искать в сорцах.
no subject
Date: 2011-01-19 08:59 am (UTC)или давай не луп, давай какой-нибудь другой дсл типа loop.
no subject
Date: 2011-01-19 09:16 am (UTC)no subject
Date: 2011-01-19 09:22 am (UTC)no subject
Date: 2011-01-19 08:17 pm (UTC)no subject
Date: 2011-01-19 09:01 am (UTC)>Все формы, аналогичные EBNF - эквиваленты.
И чо? В определении нет ни слова про неизменность синтаксиса.
>Там load, ебанашка, а не compile-file
И?
>Есть, блядь, cl-unification, у которого убогий syntax-parse отсасывает с проглотом.
Примеры отсоса в студию! Для начала что-нибудь вроде этого http://www.cs.indiana.edu/~chaynes/danfest/dyb.pdf покажи для CL.
>Учи русский язык и/или ищи логическую ошибку.
Я нашёл её и указал тебе на неё. Ты с SLIME точно так же разговариваешь?
>У меня IP записываются, придурок. Поэтому я охуеть как в курсах кто че сказал.
Молодец! Теперь приведи мне пример моей фразы, в которой я упоминал сисярп. И да, если посмотришь хуизом - я пользуюсь йотой и IP тут динамический, поэтому IP сугубо параллельны. Но, всё же, пример упоминания сисярпа в студию, а то даже интересно, что это тебя в нём так травмировало.
>Чисто только к COM. Все другие функции нужно точно так же тупо через тупой FFI дергать.
И чо? Я не понял, в чём такая уникальность CL? В том, что именно ты и именно на нём запилил пару кривых биндингов? Я ещё раз повторюсь, здесь есть только 2 варианта: либо это плюс CL, либо плюс тебя. В одном случае не нужен ты, в другом случае - CL. Вот на питоне нет проблем с построением биндингов, есть SWIG, обёртка создаётся автоматом и никто себя пяткой в грудь не бьёт "я сумел SWIG запустить!". Ты же носишься с этим биндингом, как дурень с писаной торбой, и орёшь на каждом углу, какой CL охуенный. Он был бы охуенным, если бы вообще ничего делать не пришлось для создания биндинга.
>Догадайся, на чем он.
Движок на сях, конечно. Обвязка на питоне. Но вот клиентов ММОРПГ с хотя бы обвязкой на CL я что-то не вижу.
>Мы не про движки, а про само низкоуровневое api.
Оно не нужно, если есть движки. И все адекватные пацаны пилят движки, а не наворачивают CLOS-оверхед поверх критичных к скорости вызовов. Потому что в движке взаимодействующая с FFI часть маленькая, и её можно написать быстрой, а не цеплять тормозной CLOS неизвестно для чего.
> Многие умные люди CL вполне себе критикуют вполне себе конструктивно, и с ними можно соглашаться. А ты, макака, скачешь тут ебанашкой в комментах и несешь совершенно тупорылую хуйню, постоянно передергивая, а не критикуешь.
Да ладно! Как-то так получается, что не я, а ты при этом путаешься в терминах (дискуссия про синтаксис AST, лол), утверждениях (так можно или нет CL использовать на кофеварках?) и несёшь хуйню типа "у CL самая мощная макросистема" (при этом отказываясь реализовать то, что есть в "менее мощной") или "у CL нет синтаксиса, у него вместо этого семантика".