HN 日本語サマリー

← 一覧へ戻る
プログラミング

TXR: 便利なデータ加工のためのオリジナル新プログラミング言語

TXR: An Original, New Programming Language for Convenient Data Munging (nongnu.org)

29 pointsby andsoitis3 コメント

要約

TXRは、データ加工(munging)を容易にするために設計された、新しいオリジナルのプログラミング言語です。この言語は、データ処理タスクを効率的に行うための機能を提供することを目指しています。

全文翻訳

TXR: 便利なデータ処理のための、オリジナルで新しいプログラミング言語

Kaz Kylheku <kaz@kylheku.com>

クイックリンク

それは何ですか?

TXRは、ドキュメント全体のマッチングと抽出言語としての情報収集能力と、バターを熱いナイフで切るように問題を解決する強力なデータ処理言語という二重のペルソナを持ち、日々のハッキングの課題に取り組むための、実用的で便利なツールです。多くのタスクは、システムのプロンプトから直接TXRの「ワンライナー」で達成できます。TXRは比較的新しく、プロジェクトは2009年に開始されました。

TXRはもはや小さな言語ではないため、簡単な紹介をすることは困難です。大規模なUnix manページ形式のリファレンスマニュアルのPDF版は、インデックスや目次を除いて、778 881 900 951ページにも及びます。TXRで与えられたデータ処理問題を解決する方法は数多くあり、多くのスキルやテクニックを使用できます。

ランダムな推薦の声

"TXR Lisp: コーディングを楽しく、スピーディーに!💥 簡潔でありながら強力で、プログラミング言語のチートシートを持っているようなものです!😎"
(ユーザー AI TechTree による Twitter/X の投稿)

"テキスト処理に最適なLispはTXR Lispです。[...] しかし、それは非常に深いウサギの穴であり、すべてを理解したいなら、暇な時間以外は何もない方が良いでしょう"
(4Chan の コメント より、匿名)

