LINUX.ORG.RU

Сравнение Haskell и Scala

 , , ,


0

7

Уважаемые форумчане, набившие руку в том и другом, отметьте в этом топике, что есть и чего не хватает вам для полного счастья в том и другом ЯП.

Исходя из раздобытой мной информации, я пока что склонен полагать Haskell эталонным по количеству фич ЯП с функциональным подходом. Но так ли они удобны на самом деле? С другой стороны, можно ли оставаться в Scala в рамках функциональной парадигмы?

Вот вроде бы и все, если я понятно изложил свои мысли.

Всем спасибо )

Ответ на: комментарий от yyk

эх, если бы это Squeak так летал...

После VW на Squeak/Pharo смотреть больно. Особенно в плане продуманности среды, отладчика, и возможностей построения UI.

Darkman ★★★
()
Ответ на: комментарий от dave

да я в курсе про embedded, не уверен что так можно называть смартфоны, но в отношении их получается особенно весело

RedPossum ★★★★★
()
Ответ на: комментарий от Miguel

http://yz.mit.edu/wp/true-scala-complexity/

Лол, неплохо, спасибо.

Первая ссылочка - каноничный пример тотальной юзабельности скалочки; всем, кто приходит из Хаскеля, обязательно нужно ее показывать, чтобы они были в курсе, куда, собственно, попали.

anonymous
()
Ответ на: комментарий от Reset

Шаблоны, сервлеты и прочий бред не нужны

Ну возьмите нетти или джетти, да и встраивайте их в свое приложение на скале без всяких сервлетов.

svr69 ★★
()
Ответ на: комментарий от Darkman

жаба поделки все такие тормозные.

Все? Ты наверное по жирным гуйням типа эклипса судишь? Ну да, с гуеом облом, он тормозной в жабке и отвратный на вид. Нету хорошего, видимо потому, что особо никому не нужен. Это же интерпрайз, тут страшный гуй норма и быстрый сервер - типичная картина.

dizza ★★★★★
()
Ответ на: комментарий от Darkman

И кто так пишет бенчмарки? Это же холодный запуск померен.

    public static int N = 100000;
    public static int SIZE = 10;

    public static void main(String[] args) {
        while (true) {
            Object[] res;
            long t1 = System.currentTimeMillis();
            for (int j = 0; j<N; ++j) {
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
                res = new Object[SIZE];
            }
            long t2 = System.currentTimeMillis();
            System.out.println(t2-t1);
        }
    }


У меня первый запуск выдает 48ms, после прогрева 10ms
dizza ★★★★★
()
Ответ на: комментарий от dizza

Каждый раз, при разговоре про тормозной гуй явы я вспоминаю yEd. А он не тормозит. А значит можно писать нетормозную гуйню явовую. //RedPossum

anonymous
()
Ответ на: комментарий от svr69

jetty я не осилил. Нормальной документации у него я не увидел, попытка сделать на нем стриминг провалилась, поэтому взял play у которого всё что нужно есть в примерах.

Reset ★★★★★
()
Ответ на: комментарий от gag

У меня scala является обязательным требованием, потому что на ней уже _готов_ софт в который надо встроить http. Я пока помучаюсь с play, если при деплое этого монстра возникнет геморрой, то перепишу на более минималистичной либе/фреймворке, благо пока файл с обработчиками запросов у меня занимает всего лишь 150 строк.

Reset ★★★★★
()
Ответ на: комментарий от dizza

И кто так пишет бенчмарки? Это же холодный запуск померен.

Так это и требовалось. А то я тоже могу вместо запуска прямо в Workspace вынести в метод, и прогнать раз 200 чтобы гарантированно сработал JIT и PIC. Тут ёще прикол в том что и циклы в Smalltalk не циклы а посылка сообщения сообщений иногда достаточно длинных по цепочке. Просто в жабе нельзя взять кусок кода, выделить и запустить, нет там REPL'а ни в каком виде. Что, кстати, огроменный минус. Плюс надо всё-таки брать Vector а не Object. Ибо у Smalltalk'овского Array цепочка наследования есть и не короткая и конструкторы вызываются. Просто мне влом придумывать равноценный бенч, т.к. для себя я всё решил и на JVM меня палкой не загонишь. Благо у меня есть прекрасная привилегия самому выбирать языки реализации.

Darkman ★★★
()
Ответ на: комментарий от Darkman

что ж жаба поделки все такие тормозные.

да не все, но рожей жабка конечно не вышла, это да.

Rastafarra ★★★★
()
Ответ на: комментарий от Darkman

Что то я не понял что требовалось. Лучше выложи аналогичный код и результаты с разогревом. Насчет repl: я могу в отладчике выполнять произвольный код. Не репл, но не надо думать, что в st что то из ряда вон выходящее.

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)
Ответ на: комментарий от Darkman

Благо у меня есть прекрасная привилегия самому выбирать шипастые дилды.

поправил, не благодари

anonymous
()
Ответ на: комментарий от Darkman
public static int N = 100000;
    public static int SIZE = 10;
    public static ArrayList<ArrayList<Object>> res;

    public static void main(String[] args) {
        while (true) {
            long t1 = System.currentTimeMillis();
            for (int j = 0; j<N; ++j) {
                res = Lists.newArrayList(
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE),
                        Lists.newArrayListWithCapacity(SIZE)
                );
            }
            long t2 = System.currentTimeMillis();
            System.out.println(t2-t1);
        }
    }


Вот аналог. 40ms. Сделай плиз у себя. Просто интересно.
dizza ★★★★★
()
Ответ на: комментарий от dizza

