Skip to content

techascent/tech.resource

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tech.resource

Clojars Project

API Documentation

Generic thread-safe and exception-safe non-gc or 'off heap' resource management.

There is some more information on our blog.

;;create the file
(defn new-random-file
  [fname]
  (resource/track (RandomAccessFile. fname) #(.close item)))


;;Use it
(resource/stack-resource-context
  (let [f (new-random-file fname)]
    ...
    ))

;;Similar to with-open, this will close the file regardless
;;of what happens.  The advantage is this can map to anything
;;you can implement the resource protocol with meaning network sockets,
;;JNI pointers, GPU contexts, etc.  It is also possible to have the
;;gc track something if the dispose functionality does not reference
;;the item itself.

(let [f (resource/track (double-array [1 2 3]) #(println "disposed") :gc)]
  ...)
;;Disposed will print when the gc determines the double array is no longer
;;reachable

There are now explicit methods to create either a weak or soft reference. For the differences, see here.

Usage

Checkout the stack and gc tests.

Or take a giant leap and check out tvm-clj.

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version. Complements of Tech Ascent, LLC.

About

RAII resource management system

Resources

Stars

Watchers

Forks

Packages

No packages published