◆ F#

この記事でパイプライン演算子のことを書きましたが そういえばこの演算子って何から始まったんだろうと疑問に思いました
本当の最初はシェルの 「|」 だと思います

$ echo abcdefghijklm | wc -m
14

Windows と Unix 系のどっちが先かとかはわかりませんが名前と機能的にコマンドラインのこの機能から来たものでしょう
それがプログラミング言語だと 「|>」 と矢印風になっています
これはどの言語から始まったのかな と気になったので調べてみました

最初に知ったパイプライン演算子

私が最初にこの機能を知ったのは Elm です
Haskell の $ を使いたくて使ったらエラーになってどうすればいいんだろうと調べて <| と |> の演算子があることを知りました

この演算子の意味を知ってから そういえば F# で

foo() |> ignore

と書いていたのがあったなと思い出して パイプライン演算子だったんだと気づきました
F# は 1000 行も書いたことない程度なので
「|> ignore」 は副作用起こすだけで返り値捨てるときに使う構文
だと思ってました

実際には ignore は関数で

ignore(foo())

と書くのと一緒でした
返り値のある関数を実行したのに返り値を受け取らないのがダメなので ignore は引数を受け取って適当な変数に入れるだけ入れて 何もせず何も返さないという関数なのかな

パイプライン演算子が使える言語は

そんな感じで私が知ってるのは Elm と F# と Hack くらいで Elixir (だったかな)では 「/>」 で使えて今は他と同じ 「|>」 で使えると聞いた気がするというものです
JavaScript の Proposal を見てみたら他の使える言語がいろいろ載っていました
https://github.com/tc39/proposal-pipeline-operator/

This proposal introduces a new operator |> similar to F#, OCaml, Elixir, Elm, Julia, Hack, and LiveScript, as well as UNIX pipes.

どの言語も比較的新し目な気がします
Elixir 以降に上げられてるのは特に最近です

最古のものは

ここに上がっているのより古い言語がないなら F# と OCaml のどちらかが最初にパイプライン演算子を実装した言語のようです
F# は VisualStudio で見かけたのは比較的最近ですが 結構前から一応あったと思います
OCaml は全然詳しくないのですが 確か F# は OCaml を参考にしていて OCaml に近い構文と聞いた覚えがあります
ということは OCaml が最初でしょうか

少し調べてみたのですが どの言語が最古と書いてある情報はみつかりませんでした
ただパイプライン演算子についての記事では F# や Elixir はよく見たのですが OCaml はほとんどみかけませんでした
もし最初に実装されたのが OCaml ならこんなに少ないのは変です

それぞれの公式サイトのリファレンスとかを見てみました
F# は |> 演算子がどのバージョンから使えるという情報はなく初期からの機能の可能性が高めです
Google の期間指定で検索してみると 2006 年の F# 紹介記事では pipeline operator が載っていました
Wiki によると F# 1.x が 2005 年リリースで 2.0 は 2010 年リリースなので初期から使えたと考えて良さそうです

OCaml は 90 年代からある言語のようですが ほとんどのところで |> 演算子は紹介されていなくて後から追加された機能の可能性が高そうです
ドキュメントをみると Pervasives というモジュールにバージョン 4.01 で追加されたようです
このモジュールは自動で読み込まれるモジュールで実質言語の標準機能みたいなものです
OCaml の 4.01 が出たのは 2013 年のようなので F# が OCaml の |> 演算子を取り入れたのではなく 逆で OCaml が F# の機能を取り込んだようです

まとめ

F# が最初で F# がリリースされた 2005 年以降の比較的新しめな機能みたいです