Архитектура WPF и ускорение графики Direct3D

Я начну с ключевых особенностей:

  • Это должен быть гомоиконический язык с мощной поддержкой макропрограммирования на основе макросов. Это огромное преимущество для производительности (см. Пола Грэхема, опередившего средние )
  • . Он должен работать на любых платформах и иметь большую поддержку для запуска распределенной системы. код . Настройка облака машин должна быть простой задачей.
  • Это должен быть с открытым исходным кодом .
  • Он должен иметь как можно большую библиотечно-инструментальную экосистему . Практически это означает, что вам необходим доступ к экосистеме Java, поэтому по этой причине он, вероятно, должен быть языком JVM.
  • Он должен поддерживать вывод типа . Жизнь слишком коротка, чтобы компилятор не разбирал детали типа за вас .....
  • Это должен быть функционал с акцентом на неизменность структуры данных. Это будущее для продвинутых языков (я не оспариваю, что функциональные языки трудно освоить, но этот язык не для начинающих ....)
  • Он должен поддерживать интерактивную разработку , предпочтительнее в среде, подобной REPL, где вы можете взаимодействовать с работающей (потенциально распределенной) средой кода.
  • Он должен обеспечивать превосходную поддержку параллельного доступа без блокировки . По мере того, как мы продвигаемся в массовом многоядерном мире, подходы на основе блокировок просто не будут масштабироваться. Программная транзакционная память - это , вероятно, путь вперед.
  • Он должен поддерживать низкоуровневое кодирование , где это необходимо для производительности. Высокоуровневое кодирование прекрасно в 95% случаев, но иногда вам просто нужно манипулировать байтами напрямую .....

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

Поскольку OP ссылается на синтаксис, я приведу несколько примеров кода:

Правильные функции переменной арности с поддержкой больших списков аргументов:

(+ 1 2 3 4 5)
=> 15

(apply + (range 10000))
=> 49995000

Интерактивный доступ к компилятор во время выполнения:

(def function-string "+")

(def function (compile-string function-string))

(function 7 8 9)
=> 24

Выполнение распределенного кода (стиль MapReduce). Обратите внимание, что это означает, что язык / библиотека может взять локально определенный some-long-running-function и прозрачно распределить его по всем узлам кластера для выполнения во время выполнения .

(def my-cluster 
     (create-compute-cluster :nodes 100 :service "Amazon"))

(defn some-long-running-function [input]
  ....)

(def reduction-function 
  (fn [a b] 
    (do-something-to-reduce a b)))

(def lots-of-inputs (range 10000))

(distributed-map-reduce
  my-cluster
  some-long-running-function
  inputs
  reduction-function)
=> (whatever the result of the mapreduce is over the cluster)

Правильный вывод типа (т. Е. Компилятор выясняет, что my-function всегда возвращает String и соответственно делает оптимизации / выводы:

(def my-function [name]
   (str "Hello " name "!"))

(my-function "Bob")
=> "Hello Bob!"

(compile-time-type my-function)
=> [java.lang.String :not-null]

5
задан Dave Clemmer 23 August 2011 в 18:33
поделиться

2 ответа

По вопросам №1 и №3 вы можете проверить этот раздел SDK, в котором обсуждается класс Visual и инструкции по его рендерингу. обмениваются между каркасом более высокого уровня и уровнем интеграции мультимедиа (MIL). Также обсуждается, почему используется алгоритм рисования.

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

3
ответ дан 14 December 2019 в 19:18
поделиться

I tested that, I wrote two programs that show 1,000 buttons on screen, one in WinForms and one in WPF, both worked just fine.

I then pushed that up to 10,000 buttons, at that point the WPF app took a few seconds to start but run just fine, the WinForms app didn't start.

Win32 itself (and WinForms) isn't built for applications with hundreds of controls (believe me I wrote such an app), at some point it just stops working, WPF on the other hand, keeps working even if it slows down a bit at some point.

So, if you do need to put a lot of controls on screen WPF is your best bet (unless you want to roll your own UI framework - and you think you can do better than the entire MS perf team).

Also, WPF has many advantages other than graphics acceleration: richer graphics, drawing model that is easier to work with, animations, 3d and my personal favorite - amazing data-binding.

This will let you develop richer UIs faster - and I think that will make a much bigger difference than the painting algorithm used.

BTW, if you need to put hundreds of buttons on the screen this is likely to be a bad user experience and you may want to reconsider your UI design,

2
ответ дан 14 December 2019 в 19:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: