Skip to content

Commit

Permalink
[Swoole AI Assistant] translate to ja
Browse files Browse the repository at this point in the history
  • Loading branch information
matyhtf committed Dec 11, 2024
1 parent 8139ba3 commit 7b8f0a2
Show file tree
Hide file tree
Showing 26 changed files with 1,423 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/ja/.translate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"latest_commit":"8139ba3ccb9fd18969960c4574dd3c7dde7ebb28"}
48 changes: 48 additions & 0 deletions docs/ja/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
日本語訳
----

**中文文書**
====

- [PHPでPythonモジュールを呼び出す](php/tutorial.md)
- [PythonでPHP関数を呼び出す](python/tutorial.md)
- [開発パス](roadmap.md)

**PHP拡張**
----
* [ビルドインストール](php/build.md)
* [言語コア](php/core.md)
* [組み込みタイプ](php/object.md)
* [例外処理](php/exception.md)
* [整数型数字](php/int.md)
* [回调関数](php/fn.md)
* [メモリコピー](php/memory.md)
* [パフォーマンステスト](benchmark.md)
* [IDEヒント](php/composer.md)
* [ソケットAPI](php/socket.md)
* [Pythonクラスを継承する](php/inherit.md)

**Pythonモジュール**

---

- [関数リスト](python/function.md)
- [オブジェクト操作](python/object.md)
- [文字列操作](python/string.md)
- [配列操作](python/array.md)
- [クラス操作](python/class.md)
- [参照タイプ](python/reference.md)
- [メモリコピー](php/memory.md)
- [モジュール封装](python/module.md)

**チュートリアル**

---

