Регистрация | Войти
Lisp — программируемый язык программирования
try-cl - это возможно?
treep - 15.06.2010 11:24, Сообщений - 10
Возможно ли на данном ресурсе сделать такой сервис (как try-clojure, например)?
[#]
Это тут обсуждалось когда-то давно. Вроде пришли к выводу, что не нужно. Свистелки и перделки нужны известно кому. :)
allchemist - 15.06.2010 11:31
[#] Ответ на комментарий от allchemist 15.06.2010 11:31
Да, я помню - это я тогда и спрашивал. Просто недавно в джаббере опять подняли тему - у многих языков такое есть. Так что "почему бы нет" (с) :)

Вот, и я тут написал набросок песочницы (сейчас тему создам про это), но серверных ресурсов с доменом у меня нет, так что...
treep - 15.06.2010 11:49
[#]
На самом деле вопрос стоит по другому: возможно ли для CL реализовать такое безопасным образом?
archimag - 15.06.2010 11:51
[#] Ответ на комментарий от archimag 15.06.2010 11:51
Я считаю, что да.
treep - 15.06.2010 11:54
[#] Ответ на комментарий от archimag 15.06.2010 11:51
Дмитрий предлагал патчить SBCL, но так как патчить можно рабочий образ, то не обязательно именно пересобирать SBCL, достаточно заменять (или дополнять) функции  из sb-impl и sb-c.

Второй момент в том, что образ для rulisp и образ для песочницы эта разные образа. Т.е. на сервере должно работать два процесса sbcl, при этом в одном столько потоков сколько веб клиентов в данный момент, а в другом столько, сколько открыто веб repl сессий - в каждом потоке крутится песочный repl.

Хотя, допускаю, что не всё так просто. Сложным может быть именно создания нескольких песочных repl-ов, один-то создать не проблема.
treep - 15.06.2010 12:10
[#] Ответ на комментарий от treep 15.06.2010 12:10
Для "песочницы в браузере" можно поступить очень радикальным образом - написать лисп на яваскрипте. Убъется сразу много зайцев.

Я не представляю, как сделать безопасную песочницу без модификации и пересборки SBCL.

Если нужен именно безопасный REPL, то можно сделать свой reader, который бы читал в символы не из пакета CL, а из пакета SANDBOX-CL - тогда все будет под контролем. В частности, если сделать, чтобы вызов (sandbox-cl:find-package "COMMON-LISP") возвращал бы пакет SANDBOX-CL (и аналогичные функции вроде intern, make-package вели себя аналогично), то получим защищенный REPL.
dmitry_vk - 15.06.2010 22:39
[#] Ответ на комментарий от treep 15.06.2010 12:10
А насчет "патчить SBCL" имелось в виду лишь примерное направление работы :) Там полно деталей, над которыми надо думать.
dmitry_vk - 15.06.2010 22:40
[#] Ответ на комментарий от dmitry_vk 15.06.2010 22:40
А http://github.com/treep/sb-sandbox не смотрел? Он вроде безопасен (исключения я в соседней теме назвал).
treep - 15.06.2010 22:57
[#] Ответ на комментарий от treep 15.06.2010 22:57
А лиспы на JS оказывается есть, правда только в качестве чьей-то игрушки.
вот, например:
http://marcbelmont.com/projects/lisp-interpreter-javascript-jquery/
http://www.parkscomputing.com/lisptest.html

первый умеет больше, второй более удобный и имеет проверку баланса скобок, но не умеет некоторых даже самых простых вещей.

например, вот такой код он не выполнил:

(defun ! (n)
  (if (<= n 1) 1
      (* n (! (- n 1)))
)
)

И такой не выполнил:

(defun ! (n)
  (cond ((<= n 1) 1)
        (t (* n (! (- n 1))))
)
)

А такой вот выполнил:

(defun ! (n)
  (cond ((< n 2) 1)
        (t (* n (! (- n 1))))
)
)
allchemist - 17.06.2010 18:17
[#] Ответ на комментарий от allchemist 17.06.2010 18:17
>> А лиспы на JS оказывается есть

Нужно чтобы было возможно всё из пакета CL, натурально всё :)

>> Для "песочницы в браузере" можно поступить очень радикальным образом - написать лисп на яваскрипте. Убъется сразу много зайцев.


Второй кролик уж лучше для Clojure оставить если она до него ещё не добралась. А первый кролик - очень сложно. CL и вправду большой.
treep - 17.06.2010 22:57
@2009-2010 lisper.ru