Я начну с ключевых особенностей:
В настоящее время наиболее близким к моему списку пожеланий является 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]
По вопросам №1 и №3 вы можете проверить этот раздел SDK, в котором обсуждается класс Visual и инструкции по его рендерингу. обмениваются между каркасом более высокого уровня и уровнем интеграции мультимедиа (MIL). Также обсуждается, почему используется алгоритм рисования.
Для пункта 2 нет, это определенно не так. Данные растрового изображения будут перемещены на оборудование и кэшированы там.
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,