各 Scheme 処理系の Socket インターフェースを調べる

調べたのは Ikarus, Ypsilon, Gauche
ちなみに Ruby の Socket インターフェースは → Socket - Rubyリファレンスマニュアル


3者3様で面白いなあ。ネットワークプログラミング経験があまりないので判断が難しい。
どの処理系も、ユーザーが細かい事を気にしなくても良いインターフェースを用意している。


一方、低レベル API 「も」提供していたり、! 系手続きを用意してメモリ効率を考えていたりする Gauche は本気のネットワークプログラミングに対応できそう。


結局の所、その処理系が想定する、ユーザーのユースケースが重要か。
Mosh はどうするかはもう少し考えよう。今のところ Gauche のように低レベル API を用意しつつ、普通のユーザーは高レベル API で事足りるみたいな形を考えているが。

Ikarus

tcp-connect host service
tcp-connect-nonblocking host service
udp-connect host service
udp-connect-nonblocking host-name service-name
tcp-server-socket port-number
tcp-server-socket-nonblocking port-number
accept-connection tcp-server
accept-connection-nonblocking tcp-server
close-tcp-server-socket tcp-server
register-callback input-port thunk
register-callback output-port thunk
register-callback tcp-server thunk

Ypsilon

(socket)

call-with-socket socket proc
make-client-socket node service . [ai-family ai-socktype ai-flag ai-protocol]
make-server-socket service . [ai-family ai-protocol]
shutdown-output-port port
socket? obj
make-socket node service ai-family ai-socktype ai-flag ai-protocol
socket-accept socket flags
socket-port socket =>
socket-send socket buffer flags
socket-send socket flags
socket-shutdown socket how
socket-close socket
gethostname

Gauche

低レベル

make-socket domain type &optional protocol
socket-fd socket
socket-status socket
socket-bind socket address
socket-listen socket backlog
socket-accept socket
socket-connect socket address
socket-shutdown socket how
socket-getsockname socket
socket-getpeername socket
socket-send socket msg &optional flags
socket-sendto socket msg to-address &optional flags
socket-recv! socket buf &optional flags
socket-recvfrom! socket buf addrs &optional flags
socket-recv socket bytes &optional flags
socket-recvfrom socket bytes &optional flags
socket-setsockopt socket level option value
socket-getsockopt socket level option rsize
inet-checksum packet size
sys-gethostbyname name
sys-gethostbyaddr addr proto
sys-getservbyname name proto
sys-getservbyport port proto
sys-getaddrinfo nodename servname hints
sys-ntohs integer
sys-ntohl integer
sys-htons integer
sys-htonl integer

高レベル

make-client-socket &optional address-spec …
make-server-socket &optional address-spec …
make-server-sockets host port &keyword reuse-addr? sock-init
socket-address socket
socket-input-port socket &keyword (buffering :modest)
socket-output-port socket &keyword (buffering :line)
socket-close socket
call-with-client-socket socket proc