The Julia binding

The Clunkyard robot API in Julia, directly over the core's C ABI through ccall. The API, native records and declarations are generated from protocol/v2/api.json. Only loading, the run loop and exception mapping are written by hand. Physics, tracking, parsing and serialization run in the core.

Install with make install SDK=/opt/clunkyard/sdk. Run with JULIA_LOAD_PATH=/opt/clunkyard/sdk/bindings/julia:@stdlib julia bot.jl. The hosted runtime's system image precompiles this package. Library symbols are resolved at process initialization, so it loads libclunkyard.so.2, or the file named by CLUNKYARD_LIB, even from a system image.

A Robot takes on_start and on_turn callbacks. Subsystems and facts are properties; calls use snake_case. Optional results are nothing, records have named fields and enums use symbols matching their protocol names. Controls take keyword fields and merge in the turn. drive.get("throttle") reads a pending field. Throw ClunkyardSDK.Forfeit(code, message) to forfeit; other exceptions are logged and send the controls already set. ClunkyardSDK.play(robot, lines) plays lines in memory for tests.

A tiny robot

using ClunkyardSDK
const cy=ClunkyardSDK
function turn(bot)
    target=bot.sensors.nearest
    if target===nothing
        bot.drive.set(throttle=0.75,turn=0.25)
        bot.scanner.set(heading=bot.me.heading,arc=40)
        bot.status.set(text="SEARCH",value=bot.scanner.last.arc)
        return
    end
    power=bot.gun.power_for_flight_time(target.range,1)
    aim=bot.gun.lead(target,power)
    heading,pitch=aim===nothing ? (target.bearing,target.elevation) : (aim.heading,aim.pitch)
    bot.gun.aim(heading=heading,pitch=pitch)
    bot.gun.can_fire(power,10) && bot.gun.fire(power=power)
    bot.drive.set(throttle=0.5,turn=bot.angles.clamp(bot.angles.angle_diff(target.bearing,bot.me.heading)))
    bot.scanner.set(heading=target.bearing,arc=10)
    bot.status.set(text="TRACK",value=target.range)
end
cy.run(cy.Robot(on_turn=turn))

make test SDK=... compares every API vector with the core's transcript, including exact floating-point bits and act lines. The README example also participates in the cross-language identity check.

Names

Every entry of the robot API 2.0.0 in Julia. names.md has every language side by side.

Canonical Form Julia
match.mode property match.mode
match.ruleset property match.ruleset
match.control property match.control
match.robots property match.robots
match.is_3d property match.is_3d
match.tick_rate property match.tick_rate
match.max_ticks property match.max_ticks
match.robot_id call match.robot_id
clock.tick property clock.tick
clock.seconds property clock.seconds
clock.remaining_ticks property clock.remaining_ticks
arena.size property arena.size
arena.gravity property arena.gravity
arena.terrain_kind property arena.terrain_kind
arena.ground_height call arena.ground_height
me.health property me.health
me.position property me.position
me.velocity property me.velocity
me.heading property me.heading
me.pitch property me.pitch
me.roll property me.roll
me.angular_velocity property me.angular_velocity
me.attitude property me.attitude
me.grounded property me.grounded
me.altitude property me.altitude
me.applied property me.applied
battery.charge property battery.charge
battery.capacity property battery.capacity
battery.regen property battery.regen
battery.sustainable_drive property battery.sustainable_drive
battery.compute property battery.compute
battery.drive_cost call battery.drive_cost
drive.hover_lift property drive.hover_lift
drive.set control drive.set
drive.forces control drive.forces
drive.get call drive.get
gun.aim_now property gun.aim_now
gun.cooldown_ticks property gun.cooldown_ticks
gun.spread property gun.spread
gun.max_power property gun.max_power
gun.damage_scale property gun.damage_scale
gun.can_fire call gun.can_fire
gun.shot_speed call gun.shot_speed
gun.shot_cost call gun.shot_cost
gun.reload_ticks call gun.reload_ticks
gun.shot_damage call gun.shot_damage
gun.power_for_speed call gun.power_for_speed
gun.power_for_flight_time call gun.power_for_flight_time
gun.lead call gun.lead
gun.lead_point call gun.lead_point
gun.aim control gun.aim
gun.fire control gun.fire
gun.get call gun.get
scanner.last property scanner.last
scanner.proximity_range property scanner.proximity_range
scanner.reach call scanner.reach
scanner.arc_for_reach call scanner.arc_for_reach
scanner.set control scanner.set
scanner.get call scanner.get
sensors.contacts property sensors.contacts
sensors.nearest property sensors.nearest
sensors.cues property sensors.cues
sensors.contact call sensors.contact
sensors.position_of call sensors.position_of
tracker.cue property tracker.cue
tracker.nearest_bearing_rate property tracker.nearest_bearing_rate
tracker.velocity call tracker.velocity
tracker.position call tracker.position
tracker.last_seen call tracker.last_seen
tracker.configure call tracker.configure
nav.zone property nav.zone
nav.zone.margin call nav.zone.margin
nav.zone.contains call nav.zone.contains
nav.zone.distance_from call nav.zone.distance_from
nav.storm property nav.storm
nav.storm.margin call nav.storm.margin
nav.storm.contains call nav.storm.contains
nav.storm.distance_from call nav.storm.distance_from
nav.hill property nav.hill
nav.hill.margin call nav.hill.margin
nav.hill.contains call nav.hill.contains
nav.hill.distance_from call nav.hill.distance_from
nav.pickups property nav.pickups
nav.nearest_pickup call nav.nearest_pickup
nav.field_distance call nav.field_distance
score.me property score.me
score.best property score.best
score.armour property score.armour
angles.normalize call angles.normalize
angles.angle_diff call angles.angle_diff
angles.bearing_to call angles.bearing_to
angles.elevation_to call angles.elevation_to
angles.direction call angles.direction
angles.distance call angles.distance
angles.clamp call angles.clamp
status.set control status.set
status.get call status.get
raw.number call raw.number
raw.text call raw.text
raw.has call raw.has
raw.flag call raw.flag
raw.count call raw.count
raw.line call raw.line
raw.extra call raw.extra
session.event property session.event
session.next call session.next
session.send call session.send
session.forfeit call session.forfeit
session.log call session.log
session.feed call session.feed
session.reply call session.reply

Download this page as Markdown