OSDN Git Service

タグを打ち忘れていたついでに、html版ドキュメントを追加しました。
[ring-lang-081/ring.git] / docs / ja-jp / build / html / whatisnew7.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6   <head>
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     
9     <title>Ring 1.7 の変更履歴 &mdash; プログラミング言語 Ring 1.12 取扱説明書</title>
10     
11     <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
13     
14     <script type="text/javascript">
15       var DOCUMENTATION_OPTIONS = {
16         URL_ROOT:    './',
17         VERSION:     '1.12',
18         COLLAPSE_INDEX: false,
19         FILE_SUFFIX: '.html',
20         HAS_SOURCE:  true
21       };
22     </script>
23     <script type="text/javascript" src="_static/jquery.js"></script>
24     <script type="text/javascript" src="_static/underscore.js"></script>
25     <script type="text/javascript" src="_static/doctools.js"></script>
26     <script type="text/javascript" src="_static/translations.js"></script>
27     <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
28     <link rel="next" title="Ring 1.6 の変更履歴" href="whatisnew6.html" />
29     <link rel="prev" title="Ring 1.8 の変更履歴" href="whatisnew8.html" />
30     <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
31
32   </head>
33   <body role="document">
34 <div class="topbar">
35   <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">&#x1f369;Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
36   <ul>
37     
38     <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
39     <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
40     <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
41     <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
42     <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
43     <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
44     
45     <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46     <li><a title="総合索引" href="genindex.html">Index</a></li>
47     <li>
48       
49       
50 <form action="search.html" method="get">
51   <input type="text" name="q" placeholder="Search" />
52   <input type="hidden" name="check_keywords" value="yes" />
53   <input type="hidden" name="area" value="default" />
54 </form>
55       
56     </li>
57   </ul>
58 </div>
59
60 <div class="related">
61     <h3>ナビゲーション</h3>
62     <ul>
63       <li class="right">
64         <a href="whatisnew6.html" title="Ring 1.6 の変更履歴">
65           次へ &raquo;
66         </a>
67       </li>
68       <li class="right">
69         <a href="whatisnew8.html" title="Ring 1.8 の変更履歴">
70           &raquo; 前へ
71         </a>
72          |
73       </li>
74       <li>
75         <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
76          &raquo;
77       </li>
78       
79       <li>Ring 1.7 の変更履歴</li> 
80     </ul>
81 </div>
82   
83
84     <div class="document">
85       <div class="documentwrapper">
86         <div class="bodywrapper">
87           <div class="body" role="main">
88             
89   <div class="section" id="ring-1-7">
90 <span id="index-0"></span><h1>Ring 1.7 の変更履歴<a class="headerlink" href="#ring-1-7" title="このヘッドラインへのパーマリンク">¶</a></h1>
91 <p>Ring 1.7 公開版の新機能と変更点を学びます。</p>
92 <div class="section" id="index-1">
93 <span id="id1"></span><h2>新機能と変更リスト<a class="headerlink" href="#index-1" title="このヘッドラインへのパーマリンク">¶</a></h2>
94 <p>Ring 1.7 の新機能!</p>
95 <ul class="simple">
96 <li>新しい命令: Load Package</li>
97 <li>ringvm_see() と ringvm_give() 関数</li>
98 <li>ring_state_new() と ring_state_mainfile() 関数</li>
99 <li>トレースライブラリの改善</li>
100 <li>Ring ノートパッドの改善</li>
101 <li>RingQt の改善</li>
102 <li>Ring2EXE の改善</li>
103 <li>RingZip の改善</li>
104 <li>取扱説明書の改訂</li>
105 <li>Ring VM の改善</li>
106 <li>RingLibuv 拡張機能</li>
107 </ul>
108 </div>
109 <div class="section" id="load-package">
110 <span id="index-2"></span><h2>新しい命令: Load Package<a class="headerlink" href="#load-package" title="このヘッドラインへのパーマリンク">¶</a></h2>
111 <p>‘Load’ 命令により、複数の Ring ソースファイルを同じプロジェクトで使えます。</p>
112 <p>しかし、これらのファイルでは同じグローバルスコープを共有しています。</p>
113 <p>さて、 “Load Package” 命令もあります。</p>
114 <p>“Load Package” では新しいグローバルスコープへライブラリ (*.ring ファイル) を読み込むことができます。</p>
115 <p>グローバル変数との名前衝突回避となるため、ライブラリの作成時は非常に便利です。</p>
116 <p>用例:</p>
117 <p>ファイル: loadpackage.ring</p>
118 <div class="highlight-ring"><div class="highlight"><pre><span class="n">x</span> <span class="o">=</span> <span class="mi">100</span>
119 <span class="o">?</span> <span class="s">&quot;Hello, World!&quot;</span>
120 <span class="k">load</span> <span class="n">package</span> <span class="s">&quot;testloadpackage.ring&quot;</span>
121
122 <span class="o">?</span> <span class="n">x</span>
123 <span class="n">test</span><span class="p">()</span>
124 </pre></div>
125 </div>
126 <p>ファイル: testloadpackage.ring</p>
127 <div class="highlight-ring"><div class="highlight"><pre><span class="o">?</span> <span class="s">&quot;Hello from testloadpackage.ring&quot;</span>
128
129 <span class="n">x</span> <span class="o">=</span> <span class="mi">1000</span>
130
131 <span class="n">test</span><span class="p">()</span>
132
133 <span class="k">func</span> <span class="n">test</span>
134         <span class="o">?</span> <span class="n">x</span>
135 </pre></div>
136 </div>
137 <p>実行結果:</p>
138 <div class="highlight-none"><div class="highlight"><pre>Hello, World!
139 Hello from testloadpackage.ring
140 1000
141 100
142 1000
143 </pre></div>
144 </div>
145 </div>
146 <div class="section" id="ringvm-see-ringvm-give">
147 <span id="index-3"></span><h2>ringvm_see() と ringvm_give() 関数<a class="headerlink" href="#ringvm-see-ringvm-give" title="このヘッドラインへのパーマリンク">¶</a></h2>
148 <p>ringvm_see() 関数で See 命令の挙動を変更します。</p>
149 <p>また ring_see() 関数で元の挙動を使用します。</p>
150 <p>用例:</p>
151 <div class="highlight-ring"><div class="highlight"><pre><span class="k">see</span> <span class="s">&quot;Hello world&quot;</span> <span class="o">+</span> <span class="n">nl</span>
152 <span class="k">see</span> <span class="mi">123</span> <span class="o">+</span> <span class="n">nl</span>
153 <span class="k">see</span> <span class="o">[</span><span class="s">&quot;one&quot;</span><span class="p">,</span><span class="s">&quot;two&quot;</span><span class="p">,</span><span class="s">&quot;three&quot;</span><span class="o">]</span>
154 <span class="k">see</span> <span class="k">new</span> <span class="n">point</span> <span class="p">{</span><span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span><span class="p">}</span>
155
156 <span class="k">func</span> <span class="n">ringvm_see</span> <span class="n">t</span>
157         <span class="n">ring_see</span><span class="p">(</span><span class="s">&quot;We want to print: &quot;</span><span class="p">)</span>
158         <span class="n">ring_See</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
159
160 <span class="k">class</span> <span class="n">point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
161 </pre></div>
162 </div>
163 <p>実行結果:</p>
164 <div class="highlight-none"><div class="highlight"><pre>We want to print: Hello world
165 We want to print: 123
166 We want to print: one
167 two
168 three
169 We want to print: x: 10.000000
170 y: 20.000000
171 z: 30.000000
172 </pre></div>
173 </div>
174 <p>ringvm_give() 関数は Give 命令の挙動を変更します。</p>
175 <p>また、 ring_give() 関数は元の挙動を使用します。</p>
176 <p>用例:</p>
177 <div class="highlight-ring"><div class="highlight"><pre><span class="k">see</span> <span class="s">&quot;Name: &quot;</span> <span class="k">give</span> <span class="n">name</span>
178 <span class="k">see</span> <span class="s">&quot;Hello &quot;</span> <span class="o">+</span> <span class="n">name</span>
179
180 <span class="k">func</span> <span class="n">ringvm_give</span>
181         <span class="k">see</span> <span class="s">&quot;Mahmoud&quot;</span> <span class="o">+</span> <span class="n">nl</span>
182         <span class="k">return</span> <span class="s">&quot;Mahmoud&quot;</span>
183 </pre></div>
184 </div>
185 <p>実行結果:</p>
186 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Name</span><span class="p">:</span> <span class="n">Mahmoud</span>
187 <span class="n">Hello</span> <span class="n">Mahmoud</span>
188 </pre></div>
189 </div>
190 </div>
191 <div class="section" id="ring-state-new-ring-state-mainfile">
192 <span id="index-4"></span><h2>ring_state_new() と ring_state_mainfile() 関数<a class="headerlink" href="#ring-state-new-ring-state-mainfile" title="このヘッドラインへのパーマリンク">¶</a></h2>
193 <p>ring_state_new() と ring_state_mainfile() 関数は Ring プログラムから別の Ring プログラムを実行します。</p>
194 <p>ring_state_main() 関数とは異なり、こちらは Ring ステートの削除時に制御できます!</p>
195 <p>これは GUI プログラムから別の GUI プログラムを実行するときに重要です。</p>
196 <p>この場合は GUI ライブラリ (RingQt) を共有しており、</p>
197 <p>呼び出し元は qApp.Exec() を呼び出すからです。</p>
198 <p>よって、下位プログラムを停止せずにメインプログラムへ戻ります。</p>
199 <p>ここで下位プログラムのステートを削除してしまうと、下位プログラムのイベント実行時に問題が発生します。</p>
200 <p>ステートを保持することは、下位 GUI プログラムの収容先となっている GUI プログラムでは重要です。</p>
201 </div>
202 <div class="section" id="index-5">
203 <span id="id2"></span><h2>トレースライブラリの改善<a class="headerlink" href="#index-5" title="このヘッドラインへのパーマリンク">¶</a></h2>
204 <p>トレースライブラリの更新により、デバッガのブレークポイントで “callstack” 命令を利用できるようになりました。</p>
205 <p>この命令は関数のコールスタックを表示します。</p>
206 <p>用例:</p>
207 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;tracelib.ring&quot;</span>
208
209 <span class="k">func</span> <span class="n">main</span>
210         <span class="o">?</span> <span class="s">&quot;Hello from main!&quot;</span>
211         <span class="n">test1</span><span class="p">()</span>
212
213 <span class="k">func</span> <span class="n">test1</span>
214         <span class="o">?</span> <span class="s">&quot;Hello from test1!&quot;</span>
215         <span class="n">test2</span><span class="p">()</span>
216
217 <span class="k">func</span> <span class="n">test2</span>
218         <span class="o">?</span> <span class="s">&quot;Hello from test2!&quot;</span>
219         <span class="n">test3</span><span class="p">()</span>
220
221 <span class="k">func</span> <span class="n">test3</span>
222         <span class="o">?</span> <span class="s">&quot;Hello from test3!&quot;</span>
223         <span class="n">breakpoint</span><span class="p">()</span>
224 </pre></div>
225 </div>
226 <img alt="コールスタック" src="_images/callstack.png" />
227 </div>
228 <div class="section" id="ring">
229 <span id="index-6"></span><h2>Ring ノートパッドの改善<a class="headerlink" href="#ring" title="このヘッドラインへのパーマリンク">¶</a></h2>
230 <p>Ring ノートパッドを更新しました。</p>
231 <ol class="arabic simple">
232 <li>拡張子 *.cf への対応</li>
233 <li>ハッシュ関数 (SHA256) 使用時の改善 - “Save Changes?” (変更を保存しますか?) メッセージ</li>
234 <li>Ring ノートパッド - ×ボタン - Saving Changes? で問い合わせるようになりました。</li>
235 </ol>
236 </div>
237 <div class="section" id="ringqt">
238 <span id="index-7"></span><h2>RingQt の改善<a class="headerlink" href="#ringqt" title="このヘッドラインへのパーマリンク">¶</a></h2>
239 <p>このクラスを RingQt へ追加しました。</p>
240 <ol class="arabic simple">
241 <li>QStackedWidget</li>
242 <li>QCalendarWidget</li>
243 <li>QOpenGLFunctions</li>
244 <li>QOpenGLContext</li>
245 <li>QSurfaceFormat</li>
246 <li>QOpenGLWidget</li>
247 <li>QOpenGLVersionProfile</li>
248 <li>QOpenGLFunctions_3_2_Core</li>
249 <li>QVector2D</li>
250 <li>QVector3D</li>
251 <li>QVector4D</li>
252 <li>QQuaternion</li>
253 <li>QMatrix4x4</li>
254 <li>QOpenGLPaintDevice</li>
255 <li>QPaintDevice</li>
256 <li>QOpenGLTimerQuery</li>
257 <li>QOpenGLDebugLogger</li>
258 <li>QOpenGLFramebufferObject</li>
259 <li>QOpenGLVertexArrayObject</li>
260 <li>QOpenGLBuffer</li>
261 <li>QOpenGLShaderProgram</li>
262 <li>QOpenGLShader</li>
263 <li>QOpenGLTexture</li>
264 </ol>
265 </div>
266 <div class="section" id="ring2exe">
267 <span id="index-8"></span><h2>Ring2EXE の改善<a class="headerlink" href="#ring2exe" title="このヘッドラインへのパーマリンク">¶</a></h2>
268 <p>C/C++ コンパイラがないとき、想定された動作を行うために Ring2EXE を更新しました。</p>
269 <p>これにより、アプリケーションの配布に適したものを生成できます (exe ファイルと ring ファイル)。</p>
270 </div>
271 <div class="section" id="ringzip">
272 <span id="index-9"></span><h2>RingZip の改善<a class="headerlink" href="#ringzip" title="このヘッドラインへのパーマリンク">¶</a></h2>
273 <p>このライブラリの更新により、サブフォルダにあるファイルの展開に対応しました!</p>
274 </div>
275 <div class="section" id="index-10">
276 <span id="id3"></span><h2>取扱説明書の改訂<a class="headerlink" href="#index-10" title="このヘッドラインへのパーマリンク">¶</a></h2>
277 <ol class="arabic simple">
278 <li>RingQt クラスの章 - クラスリストの並べ替えを行いました。</li>
279 </ol>
280 </div>
281 <div class="section" id="ring-vm">
282 <span id="index-11"></span><h2>Ring VM の改善<a class="headerlink" href="#ring-vm" title="このヘッドラインへのパーマリンク">¶</a></h2>
283 <ol class="arabic simple">
284 <li>エラーメッセージの改善</li>
285 <li>List2Str() 関数で数値を有するリストに対応</li>
286 <li>分離記号 _ のある数値の対応を修正</li>
287 <li>変数を使用せずにリストを作成 (ステートメント –&gt; 式 –&gt; リスト)</li>
288 <li>isNULL() - 英数大小文字同一視 - Null および null は NULL と同等に扱われます。</li>
289 <li>このオブジェクトで属性に Self オブジェクトの追加へ対応</li>
290 <li>‘:’ 演算子を使用後に小文字リテラルのキーワードを作成</li>
291 <li>オブジェクトの表示 - decimals() 関数の考慮</li>
292 <li>定数を閉られていない場合 - 定数の始点を決定</li>
293 <li>リストのあるオブジェクトの表示時におけるエラーメッセージの改善</li>
294 <li>VarPtr() - ローカルスコープにある変数のポインタの取得に対応</li>
295 <li>新しいスレッドの作成時に perfomance 命令を normal 命令へ交換</li>
296 </ol>
297 </div>
298 <div class="section" id="ringlibuv">
299 <span id="index-12"></span><h2>RingLibuv 拡張機能<a class="headerlink" href="#ringlibuv" title="このヘッドラインへのパーマリンク">¶</a></h2>
300 <p>Ring 1.7 から RingLibuv 拡張機能を利用できるようなりました。</p>
301 <p>Libuv は非同期 I/O に主眼を置いたマルチプラットフォーム対応ライブラリです。</p>
302 <p>用例 (イベントループ):</p>
303 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;libuv.ring&quot;</span>
304
305 <span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
306 <span class="n">idler</span> <span class="o">=</span> <span class="kp">NULL</span>
307
308 <span class="k">func</span> <span class="n">main</span>
309         <span class="n">idler</span> <span class="o">=</span> <span class="n">new_uv_idle_t</span><span class="p">()</span>
310         <span class="n">uv_idle_init</span><span class="p">(</span><span class="n">uv_default_loop</span><span class="p">(),</span> <span class="n">idler</span><span class="p">)</span>
311         <span class="n">uv_idle_start</span><span class="p">(</span><span class="n">idler</span><span class="p">,</span> <span class="s">&quot;wait()&quot;</span><span class="p">)</span>
312         <span class="o">?</span> <span class="s">&quot;Idling...&quot;</span>
313         <span class="n">uv_run</span><span class="p">(</span><span class="n">uv_default_loop</span><span class="p">(),</span> <span class="n">UV_RUN_DEFAULT</span><span class="p">);</span>
314         <span class="n">uv_loop_close</span><span class="p">(</span><span class="n">uv_default_loop</span><span class="p">());</span>
315         <span class="n">destroy_uv_idle_t</span><span class="p">(</span><span class="n">idler</span><span class="p">)</span>
316
317 <span class="k">func</span> <span class="n">wait</span>
318         <span class="n">counter</span><span class="o">++</span>
319         <span class="k">if</span> <span class="n">counter</span> <span class="o">&gt;=</span> <span class="mi">100000</span>
320                 <span class="n">uv_idle_stop</span><span class="p">(</span><span class="n">idler</span><span class="p">)</span>
321         <span class="k">ok</span>
322 </pre></div>
323 </div>
324 <p>実行結果:</p>
325 <div class="highlight-none"><div class="highlight"><pre>Idling...
326 </pre></div>
327 </div>
328 <p>用例 (サーバー):</p>
329 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;libuv.ring&quot;</span>
330 <span class="k">load</span> <span class="s">&quot;objectslib.ring&quot;</span>
331
332 <span class="o">?</span> <span class="s">&quot;Testing RingLibuv - Server Side - Using Classes&quot;</span>
333
334 <span class="n">open_object</span><span class="p">(:</span><span class="n">MyServer</span><span class="p">)</span>
335
336 <span class="k">class</span> <span class="n">MyServer</span> <span class="k">from</span> <span class="n">ObjectControllerParent</span>
337
338         <span class="n">DEFAULT_PORT</span>    <span class="o">=</span> <span class="mi">13370</span>
339         <span class="n">DEFAULT_BACKLOG</span> <span class="o">=</span> <span class="mi">1024</span>
340
341         <span class="n">addr</span>    <span class="o">=</span> <span class="n">new_sockaddr_in</span><span class="p">()</span>
342         <span class="n">server</span>  <span class="o">=</span> <span class="kp">NULL</span>
343         <span class="n">client</span>  <span class="o">=</span> <span class="kp">NULL</span>
344         <span class="n">myloop</span>  <span class="o">=</span> <span class="kp">NULL</span>
345
346         <span class="k">func</span> <span class="n">start</span>
347                 <span class="n">myloop</span> <span class="o">=</span> <span class="n">uv_default_loop</span><span class="p">()</span>
348                 <span class="n">server</span> <span class="o">=</span> <span class="n">new_uv_tcp_t</span><span class="p">()</span>
349                 <span class="n">uv_tcp_init</span><span class="p">(</span><span class="n">myloop</span><span class="p">,</span> <span class="n">server</span><span class="p">)</span>
350                 <span class="n">uv_ip4_addr</span><span class="p">(</span><span class="s">&quot;127.0.0.1&quot;</span><span class="p">,</span> <span class="n">DEFAULT_PORT</span><span class="p">,</span> <span class="n">addr</span><span class="p">)</span>
351                 <span class="n">uv_tcp_bind</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
352                 <span class="n">r</span> <span class="o">=</span> <span class="n">uv_listen</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">DEFAULT_BACKLOG</span><span class="p">,</span> <span class="n">Method</span><span class="p">(:</span><span class="n">newconnection</span><span class="p">)</span> <span class="p">)</span>
353                 <span class="k">if</span> <span class="n">r</span>
354                         <span class="o">?</span> <span class="s">&quot;Listen error &quot;</span> <span class="o">+</span> <span class="n">uv_strerror</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
355                         <span class="k">return</span> <span class="mi">1</span>
356                 <span class="k">ok</span>
357                 <span class="n">uv_run</span><span class="p">(</span><span class="n">myloop</span><span class="p">,</span> <span class="n">UV_RUN_DEFAULT</span><span class="p">)</span>
358                 <span class="n">destroy_uv_tcp_t</span><span class="p">(</span><span class="n">server</span><span class="p">)</span>
359                 <span class="n">destroy_uv_sockaddr_in</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span>
360
361         <span class="k">func</span> <span class="n">newconnection</span>
362                 <span class="o">?</span> <span class="s">&quot;New Connection&quot;</span>
363                 <span class="n">aPara</span>   <span class="o">=</span> <span class="n">uv_Eventpara</span><span class="p">(</span><span class="n">server</span><span class="p">,:</span><span class="n">connect</span><span class="p">)</span>
364                 <span class="n">nStatus</span> <span class="o">=</span> <span class="n">aPara</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
365                 <span class="k">if</span> <span class="n">nStatus</span> <span class="o">&lt;</span> <span class="mi">0</span>
366                         <span class="o">?</span> <span class="s">&quot;New connection error : &quot;</span> <span class="o">+</span> <span class="n">nStatus</span>
367                         <span class="k">return</span>
368                 <span class="k">ok</span>
369                 <span class="n">client</span> <span class="o">=</span> <span class="n">new_uv_tcp_t</span><span class="p">()</span>
370                 <span class="n">uv_tcp_init</span><span class="p">(</span><span class="n">myloop</span><span class="p">,</span> <span class="n">client</span><span class="p">)</span>
371                 <span class="k">if</span> <span class="n">uv_accept</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">client</span><span class="p">)</span> <span class="o">=</span> <span class="mi">0</span>
372                                 <span class="n">uv_read_start</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">uv_myalloccallback</span><span class="p">(),</span>
373                                                         <span class="n">Method</span><span class="p">(:</span><span class="n">echo_read</span><span class="p">))</span>
374                 <span class="k">ok</span>
375
376         <span class="k">func</span> <span class="n">echo_read</span>
377                 <span class="n">aPara</span> <span class="o">=</span> <span class="n">uv_Eventpara</span><span class="p">(</span><span class="n">client</span><span class="p">,:</span><span class="n">read</span><span class="p">)</span>
378                 <span class="n">nRead</span> <span class="o">=</span> <span class="n">aPara</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
379                 <span class="n">buf</span>   <span class="o">=</span> <span class="n">aPara</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span>
380                 <span class="k">if</span> <span class="n">nRead</span> <span class="o">&gt;</span> <span class="mi">0</span>
381                         <span class="n">req</span> <span class="o">=</span> <span class="n">new_uv_write_t</span><span class="p">()</span>
382                                 <span class="n">wrbuf</span> <span class="o">=</span> <span class="n">uv_buf_init</span><span class="p">(</span><span class="n">get_uv_buf_t_base</span><span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">nread</span><span class="p">)</span>
383                         <span class="n">uv_write</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">client</span><span class="p">,</span> <span class="n">wrbuf</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">Method</span><span class="p">(:</span><span class="n">echo_write</span><span class="p">))</span>
384                         <span class="o">?</span> <span class="n">uv_buf2str</span><span class="p">(</span><span class="n">wrbuf</span><span class="p">)</span>
385                         <span class="n">message</span> <span class="o">=</span> <span class="s">&quot;message from the server to the client&quot;</span>
386                         <span class="n">buf</span> <span class="o">=</span> <span class="n">new_uv_buf_t</span><span class="p">()</span>
387                         <span class="n">set_uv_buf_t_len</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span><span class="n">len</span><span class="p">(</span><span class="n">message</span><span class="p">))</span>
388                         <span class="n">set_uv_buf_t_base</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span><span class="n">varptr</span><span class="p">(</span><span class="s">&quot;message&quot;</span><span class="p">,</span><span class="s">&quot;char *&quot;</span><span class="p">))</span>
389                         <span class="n">uv_write</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">client</span><span class="p">,</span> <span class="n">buf</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">Method</span><span class="p">(:</span><span class="n">echo_write</span><span class="p">))</span>
390                 <span class="k">ok</span>
391
392         <span class="k">func</span> <span class="n">echo_write</span>
393                 <span class="n">aPara</span> <span class="o">=</span> <span class="n">uv_Eventpara</span><span class="p">(</span><span class="n">client</span><span class="p">,:</span><span class="n">read</span><span class="p">)</span>
394                 <span class="n">req</span>   <span class="o">=</span> <span class="n">aPara</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
395 </pre></div>
396 </div>
397 <p>実行結果:</p>
398 <p>クライアントを実行すると、 “New Connection” メッセージが表示されます。</p>
399 <p>そして “hello from the client” メッセージが表示されます。</p>
400 <div class="highlight-none"><div class="highlight"><pre>Testing RingLibuv - Server Side - Using Classes
401 New Connection
402 hello from the client
403 </pre></div>
404 </div>
405 <p>用例 (スレッドの使用):</p>
406 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">&quot;libuv.ring&quot;</span>
407 <span class="k">load</span> <span class="s">&quot;objectslib.ring&quot;</span>
408
409 <span class="o">?</span> <span class="s">&quot;Testing RingLibuv - Threads - Using Classes&quot;</span>
410
411 <span class="n">open_object</span><span class="p">(:</span><span class="n">MyThreads</span><span class="p">)</span>
412
413 <span class="k">class</span> <span class="n">MyThreads</span> <span class="k">from</span> <span class="n">ObjectControllerParent</span>
414
415         <span class="k">func</span> <span class="n">Start</span>
416                 <span class="n">one_id</span> <span class="o">=</span> <span class="n">new_uv_thread_t</span><span class="p">()</span>
417                 <span class="n">two_id</span> <span class="o">=</span> <span class="n">new_uv_thread_t</span><span class="p">()</span>
418                 <span class="n">uv_thread_create</span><span class="p">(</span><span class="n">one_id</span><span class="p">,</span> <span class="n">Method</span><span class="p">(:</span><span class="n">One</span><span class="p">))</span>
419                 <span class="n">uv_thread_create</span><span class="p">(</span><span class="n">two_id</span><span class="p">,</span> <span class="n">Method</span><span class="p">(:</span><span class="n">Two</span><span class="p">))</span>
420                 <span class="n">uv_thread_join</span><span class="p">(</span><span class="n">one_id</span><span class="p">)</span>
421                 <span class="n">uv_thread_join</span><span class="p">(</span><span class="n">two_id</span><span class="p">)</span>
422                 <span class="n">destroy_uv_thread_t</span><span class="p">(</span><span class="n">one_id</span><span class="p">)</span>
423                 <span class="n">destroy_uv_thread_t</span><span class="p">(</span><span class="n">two_id</span><span class="p">)</span>
424
425         <span class="k">func</span> <span class="n">one</span>
426                 <span class="o">?</span> <span class="s">&quot;Message from the First Thread!&quot;</span>
427
428         <span class="k">func</span> <span class="n">Two</span>
429                 <span class="o">?</span> <span class="s">&quot;Message from the Second Thread!&quot;</span>
430 </pre></div>
431 </div>
432 <p>実行結果:</p>
433 <div class="highlight-none"><div class="highlight"><pre>Testing RingLibuv - Threads - Using Classes
434 Message from the First Thread!
435 Message from the Second Thread!
436 </pre></div>
437 </div>
438 <p>この拡張機能 (RingLibuv) の詳細情報は、この章をご確認ください: RingLibuv の用法</p>
439 </div>
440 </div>
441
442
443           </div>
444         </div>
445       </div>
446       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
447         <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
448 <ul>
449 <li><a class="reference internal" href="#">Ring 1.7 の変更履歴</a><ul>
450 <li><a class="reference internal" href="#index-1">新機能と変更リスト</a></li>
451 <li><a class="reference internal" href="#load-package">新しい命令: Load Package</a></li>
452 <li><a class="reference internal" href="#ringvm-see-ringvm-give">ringvm_see() と ringvm_give() 関数</a></li>
453 <li><a class="reference internal" href="#ring-state-new-ring-state-mainfile">ring_state_new() と ring_state_mainfile() 関数</a></li>
454 <li><a class="reference internal" href="#index-5">トレースライブラリの改善</a></li>
455 <li><a class="reference internal" href="#ring">Ring ノートパッドの改善</a></li>
456 <li><a class="reference internal" href="#ringqt">RingQt の改善</a></li>
457 <li><a class="reference internal" href="#ring2exe">Ring2EXE の改善</a></li>
458 <li><a class="reference internal" href="#ringzip">RingZip の改善</a></li>
459 <li><a class="reference internal" href="#index-10">取扱説明書の改訂</a></li>
460 <li><a class="reference internal" href="#ring-vm">Ring VM の改善</a></li>
461 <li><a class="reference internal" href="#ringlibuv">RingLibuv 拡張機能</a></li>
462 </ul>
463 </li>
464 </ul>
465
466
467   <h4>前のトピックへ</h4>
468   <p class="topless"><a href="whatisnew8.html"
469                         title="前の章へ">Ring 1.8 の変更履歴</a></p>
470   <h4>次のトピックへ</h4>
471   <p class="topless"><a href="whatisnew6.html"
472                         title="次の章へ">Ring 1.6 の変更履歴</a></p>
473   <div role="note" aria-label="source link">
474     <h3>このページ</h3>
475     <ul class="this-page-menu">
476       <li><a href="_sources/whatisnew7.txt"
477             rel="nofollow">ソースコードを表示</a></li>
478     </ul>
479    </div>
480       
481 <form action="search.html" method="get">
482   <input type="text" name="q" placeholder="Search" />
483   <input type="hidden" name="check_keywords" value="yes" />
484   <input type="hidden" name="area" value="default" />
485 </form>
486       
487         </div>
488       </div>
489       <div class="clearer"></div>
490     </div>
491 <footer class="footer">
492   <p class="pull-right">
493     <a href="_sources/whatisnew7.txt"
494        rel="nofollow">ソースコードを表示</a> &nbsp;
495     <a href="#">冒頭へ戻る</a></p>
496   <p>
497     &copy; Copyright 2016-2020, Ring Team.<br/>
498     Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6 / astropy-sphinx-theme 1.1 (isVowel)
499   </p>
500 </footer>
501   </body>
502 </html>