イントロ|インストール|使用法|構文|設定|について
1つのファイルから多くの言語で記述された多くのプログラムを実行するツール。
通常、複数のプログラミング言語を一度に練習するには、複数のファイルまたは複数のプロジェクト、おそらく複数のIDEが必要です。 Runmanyは、必要なプログラミング言語を使用して同じファイルに複数のプログラムを記述し、一度にそれらをすべて実行できるツールです。
runmanyはファイル拡張子として「.many」を使用するため、たとえば、 simple.manyと呼ばれるファイルに次の内容がある場合:
Python:
print("Hi")
JavaScript:
console.log("Hi")
C:
#include <stdio.h>
int main() {
printf("Hin");
return 0;
}
その後、ターミナルでrunmany simple.many行うと、python、javascript、およびcプログラムを実行するこの組織化された出力が生成されます。
************************************************************
1. Python
-------------------- output from line 1 --------------------
Hi
************************************************************
2. JavaScript
-------------------- output from line 4 --------------------
Hi
************************************************************
3. C
-------------------- output from line 7 --------------------
Hi
************************************************************
3/3 programs successfully run!
3/3 had the exact same stdout!
************************************************************
Argvとstdinは、.manyファイルで言語ごとに指定することもできます。また、言語の実行方法をカスタマイズして出力でカスタマイズできる設定がたくさんあります。
一般に、Runmanyは以下に使用できます。
全体的なRunmanyは、一度に複数のプログラミング言語でプレイしたい人にとって有用なツールです。
Pythonバージョン3.6以降がインストールされていることを確認してから、実行してください
pip install runmany
ターミナルで、Pypiから最新のRunmany Pythonパッケージをインストールします。次に、 runmany <filename> .manyファイルを実行するように動作するはずです。使用方法を実行する方法をご覧ください。
Runmanyは、コンパニオンマニーVSCODE拡張機能を使用してVSCODEで最適に機能します。これにより、.manyファイルの構文強調表示とそれらを実行する迅速な方法が提供されます。拡張機能を市場から無料でインストールするか、実行して:
code --install-extension discretegames.runmany
また、Runmanyは実際にプログラムを実行するために通訳者/コンパイラーを使用しているため、Runmanyをコンピューターにインストールして実行するプログラミング言語も必要です。
Runmanyには、次の言語のサポートが組み込まれています。
Ada、Bash、Batch、C、C#、C ++、Dart、Fortran、Go、Groovy、Haskell、Java、Javascript、Julia、Kotlin、Lisp、Lua、Mips、Pascal、Perl、Php、Powershell、Print、Python、Python 2、R、Racket、Ruby、Rust、Rust、Rust、Rust、Rust、Rust、Scala、vidati
つまり、これらの言語のいずれかが既にインストールされている場合、それが自動的にRunmanyで動作する可能性が十分にあります。
Runmany VSCODE拡張機能は、これらすべての言語に加えて、さらにいくつかの構文強調表示を提供します。
カスタム言語を追加し、組み込み言語の動作を変更し、さまざまなオペレーティングシステムで異なるものにする方法があります。詳細については、言語のカスタマイズを参照してください。
Print 、コードコンテンツをSTDOUTに単純に印刷するユーティリティ言語であり、 MIPS mars.jar現在の作業ディレクトリにあることを期待していることに注意してください。
pip install runmany動作しなかった場合は、 pip3 install runmanyまたはpython -m pip install runmanyまたはpython3 -m pip install runmany試してください。
Windowsでは、何も機能しない場合は、PythonのインストールとスクリプトディレクトリがPath環境変数にあることを確認し、端末を再起動して再試行する必要がある場合があります。
RunmanyはWindowsでPython 3.9で作成され、WindowsでPythonバージョン3.6、3.7、3.8、3.9、および3.10で徹底的にテストされています。また、LinuxとMacOSでは正常に動作するはずですが、特に他のプログラミング言語の通訳者/コンパイラを実行するコマンドに関しては、それらのオペレーティングシステムではあまり広くテストされていません。
Runmanyは現在、改善された.manyファイルの構文とその他の設定を備えたバージョン2にあります。古い1.0.3バージョンはまだPypiで利用できます。
myfile.manyという名前のランマニファイルを実行するには、ターミナルコマンドを使用します。
runmany myfile.many
ヘルプを取得して設定と出力ファイルを指定するためのオプションの引数もあります。
runmany [-h --help] [-s --settings <settings-file>] [-o --outfile <output-file>] <input-file>
<input-file>は、実行する必要がある必要なファイルです。<settings-file> 、言語の実行方法と出力のフォーマット方法を定義するオプションの.jsonファイルです。<output-file>は、出力を送信するオプションファイルです。省略すると、出力はstdoutになります。たとえば、 mysettings.jsonを設定してmyfile.manyを実行し、 myoutput.txtに出力を送信するコマンドは次のとおりです。
runmany -s mysettings.json -o myoutput.txt myfile.many
コマンドラインで設定ファイルが提供されると、入力ファイルに埋め込まれた設定セクションは無視されます。どちらも存在しない場合、または不足している設定の場合、default_settings.jsonはフォールバックとして使用されます。設定の詳細を参照してください。
.manyファイルとその出力のいくつかの例については、GithubまたはManyChallengesリポジトリの例フォルダーをチェックします。ここでは、Project Eulerなどのサイトのさまざまなコード課題が一度に多くの言語で解決されます。
Runmanyファイルの.many拡張機能は必要ありませんが、明確にするために推奨されます。
Runmanyは、次のようにPythonからインポートおよび使用できます。
from runmany import runmany , runmanys
# Run to stdout
runmany ( 'path/to/myfile.many' , 'path/to/mysettings.json' ) # settings JSON is always optional
# Run to output file
runmany ( 'path/to/myfile.many' , 'path/to/mysettings.json' , 'path/to/myoutput.txt' )
# Run to file object
with open ( 'path/to/myoutput.txt' , 'w' ) as output_file :
runmany ( 'path/to/myfile.many' , 'path/to/mysettings.json' , output_file )
# Run to string
output_string = runmanys ( 'path/to/myfile.many' , 'path/to/mysettings.json' )
print ( output_string ) runmany.runmanyとrunmany.runmanys関数の両方で、 from_string=True .manyファイルの引数をファイルパスの代わりに文字列として解釈し、設定JSON引数は.JSONファイルまたはJSONのようなPythonディクショナリーへのパスとして与えられる可能性がありNone 。コマンドラインからの実行と同様に、ここで設定を提供することは、.manyファイルに埋め込まれたすべての設定が無視されることを意味します。
コマンドライン引数のリストを取得する関数runmany.cmdline 、コマンドラインを直接使用する代わりにも存在します。
.manyファイル形式は、実行するファイルが与えられたときにRunmanyが期待するものです。
主に、.manyファイルは、それぞれが1つ以上のスニペットを含むセクションで構成されています。セクションはPython:またはStdin for Python:などの攻撃されていないヘッダーラインから始まります。最初のスニペットの内容は、コロンの後に表示され、下のインデントラインに表示されます。追加のスニペットをセクションに追加することができますAlso:ヘッダーと、新しいものが起動するとき、または攻撃されていないEnd.または、ファイルの終了に到達します。
A.Manyファイルは上から下まで実行され、セクションとスニペットが遭遇した順序で実行されます。特に、.manyファイルは、構文エラーがあるかどうかに関係なく実行されます。無効な構文は無視され、エラーメッセージで言及されます。
以下の例の例では、 Stdin for Python:セクションには2つのスニペット、 bar print('foo' + input()) bazがあり、 Python: SectionのPythonプログラムの標準入力になります。このファイルを実行すると、Pythonプログラムはbarで1回、 bazで1回、 foobarとfoobazのそれぞれの出力を提供します。
Stdin for Python:
bar
Also:
baz
End.
Python:
print('foo' + input())
End.
すべての.manyファイルの構文に関する詳細を読むか、すべての構文の例を持っているSyntax.manyをチェックしてください。
ラインの最初の非白文字の文字としての%% 、その行の終わりまでコメントします。
%% this is a comment
Python: %% this is not a comment
%% this is a comment
print(1) %% this is not a comment
ブロックのコメントはありませんが、Start&Stopは機能に近いです。
前述のように、.manyファイルは、ヘッダーから始まり、スニペットを含むセクションで構成されています。セクションには4つのタイプがあります。
<language>:または<language1>, <language2>, ...:Argv:またはArgv for <language1>, <language2>, ...:Stdin:またはStdin for <language1>, <language2>, ...:Settings:設定セクションを除くすべてのセクションには、ヘッダーに適用される言語のコンマ分離リストがあります。これらの言語は、ホワイトスペースを剥がされると、設定JSONの言語の"name"キーと一致する必要がありますが、ケースに敏感ではありません。 (「argv」や「stdin」などのキーワードはケースに敏感です。カスタム言語は、runmanyキーワードを名前として使用したり,:%!@文字を含めるべきではありません。
ヘッダーAlso:セクションとEnd.オプションでセクションを終了するために使用できます。
スニペットの内容は、スニペットヘッダーのコロン( :の後のホワイトスペースの後のテキストに加えて、次のヘッダーまたはEnd.またはファイルの終了。
したがって、このコードセクション
Python: import math
print(math.pi)
Also: print('pie')
print('cake')
内容がある2つのスニペットがあります:
import math
print ( math . pi ) print ( 'pie' )
print ( 'cake' )セクションの上または下の空白の行は、読みやすさのためだけであり、必要ありません。セクションの外側のコードなしコードは無効です。
コードセクションは、カンマ分離された言語のリストからすぐに始まり、そのスニペットコンテンツはそれらの言語で実行するプログラムです。
コンマ分離リストの1つの言語では、ポリグロットを書いていない限り、ほとんど常に十分です。
JavaScript:
console.log('Some code that will be run in JavaScript.')
Python, Python 2:
print('Some code that will be run in Python 3 then Python 2.')
Also:
print('Some more code that will be run in Python 3 then Python 2.')
Also:コードセクションのスニペットヘッダーは、セクションヘッダーを繰り返すための速記です。
Argvは議論のベクトルであり、別名、プログラムに送信されたコマンドライン引数です。
ArgvセクションはArgv:すべての言語に適用するか、 Argv for <language1>, <language2>, ...:に適用することができます。いずれにせよ、これらの言語の以前のARGVセットを上書きします。
Argvセクションの各スニペットは、セクションが適用される言語のプログラムに順番に送信される別のARGVです。これにより、多くのARMVを一度に簡単にテストできます。
Argv: argv sent to all languages
Argv for Python: 1
Also: 2
Also: 3
Python:
import sys
print(sys.argv[1])
この.manyコードは、pythonプログラムをArgv 1で2回3回実行します。
Argvが機能するためには、 $argvプレースホルダーを言語のコマンドに適切に配置する必要があります。
argvセクションとほぼ同じですが、標準の入力ストリームユーザーの場合、通常はテキストを入力します。
stdinセクションは、 Stdin:すべての言語に適用するか、 Stdin for <language1>, <language2>, ...:コンマ分離リストの言語に適用します。いずれにせよ、これらの言語の以前のstdinセットを上書きします。
Stdinセクションの各スニペットは、セクションが適用される言語のプログラムに順番に送信される別のStdinです。これにより、多くのstdinsを一度に簡単にテストできます。
Stdin: stdin sent to all languages
Stdin for Python: A
Also: B
Also: C
Python:
print(input())
この.manyコードはB stdin Aを使用してpythonプログラムを3回実行しますC
複数のArgvとstdinが1つの言語に適用される場合、すべてのArgvとすべてのStdinのすべての可能な組み合わせがその言語のプログラムに送信されます。
設定セクションはSettings:また、別の設定セクションに遭遇するまで使用される.manyファイルに設定JSONを埋め込むことができます。
これらの組み込み設定は、Runmanyが呼び出されたときに設定が特別に提供されていない場合にのみ使用されます。不足している設定は、default_settings.jsonの値にデフォルトです。
Settings:
{ "show_code": true }
Python:
print('this Python code will now be shown as part of the output')
設定ファイルへのパスのJSON文字列も、 Settings: "path/to/mysettings.json"のように使用できます。
Also:設定セクションのスニペットヘッダーは、セクションヘッダーを繰り返すための速記です。そのため、以前の設定をすぐに上書きするため、彼らはあまり目的に役立ちません。
パッティング!!セクションの開始時に、ヘッダーはセクション全体とそのすべてのスニペットを無効にします。
パッティング!スニペットヘッダーの開始時に、そのスニペットを無効にします。
!!Python:
print('this is disabled')
Also:
print('this is also disabled')
!Python:
print('this is disabled')
Also:
print('this is not disabled')
!Also:
print('this is disabled')
任意のセクションヘッダーが@@で始まる場合、オーディオ/ビデオ編集ソフトウェアの「ソロ」チェックボックスと同様に、それらのセクションのみが実行されます。
セクション内のスニペットヘッダーが@で起動する場合、セクションが実行されたときにそれらのスニペットのみが実行されます。
@@@Python:
print('this is run')
Also:
print('this is not run')
@Also:
print('this is run')
Python:
print('this is not run')
@Also:
print('this is also not run')
ファーストラインには3つの@@@ 、2つがセクションをソロ、もう1つが最初のスニペットをソロにしている方法に注意してください。
最後のSTART: .manyファイルでそれ自体で行の開始時に無視されます。
最初のSTOP. .manyファイルで単独で行の開始時に無視されます。
したがって、この.manyファイルのJavaScriptセクションのみが実行されます。
Python: print('unseen')
START:
JavaScript: console.log('seen')
STOP.
Python: print('unseen')
最大のSTART:そして一時STOP. .manyファイル。
Runmanyの設定は、Runmanyが呼び出されたときに提供されるか、.manyファイルに直接埋め込まれたJSONファイルによって定義されます。
JSONの設定では、Runmanyが実行できる言語とそれらの実行方法を定義します。また、Runmany出力がどのようにフォーマットされるかを定義します。
ファイルdefault_settings.jsonは、すべての設定のデフォルト値を保持します。これらのデフォルトは、提供されていないまたは埋め込まれた設定JSONに存在しない場合、自動的に使用されます。
ほとんどの設定は、基本設定JSONオブジェクトにグローバルに適用するために設定できる単純なフラグまたは値です(設定のリストを参照)が、JSONの4つの特別なキーを使用して、Runmanyが実行できる言語をカスタマイズしたり、より多くの言語を追加したりします。これらは"languages" 、 "languages_windows" 、 "languages_linux" 、 "languages_mac" ( "languages_<os>"が使用され、最後の3つを参照します)。これらは、オブジェクトの"name"キーに一致する言語の設定を指定する単一レベルのJSONオブジェクトの配列です。
システムと一致する"languages_<os>"配列は、言語の設定を決定するときに最優先事項であり、その後に"languages"アレイが続き、その後に"supplied_languages_<os>"と"supplied_languages"アレイが組み込まれています。 (これらの"supplied_languages..."配列は、設定JSONに決して設定しないでください。)言語は、ベースJSONオブジェクトの設定を最終的なフォールバックとして使用します。
たとえば、次の設定JSONは、PythonとPython 2を除くすべての言語で"show_code"設定(デフォルトではfalse)を設定します。また、Windowsの.manyファイルセクションヘッダーで使用できる新しい言語「python 3.10」も作成します。
{
"show_code" : true ,
"languages" : [
{ "name" : " Python " , "show_code" : false },
{ "name" : " Python 2 " , "show_code" : false }
],
"languages_windows" : [
{ "name" : " Python 3.10 " , "extension" : " .py " , "command" : " py -3.10 " }
]
} "name"キーは、言語配列内のすべてのオブジェクトに必要であり、 "command"と"extension"キーは常に新しいカスタム言語に提供する必要があります。ただし、すべての設定が言語ごとに適用することが理にかなっているわけではありません。たとえば、 "show_equal" .manyファイル全体の実行に適用されるため、ベースJSONオブジェクトでのみ理にかなっています。
記述されているすべての設定と、 "languages"および"languages_<os>"配列オブジェクトで言語ごとにオーバーライドできるかどうか:
| JSONキー | タイプ | デフォルト | オーバードライブル | 説明 |
|---|---|---|---|---|
"command" | 弦 | "echo NOCOMMAND" | はい | コマンド形式に従って、言語を実行するコンソールコマンド。 |
"extension" | 弦 | "" | はい | ドットを含む言語のファイル拡張機能。 |
"timeout" | フロート | 10.0 | はい | 各プログラムの数秒での時間制限、または時間制限なしでnull 。 |
"runs" | int | 1 | はい | 各プログラムが実行されます。最後の実行の出力のみが表示されます。 |
"stderr" | 弦 | "smart" | はい | "yes" /プログラムstderrとstdoutを組み合わせるのはtrue 。 "no" / falseプログラムstderrを非表示にします。プログラムにゼロの終了コードがない場合にのみSTDERを表示する"smart" / null 。 |
"spacing" | int | 1 | はい | 各実行後に追加する空白線の数。 |
"newline" | 弦 | "n" | はい | Code、Argv、およびStdin SnippetコンテンツのNewLinesが置き換えられるもの。またはOSデフォルトのnull 。 |
"tab" | 弦 | "t" | はい | タブ文字がコード、Argv、およびstdinスニペットコンテンツで置き換えられるもの。 |
"cwd" | 弦 | null | はい | プログラムを実行するための現在の作業ディレクトリ。相対的なパスかもしれません。 nullまたは"."現在の作業ディレクトリに変更はありません。 |
"minimalist" | ブール | false | いいえ | すべての出力を、仕切り、コード、ARGV、およびSTDINが表示されない最小限の形式で表示するかどうか。 |
"run_blanks" | ブール | false | いいえ | 純粋に空白からなる空白のスニペットが実行されるか無視されているかどうか。 |
"show_time" | ブール | false | はい | 実行時間が表示されるかどうか。 "runs"と組み合わせると、パフォーマンステストに役立ちます。 |
"show_command" | ブール | false | はい | 各プログラムを実行するために使用されるコマンドが表示されるかどうか。新しい言語のコマンドのデバッグに役立ちます。 |
"show_code" | ブール | false | はい | プログラムのソースコードが表示されているかどうか。 |
"show_argv" | ブール | true | はい | プログラムのargvが表示されるかどうか(存在する場合)。 |
"show_stdin" | ブール | true | はい | プログラムのstdinが表示されるかどうか(存在する場合)。 |
"show_output" | ブール | true | はい | プログラムの出力が表示されるかどうか。これには、stdout、および"stderr"に応じて、stderrが含まれます。 |
"show_runs" | ブール | true | いいえ | 実行のリストが表示されているかどうか。これは通常、出力の大部分です。 |
"show_stats" | ブール | true | いいえ | 成功と失敗がすべてが実行された後に示されるかどうか。 |
"show_equal" | ブール | true | いいえ | 一致するstdoutsがすべて実行された後に比較およびグループ化されるかどうか。 |
"show_errors" | ブール | true | いいえ | `のようなrunmanyエラーかどうか |
"strip_argv" | 弦 | "smart" | いいえ | "yes" / trueトレイトゥスニペットコンテンツをリーディングおよびトレーリングホワイトスペースのコンテンツをストリップします。 "no" / falseスニペットコンテンツをそのまま保持します。 "smart" / nullスニペット内のすべてのラインに、まるで1行にあるかのようにスペースと一緒に参加します。 |
"strip_stdin" | 弦 | "smart" | いいえ | "yes" / trueは、白人のみのラインのスニペットの開始と終了を剥奪します。 "no" / falseスニペットコンテンツをそのまま保持します。 "smart" / null "yes" / trueと同じように行うが、単一の新しいラインも追加します。 |
"strip_code" | 弦 | "smart" | はい | "yes" / trueは、白人のみのラインのスニペットの開始と終了を剥奪します。 "no" / falseスニペットコンテンツをそのまま保持します。 "smart" / null .manyファイルの上部をコードスニペットの開始として扱うためのnullすべての無関係な部分が空白になったため、プログラムのエラーは正しい行番号を報告します。 |
"strip_output" | 弦 | "no" | はい | "yes" / trueトゥストリッププログラムの主要および末尾の空白の出力。 "no" / falseプログラム出力をそのまま残す。 "smart" / null空のリーディングラインとトレーリングラインのプログラム出力をストリップします。 |
.manyファイル出力のコード、argv、およびstdin部分には、 "strip_code" 、 "strip_argv" 、および"strip_stdin"の値に関係なく、物事を視覚的にきれいに保つために空の行が剥がされていることに言及する必要があります。
"languages"または"languages_<os>"配列のオブジェクトの"command"キーは、その言語を実行するために実行される端子コマンドを定義します。
$fileや$dirなどのプレースホルダーをコマンドで使用して、実行する各プログラムのコードとファイルが保存されているディレクトリの一時ファイルを参照することができます。
| プレースホルダー | .../dir/file.extの一部 |
|---|---|
$rawdir | .../dir |
$dir | ".../dir" |
$rawfile | .../dir/file.ext |
$file | ".../dir/file.ext" |
$rawbranch | .../dir/file |
$branch | ".../dir/file" |
$name | file.ext |
$stem | file |
$ext | .ext |
$sep | / (OS固有) |
$argv | n/a -argvがここに挿入されます |
$code | N/A-生のスニペットコンテンツ |
一部のプレースホルダーは「引用」されており、一部のプレースホルダーはそうではないことに注意してください。 Windowsのような一部のオペレーティングシステムには、一時的なファイルへのパスにスペースがある場合があるため、正しい引用が重要です。
$コマンド文字列のどこにも存在しない場合、 $file $argvが追加されます。たとえば、コマンドpythonは暗黙的にpython $file $argvです。
コマンドの例については、default_settings.jsonで"supplied_languages"配列を確認してください。
私は、より多くのプログラミング言語を学びたいという願望によって、Runmanyを作るように駆り立てられました。私が試してみるたびに、私は常にその言語のまったく新しいプロジェクトを作成したり、IDEを切り替えたりする必要があるという私の迷惑と組み合わされました。
Project Eulerなどのサイトから複数の言語でコードチャレンジの解決を練習するために使用する予定です。
私の他のPythonパッケージのいくつかをチェックしてください。