Лучше выложи аналогичный код и результаты с разогревом.

Тот же код с разогревом и запущенный с наивысшим приоритетом ускоряется в два раза. Следует учитывать что жаба компилер знает про массивы, а в Smalltalk это просто посылка сообщения т.е. в коде получается

java

bipush  10
anewarray       #4; //class java/lang/Object

Smalltalk

push Array
push 10
send new:

Darkman ★★★
()
Ответ на: комментарий от dizza

Вот аналог. 40ms. Сделай плиз у себя. Просто интересно.

Можно код на который javac не будет ругаться cannot find symbol symbol : variable Lists

Darkman ★★★
()
Ответ на: комментарий от Darkman

    public static int N = 100000;
    public static int SIZE = 10;
    public static ArrayList<ArrayList<Object>> res;

    public static void main(String[] args) {
        while (true) {
            long t1 = System.currentTimeMillis();
            for (int j = 0; j<N; ++j) {
                res = new ArrayList<ArrayList<Object>>(Arrays.asList(
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE),
                        new ArrayList<Object>(SIZE)
                ));
            }
            long t2 = System.currentTimeMillis();
            System.out.println(t2-t1);
        }
    }
dizza ★★★★★
()
Ответ на: комментарий от Darkman

Следует учитывать что жаба компилер знает про массивы, а в Smalltalk это просто посылка сообщения т.е. в коде получается

Ага, давай притянем очередной «фреймворк» с сообщениями, напишем в нём массив и потом будем удивляться, почему эта тупая жаба тормозит как полное дерьмо... Вот так наверное на ней и пишут тормозные приложения :D

yyk ★★★★★
()

Любой нормальный тред скатывается в бессмысленный говнобенчмарки

vertexua ★★★★★
()
Ответ на: комментарий от Reset

А если через Servlet 3.0 выполнить startAsync, получить AsyncContext и писать в его OutputStream по мере надобности. Периодически вызывать flush(). Только когда уже не надо будет можно будет вызвать complete().

Servlet 3.0 есть в Jetty, Tomcat 7, Glassfish, JBoss, Resin

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

JVM мы в отделе в продакшене (пока?) не используем вообще. Просто так сложилось, что удовлетворяющее нас решение написано на scala, а нужно всё в рабочем виде уже вчера, поэтому вот курю scala и сопутствующие технологии :) Спасибо за наводки.

Reset ★★★★★
()
Последнее исправление: Reset (всего исправлений: 1)
Ответ на: комментарий от dizza

Ну да, с гуеом облом, он тормозной в жабке и отвратный на вид. Нету хорошего

Снова попиарю JavaFX 2 - шустрый (работает через JNI + 3d-ускорение), приятный в программировании и перспективный (в планах оракла заменить им свинг) гуи-фреймворк.

ovk48 ★★★
()
Ответ на: комментарий от ovk48

Круто, надо как-нибудь посмотреть. А как у него с look and feel? Как оно выглядит на разных платформах?

dizza ★★★★★
()
Ответ на: комментарий от dizza

А как у него с look and feel? Как оно выглядит на разных платформах?

На разных платформах выглядит одинаково (разницу между линуксом и виндой лично я наблюдал только из-за разных шрифтов), виджеты не нативные, но довольно симпатичные, как-то так: http://docs.oracle.com/javafx/2/ui_controls/overview.htm

ovk48 ★★★
()
Ответ на: комментарий от dizza

new ArrayList<Object>(SIZE),

58-59 против 32-35 в VW. Как говорится: «УПС». Тут есть один интересный нюанс: насколько я знаю в Hotspot VM нет Process Inline Cache хотя VM жабы и VW изначально разрабатывали одни и те же люди которые работали над Strongtalk.

Darkman ★★★
()
Ответ на: комментарий от yyk

Вот так наверное на ней и пишут тормозные приложения :D

Скорость разработки на Java и на Smalltalk даже сравнивать неприлично - нельзя издеваться над убогими. Если найдётся жутко узкое место его всегда можно переписать на C. Сравнивать JNI и DLLCC это издевательство. У меня полное впечатление что Гослинг (работавший, кстати, над Strongtalk) это такой сверхтонкий тролль.

Darkman ★★★
()
Ответ на: комментарий от dizza

Ну ок, видимо этот VW не совсем поделка :)

:))

Угу. с учётом того что они в своё время выкупили сорцы ксеровского Smalltalk. Есть одна интересная цитата:

Cincom founder Thomas M. Nies is currently the longest actively serving CEO in the computer industry

On August 20, 1984, President Ronald Reagan called Cincom and Tom Nies «the epitome of entrepreneurial spirit of American business.»

Открыть сырцы всей библиотеки классов (правда под людоедской лицензией) это «поступок», чем,кстати, пользуются и Squeak и Pharo. Symbolics, например, в своё время много чего зажала.

Darkman ★★★
()

С другой стороны, можно ли оставаться в Scala в рамках функциональной парадигмы?

Нет, производительность будет хромать, так как рантайм не рассчитан на интенсивное выделение\освобождение памяти под маленькие объекты.

ну и про лень не забываем.

kyz
()
Ответ на: комментарий от kyz

рантайм не рассчитан на интенсивное выделение\освобождение памяти под маленькие объекты.

Читни-ка http://programmers.stackexchange.com/questions/149563/should-we-avoid-object-...

Object creation in Java due to its memory allocation strategies is faster than C++ in most cases and for all practical purposes compared to everything else in the JVM can be considered «free».

ovk48 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.