gointerop

package
v1.13.21 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Overview

Package gointerop provides Go concurrency primitive wrappers.

Channels

  • make-channel, channel?
  • channel-send!, channel-receive
  • channel-try-send!, channel-try-receive
  • channel-close!

Wait Groups

  • make-wait-group, wait-group?
  • wait-group-add!, wait-group-done!
  • wait-group-wait!

Read-Write Mutexes

  • make-rw-mutex, rw-mutex?
  • rw-mutex-lock!, rw-mutex-unlock!
  • rw-mutex-rlock!, rw-mutex-runlock!

Once

  • make-once, once?
  • once-do!

Atomics

  • make-atomic, atomic?
  • atomic-load, atomic-store!, atomic-swap!, atomic-cas!
  • make-atomic-int64, atomic-int64?
  • atomic-int64-load, atomic-int64-store!, atomic-int64-add!

Use Extension or AddToRegistry to register all primitives.

Package gointerop provides Go-specific concurrency primitives.

Index

Constants

This section is empty.

Variables

View Source
var AddToRegistry = Builder.AddToRegistry

AddToRegistry registers all Go interop primitives.

View Source
var Builder = registry.NewRegistryBuilder(addChannels, addWaitGroup, addRWMutex, addOnce, addAtomic)

Builder aggregates all Go interop registration functions.

View Source
var Extension = registry.NewDescribedExtension("gointerop",
	"Go interop: Go value wrapping, struct access, method calls.",
	AddToRegistry)

Extension is the Go interop extension.

View Source
var PrimAtomicQ = helpers.MakeTypePredicate(func(o values.Value) bool {
	_, ok := o.(*values.AtomicBox)
	return ok
})

PrimAtomicQ tests if an object is an AtomicBox (atomic? obj) -> boolean

View Source
var PrimChannelQ = helpers.MakeTypePredicate(func(o values.Value) bool {
	_, ok := o.(*values.Channel)
	return ok
})

PrimChannelQ tests if an object is a channel (channel? obj) -> boolean

View Source
var PrimOnceQ = helpers.MakeTypePredicate(func(o values.Value) bool {
	_, ok := o.(*values.Once)
	return ok
})

PrimOnceQ tests if an object is a Once (once? obj) -> boolean

View Source
var PrimRWMutexQ = helpers.MakeTypePredicate(func(o values.Value) bool {
	_, ok := o.(*values.RWMutex)
	return ok
})

PrimRWMutexQ tests if an object is an RWMutex (rw-mutex? obj) -> boolean

View Source
var PrimWaitGroupQ = helpers.MakeTypePredicate(func(o values.Value) bool {
	_, ok := o.(*values.WaitGroup)
	return ok
})

PrimWaitGroupQ tests if an object is a WaitGroup (wait-group? obj) -> boolean

Functions

func PrimAtomicCompareAndSwap

func PrimAtomicCompareAndSwap(mc machine.CallContext) error

PrimAtomicCompareAndSwap atomically compares and swaps (atomic-compare-and-swap! a old new) -> boolean

func PrimAtomicLoad

func PrimAtomicLoad(mc machine.CallContext) error

PrimAtomicLoad atomically loads the value (atomic-load a) -> value

func PrimAtomicStore

func PrimAtomicStore(mc machine.CallContext) error

PrimAtomicStore atomically stores a value (atomic-store! a value) -> void

func PrimAtomicSwap

func PrimAtomicSwap(mc machine.CallContext) error

PrimAtomicSwap atomically swaps and returns the old value (atomic-swap! a new) -> old

func PrimChannelCapacity

func PrimChannelCapacity(mc machine.CallContext) error

PrimChannelCapacity returns the channel's buffer capacity (channel-capacity ch) -> integer

func PrimChannelClose

func PrimChannelClose(mc machine.CallContext) error

PrimChannelClose closes the channel (channel-close! ch) -> void

func PrimChannelClosedQ

func PrimChannelClosedQ(mc machine.CallContext) error

PrimChannelClosedQ tests if a channel is closed (channel-closed? ch) -> boolean

func PrimChannelLength