- [phpy:PHPとPythonの相互呼び出しライブラリ、PHPにPythonエコシステムを導入する](https://zhuanlan.zhihu.com/p/670373512)
- [Ubuntu 18.04でPHP-8.3をビルドしてphpyをインストールする](https://mp.weixin.qq.com/s/q_-keG3clvs7Hii-oEW3RQ)
- [phpy:PHPとPythonエコシステムを接続する](https://zhuanlan.zhihu.com/p/671645003)
- [PHPがphpyを通じてオープンソースの大モデルプラットフォーム魔塔ModelScopeを呼び出す方法](https://mp.weixin.qq.com/s/p5x2XwJgPpodZI_Woa8qPA)

**注意:**
上記の「Pythonモジュール」の「メモリコピー」の日本語訳は「メモリコピー」のままです。なぜなら、提供されたテキストにはそのセクションの日本語訳がないためです。もし必要なら、この部分を日本語に翻訳する必要があります。
112 changes: 112 additions & 0 deletions docs/ja/benchmark.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# ストレESSテスト
圧力テストのスクリプトでは `PyDict` を作成し、それぞれ PHP コードと Python コードで 1000 万回実行して読み書きを行います。

- `PHPバージョン``PHP 8.2.3 (cli) (built: Mar 17 2023 15:06:57) (NTS)`

- `Pythonバージョン``Python 3.11.5`

- OS:`Ubuntu 20.04`
- `GCCバージョン``gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)`

> このテストでは 1000 万要素の `HashTable` を構築する必要があり、少なくとも 2GB以上のメモリスペースが必要です。
## PHP
```php
<?php

$dict = new PyDict();
const COUNT = 10000000;

$n = COUNT;
$s = microtime(true);
while ($n--) {
$dict['key-' . $n] = $n * 3;
}
echo 'dict set: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL;

$c = 0;
$n = COUNT;
$s = microtime(true);
while ($n--) {
$c += $dict['key-' . $n];
}
echo 'dict get: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL;
```

## Python
```python
import time

my_dict = {}
COUNT = 10000000

n = COUNT
start_time = time.time()

for i in range(n):
my_dict["key-" + str(i)] = i * 3

elapsed_time = time.time() - start_time

print(f"dict set: {elapsed_time:.6f}")

n = COUNT

total = 0
start_time_get = time.time()
for i in range(n):
total += my_dict["key-" + str(i)]

elapsed_time_get = time.time() - start_time_get

print(f"dict get: {elapsed_time_get:.6f}")
```

## PHP 配列
```php
<?php

ini_set('memory_limit', '2G');
$dict = [];
const COUNT = 10000000;

$n = COUNT;
$s = microtime(true);
while ($n--) {
$dict['key-' . $n] = $n * 3;
}
echo 'array set: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL;

$c = 0;
$n = COUNT;
$s = microtime(true);
while ($n--) {
$c += $dict['key-' . $n];
}
echo 'array get: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL;
```

##結果の比較

```shell
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php dict.php
dict set: 4.663758 秒
dict get: 3.980076 秒
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php array.php
array set: 1.578963 秒
array get: 0.831129 秒
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ python dict.py
dict set: 5.321664 秒
dict get: 4.969081 秒
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$
```

Pythonテストを基準に:

| スクリプト名 | Set | Get |
|:----------|:----:|-----:|
| dict.php | 114% | 125% |
| array.php | 337% | 599% |

- `phpy`はPHPコードでPyDictを書くパフォーマンスが原生Pythonの14%高く、読み取りのパフォーマンスは25%高い
- PHPで書く配列のパフォーマンスはPythonのDictを書くパフォーマンスの237%高く、読み取りはほぼ500%高い
128 changes: 128 additions & 0 deletions docs/ja/php/build-on-windows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# Windows での構築

> PHP-8.1 以降りのバージョンのみサポートされています。
## PHP開発環境

参考:[https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2](https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2)

- Visual C++ 16.0 をインストールしてください。[https://aka.ms/vs/16/release/vs_buildtools.exe](https://aka.ms/vs/16/release/vs_buildtools.exe)

- php-sdk-binary-toolsをインストールしてください。[https://github.com/php/php-sdk-binary-tools](https://github.com/php/php-sdk-binary-tools)

- PHPソースコードをダウンロードしてください。

- 依存ライブラリをインストールしてください。[https://windows.php.net/downloads/php-sdk/deps/](https://windows.php.net/downloads/php-sdk/deps/)

> PHP関連のすべてのファイルは `d:\workspace` ディレクトリにインストールされます。
## Python開発環境

- Pythonをインストールしてください。[https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/)

- `Path`環境変数を設定し、`d:\python`を追加してください。Windowsターミナルで`Python -V`を実行して確認します。

- `PYTHONHOME`環境変数を`d:\python`に設定してください。

> Pythonは`d:\python`ディレクトリにインストールされます。
```shell
C:\WINDOWS\system32>python -V
Python 3.12.1

echo %Path%
echo %PYTHONHOME%
```

## 構築ディレクトリ

```shell
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0
phpsdk-vs16-x64.bat
```

成功した後は、このターミナルで`php-src`ディレクトリに入ります。

```shell
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5
phpsdk_deps -u
```

拡張プロジェクトは`php-src``ext`ディレクトリに置かれます。例えば:`D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\ext\phpy`。また、`mklink`コマンドを使用してシンボリックリンクを作成することもできます。

## 構築設定

```shell
$ buildconf --force
Rebuilding configure.js
Now run 'configure --help'
configure --with-openssl --with-mysqlnd --with-mysqli --enable-mbstring --enable-pdo --with-pdo-mysql --with-curl --enable-cli --enable-opcache --disable-zts --enable-phpy=shared
```

`--enable-phpy=shared``phpy`拡張を有効にし、`.dll`動的リンクライブラリとしてコンパイルすることを意味します。

成功した後は、以下のような出力が得られます。

```shell
...

Generating main/config.w32.h
Generating phpize
Done.


Enabled extensions:
-----------------------
| Extension | Mode |
-----------------------
| date | static |
| hash | static |
| json | static |
| pcre | static |
| phpy | shared |
| reflection | static |
| spl | static |
| standard | static |
-----------------------


Enabled SAPI:
-------------
| Sapi Name |
-------------
| cli |
-------------


---------------------------------------
| | |
---------------------------------------
| Build type | Release |
| Thread Safety | No |
| Compiler | Visual C++ 2019 |
| Architecture | x64 |
| Optimization | PGO disabled |
| Native intrinsics | SSE2 |
| Static analyzer | disabled |
---------------------------------------


Type 'nmake' to build PHP

D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5
$
```

## 拡張の構築
```shell
nmake clean
nmake
```

## 二進体のパッケージ化

```shell
nmake snap
```

成功した後は、`D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\x64\Release``php-8.1.5-nts-Win32-vs16-x64.zip`が生成されます。
67 changes: 67 additions & 0 deletions docs/ja/php/build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Linux/macOS/Unixでのコンパイル

> 現在は `Python 3.10` 以降のバージョンのみサポートされています

- `config.m4` を編集して `Python` のパスを設定します。デフォルトは `/opt/anaconda3`です。


```shell
phpize
./configure
make install
```

`php.ini` を編集して `extension=phpy.so`を追加します。

`php -m` を実行してリストに表示されているかどうかを確認します。`php --ri phpy` を実行して情報查看し、`php --re phpy` を実行して拡張機能で定義されているクラスや方法を查看します。


php -m
----
```
php -m
[PHP Modules]
bcmath
bz2
Core
...
phpy
...
[Zend Modules]
Zend OPcache
```


コンパイルパラメータ
----

### `--with-python-dir`

`Python` のインストールパスを指定します。例えば `/usr/bin/python` の場合は `--with-python-dir=/usr`と設定します。
`conda``Python` をインストールした場合は `/opt/anaconda3`と設定します。


### `--with-python-version`

指定する `Python`のバージョンです。例えば `3.10``3.11``3.12`などです。デフォルトでは `$python-dir/bin/python -V`を使用してバージョンを取得します。

### `--with-python-config`

`python-config`実行文件的路径を設定します。このオプションの優先度は `--with-python-dir``--with-python-version`よりも高いです。

```shell
(base) htf@swoole-12:~/workspace/python-php$ which python3.11-config
/opt/anaconda3/bin/python3.11-config
(base) htf@swoole-12:~/workspace/python-php$ python3.11-config
Usage: /opt/anaconda3/bin/python3.11-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir|--embed
(base) htf@swoole-12:~/workspace/python-php$ ./configure --wi
--with-gnu-ld --with-libdir= --without-PACKAGE --with-PACKAGE --with-php-config= --with-pic --with-python-config --with-python-dir --with-python-version --with-tags=
(base) htf@swoole-12:~/workspace/python-php$ ./configure --with-python-config=python3.11-config
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
```
37 changes: 37 additions & 0 deletions docs/ja/php/composer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# IDE 自動提示

`phpy`は、IDEの自動提示機能を提供する自動生成ツールを提供しています。使用方法は以下の通りです:

```shell
cd phpy/tools
php gen-lib.php [Python パッケージ名]
```

例えば`matplotlib.pyplot`については:

- 直接導入:`PyCore::import('matplotlib.pyplot')`
- 推測ファイル生成:`php tools/gen-lib.php matplotlib.pyplot`

また、`tools/gen-all-lib.php`を配置することで、複数のパッケージの推測ファイルを一度に生成することもできます。

## 使用方法

### 依存ファイルのインストール

```shell
composer require swoole/phpy
```

### 自動提示器の使用

```php
require dirname(__DIR__, 2) . '/vendor/autoload.php';
$plt = python\matplotlib\pyplot::import();

$x = new PyList([1, 2, 3, 4]);
$y = new PyList([30, 20, 50, 60]);
$plt->plot($x, $y);
$plt->show();
```

![IDE 自動完成](../../images/autocomplete.png)
Loading

0 comments on commit 7b8f0a2

Please sign in to comment.