История изменений
Исправление monk, (текущая версия) :
C c++: динамическая типизация.
Со всеми: вычисления с формированием кода во время компиляции, контракты на значения, изолированная компиляция модулей (испортить чужой модуль невозможно).
Продуманные стандартные библиотеки. Например, в вебе можно такое:
#lang racket
(require web-server/servlet web-server/servlet-env)
(define ((phase f) request)
(define (response-generator embed/url)
(response/xexpr
`(html
(body (h1 "Phase 1")
(p ,(read-line f))
(a ((href ,(embed/url (phase f))))
"next line")))))
(send/suspend/dispatch response-generator))
(serve/servlet (lambda (req) (phase (open-input-file "/etc/passwd")) req))
Для каждой сессии открывается файл и этот файл передаётся аргументом в функцию, являющуюся обработчиком ссылки. При этом не надо париться с куками, менеджерами сессий, хранилищами данных. Просто в ссылку передаётся открытый файл. Также можно передавать любые другие данные.
Исходная версия monk, :
C c++: динамическая типизация.
Со всеми: вычисления с формированием кода во время компиляции, контракты на значения, изолированная компиляция модулей (испортить чужой модуль невозможно).
Продуманные стандартные библиотеки. Например, в вебе можно такое:
#lang racket
(require web-server/servlet web-server/servlet-env)
(define ((phase f) request)
(define (response-generator embed/url)
(response/xexpr
`(html
(body (h1 "Phase 1")
(p ,(read-line f))
(a ((href ,(embed/url (phase f))))
"next line")))))
(send/suspend/dispatch response-generator))
(serve/servlet (phase (open-input-file "/etc/passwd")))
Для каждой сессии открывается файл и этот файл передаётся аргументом в функцию, являющуюся обработчиком ссылки. При этом не надо париться с куками, менеджерами сессий, хранилищами данных. Просто в ссылку передаётся открытый файл. Также можно передавать любые другие данные.