try-cl - это возможно?
Возможно ли на данном ресурсе сделать такой сервис (как try-clojure, например)?
[#]
Это тут обсуждалось когда-то давно. Вроде пришли к выводу, что не нужно. Свистелки и перделки нужны известно кому. :)
[#] Ответ на комментарий от allchemist 15.06.2010 11:31
Да, я помню - это я тогда и спрашивал. Просто недавно в джаббере опять подняли тему - у многих языков такое есть. Так что "почему бы нет" (с) :)
Вот, и я тут написал набросок песочницы (сейчас тему создам про это), но серверных ресурсов с доменом у меня нет, так что...
Вот, и я тут написал набросок песочницы (сейчас тему создам про это), но серверных ресурсов с доменом у меня нет, так что...
[#] Ответ на комментарий от archimag 15.06.2010 11:51
Дмитрий предлагал патчить SBCL, но так как патчить можно рабочий образ, то не обязательно именно пересобирать SBCL, достаточно заменять (или дополнять) функции из sb-impl и sb-c.
Второй момент в том, что образ для rulisp и образ для песочницы эта разные образа. Т.е. на сервере должно работать два процесса sbcl, при этом в одном столько потоков сколько веб клиентов в данный момент, а в другом столько, сколько открыто веб repl сессий - в каждом потоке крутится песочный repl.
Хотя, допускаю, что не всё так просто. Сложным может быть именно создания нескольких песочных repl-ов, один-то создать не проблема.
Второй момент в том, что образ для rulisp и образ для песочницы эта разные образа. Т.е. на сервере должно работать два процесса sbcl, при этом в одном столько потоков сколько веб клиентов в данный момент, а в другом столько, сколько открыто веб repl сессий - в каждом потоке крутится песочный repl.
Хотя, допускаю, что не всё так просто. Сложным может быть именно создания нескольких песочных repl-ов, один-то создать не проблема.
[#] Ответ на комментарий от treep 15.06.2010 12:10
Для "песочницы в браузере" можно поступить очень радикальным образом - написать лисп на яваскрипте. Убъется сразу много зайцев.
Я не представляю, как сделать безопасную песочницу без модификации и пересборки SBCL.
Если нужен именно безопасный REPL, то можно сделать свой reader, который бы читал в символы не из пакета CL, а из пакета SANDBOX-CL - тогда все будет под контролем. В частности, если сделать, чтобы вызов (sandbox-cl:find-package "COMMON-LISP") возвращал бы пакет SANDBOX-CL (и аналогичные функции вроде intern, make-package вели себя аналогично), то получим защищенный REPL.
Я не представляю, как сделать безопасную песочницу без модификации и пересборки SBCL.
Если нужен именно безопасный REPL, то можно сделать свой reader, который бы читал в символы не из пакета CL, а из пакета SANDBOX-CL - тогда все будет под контролем. В частности, если сделать, чтобы вызов (sandbox-cl:find-package "COMMON-LISP") возвращал бы пакет SANDBOX-CL (и аналогичные функции вроде intern, make-package вели себя аналогично), то получим защищенный REPL.
[#] Ответ на комментарий от treep 15.06.2010 12:10
А насчет "патчить SBCL" имелось в виду лишь примерное направление работы :) Там полно деталей, над которыми надо думать.
[#] Ответ на комментарий от dmitry_vk 15.06.2010 22:40
А http://github.com/treep/sb-sandbox не смотрел? Он вроде безопасен (исключения я в соседней теме назвал).
[#] Ответ на комментарий от treep 15.06.2010 22:57
А лиспы на JS оказывается есть, правда только в качестве чьей-то игрушки.
вот, например:
первый умеет больше, второй более удобный и имеет проверку баланса скобок, но не умеет некоторых даже самых простых вещей.
например, вот такой код он не выполнил:
И такой не выполнил:
А такой вот выполнил:
[#] Ответ на комментарий от allchemist 17.06.2010 18:17
>> А лиспы на JS оказывается есть
Нужно чтобы было возможно всё из пакета CL, натурально всё :)
>> Для "песочницы в браузере" можно поступить очень радикальным образом - написать лисп на яваскрипте. Убъется сразу много зайцев.
Второй кролик уж лучше для Clojure оставить если она до него ещё не добралась. А первый кролик - очень сложно. CL и вправду большой.
Нужно чтобы было возможно всё из пакета CL, натурально всё :)
>> Для "песочницы в браузере" можно поступить очень радикальным образом - написать лисп на яваскрипте. Убъется сразу много зайцев.
Второй кролик уж лучше для Clojure оставить если она до него ещё не добралась. А первый кролик - очень сложно. CL и вправду большой.