1 ポイント 投稿者 GN⁺ 2024-08-31 | 1件のコメント | WhatsAppで共有
  • CIELは100% Common Lispベースの拡張Lispで、基本ツールを同梱する「batteries included」構成を掲げている
  • スクリプトは #!/usr/bin/env ciel のshebangで実行され、Lispコード内でJSONの読み込みHTTP GETをそのまま利用できる
  • 例では http:get で呼び出し、json:read-json でレスポンスを読み取り、print で出力する
  • ./myscript.lisp の実行例は、CIELスクリプトを通常の実行ファイルのように扱う流れを示している
  • Webドキュメントの残りの部分にはJavaScriptが必要で、JavaScriptなしで閲覧するにはGitHubリポジトリを確認する必要がある

CIELの基本的な性格

  • CIELは「拡張されたLisp」として紹介されている言語
  • Common Lispベース

    • 100% Common Lispベース
    • 基本ツールを含む batteries included 構成を特徴として掲げている

スクリプト実行例

  • サンプルコードでは、ciel 実行環境をshebangで指定している
#!/usr/bin/env ciel

(print
  (json:read-json
    (http:get "https://fakestoreapi.com/products?limit=5";)))
  • http:get でHTTPリクエストを送り、json:read-json でレスポンスJSONを読み取ったあと、print で出力する
  • 実行コマンドは次のとおり
$ ./myscript.lisp

ドキュメントとリポジトリへのアクセス

  • プロジェクトのリンクは GitHub で提供されている
  • Webドキュメントの残りの部分にはJavaScriptが必要で、JavaScriptを利用できない場合はGitHubリポジトリを見るよう案内されている

1件のコメント

 
GN⁺ 2024-08-31
Hacker Newsのコメント
  • 標準としてよく文書化された構成要素が、まるでコア言語の一部のようにすぐ使える形でまとめられ、しかも気の利いた名前まで付いているのは本当に重要
    気に入ったし、新しい標準ターゲットになる可能性もありそう。あとは良いマスコットかロゴがあれば十分

    • 名前を見ると アザラシの赤ちゃんであるべきな気がする
    • ドキュメントがどこにあるのか分からない。正直、ここにはあまり多くないように見えるし、ドキュメントというより README と呼ぶだろう
  • このアプローチは気に入った。「また別の Lisp」かと思っていたが、それはそれで格好よくても、すぐ使いたいとは思わなかったはず
    既にあるものを拡張して改善するのは、新しく始めるより難しくて面白みに欠けるかもしれないが、はるかに価値が高い。すでに Common Lisp を使っているし、これは特に入門者や小さなプロジェクトで、あの独特の奇妙さを少し減らしてくれそう

  • 高速で手軽な Lisp の話になるたびに Joker(https://github.com/candid82/joker)を持ち出したくなる
    Go で実装された Clojure 構文で、関係者ではないが本当に素晴らしいと思う。CIEL の例を Joker で書くなら (prn {:a 1 :b 2 :c 3}) で、ダウンロード・インストール・実行用の Gist は https://gist.github.com/lsh-0/f7df23777ef35a8cc3d85e1dcbf0eb...
    スクリプト全体の実行は 2.1 秒、例の実行自体は 0.007 秒だった

  • Babashka(https://babashka.org/)が取ったアプローチが、今や Common Lisp の世界にも現れたのはうれしい

  • Safari で見ても同じ Javascript 警告が出る。拡張は何も有効にしていない
    Chrome で確認すると、それ以外はまさに使いたい形に見える。CL 標準ライブラリはすでに少し過積載気味に感じるが、「バッテリー同梱」に進むなら Alexandria や Bordeaux のようなものが欠けていたので、この選択は気に入った。やや断片化した CL エコシステムに「ベストプラクティス」や標準化の感覚を与えている

  • 素晴らしい。個人的には Alexandria, Serapeum, Dexador, Bordeaux Threads と JSON 関連ツールを入れたイメージを使っているが、他の人たちも似たターゲットとして使える何かがあると便利かもしれない
    議論ばかりが過剰だった CDR 提案や、それ以前の CL21 より成功の可能性が高そうに見える。デフォルトで設定されている reader macro が多いのかも気になる

    • ターミナル REPL では 1 つだけ有効で、CIEL を普通の Lisp ライブラリとして使うときは何も有効にならない
      デフォルトで readtable をいじりたくないから。エディタ REPL でシェルパススルーを有効にする方法は下を見ればよい
    • コードをざっと見たところ、REPL でシェルに抜ける用途としては clesh[1] だけがデフォルトで有効らしい
      1: https://github.com/Neronus/Clesh
  • ncurses と SDL コアをビルドするラッパーができれば、いつか lem が CIEL の上でそのまま動き、本当の Lisp 環境ができるのではないかと思う
    https://news.ycombinator.com/item?id=41357409

  • Ron Garret が 2010 年に作った別の Lisp、Ciel(https://pldb.io/concepts/ciel.html)とは違うようだ。彼はロケット科学者でもある(https://flownet.com/ron/)

  • バイナリに簡単にコンパイルできるのだろうか? 標準的な CL のやり方を使えばよさそうではある
    CIEL custom REPL!ls のような シェルパススルーがあるのは気の利いた機能

    • かなり便利。ターミナルでシェルコードと Lisp コードを混ぜて使う高度な Lisp シェルが欲しいなら lish を見るとよい: https://github.com/nibbula/lish/
      作者はまだ「準備完了」や「十分に良い」とは見ていないが、かなり進んでいる。POSIX シェルの https://github.com/bradleyjensen/shcl もある。いつものように、さらに多くの一覧は https://github.com/CodyReichert/awesome-cl#shells-shells-int... で見られる
    • 今は CIEL をライブラリとして使って 標準的な方法でビルドしている
      ciel build コマンドを追加したい
    • 間違っていたら申し訳ないが、これはかなり標準的な機能だと思っていた。IPython カーネルもまったく同じ形式を使うし、完全なシェルが必要なら xonsh も使える
      Python が REPL 実装では変わり種なのか気になる。REPL は Python と e-lisp しか慣れていない
    • Ctrl+Z では何が足りないのか?
  • SBCL にライブラリを追加したもののように見える。作者の vindarel は HN にいる

    • こんにちは o/ CIEL の目標がうまく伝わっているといい。毎日使っていて、エディタ内ではコアイメージを使い、製品もこれでデプロイしている
      新しいプロジェクトを始めるとき、外の世界とやり取りしなければならないとき、Python の複雑さなしに小さなものを書いてサーバーに載せたいときに、多くの時間を節約してくれる。もちろん Django の代替は難しいが、CRUD 作業向けの自動 DB ダッシュボードも始めていて、まだ未公開だが進行中
      クライアント業務に CL を段階的に統合してきたし、CIEL はそのためのもう 1 つの手段だ。CL を実際に使うために。私のプロジェクトに CL の超能力が絶対必要というわけではないが、開発・デプロイ・監視にはその力が欲しい
      今日いくつかの問題を修正して v0.2 をリリースした: https://github.com/ciel-lang/CIEL/releases/tag/v02 要点は、CIEL のインストールが特に Mac でもっと簡単であるべきということ。今ではシステム依存関係がかなり減った
      それでも特定のプラットフォームでインストールが難しいなら、issue に詳細を送ってもらえると助かる。要するに、CIEL が皆さんの CL の旅をもっと簡単で滑らかなものにしてくれることを願っている。いろいろなことを突き止めるのにどれだけ時間がかかったか、想像もつかないはず。今はそれがここに用意され、パッケージ化されている :-]