Почему Clojure по другой JVM Шепелявит: Kawa, Вооруженный Перенос или SISC?

в основном я использую это в одном из наших приложений: мы хотим наложить 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) { }
    }
}
66
задан ssedano 28 August 2014 в 08:46
поделиться

8 ответов

Kawa, ABCL и SISC - это переопределения существующих языков, которые довольно давно используются. Они превосходны, если по какой-то причине вы хотите использовать стандартную схему или стандартный Common Lisp на JVM.

Clojure - это новый язык. Он не заполняет пробел . Это добавляет совершенно новые возможности. Он отдает предпочтение чисто функциональному подходу - Scheme и CL являются мультипарадигмальными. Clojure в значительной степени заимствует дизайн различных языков программирования FP (ML, Haskell).

И да, вы можете добавить поддержку параллелизма в другие Lisp, но это полностью упускает суть. Clojure с самого начала разрабатывался как параллельный язык. Настолько, что написание параллельных программ в Clojure тривиально - не ракетостроение, как в нефункциональных языках (Scheme, CL не исключены). Посмотрите на это:

Люди говорят, что C по умолчанию позволяет писать быстрые программы.

Ну, Clojure позволяет писать параллельные программы по умолчанию.

109
ответ дан 24 November 2019 в 14:49
поделиться
  1. «Clojure - это Lisp, не ограниченный обратной совместимостью» (это с веб-сайта Clojure ). Это новое начало. Это прогресс. Используйте идеи, которые делают Lisp / Scheme мощным, но переосмыслите их вокруг платформы Java .

  2. Clojure всегда будет последней версией Clojure. С любым другим языком, перенесенным на JVM, версия JVM всегда может догонять. Если вам не нужна платформа Java, зачем использовать SISC вместо другой схемы? Если да, то почему бы не использовать тот Lisp (Clojure), который был разработан специально для него?

  3. Разработан с учетом параллелизма.

33
ответ дан 24 November 2019 в 14:49
поделиться

Я просто не знал об этом , что является серьезным преимуществом для Clojure (я выяснил, что люди производят достаточно шума). Самая большая вещь, которую имеет Clojure, чего я не видел в перечисленных вами, - это программная транзакционная память .

Clojure также был разработан для JVM, а не для того, чтобы быть слоем для другого языка,

11
ответ дан 24 November 2019 в 14:49
поделиться

Если бы я был циничным, я бы сказал, что это потому, что у Clojure есть более красивый веб-сайт и более сексуальное имя.

10
ответ дан 24 November 2019 в 14:49
поделиться

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

Я подозреваю, что разработчики Kawa и т. д. не так много ставят на карту, поэтому не рекламируют свой продукт. Кроме того, что тут шумихи? «У нас есть отличный язык ... он называется Лисп». Это более сложный маркетинговый ход.

Я думаю, что Java - яркий тому пример. У него были очень серьезные недостатки, но из-за того, что он был продан и разрекламирован так сильно, он получил большой импульс, что означало поддержку со стороны поставщиков оборудования / программного обеспечения, производителей инструментов, инвестиций со стороны отрасли и т. д. В любом случае он достиг определенной степени успеха, хотя я ненавидел программирование в Это. Clojure может добиться такого же успеха, чем другие Lisp.

7
ответ дан 24 November 2019 в 14:49
поделиться

Преимущество Clojure в том, что он дает вам доступ ко всем имеющимся библиотекам / коду java, а также поддерживает многопоточность, поскольку он основан на JVM. Вдобавок он был разработан с учетом параллелизма, что обычно не предназначено для лиспа, хотя из-за примитивов сопоставления, вероятно, будет нетрудно разработать лисп, который бы хорошо поддерживал параллелизм.

При этом я попробовал Clojure и ненавидел синтаксис и боль в прикосновении, которая, кажется, сопровождает все, что связано с Java.

5
ответ дан 24 November 2019 в 14:49
поделиться

Clojure - это "шепелявость", а не шепелявость, которую вы уже знаете. Я провел последние Пару дней на чтение материалов и просмотр видео, и я впечатлен. это предпосылка состоит в том, что функциональные программы (основанные на неизменяемых данных) - лучший способ управлять параллелизмом. Clojure реализует систему типа lisp, основанную на JVM, чтобы обеспечить это.

1
ответ дан 24 November 2019 в 14:49
поделиться

Самый простой ответ, который я могу придумать, - это Clojure - это не Common-Lisp. Clojure не ограничен историей других Lisp. Это новый язык , созданный для JVM.

14
ответ дан 24 November 2019 в 14:49
поделиться