в основном я использую это в одном из наших приложений: мы хотим наложить playicon по кадру видео:
Image playbutton;
try
{
playbutton = Image.FromFile(/*somekindofpath*/);
}
catch (Exception ex)
{
return;
}
Image frame;
try
{
frame = Image.FromFile(/*somekindofpath*/);
}
catch (Exception ex)
{
return;
}
using (frame)
{
using (var bitmap = new Bitmap(width, height))
{
using (var canvas = Graphics.FromImage(bitmap))
{
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.DrawImage(frame,
new Rectangle(0,
0,
width,
height),
new Rectangle(0,
0,
frame.Width,
frame.Height),
GraphicsUnit.Pixel);
canvas.DrawImage(playbutton,
(bitmap.Width / 2) - (playbutton.Width / 2),
(bitmap.Height / 2) - (playbutton.Height / 2));
canvas.Save();
}
try
{
bitmap.Save(/*somekindofpath*/,
System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception ex) { }
}
}
Kawa, ABCL и SISC - это переопределения существующих языков, которые довольно давно используются. Они превосходны, если по какой-то причине вы хотите использовать стандартную схему или стандартный Common Lisp на JVM.
Clojure - это новый язык. Он не заполняет пробел . Это добавляет совершенно новые возможности. Он отдает предпочтение чисто функциональному подходу - Scheme и CL являются мультипарадигмальными. Clojure в значительной степени заимствует дизайн различных языков программирования FP (ML, Haskell).
И да, вы можете добавить поддержку параллелизма в другие Lisp, но это полностью упускает суть. Clojure с самого начала разрабатывался как параллельный язык. Настолько, что написание параллельных программ в Clojure тривиально - не ракетостроение, как в нефункциональных языках (Scheme, CL не исключены). Посмотрите на это:
Люди говорят, что C по умолчанию позволяет писать быстрые программы.
Ну, Clojure позволяет писать параллельные программы по умолчанию.
«Clojure - это Lisp, не ограниченный обратной совместимостью» (это с веб-сайта Clojure ). Это новое начало. Это прогресс. Используйте идеи, которые делают Lisp / Scheme мощным, но переосмыслите их вокруг платформы Java .
Clojure всегда будет последней версией Clojure. С любым другим языком, перенесенным на JVM, версия JVM всегда может догонять. Если вам не нужна платформа Java, зачем использовать SISC вместо другой схемы? Если да, то почему бы не использовать тот Lisp (Clojure), который был разработан специально для него?
Разработан с учетом параллелизма.
Я просто не знал об этом , что является серьезным преимуществом для Clojure (я выяснил, что люди производят достаточно шума). Самая большая вещь, которую имеет Clojure, чего я не видел в перечисленных вами, - это программная транзакционная память .
Clojure также был разработан для JVM, а не для того, чтобы быть слоем для другого языка,
Если бы я был циничным, я бы сказал, что это потому, что у Clojure есть более красивый веб-сайт и более сексуальное имя.
Я также должен добавить, что Clojure - относительно новый язык, реализованный одним человеком с хорошими маркетинговыми навыками и большим количеством энергии. Он вкладывает много времени и шумихи в закрытие ... иногда шумиха - это самореализующееся пророчество в том смысле, что если вы сможете убедить достаточное количество людей, что это последняя великая вещь, тогда вы сможете получить достаточно поддержки и импульса, чтобы сделать это на самом деле
Я подозреваю, что разработчики Kawa и т. д. не так много ставят на карту, поэтому не рекламируют свой продукт. Кроме того, что тут шумихи? «У нас есть отличный язык ... он называется Лисп». Это более сложный маркетинговый ход.
Я думаю, что Java - яркий тому пример. У него были очень серьезные недостатки, но из-за того, что он был продан и разрекламирован так сильно, он получил большой импульс, что означало поддержку со стороны поставщиков оборудования / программного обеспечения, производителей инструментов, инвестиций со стороны отрасли и т. д. В любом случае он достиг определенной степени успеха, хотя я ненавидел программирование в Это. Clojure может добиться такого же успеха, чем другие Lisp.
Преимущество Clojure в том, что он дает вам доступ ко всем имеющимся библиотекам / коду java, а также поддерживает многопоточность, поскольку он основан на JVM. Вдобавок он был разработан с учетом параллелизма, что обычно не предназначено для лиспа, хотя из-за примитивов сопоставления, вероятно, будет нетрудно разработать лисп, который бы хорошо поддерживал параллелизм.
При этом я попробовал Clojure и ненавидел синтаксис и боль в прикосновении, которая, кажется, сопровождает все, что связано с Java.
Clojure - это "шепелявость", а не шепелявость, которую вы уже знаете. Я провел последние Пару дней на чтение материалов и просмотр видео, и я впечатлен. это предпосылка состоит в том, что функциональные программы (основанные на неизменяемых данных) - лучший способ управлять параллелизмом. Clojure реализует систему типа lisp, основанную на JVM, чтобы обеспечить это.
Самый простой ответ, который я могу придумать, - это Clojure - это не Common-Lisp. Clojure не ограничен историей других Lisp. Это новый язык , созданный для JVM.