REPL の使い方
今どきのプログラミング言語ってどれも REPL (interactive モード) があって当たり前だよね
っと思ったのでどの言語があるか調べてみたメモ
対応してないの合わせて全 30 言語
REPL を起動して 1 + 1 を計算させて閉じるだけです
Lisp 系でもなければみんな本当に 「1 + 1」 って入力してるだけ
ツールによっては REPL の終了方法が用意されてないのもあるので
ない場合はプログラムの自分のプロセスを終了するか Ctrl-C/Crtl-D で終了します
一部 REPL といいつつ Evaluate するだけで Print してくれないので自分で print 命令を出しています
PHP とか Perl とか
各環境は C#, F# は Windows10 の VisualStudio 2017 Community で それ以外は fedora27 で実行したものです
基本は dnf の fedora 標準パッケージで最新のはずです
Racket は RPM Sphere からなので古めで Elm は npm から
Kotlin, Ring, Io は公式サイトから最新のバイナリを zip 系または rpm で取得しました
ところで 以前言語いろいろ書いたときは書いたのに調べてないのもあります
Pascal とか Fortran とか HSP とか Basic とか Dart とか AS3 とか今後使うどころか見る機会だってまず無いでしょうし
っと思ったのでどの言語があるか調べてみたメモ
対応してないの合わせて全 30 言語
REPL を起動して 1 + 1 を計算させて閉じるだけです
Lisp 系でもなければみんな本当に 「1 + 1」 って入力してるだけ
ツールによっては REPL の終了方法が用意されてないのもあるので
ない場合はプログラムの自分のプロセスを終了するか Ctrl-C/Crtl-D で終了します
一部 REPL といいつつ Evaluate するだけで Print してくれないので自分で print 命令を出しています
PHP とか Perl とか
各環境は C#, F# は Windows10 の VisualStudio 2017 Community で それ以外は fedora27 で実行したものです
基本は dnf の fedora 標準パッケージで最新のはずです
Racket は RPM Sphere からなので古めで Elm は npm から
Kotlin, Ring, Io は公式サイトから最新のバイナリを zip 系または rpm で取得しました
ところで 以前言語いろいろ書いたときは書いたのに調べてないのもあります
Pascal とか Fortran とか HSP とか Basic とか Dart とか AS3 とか今後使うどころか見る機会だってまず無いでしょうし
JavaScript
ブラウザなら F12 キーの開発者ツールNode.js は node コマンド
$ node
> 1 + 1
2
> .exit
Python2/3
python, python3 コマンド$ python
Python 2.7.14 (default, Mar 14 2018, 13:36:31)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 + 1
2
>>> exit()
$ python3
Python 3.6.5 (default, Apr 4 2018, 15:01:18)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 + 1
2
>>> exit()
C#
VS についてる csi コマンド>csi
Microsoft (R) Visual C# インタラクティブ コンパイラ バージョン 2.3.2.61928
Copyright (C) Microsoft Corporation. All rights reserved.
詳細については、「#help」と入力します。
> 1 + 1
2
> Environment.Exit(0)
VS 中なら 「C# インタラクティブ」 を開く
F#
VS についてる fsi コマンド> fsi
Microsoft (R) F# Interactive Version 4.1
Copyright (c) Microsoft Corporation. All Rights Reserved.
ヘルプを表示するには次を入力してください: #help;;
> 1 + 1;;
val it : int = 2
> #quit;;
VS 中なら 「F# インタラクティブ」 を開く
Ocaml
ocaml コマンド$ ocaml
OCaml version 4.05.0
# 1 + 1;;
- : int = 2
# #quit;;
Rust
非公式の rusti古いバージョンでしか動かないので rustup でバージョン指定
$ rustup run nightly-2016-08-01 rusti
rusti=> 1 + 1
2
rusti=> std::process::exit(0)
Clojure
clojure コマンド$ clojure
Clojure 1.7.0
user=> (+ 1 1)
2
user=> (System/exit 0)
Scheme
guile コマンド$ guile
GNU Guile 2.0.14
Copyright (C) 1995-2016 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> (+ 1 1)
$1 = 2
scheme@(guile-user)> ,q
Racket
racket コマンド$ racket
Welcome to Racket v6.7.
> (+ 1 1)
2
> ,quit
Haskell
ghci コマンド$ ghci
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Prelude> 1 + 1
2
Prelude> :quit
Leaving GHCi.
elm
elm-repl コマンド$ elm-repl
---- elm-repl 0.18.0 -----------------------------------------------------------
:help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>
--------------------------------------------------------------------------------
> 1 + 1
2 : number
> :exit
Erlang
erl コマンド$ erl
Erlang/OTP 19 [erts-8.3.5.4] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.3.5.4 (abort with ^G)
1> 1 + 1.
2
2> q().
ok
3>
Elixir
iex コマンド$ iex
Erlang/OTP 19 [erts-8.3.5.4] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Interactive Elixir (1.4.5) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 1 + 1
2
iex(2)> System.halt(0)
Ruby
irb コマンド$ irb
irb(main):001:0> 1 + 1
=> 2
irb(main):002:0> exit()
Perl5/6
perl コマンドに -de0 オプションをつけるデバッガを使って REPL 機能を使う
-d でデバッガ起動
-e0 で無意味なプログラム 「0」 を実行させてデバッグモードに入る
表示するためには print が必要
$ perl -de0
Loading DB routines from perl5db.pl version 1.51
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(-e:1): 0
DB<1> print 1 + 1
2
DB<2> q
perl6 は perl6 コマンドだけ
$ perl6
You may want to `zef install Readline` or `zef install Linenoise` or use rlwrap for a line editor
To exit type 'exit' or '^D'
> 1 + 1
2
> exit
PHP
php コマンドに -a オプション表示するためには echo などが必要
$ php -a
Interactive shell
php > echo 1 + 1;
2
php > exit
Lua
lua コマンド$ lua
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
> 1 + 1
2
> os.exit()
R
R コマンド$ R
R version 3.4.3 (2017-11-30) -- "Kite-Eating Tree"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)
R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。
R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
> 1 + 1
[1] 2
> q()
Save workspace image? [y/n/c]: n
Julia
julia コマンド$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: https://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.6.0 (2017-06-19 13:05 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-redhat-linux
julia> 1 + 1
2
julia> exit()
Prolog
gprolog コマンド$ gprolog
GNU Prolog 1.4.4 (64 bits)
Compiled Aug 3 2017, 08:15:35 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
| ?- X is 1 + 1, write(X).
2
X = 2
(1 ms) yes
| ?- halt.
Io
io コマンド$ io
Io 20110905
Io> 1 + 1
==> 2
Io> exit
C++
cling コマンドroot というプロジェクトで作られてるもの
$ cling
****************** CLING ******************
* Type C++ code and press enter to run it *
* Type .q to exit *
*******************************************
[cling]$ 1 + 1
(int) 2
[cling]$ .q
Groovy
groovysh コマンド$ groovysh
Groovy Shell (2.4.8, JVM: 1.8.0_162)
Type ':help' or ':h' for help.
-------------------------------------------------------------------------------
groovy:000> 1 + 1
===> 2
groovy:000> :q
Scala
scala コマンド$ scala
Welcome to Scala version 2.10.6 (OpenJDK 64-Bit Server VM, Java 1.8.0_162).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 1 + 1
res0: Int = 2
scala> :q
kotlin
kotlinc コマンド$ kotlinc
Welcome to Kotlin version 1.2.31 (JRE 1.8.0_162-b12)
Type :help for help, :quit for quit
>>> 1 + 1
2
>>> :quit
Swift
swift コマンド$ swift-4.1.1-RELEASE-ubuntu16.04/usr/bin/swift
Welcome to Swift version 4.1.1 (swift-4.1.1-RELEASE). Type :help for assistance.
1> 1 + 1
$R0: Int = 2
2> :quit
※ Ubuntu 系ディストリビューションでやって追記しました
Ring
付属のアプリケーションとして REPL が用意されてるのでそれを実行表示するには see や「?」が必要
$ ring Fayed_Ring_1.7_All_Platforms_Fedora/ring/applications/ringrepl/repl.ring
The Ring programming language version 1.7
REPL (Read-Eval-Print-Loop)
ring:> ? 1 + 1
2
ring:> exit
できない
安定していてコレといえる REPL 環境がない言語- D
- Ceylon
- Go
まとめ
たいていのツールは標準でついてるファイルを与えず実行すれば インタラクティブモードになるのが多い
PHP や Perl はコマンドのオプションでインタラクティブモードを指定必要
C# や Ruby などは別名コマンドだけど標準のものなので実行環境のインストールで一緒についてる
C++, Rust などは標準ツールとは違うサードパーティ製だけど実質コレみたいなものがある
Rust は REPL に必要な機能が廃止になって古いバージョンでしか動かなくて サードパーティ製ならではの問題って感じ
D や Ceylon は個人プロジェクトの完成してるかすら怪しいのなら一応でてきた
Go は活発な感じの個人プロジェクトがいくつかあったけどそれぞれ使える機能使えない機能があったりでベータの域を出ないものみたい