"これまでのところ、MALを実装するために様々な言語をテストした中で、txr-lispが最も人間工学的に感じられました"
(IRCチャンネル #Lisp でのユーザー wasamasa による コメント)

"私の銀行明細書はPDFですが、pdftotextでASCIIに変換できます。しかし、これはドキュメントの構造を破壊するため、正規表現(PCREでさえ)を使用したデータ抽出は非常に困難ですが、txrを使用するとずっと簡単になります。"
(HackerNews のユーザー vcdimension による コメント)

"最近TXRを発見しました。比較的若い言語であるにもかかわらず、非常に感銘を受けています。そして、manページ/マニュアルは本当に素晴らしいです。"
(GitHub のユーザー alphapapa による コメント)

小規模、効率的、低依存性

TXR Lispは、レジスタベースの仮想マシンコードへのコンパイルをサポートしています。個々の関数やファイル(.tl から .tlo へ)をコンパイルできます。コンパイルされたファイルは連結して load できます。個々のコンパイル済みファイル、および連結されたファイルは gzip で圧縮できます。

ネイティブではありませんが、コンパイラは最適化を行います。ジャンプスレッディング、デッドコード削除、定数畳み込み、データフロー最適化などの最適化を実行します。コンパイラは積極的に改善されています。

アプリケーションのデプロイも可能です。save-exe 関数は、指定した名前でTXR実行可能ファイルのコピーを作成し、起動時に実行される式を含みます。これは通常、アプリケーションの残りを同じディレクトリ相対でロードするために使用されます。実行可能ファイルは、必要なすべてのライブラリモジュールを伴う必要があります。詳細はリファレンスマニュアルに記載されています。

TXRはリソース面で軽量です。実行可能ファイルは約1.7メガバイトのコード(GNU Awkの2倍強)であり、サテライトライブラリモジュールはさらに1.5メガバイトを追加します。libffi 以外の外部依存関係はありません。プロジェクト全体は簡単にビルドできます。必要なのはGNU MakeとGCCまたはClang、そしてconfigureスクリプトが必要とするいくつかのシェルユーティリティだけです。生成されるソースがいくつかありますが、これらは出荷されるため、それらのためのツールは必要ありません。

TXRはメモリフットプリントが小さいです。実行可能ファイルがインタラクティブプロンプトまで起動されたときのメモリ使用量は、GNU Bashに似ています。コンパイラを含むTXR Lispコードの標準ライブラリをコンパイルする際、TXRはピークで約18メガバイトしか必要としません。

革新的でありながら、伝統的なルーツを持つ

TXRは、そのうちのいくつかはオリジナルである多くの異なるアイデアの融合であり、Common Lisp、Scheme、Awk、M4、POSIX Shell、Prolog、Ruby、Python、Arc、Clojure、S-Langなど、多くの言語から影響を受けています。

TXRは、別々に使用することも、一緒に絡み合わせることもできる2つの言語で構成されています。すなわち、TXRパターン言語とTXR Lispです。

TXRパターン言語とUnixユーティリティAwkとの比較が可能です。どちらも、入力をスキャンするための暗黙的で便利な方法を提供します。Awkがファイルを暗黙的に読み込み、それをレコードとフィールドに分割して位置変数としてアクセス可能にするのに対し、TXRは入力処理を暗黙的に行うまったく異なる方法、すなわちネストされた再帰的なパターンマッチング表記法を通じて変数を束縛します。このアプローチは、区切り文字付きフィールドを比較的便利に処理しながらも、雑然とした、緩く構造化されたデータ、または異なるセクションで異なる正規性を示すデータなどを処理するように一般化されます。TXR(パターン言語)の構文は命令文ではなく、パターンマッチングディレクティブです。各構文は、マッチング、失敗、または例外のスローで終了します。検索とバックトラックの動作は暗黙的です。構造化された名前付きブロックと非ローカル終了、構造化された例外処理、名前付きパターンマッチング関数、その他多数の機能があります。TXRのパターン言語は文法を解析するのに十分強力でありながら、些細なタスクにアドホックに使用するのも簡単です。Awkについて言えば、TXRは実際にはAwkの実装をLispマクロの形で含んでおり、これは次のトピックにつながります。

TXRのもう一つの言語はTXR Lispです。これは既存のCommon LispやSchemeの実装ではなく、多くの新しいアイデアを含む新しい方言です。TXR Lispは機能が豊富で、簡潔で便利な表現力に重点を置いています。Lispの遺産に完全に忠実でありながら、新しいスクリプト言語や関数型言語からヒントを得ています。

主流のLispユーザーは、TXRとの間でスキルがうまく転送されることに気づくでしょう。TXR Lispで他のLispを使用する際に欠けている機能や、その逆も同様に存在するでしょう。

TXRプロジェクトはプログラムの簡潔さを重視しています。プログラムは短く、明確であるべきです。問題に対する良い解決策を思いつくのに苦労しているなら、TXRプロジェクトはあなたからの話を聞きたいと思っています。メーリングリストに連絡してください。別の言語でプログラムが著しく明確かつ短くなる場合は、それはプロジェクトにとって興味深いことです。TXRはそのテクニックまたは同等のものを吸収できるかもしれません。

ヘルプが必要

TXRプロジェクトは、機能開発を行うハッカーを探しています。

TXRはクリーンで理解しやすく、保守しやすい内部構造を持っており、作業するのが楽しいです。HACKING ガイドを必ず読んでください。

例

ここでは、Rosetta Code の多くの問題に対する TXR ソリューションのコレクションを紹介します。

バイトコード最適化のケーススタディ

これは、TXR Lisp の最適化コンパイラの機能の一部を強調する記事です。

寄付をする

TXRは、あらゆる種類の商用および非商用利用を許可する2条項のBSDライセンスの下で配布されているため、真にフリーソフトウェアです。

TXRがあなたの武器庫の中で価値のあるツールだと感じたなら、感謝の意を示し、サポートする一つの方法があります!このようなものを開発するには、数え切れないほどの時間が必要です。

警告: Homebrew に関して

警告: Homebrew でパッケージ化されたTXRを使用しないでください!TXRプロジェクトは、Homebrew のTXRパッケージに不安定で信頼性の低い実行可能ファイルが含まれているという報告を受けています。ユーザーからは、Homebrew のTXRパッケージ自体をビルドすることさえできない(問題の調査のため)という報告もあります。Homebrew のビルド式 txr.rb は make tests を実行しないため、ビルドが成功しても、それが良好であるとは検証されません。Homebrew は不安定性を引き起こす可能性のあるコンパイラのコード生成機能を使用していると疑われています。