組み込みクラスと標準ライブラリのメソッドレベルの完全リファレンスは NDA パートナー向けに各リリースに同梱される。本ページはどのクラスが存在するかの概観と該当 example へのポインタを示す。
Core
Array と String の at: / at:put: / indexOf: / copyFrom:to: などのインデックス系メソッドは Smalltalk 慣習に従い 1-based。at: 1 が最初の要素。
| クラス | 概要 |
|---|---|
Integer, Float | 標準算術、factorial、negated、timesRepeat:、to:、to:do:、ビット演算、比較 (min: / max: は Comparable 由来)。整数のゼロ除算はトラップせず、捕捉可能なエラーを送出する |
Boolean, True, False | ifTrue:、ifFalse:、ifTrue:ifFalse:、and:、or:、not |
String | バイト列であって文字列ではない — 'あ' size は 3、at: / copyFrom:to: はバイトを数えるので、任意の位置で切ると文字の途中で割れる。テキスト・ソケットのペイロード・エンコード済み blob が変換なしに同じ型になるのはこのため。String fromCodes: でバイトから組み立てる。スライス、concat:、asUppercase、asLowercase、trimmed、正規表現マッチ、lines、replaceAll:with:、< |
Char | 文字述語と変換 |
Regex | compile: してから match:、matches:、findAll:、replaceAll:with:、split: (String の正規表現系はこれ経由でディスパッチ) |
DateTime | now、parse:、fromMs:、y:m:d:h:min:s: (+ ms:)、formattedAs:、isoString、year … millisecond のフィールドアクセサ (ミリ秒精度) |
Error | Error raise: で送出、Error try:onError: で捕捉 — ハンドラはメッセージ文字列を受け取る (例外型の階層は持たない) |
Array | 永続 32-way trie、with:、at:、at:put:、size、sort:、indexOf:、,。`Array build: [:add |
Dict | 永続 HAMT、new、from:、at:、at:put:、at:ifAbsent:、at:ifPresent:ifAbsent:、includesKey:、keys、size、associations、組み込みの do: / collect: / select: / reject: |
Set | Array 上に構築 |
Maybe | パラメータ化された不在型、none、some:、ifPresent:ifAbsent:、isPresent |
Block | value、value:、value:value: ... valueWithArguments:、whileTrue: |
Class | クラスメタ操作、リフレクション |
Object | printNl、print、=、~=、asString、printOn:、className、isKindOf:、fieldNames、atField:、atField:put:、copyWith: (型付き不変更新 — フィールド名はクラス宣言に、値はフィールド型に対して検査される)、asObject、perform:、perform:withArgs: |
WriteStream | printOn: プロトコル経由でディスパッチする <<、nl、space、tab、position、isEmpty、reset |
Comparable, Enumerable | プロトコル制約付きミックスイン。Enumerable は組み込みの反復メソッドの上に乗るより広いプロトコル (sum、count:、detect:ifNone:、anySatisfy:、joinWith:、flatCollect:、min / max) |
アクターと並行性
| クラス | 概要 |
|---|---|
Actor | self、spawn:、!、receive、receive:、receive:after:do:、ask:、monitor:、linkTo:、trapExits:。既に死んだアクターへの monitor: / linkTo: は登録を捨てずにその死を報告する。モニタもリンクも観測できない異常死は stderr に報告される |
Future | await、await:、resolved?、pending?、resolve:、fail:、new (手動生成) |
Down, Exit | アクター参照と失敗理由を運ぶモニタ / リンク失敗エンベロープ |
サービス層
| クラス | 概要 |
|---|---|
HTTP, HttpServer, HttpResponse, HttpRequest | HTTP サーバはハンドラとしてブロックを取る。chunked と keepalive 対応。start:handler: / startGraceful:handler: は全インタフェースを、startHost:port:handler: / startGracefulHost:port:handler: は 1 つのローカルアドレスを束縛する。HttpRequest >> peerAddress はリクエストの送信元アドレス (送信元ごとのレート制限に要るもの。リバースプロキシの後ろではプロキシのアドレスになり、X-Forwarded-For を信じるかはアプリケーションの判断)。ファイルアップロード向けに HTTP parseMultipart:boundary: → MultipartPart (name / filename / contentType / bytes) |
LpHttpClient | HTTP クライアント — get:retries: / get:headers:retries:、post:body:contentType:retries: / post:body:contentType:headers:retries: → HttpResponse。https:// に到達でき、相手はシステムの証明書ストアで検証する。Host / Content-Length / Connection / Content-Type はクライアントが書き、呼び出し側からは拒否。ヘッダ名と値は検査され、信頼できない入力から組んだヘッダでリクエストを分割できない。接続後の応答待ちは 30 秒で打ち切る (LAMBDA_PRELUDE_HTTP_TIMEOUT_MS で変更) ので、ヘッダだけ返して黙るサーバが呼び出し側アクターを掴み続けることはない。Remote / grain の RPC 経路は http のみ |
Smtp | smtp プラグイン (Plugin load: 'smtp') + stdlib の Smtp モジュール。Smtp send: conf to: addr subject: sub text: body で 1 通を 1 宛先へ送る。plain / STARTTLS / wrapped TLS、相手はシステムの証明書ストアで検証。件名は RFC 2047 encoded word、本文は base64 で送るので、送り手の書いた行が data を早く終わらせることはない。ハンドシェイクと全 read を 1 つの予算で見る (60 秒、LAMBDA_PRELUDE_SMTP_TIMEOUT_MS)。答え (SmtpResult) は拒否された段階を名指すので、パスワード違いと送信者拒否が区別できる |
TCP, TCPSocket, TCPServer | アクタースケジューラと統合された境界つきソケット I/O。listen: は全インタフェース、listenHost:port: は 1 つのローカルアドレスを束縛する。ホスト名解決はバックグラウンドの解決スレッドで走り connect も非ブロッキングなので、遅い DNS サーバも遅いハンドシェイクもドメインを止めない |
TLS, TLSSocket | Tls.Engine 駆動、ハンドシェイク / read / write が I/O wait で待機 |
UDP, UDPSocket, UDPDatagram | データグラムソケット — bind: / bindHost:port:、sendTo:port:data:、receiveFrom / receiveFrom: (境界つき。期限を過ぎると raise)。受信した UDPDatagram は応答用に送信元 host / port を保持 |
WebSocket | accept:on:、isUpgrade:、readFrame:、writeText:to:、writeBinary:to:、writePong:to:、writeClose: |
JSON | parse:、serialize: |
JsonRpcServer, JsonRpcClient | JSON-RPC 2.0 ディスパッチ — 単一・バッチ・通知・エラーエンベロープ |
Remote | Remote at:for:id: — JSON-RPC 越しのリモートクラスへのプロキシ。リテラルのクラスで構築すると対象クラスのプロトコルに対して型付けされる (非リテラルの for: は動的型付けのまま)。接続は呼び出しごとに張り直さず host:port ごとに再利用し、取り出した接続を相手が閉じていた場合は新しい接続で 1 度だけ再試行する |
TeriosServer, ServiceDispatcher, Res | TERIOS 方式の serviceName / requestDto / responseDto / errorInfoList エンベロープ |
ランタイム
| クラス | 概要 |
|---|---|
File | read:、write:contents:、delete:、exists:、mkdirP:、removeDir: (空ディレクトリ)、rename:to:、listDir:、isDir:、isFile: |
OS | stdinLine、stdinAll、stdinPasswordLine (Windows コンソールおよび POSIX TTY でエコー抑制)、hostname、デフォルト付き環境変数。flush — printNl は行を終えて画面に渡すが print はどちらもしないので、print で書いたプロンプトは flush してから入力を待つ。時計 — time はカレンダー用の壁時計、monotonic (ms) と timeNs (ns) は単調時計で、経過時間と周期の測定に使う。サブプロセス & ウォッチドッグ — exec: / exec:input:、fire-and-forget な spawn: / spawn:output:、running: 生存確認、kill:、gracefulShutdown: |
Log | 構造化ロギング (info:、warn:、error:、key-value フィールド) |
データ
| クラス | 概要 |
|---|---|
DB, DBConnection, DbRow | SQLite (組み込み) — open:、exec:、exec:params:、query:、query:params:、close。データベースが拒否したステートメント (コンパイルできない、パラメータが合わない、制約に引っかかる) は Error try:onError: で捕捉できるエラーであってプロセスを終わらせず、接続はその後も使える。query: の各行は DbRow — 列は Maybe[String] として読み、asDict で Dict を取る側にそのまま渡せる |
Postgres, PostgresConnection | Dynlink プラグイン経由 PostgreSQL (インタプリタ / AOT) |
Mariadb, MariadbConnection | Dynlink プラグイン経由 MariaDB / MySQL (インタプリタ / AOT) |
Redis, RedisConnection | Dynlink プラグイン経由 Redis / Valkey (RESP2 over アクタースケジューラ統合 non-blocking TCP)、ping / get: / set:value: / set:value:ex: / del: / incr: / decr: / exists: / expire:seconds: / keys: / auth: / multi / exec / discard / cmd: / close |
TORM | Doma 互換 2-way SQL テンプレート + DAO / Entity マクロ DSL (dao: / entity: キーワード、imports: (Torm) で取り込むプラグイン)。dialect は PostgreSQL / MySQL / MariaDB / SQLite。DAO メソッドの答えは名前で決まる — count* はスカラー、exists* は Boolean、insert* / update* / delete* は影響行数、それ以外は行 — 名前にその接頭辞が無い文には { file: 'CreateUsers.sql', kind: #exec } と明示できる |
暗号
| クラス | 概要 |
|---|---|
Hash | SHA-256、SHA-512、HMAC-SHA-256 (hmacSha256:key:) |
Aes | AES-256-GCM |
Argon2 | Argon2id パスワード KDF (RFC 9106)、システム libargon2 経由 |
JWT | sign / verify |
Random | Random hex: — ランダム hex 文字列 |
Base64 | encode: / decode: は標準アルファベット + パディング、encodeUrl: / decodeUrl: は URL-safe アルファベットでパディング無し。decode は読めない入力を拒否し、間違った答えを返さない |
運用
| クラス | 概要 |
|---|---|
LpCache | サイズ / TTL 制約付きインメモリキャッシュ組み込み (start:、at:、at:put:、at:put:ttl:) |
LpChannel | プロセス内 pub/sub。subscribe:do: / publish:message: / subscriberCount |
Supervisor | monitor: + spawn: 上の one-for-one / one-for-all / rest-for-one 戦略 |
Metric | サービスレベル計測のための名前付きインメモリカウンタ |
Test | run:do:、assert:、assert:message:、assertEqual:to:、fail:、summary |
標準ライブラリモジュール
stdlib/ 配下に .lp ファイルとして同梱、module Main imports: (...) で読み込む。標準ライブラリは意図的に小さく保ち、以下が全モジュール。
コアプロトコル
comparable.lp—<ベースのデフォルト (>/min:/max:等) を持つComparableプロトコルenumerable.lp—do:ベースのデフォルトの上に乗るより広いEnumerableプロトコル (sum/count:/detect:ifNone:/anySatisfy:/joinWith:/flatCollect:等)。中核の反復メソッドはArrayとDictに組み込み済みなので、import するのは残りの分と、自作クラスに乗せる場合set.lp—Arrayを裏に持つ永続Set、add:/remove:/includes:ordered_dict.lp— 反復時に挿入順を保つDictバリアントassociation.lp— (key, value) ペアオブジェクト。Dict>>associations/Dict>>associationsDo:の要素型
サービスランタイム
http.lp—HTTP組み込みの上に乗せる accept ループと keep-alive 対応コネクションハンドラjson_rpc.lp— JSON-RPC 2.0 サーバ / クライアント (single / batch / notification / error)lp_server.lp— LP サービスを 1 行で JSON-RPC 2.0 エンドポイントとして公開sse.lp— HTTP/1.1 chunked 上の Server-Sent Events ライタcache.lp— 容量 (LRU) と任意 TTL 付きのアクター所有 KV キャッシュgrain.lp— 仮想アクター (grain):GrainServer/GrainStore/RedisGrainStore、ディレクトリ+オーナ+リースによる単一活性化、フェンストークン付きクロスノードリース、差し替え可能ストアsmtp.lp—SmtpConf(host / port / security / user / password / sender) とSmtpResult(ok / stage / detail)。プロトコル本体はsmtpプラグイン
コネクションプール (プラグイン — インタプリタ / AOT)
postgres_pool.lp—postgresプラグイン上の固定サイズプール、withConn:APImariadb_pool.lp—mariadbプラグイン上の固定サイズプール (MariaDB / MySQL)redis_pool.lp—redisプラグイン上の固定サイズプール (Redis / Valkey)
スーパーバイザ
supervision.lp—monitor:+spawn:の上に乗せる one-for-one / one-for-all / rest-for-one 戦略
TERIOS ツールキット (stdlib/terios/)
terios/rpc.lp— TERIOS RPC エンベロープディスパッチ (serviceName/requestDto/responseDto/errorInfoList)terios/auth.lp— bearer トークン認証スカフォールド + HTTP ミドルウェアterios/transformer.lp— 宣言的 JSON 変形エンジン (DataTransformer 移植)terios/validators.lp— クラス宣言のvalidates:キーワード向けの宣言的バリデータ
TORM ツールキット (stdlib/torm/)
torm/entity_listener.lp—prePersist:/postLoad:系フックを持つEntityListenerプロトコルtorm/select_options.lp— Doma 方式の不変 SELECT オプション (ページング / ロックヒント)