LINUX.ORG.RU

История изменений

Исправление 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")))

Для каждой сессии открывается файл и этот файл передаётся аргументом в функцию, являющуюся обработчиком ссылки. При этом не надо париться с куками, менеджерами сессий, хранилищами данных. Просто в ссылку передаётся открытый файл. Также можно передавать любые другие данные.