func PrimChannelLength(mc machine.CallContext) error

PrimChannelLength returns the number of elements in the channel buffer (channel-length ch) -> integer

func PrimChannelReceive

func PrimChannelReceive(mc machine.CallContext) error

PrimChannelReceive receives a value from the channel (blocking) (channel-receive ch) -> value

func PrimChannelSend

func PrimChannelSend(mc machine.CallContext) error

PrimChannelSend sends a value on the channel (blocking) (channel-send! ch value) -> void

func PrimChannelTryReceive

func PrimChannelTryReceive(mc machine.CallContext) error

PrimChannelTryReceive attempts to receive without blocking (channel-try-receive ch) -> (values value received? open?)

func PrimChannelTrySend

func PrimChannelTrySend(mc machine.CallContext) error

PrimChannelTrySend attempts to send without blocking (channel-try-send! ch value) -> boolean

func PrimMakeAtomic

func PrimMakeAtomic(mc machine.CallContext) error

PrimMakeAtomic creates a new AtomicBox value (make-atomic initial) -> atomic

func PrimMakeChannel

func PrimMakeChannel(mc machine.CallContext) error

PrimMakeChannel creates a new channel (make-channel [buffer-size]) -> channel

func PrimMakeOnce

func PrimMakeOnce(mc machine.CallContext) error

PrimMakeOnce creates a new Once (make-once) -> once

func PrimMakeRWMutex

func PrimMakeRWMutex(mc machine.CallContext) error

PrimMakeRWMutex creates a new RWMutex (make-rw-mutex [name]) -> rw-mutex

func PrimMakeWaitGroup

func PrimMakeWaitGroup(mc machine.CallContext) error

PrimMakeWaitGroup creates a new WaitGroup (make-wait-group) -> wait-group

func PrimOnceDo

func PrimOnceDo(cc machine.CallContext) error

PrimOnceDo executes the thunk only once (once-do! once thunk) -> boolean (true if executed, false if already done)

func PrimOnceDoneQ

func PrimOnceDoneQ(mc machine.CallContext) error

PrimOnceDoneQ tests if the Once has been executed (once-done? once) -> boolean

func PrimRWMutexReadLock

func PrimRWMutexReadLock(mc machine.CallContext) error

PrimRWMutexReadLock acquires the read lock (rw-mutex-read-lock! rwm) -> void

func PrimRWMutexReadUnlock

func PrimRWMutexReadUnlock(mc machine.CallContext) error

PrimRWMutexReadUnlock releases the read lock (rw-mutex-read-unlock! rwm) -> void

func PrimRWMutexTryReadLock

func PrimRWMutexTryReadLock(mc machine.CallContext) error

PrimRWMutexTryReadLock tries to acquire the read lock (rw-mutex-try-read-lock! rwm) -> boolean

func PrimRWMutexTryWriteLock

func PrimRWMutexTryWriteLock(mc machine.CallContext) error

PrimRWMutexTryWriteLock tries to acquire the write lock (rw-mutex-try-write-lock! rwm) -> boolean

func PrimRWMutexWriteLock

func PrimRWMutexWriteLock(mc machine.CallContext) error

PrimRWMutexWriteLock acquires the write lock (rw-mutex-write-lock! rwm) -> void

func PrimRWMutexWriteUnlock

func PrimRWMutexWriteUnlock(mc machine.CallContext) error

PrimRWMutexWriteUnlock releases the write lock (rw-mutex-write-unlock! rwm) -> void

func PrimWaitGroupAdd

func PrimWaitGroupAdd(mc machine.CallContext) error

PrimWaitGroupAdd adds to the WaitGroup counter (wait-group-add! wg n) -> void

func PrimWaitGroupDone

func PrimWaitGroupDone(mc machine.CallContext) error

PrimWaitGroupDone decrements the WaitGroup counter (wait-group-done! wg) -> void

func PrimWaitGroupWait

func PrimWaitGroupWait(mc machine.CallContext) error

PrimWaitGroupWait waits for the WaitGroup counter to reach zero (wait-group-wait! wg) -> void

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL