Skip to content

Commit 48d5e8c

Browse files
Add back Japanese documentation
1 parent c2d3994 commit 48d5e8c

File tree

16 files changed

+2163
-6
lines changed

16 files changed

+2163
-6
lines changed

fcs/docsrc/content/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Overview
2+
title: F# Compiler Services
33
category: explanation
44
menu_order: 1
55
---

fcs/docsrc/content/ja/compiler.fsx

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
(**
2+
---
3+
category: tutorial
4+
title: コンパイラの組み込み
5+
menu_order: 8
6+
language: ja
7+
8+
---
9+
*)
10+
(*** hide ***)
11+
#I "../../../../artifacts/bin/fcs/Release/net461"
12+
(**
13+
コンパイラの組み込み
14+
====================
15+
16+
このチュートリアルではF#コンパイラをホストする方法を紹介します。
17+
18+
> **注意:** 以下で使用しているAPIは実験的なもので、
19+
新しいnugetパッケージの公開に伴って変更される可能性があります。
20+
21+
> **注意:** F#コンパイラをホストする方法はいくつかあります。
22+
一番簡単な方法は `fsc.exe` のプロセスを使って引数を渡す方法です。
23+
24+
---------------------------
25+
26+
まず、F# Interactiveサービスを含むライブラリへの参照を追加します:
27+
*)
28+
29+
#r "FSharp.Compiler.Service.dll"
30+
open FSharp.Compiler.SourceCodeServices
31+
open System.IO
32+
33+
let scs = FSharpChecker.Create()
34+
35+
(**
36+
次に、一時ファイルへコンテンツを書き込みます:
37+
38+
*)
39+
let fn = Path.GetTempFileName()
40+
let fn2 = Path.ChangeExtension(fn, ".fs")
41+
let fn3 = Path.ChangeExtension(fn, ".dll")
42+
43+
File.WriteAllText(fn2, """
44+
module M
45+
46+
type C() =
47+
member x.P = 1
48+
49+
let x = 3 + 4
50+
""")
51+
52+
(**
53+
そしてコンパイラを呼び出します:
54+
*)
55+
56+
let errors1, exitCode1 = scs.Compile([| "fsc.exe"; "-o"; fn3; "-a"; fn2 |]) |> Async.RunSynchronously
57+
58+
(**
59+
60+
エラーが発生した場合は「終了コード」とエラーの配列から原因を特定できます:
61+
62+
*)
63+
File.WriteAllText(fn2, """
64+
module M
65+
66+
let x = 1.0 + "" // a type error
67+
""")
68+
69+
let errors1b, exitCode1b = scs.Compile([| "fsc.exe"; "-o"; fn3; "-a"; fn2 |]) |> Async.RunSynchronously
70+
71+
if exitCode1b <> 0 then
72+
errors1b
73+
|> Array.iter (printfn "%A")
74+
75+
(**
76+
77+
動的アセンブリへのコンパイル
78+
============================
79+
80+
コードを動的アセンブリとしてコンパイルすることもできます。
81+
動的アセンブリはF# Interactiveコードジェネレータでも使用されています。
82+
83+
この機能はたとえばファイルシステムが必ずしも利用できないような状況で役に立ちます。
84+
85+
出力ファイルの名前を指定する "-o" オプションを指定することは可能ですが、
86+
実際には出力ファイルがディスク上に書き込まれることはありません。
87+
88+
'execute' 引数に 'None' を指定するとアセンブリ用の初期化コードが実行されません。
89+
*)
90+
let errors2, exitCode2, dynAssembly2 =
91+
scs.CompileToDynamicAssembly([| "-o"; fn3; "-a"; fn2 |], execute=None) |> Async.RunSynchronously
92+
93+
(**
94+
'Some' を指定するとアセンブリ用の初期化コードが実行されます。
95+
*)
96+
let errors3, exitCode3, dynAssembly3 =
97+
scs.CompileToDynamicAssembly([| "-o"; fn3; "-a"; fn2 |], Some(stdout,stderr)) |> Async.RunSynchronously
98+

