lomeo: (лямбда)
Из дискуссии с [livejournal.com profile] sassa_nf.

В java локальные переменные метода не собираются сборщиком мусора, пока мы не выйдем из метода (наверх, разумеется, а не глубже). Это важно, потому что Scala'вские Stream из-за этого часто становятся бесполезны.

Вот имеем мы некий Stream, который любят сравнивать с Haskell'евским списком. И начинаем его обрабатывать. А обработка через некоторое время завешается с OutOfMemoryError:
val messages = Stream continually nextMessage
for (message <- messages) doSomething(message)

А теперь перепишем это так:
for (message <- Stream continually nextMessage) doSomething(message)

и обработка у нас будет вестись вечно.

А всё потому, что первый способ генерит astore, который создаёт локальную переменную. А второй — нет.

UPD: [livejournal.com profile] sassa_nf всё же заставил java работать правильно. За что ему отдельное спасибо!
lomeo: (гомер)
Только вчера с удивлением обнаружил, что стринговый кэш в java всё таки работает:


public class Test
{
    public static final void main(String[] args)
        throws Exception
    {
        String test1    = "this is a text";
        String subTest1 = test1.substring(10);

        String test2    = "this is not a text";
        String subTest2 = test2.substring(14);

        System.out.println(subTest1 == subTest2);
        System.out.println(subTest1.intern() == subTest2.intern());
    }
}


вернёт

false
true

ABCL

Apr. 7th, 2006 02:21 pm
lomeo: (лямбда)
По наводке [livejournal.com profile] polter скачал себе CommonLisp for JVM. Называется ABCL. Как они пишут ABCL пока является очень ранней реализацией, однако, она уже имеет много вкусностей.

С помощью стандартного cygwin-овского CLISP, к сожалению, ABCL не собрался. С LispWorks же это произошло на раз-два.

Приятно, что у ABCL очень хороший интерфейс с java (по крайней мере, мне так показалось).
Вот кусок кода, демонстрирующий это:
(defun local-port (socket)
  (java:jcall (java:jmethod "java.net.ServerSocket" "getLocalPort") socket))


Также есть возможность создавать объекты, работать с массивами, реализовывать через прокси интерфейсы, получать информацию о типах во время исполнения и т.д. Поглядите на java.lisp - там все это есть :-)

А теперь ссылки:

Сам ABCL

Редактор, написанный на нем (смотрите картинки)
lomeo: (Default)
Вот здесь неплохое описывало.
Кое что из понравившегося: @Test(expected=ArithmeticException.class) и @Test(timeout=2000).
А так там много всего.

Profile

lomeo: (Default)
Dmitry Antonyuk

April 2024

S M T W T F S
 123456
7891011 1213
14151617181920
21222324252627
282930    

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 3rd, 2025 02:26 pm
Powered by Dreamwidth Studios