fcs/docsrc/content/ja/corelib.fsx

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
(**
2+
---
3+
category: how-to
4+
title: FSharp.Core.dll についてのメモ
5+
menu_order: 3
6+
language: ja
7+
8+
---
9+
*)
10+
(*** hide ***)
11+
#I "../../../../artifacts/bin/fcs/net461"
12+
(**
13+
コンパイラサービス: FSharp.Core.dll についてのメモ
14+
==================================================
15+
16+
あなたのアプリケーションとともに FSharp.Core を配布する
17+
-------------------------------------------------------
18+
19+
FSharp.Compiler.Service.dll を利用するアプリケーションまたはプラグイン・コンポーネントをビルドする際、普通はアプリの一部として FSharp.Core.dll のコピーも含めることになるでしょう。
20+
21+
例えば、 ``HostedCompiler.exe`` をビルドする場合、普通はあなたの ``HostedCompiler.exe`` と同じフォルダに FSharp.Core.dll (例えば 4.3.1.0)を配置します。
22+
23+
動的コンパイルや動的実行を行う場合、FSharp.Core.optdata と FSharp.Core.sigdata も含める必要があるかもしれませんが、これらについては下記の指針をご覧ください。
24+
25+
あなたのアプリケーションにリダイレクトをバインドする
26+
----------------------------------------------------
27+
28+
FSharp.Compiler.Service.dll コンポーネントは FSharp.Core 4.3.0.0 に依存しています。通例、あなたのアプリケーションはこれより後のバージョンの FSharp.Core をターゲットにしており、FSharp.Core 4.3.0.0 をあなたのアプリケーションで用いる FSharp.Core.dll の最終バージョンにちゃんと転送させるように[バインド リダイレクト](https://msdn.microsoft.com/ja-jp/library/7wd6ex19(v=vs.110).aspx)が必要になるでしょう。バインド リダイレクト ファイルは通常ビルドツールによって自動的に生成されます。そうでない場合、下記のようなファイル(あなたのツールが ``HostedCompiler.exe`` という名前で、バインド リダイレクト ファイルが ``HostedCompiler.exe.config`` という名前の場合)を使うことが出来ます。
29+
30+
<?xml version="1.0" encoding="utf-8" ?>
31+
<configuration>
32+
<runtime>
33+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
34+
<dependentAssembly>
35+
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
36+
<bindingRedirect oldVersion="2.0.0.0-4.3.0.0" newVersion="4.3.1.0"/>
37+
</dependentAssembly>
38+
<dependentAssembly>
39+
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
40+
<bindingRedirect oldVersion="1.0.0.0-1.2.0.0" newVersion="1.2.1.0" />
41+
</dependentAssembly>
42+
</assemblyBinding>
43+
</runtime>
44+
</configuration>
45+
46+
どの FSharp.Core と .NET フレームワークがコンパイル時に参照される?
47+
--------------------------------------
48+
49+
FSharp.Combiler.Service コンポーネントは多かれ少なかれ、F#コードを コンパイルするために使われるに過ぎません。特に、コマンドライン引数(あなたのツールを実行するために使われる FSharp.Core や .NET フレームワークとは違います)に明示的に FSharp.Core および/またはフレームワークのアセンブリを参照することが出来ます。
50+
51+
特定の FSharp.Core および .NET フレームワーク アセンブリ、またはそのいずれかをターゲットにする場合、 ``--noframework`` 引数と適切なコマンドライン引数を使います:
52+
53+
[<Literal>]
54+
let fsharpCorePath =
55+
@"C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0\FSharp.Core.dll"
56+
let errors2, exitCode2 =
57+
scs.Compile(
58+
[| "fsc.exe"; "--noframework";
59+
"-r"; fsharpCorePath;
60+
"-r"; @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll";
61+
"-o"; fn3;
62+
"-a"; fn2 |])
63+
64+
これらのアセンブリが配置されている場所を指定する必要があります。クロスプラットフォームに対応した方法でDLL を配置して、それらをコマンドライン引数に変換する最も簡単な方法は、[F# プロジェクトファイルをクラックする](https://fsharp.github.io/FSharp.Compiler.Service/ja/project.html)ことです。
65+
自分で SDK のパスを処理する代わりに、[FSharp.Compiler.Service.dll 用のテスト](https://github.com/fsharp/FSharp.Compiler.Service/blob/8a943dd3b545648690cb3bed652a469bdb6dd869/tests/service/Common.fs#L54)で使用しているようなヘルパー関数も用意されています。
66+
67+
68+
スクリプトを処理しているか ``GetCheckOptionsFromScriptRoot`` を使っている場合
69+
-------------------------------------------------------------------------
70+
71+
もし SDK 配置先にある FSharp.Core.dll を明示的に参照 *していない* 場合、または ``FsiEvaluationSession`` や ``GetCheckOptionsFromScriptRoot`` を使用してスクリプトを処理している場合、以下のいずれかの方法により、暗黙的にFSharp.Core が参照されます:
72+
73+
1. ``System.Reflection.Assembly.GetEntryAssembly()`` によって返されるホストアセンブリから静的に参照されたFSharp.Core.dll のバージョン
74+
75+
2. ホストアセンブリに FSharp.Core への静的な参照がない場合、
76+
77+
- FSharp.Compiler.Service 0.x シリーズでは、FSharp.Core バージョン 4.3.0.0 への参照が付与されます
78+
79+
- FSharp.Compiler.Service 1.3.1.x (F# 3.1 シリーズ)では、FSharp.Core バージョン 4.3.1.0 への参照が付与されます
80+
81+
- FSharp.Compiler.Service 1.4.0.x (F# 4.0 シリーズ)では、FSharp.Core バージョン 4.4.0.0 への参照が付与されます
82+
83+
FSharp.Core.optdata と FSharp.Core.sigdata を含める必要はありますか?
84+
--------------------------------------
85+
86+
もしあなたのコンパイル引数が SDK 配置先にある FSharp.Core.dll を明示的に参照している場合、FSharp.Core.sigdata と FSharp.Core.optdata はその DLL と同じフォルダになければいけません(これらのファイルがインストールされていない場合、F# SDKの インストールに問題があります)。もしコンパイル引数で常に明示的に参照していたなら、FSharp.Core.optdata と FSharp.Core.sigdata はあなたのアプリケーションの一部として含める必要は *ありません* 。
87+
88+
もしあなたが暗黙的な参照(例えば、上記のスクリプト処理など)に頼っているのなら、これはあなたのツールがアプリケーションの一部として FSharp.Core.dll を参照しているかもしれない、ということです。この場合、FSharp.Core.optdata および FSharp.Core.sigdata が FSharp.Core.dll と同じフォルダに見つからないというエラーが発生するかもしれません。 **もしあなたがアプリケーションに含めている FSharp.Core.dll を暗黙的に参照したいのであれば、FSharp.Core.sigdata と FSharp.Core.optdata もアプリケーションに追加する2つのファイルとして追加しましょう。** ``CombileToDynamicAssembly`` を使用する場合、この問題によって[アセンブリ解決中のスタックオーバーフロー](https://github.com/fsharp/FSharp.Compiler.Service/issues/258)も引き起こされるでしょう。
89+
90+
動的コンパイルと動的コード実行を行うツール(例: ``HostedExecution.exe``)はしばしば FSharp.Core.dll を暗黙的に参照するようになっています。
91+
これはつまり通常 FSharp.Core.optdata と FSharp.Core.sigdata を含んでいるということです。
92+
93+
要約
94+
-------
95+
96+
このデザインノートでは3つのポイントを検討しました:
97+
98+
- どの FSharp.Core.dll があなたのコンパイルツールを実行するのに使われるか
99+
- あなたのコンパイルツールを実行するのに使われる FSharp.Core.dll へのバインド リダイレクトを設定する方法
100+
- あなたのツールによって実行されるチェック時およびコンパイル時にどの FSharp.Core.dll および/またはフレームワークのアセンブリが参照されるか
101+
102+
*)

fcs/docsrc/content/ja/devnotes.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
---
2+
title: 開発者用メモ
3+
category: explanation
4+
menu_order: 2
5+
language: ja
6+
---
7+
8+
9+
開発者用メモ
10+
============
11+
12+
F#コンパイラの修正版クローンではクライアントの編集機能やF#コンパイラの埋め込み、
13+
F# Interactiveをサービスとして動作させるための機能が追加されています。
14+
15+
## コンポーネント
16+
17+
まず `FSharp.Compiler.Service.dll` というコンポーネントがあります。
18+
このコンポーネントにはリファクタリングやその他の編集ツールが完全なF# ASTやパーサ機能を利用できるように
19+
可視性を変更するというマイナーな変更だけが加えられています。
20+
主な狙いとしては、メインコンパイラの安定版かつドキュメントが備えられたフォークを用意することにより、
21+
このコンポーネントにある共通コードを様々なツールで共有できるようにすることです。
22+
23+
2つ目のコンポーネントはF# Interactiveをサービスとして組み込めるようにするためのもので、
24+
`fsi.exe` のソースコードに多数の変更が加えられており、
25+
`EvalExpression``EvalInteraction` といった関数が追加されています。
26+
27+
このレポジトリは以下の点を除けば 'fsharp' と **同一** です:
28+
29+
- `FSharp.Compiler.Service.dll` のビルド、特に以下の点に関する変更:
30+
- アセンブリ名の変更
31+
- `FSharp.Compiler.Service.dll` のみビルドされる
32+
- ブートストラッパーやプロトコンパイラを使用しない。
33+
F#コンパイラがインストール済みであることを想定。
34+
35+
- FAKEを使用するビルドスクリプト。
36+
すべてのコードのビルドとNuGetパッケージ、ドキュメントの生成、
37+
NuGetパッケージの配布に必要なファイルの生成などがFAKEによって行われる。
38+
([F# プロジェクト スキャフォールド](https://github.com/fsprojects/FSharp.ProjectScaffold) に準拠)
39+
40+
- 新機能追加のためにコンパイラのソースコードを変更。
41+
また、評価用関数を実装するためにF# Interactiveサービスに対する変更を追加。
42+
43+
- F#編集用クライアントで使用されるAPIを改善するためにコンパイラのソースコードを変更。
44+
45+
- コンパイラサービスAPIに新機能を追加するためにコンパイラのソースコードを変更。
46+
47+
`fsharp/fsharp` のレポジトリに言語あるいはコンパイラが追加コミットされた場合、
48+
それらはこのレポジトリにもマージされるべきで、同時に新しいNuGetパッケージもリリースする必要があります。
49+
50+
## ビルドとNuGet
51+
52+
ビルドの手順は [F# プロジェクト スキャフォールド](https://github.com/fsprojects/FSharp.ProjectScaffold)
53+
で推奨されているものに準じます。
54+
プロジェクトを独自にビルドする場合、以下の手順に従ってください:
55+
56+
[lang=text]
57+
git clone https://github.com/fsharp/FSharp.Compiler.Service
58+
cd FSharp.Compiler.Service
59+
60+
次に、(Windowsであれば) `build.cmd` または(LinuxやMac OSであれば) `build.sh` を実行してすべてをビルドします。
61+
ファイルは `bin` ディレクトリ内に出力されます。
62+
ドキュメントやNuGetパッケージもビルドしたい場合には `build Release` を実行します
63+
(このコマンドはGitHub上のドキュメントを更新しようとしますが、GitHubのレポジトリに適切な権限を持っている場合にのみ有効です)。
64+
65+
## クライアント
66+
67+
このコンポーネントは以下のようなツールで使用されています:
68+
69+
* [Fantomas](https://github.com/dungpa/fantomas) - F# コードフォーマットツール
70+
* [Fsharp-Refactor](https://github.com/Lewix/fsharp-refactor) - F#用リファクタリングツール
71+
* [FSharpbinding](https://github.com/fsharp/fsharpbinding) - Xamarin Studio バインディング
72+
* [F# Snippets web site](http://fssnip.net/) - F# 版のpastebin
73+
* [F# ACE Code Editor](https://github.com/BayardRock/FSharpWebIntellisense/) - Web上のF#編集ツール

0 commit comments

Comments
 (0)