1 <% eval(read("news.data")) %>
5 <div class="col-sm-12 col-md-6">
7 <div id="introduction" class="panel-group">
8 <div class="panel panel-default">
9 <div class="panel-heading"><h4>はじめに</h4></div>
10 <div class="panel-body">
12 <ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> は<ruby>画期的<rp>(</rp><rt>かっきてき</rt><rp>)</rp></ruby>で<ruby>実用性豊<rp>(</rp><rt>じつようせいゆた</rt><rp>)</rp></ruby>かなマルチパラダイム<ruby>汎用<rp>(</rp><rt>はんよう</rt><rp>)</rp></ruby>プログラミング<ruby>言語<rp>(</rp><rt>げんご</rt><rp>)</rp></ruby>です。
14 <ruby>命令型<rp>(</rp><rt>めいれいがた</rt><rp>)</rp></ruby>、<ruby>手続<rp>(</rp><rt>てつづ</rt><rp>)</rp></ruby>き<ruby>型<rp>(</rp><rt>がた</rt><rp>)</rp></ruby>、オブジェクト<ruby>指向<rp>(</rp><rt>しこう</rt><rp>)</rp></ruby>、<ruby>入<rp>(</rp><rt>い</rt><rp>)</rp></ruby>れ<ruby>子構造<rp>(</rp><rt>ここうぞう</rt><rp>)</rp></ruby>による<ruby>宣言型<rp>(</rp><rt>せんげんがた</rt><rp>)</rp></ruby>、<ruby>関数型<rp>(</rp><rt>かんすうがた</rt><rp>)</rp></ruby>、メタ、および<ruby>自然言語<rp>(</rp><rt>しぜんげんご</rt><rp>)</rp></ruby>のプログラミング・パラダイムに<ruby>対応<rp>(</rp><rt>たいおう</rt><rp>)</rp></ruby>しています。
16 <ruby>移植性<rp>(</rp><rt>いしょくせい</rt><rp>)</rp></ruby> (<ruby>Windows<rp>(</rp><rt>ウィンドウズ</rt><rp>)</rp></ruby>, <ruby>Linux<rp>(</rp><rt>リナックス</rt><rp>)</rp></ruby>, <ruby>macOS<rp>(</rp><rt>マック・オーエス</rt><rp>)</rp></ruby>, <ruby>Android<rp>(</rp><rt>アンドロイド</rt><rp>)</rp></ruby> など) があり、<ruby>小規模<rp>(</rp><rt>しょうきぼ</rt><rp>)</rp></ruby>、<ruby>柔軟<rp>(</rp><rt>じゅうなん</rt><rp>)</rp></ruby>かつ<ruby>高速<rp>(</rp><rt>こうそく</rt><rp>)</rp></ruby>な<ruby>設計<rp>(</rp><rt>せっけい</rt><rp>)</rp></ruby>です。
18 コンソール、<ruby>GUI<rp>(</rp><rt>ジー・ユー・アイ</rt><rp>)</rp></ruby>、ウェブ、ゲーム、およびモバイルアプリケーションを<ruby>作成<rp>(</rp><rt>さくせい</rt><rp>)</rp></ruby>できます。
27 <div class="col-sm-12 col-md-6">
29 <div id="news" class="panel-group">
30 <div class="panel panel-info">
31 <div class="panel-heading"><h4><ruby>新着情報<rp>(</rp><rt>しんちゃくじょうほう</rt><rp>)</rp></ruby></h4></div>
32 <div class="panel-body">
34 <table class="table table-striped">
37 <th width="40%"><ruby>日付<rp>(</rp><rt>ひづけ</rt><rp>)</rp></ruby></th>
38 <th><ruby>概要<rp>(</rp><rt>がいよう</rt><rp>)</rp></ruby></th>
45 <td><%= aNews[x][1] %></td>
46 <td><%= aNews[x][2] %></td>
52 <div style="text-align:right;">
53 <a href="news.html"><ruby>過去<rp>(</rp><rt>かこ</rt><rp>)</rp></ruby>の<ruby>新着情報<rp>(</rp><rt>しんちゃくじょうほう</rt><rp>)</rp></ruby></a>
66 <a href="#innovative" class="btn btn-default" data-toggle="collapse" style="width:100%"><ruby>画期的<rp>(</rp><rt>かっきてき</rt><rp>)</rp></ruby></a>
67 <div id="innovative" class="panel-group collapse in">
68 <div class="panel panel-primary">
69 <div class="panel-heading"><h4><ruby>画期的<rp>(</rp><rt>かっきてき</rt><rp>)</rp></ruby></h4></div>
70 <div class="panel-body">
73 <div class="col-sm-12 col-md-12">
75 <ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> には<ruby>自然言語<rp>(</rp><rt>しぜんげんご</rt><rp>)</rp></ruby>プログラミング、<ruby>宣言型<rp>(</rp><rt>せんげんがた</rt><rp>)</rp></ruby>プログラミングに<ruby>関<rp>(</rp><rt>かん</rt><rp>)</rp></ruby>する<ruby>最良<rp>(</rp><rt>さいりょう</rt><rp>)</rp></ruby>の<ruby>支援機能<rp>(</rp><rt>しえんきのう</rt><rp>)</rp></ruby>があります。パラダイムには<ruby>最先端<rp>(</rp><rt>さいせんたん</rt><rp>)</rp></ruby>のオブジェクト<ruby>指向<rp>(</rp><rt>しこう</rt><rp>)</rp></ruby>プログラミング、<ruby>関数型<rp>(</rp><rt>かんすうがた</rt><rp>)</rp></ruby>プログラミングの<ruby>実用的<rp>(</rp><rt>じつようてき</rt><rp>)</rp></ruby>な<ruby>新技法<rp>(</rp><rt>しんぎほう</rt><rp>)</rp></ruby>により<ruby>対応<rp>(</rp><rt>たいおう</rt><rp>)</rp></ruby>しています。コンパイラや<ruby>構文解析<rp>(</rp><rt>こうぶんかいせき</rt><rp>)</rp></ruby>などの<ruby>事前知識<rp>(</rp><rt>じぜんちしき</rt><rp>)</rp></ruby>は<ruby>不要<rp>(</rp><rt>ふよう</rt><rp>)</rp></ruby>です。<ruby>短時間<rp>(</rp><rt>たんじかん</rt><rp>)</rp></ruby>でドメイン<ruby>特化言語<rp>(</rp><rt>とっかげんご</rt><rp>)</rp></ruby>を<ruby>作成<rp>(</rp><rt>さくせい</rt><rp>)</rp></ruby>・<ruby>構築<rp>(</rp><rt>こうちく</rt><rp>)</rp></ruby>できる<ruby>言語構成要素<rp>(</rp><rt>げんごこうせいようそ</rt><rp>)</rp></ruby>を<ruby>標準装備<rp>(</rp><rt>ひょうじゅんそうび</rt><rp>)</rp></ruby>しています。
78 <a id="ringarticle" href="http://www.codeproject.com/Articles/1089887/The-Ring-Programming-Language" target="_blank" class="btn btn-default" style="width:100%"><ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> の<ruby>記事<rp>(</rp><rt>きじ</rt><rp>)</rp></ruby> (<ruby>CodeProject<rp>(</rp><rt>コード・プロジェクト</rt><rp>)</rp></ruby>)</a>
79 <a id="ringarticle4" href="https://www.codeproject.com/Articles/1137388/Syntax-Flexibility-in-the-Ring-Programming-Languag" target="_blank" class="btn btn-default" style="width:100%">シンタックスの<ruby>柔軟性<rp>(</rp><rt>じゅうなんせい</rt><rp>)</rp></ruby> (<ruby>CodeProject<rp>(</rp><rt>コード・プロジェクト</rt><rp>)</rp></ruby>)</a>
80 <a id="ringarticle5" href="https://www.codeproject.com/Articles/1222105/The-declarative-approach-of-the-Ring-programming-l" target="_blank" class="btn btn-default" style="width:100%"><ruby>宣言型手法<rp>(</rp><rt>せんげんがたしゅほう</rt><rp>)</rp></ruby> (<ruby>CodeProject<rp>(</rp><rt>コード・プロジェクト</rt><rp>)</rp></ruby>)</a>
81 <a id="ringarticle3" href="https://www.codeproject.com/Articles/1138605/Natural-Language-Programming-in-the-Ring-Programmi" target="_blank" class="btn btn-default" style="width:100%"><ruby>自然言語<rp>(</rp><rt>しぜんげんご</rt><rp>)</rp></ruby>プログラミング (<ruby>CodeProject<rp>(</rp><rt>コード・プロジェクト</rt><rp>)</rp></ruby>)</a>
82 <a id="ringarticle2" href="https://www.codeproject.com/Articles/1200766/Using-the-Natural-Language-Programming-Library-NLP" target="_blank" class="btn btn-default" style="width:100%"><ruby>自然言語<rp>(</rp><rt>しぜんげんご</rt><rp>)</rp></ruby>プログラミング・ライブラリ (<ruby>CodeProject<rp>(</rp><rt>コード・プロジェクト</rt><rp>)</rp></ruby>)</a>
93 <a href="#practical" class="btn btn-default" data-toggle="collapse" style="width:100%"><ruby>豊<rp>(</rp><rt>ゆたか</rt><rp>)</rp></ruby>かな<ruby>実用性<rp>(</rp><rt>じつようせい</rt><rp>)</rp></ruby></a>
94 <div id="practical" class="panel-group collapse in">
95 <div class="panel panel-default">
96 <div class="panel-heading"><h4><ruby>豊<rp>(</rp><rt>ゆたか</rt><rp>)</rp></ruby>かな<ruby>実用性<rp>(</rp><rt>じつようせい</rt><rp>)</rp></ruby></h4></div>
97 <div class="panel-body">
100 <div class="col-sm-12 col-md-12">
102 <ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> ライブラリ (<ruby>StdLib<rp>(</rp><rt>スタド・ライブ</rt><rp>)</rp></ruby>, <ruby>WebLib<rp>(</rp><rt>ウェブ・ライブ</rt><rp>)</rp></ruby>, <ruby>自然言語<rp>(</rp><rt>しぜんげんご</rt><rp>)</rp></ruby>ライブラリ、ゲームエンジンなど)、および <ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> <ruby>統合開発環境<rp>(</rp><rt>とうごうかいはつかんきょう</rt><rp>)</rp></ruby> (<ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> ノートパッド、フォームデザイナーなど) は <ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> で<ruby>記述<rp>(</rp><rt>きじゅつ</rt><rp>)</rp></ruby>しました。
103 <ruby>Ring<rp>(</rp><rt>リング</rt><rp>)</rp></ruby> は<ruby>製品開発<rp>(</rp><rt>せいひんかいはつ</rt><rp>)</rp></ruby>の<ruby>即戦力<rp>(</rp><rt>そくせんりょく</rt><rp>)</rp></ruby>であり、<ruby>開発者<rp>(</rp><rt>かいはつしゃ</rt><rp>)</rp></ruby>の<ruby>生産性<rp>(</rp><rt>せいさんせい</rt><rp>)</rp></ruby>を<ruby>改善<rp>(</rp><rt>かいぜん</rt><rp>)</rp></ruby>します。
107 <div class="col-xs-12">
108 <div id="myCarousel" class="carousel slide" data-ride="carousel">
110 <ol class="carousel-indicators">
111 <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
112 <li data-target="#myCarousel" data-slide-to="1"></li>
113 <li data-target="#myCarousel" data-slide-to="2"></li>
114 <li data-target="#myCarousel" data-slide-to="3"></li>
115 <li data-target="#myCarousel" data-slide-to="4"></li>
116 <li data-target="#myCarousel" data-slide-to="5"></li>
117 <li data-target="#myCarousel" data-slide-to="6"></li>
118 <li data-target="#myCarousel" data-slide-to="7"></li>
119 <li data-target="#myCarousel" data-slide-to="8"></li>
120 <li data-target="#myCarousel" data-slide-to="9"></li>
121 <li data-target="#myCarousel" data-slide-to="10"></li>
122 <li data-target="#myCarousel" data-slide-to="11"></li>
125 <!-- Wrapper for slides -->
126 <div class="carousel-inner" role="listbox">
128 <div class="item active">
129 <img src="newringdemo1.png" alt="" width="1366" height="729">
130 <div class="carousel-caption">
137 <img src="newringdemo2.png" alt="" width="1366" height="729">
138 <div class="carousel-caption">
145 <img src="newringdemo3.png" alt="" width="1366" height="729">
146 <div class="carousel-caption">
153 <img src="newringdemo4.png" alt="" width="1366" height="729">
154 <div class="carousel-caption">
161 <img src="newringdemo5.png" alt="" width="1366" height="729">
162 <div class="carousel-caption">
169 <img src="newringdemo6.png" alt="" width="1366" height="729">
170 <div class="carousel-caption">
177 <img src="newringdemo7.png" alt="" width="1366" height="729">
178 <div class="carousel-caption">
186 <img src="newringdemo8.png" alt="" width="1366" height="729">
187 <div class="carousel-caption">
194 <img src="newringdemo9.png" alt="" width="1366" height="729">
195 <div class="carousel-caption">
203 <img src="newringdemo10.png" alt="" width="1366" height="729">
204 <div class="carousel-caption">
211 <img src="newringdemo11.png" alt="" width="1366" height="729">
212 <div class="carousel-caption">
219 <img src="newringdemo12.png" alt="" width="1366" height="729">
220 <div class="carousel-caption">
229 <!-- Left and right controls -->
230 <a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
231 <span class="glyphicon glyphicon-chevron-left" aria-hidden="false"></span>
232 <span class="sr-only">前へ</span>
234 <a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
235 <span class="glyphicon glyphicon-chevron-right" aria-hidden="false"></span>
236 <span class="sr-only">次へ</span>
255 <a id="why" href="#whyring" class="btn btn-default" data-toggle="collapse" style="width:100%">Ring を選ぶ理由は?</a>
256 <div id="whyring" class="panel-group collapse in">
257 <div class="panel panel-default">
258 <div class="panel-heading"><h4>Ring を選ぶ理由は?</h4></div>
259 <div class="panel-body">
261 <p>Ring は簡明、<ruby>違和感<rp>(</rp><rt>いわかん</rt><rp>)</rp></ruby>の排除、組織化の奨励、および透過性とビジュアル実装からなるプログラミング言語です。
262 簡潔なシンタックス、そして自然なインタフェースの作成を可能にする機能群、さらに少しの時間で構築できる宣言型問題解決特化言語があります。
263 非常に小規模、高速なスマートガベージコレクターがあり、メモリをプログラマの制御下に置くことができます。</p>
264 <p>また、多種多様なプログラミングパラダイムに対応しており、インストール直後からすぐ使える業界標準の実用的なライブラリが付属しています (Allegro, FreeGLUT, cURL, LibUV, MySQL, ODBC, OpenGL, OpenSSL, PostgreSQL, Qt, RayLib, SDL, SQLite などに対応)。</p>
265 <p>この言語は生産性と拡張性に優れた高品質な解決方法の開発のために設計されています。<a href="docs-1.11/faq.html#why-do-we-need-yet-another-programming-language-yapl" target="_blank"> → 理由 </a></p>
269 <div class="panel panel-primary" id="productivityscal">
270 <div class="panel-heading"><h4>明確な設計目標</h4></div>
271 <div class="panel-body">
275 <li>アプリケーション開発用のプログラミング言語です。 <a href="docs-1.11/ringapps.html" target="_blank"> → 用例 </a> </li>
276 <li>ドメイン特化ライブラリ、フレームワークおよびツールの作成に使用できる汎用言語です。 <a href="docs-1.11/naturallibrary.html" target="_blank"> → 方法 </a></li>
277 <li>ビジュアルプログラミング言語である Programming Without Coding Technology (PWCT) ソフトウェアの次世代版を作成するために設計された実用言語です。 <a href="http://pwct.org/" target="_blank"> → PWCT の公式サイト </a></li>
278 <li>小規模で高速な言語であり C/C++ プロジェクトへ組み込めます。<a href="docs-1.11/embedding.html" target="_blank"> → 方法 </a></li>
279 <li>文教用途およびコンパイラ・仮想計算機の概念における入門に使用できる単純明快な言語です。<a href="#education" target="_blank"> → 方法 </a></li>
280 <li>生産性と拡張性に優れた高品質な解決方法の開発。</li>
291 <div class="panel panel-primary" id="simple">
292 <div class="panel-heading"><h4> 簡明 </h4></div>
293 <div class="panel-body">
295 Ring は非常に簡明な言語であり、非常にシンプルなシンタックスから構成されています。ボイラープレートコードを使用しないプログラムの記述がプログラマに奨励されています。
296 'See' 命令はメッセージを標準出力へ表示します。
297 <a href="docs-1.11/faq.html#why-ring-uses-see-give-but-and-ok-keywords" target="_blank"> → 理由 </a>
302 <font color="purple">see</font> "Hello, World!"
306 Main 関数はオプション扱いであり、ステートメントの後に実行されるため、ローカルスコープで有用です。
307 <a href="docs-1.11/faq.html#what-is-the-goal-of-including-the-main-function-in-ring" target="_blank"> → 理由 </a>
310 <font color="purple">func</font> main
311 <font color="purple">see</font> "Hello, World!"
315 動的型付け、およびレキシカルスコープを使用しています。変数名の先頭に $ は不要です!
316 <a href="docs-1.11/syntaxflexibility.html#using-and-in-the-start-of-the-variable-name" target="_blank"> → 理由 </a>
318 文字列の連結で ‘+’ 演算子を使用できます。
319 弱い型付け言語であり、文字列はコンテキストに基づいて数値と文字列の間で自動的に変換されます。
320 <a href="docs-1.11/faq.html#why-is-ring-weakly-typed" target="_blank"> → 理由 </a>
323 nCount = 10 <font color="green"># グローバル変数</font>
324 <font color="purple">func</font> main
325 nID = 1 <font color="green"># ローカル変数</font>
326 <font color="purple">see</font> "Count = " + nCount + nl + " ID = " + nID
335 <div class="panel panel-primary" id="natural">
336 <div class="panel-heading"><h4> 違和感の排除 </h4></div>
337 <div class="panel-body">
340 <a href="docs-1.11/faq.html#why-ring-is-not-case-sensitive" target="_blank"> → 理由 </a>
343 <font color="purple">see</font> "Enter your name ? "
344 <font color="purple">give</font> name
345 <font color="purple">see</font> "Hello " + Name <font color="green"># Name は name と同じです。 </font>
349 リストのインデックス (添字番号) は 1 から開始します (Ring 1.11 以降は <a href="docs-1.11/zerolib.html">ZeroLib</a> を使用することで 0 から始めることもできます)。
350 <a href="docs-1.11/faq.html#why-the-list-index-start-from-1-in-ring" target="_blank"> → 理由 </a>
353 aList = ["one","two","three"]
354 <font color="purple">see</font> aList[1] <font color="green"># one を表示</font>
364 <font color="purple">func</font> one
365 <font color="purple">see</font> "One" + nl
366 <font color="purple">func</font> two
367 <font color="purple">see</font> "two" + nl
368 <font color="purple">func</font> three
369 <font color="purple">see</font> "three" + nl
373 代入演算子は深いコピーを使用します (この操作は参照ではありません)。
374 <a href="docs-1.11/faq.html#why-the-assignment-operator-uses-deep-copy" target="_blank"> → 理由 </a>
377 aList = ["one","two","three"]
380 <font color="purple">see</font> alist[1] <font color="green"># 1 を表示</font>
381 <font color="purple">see</font> aList2[1] <font color="green"># one を表示</font>
385 数値と文字列は値渡しですが、リストとオブジェクトは参照渡しです。
387 For in ループ でリストの項目 (アイテム、要素とも呼ばれています) を更新できます。
390 <font color="purple">func</font> main
393 <font color="purple">see</font> aList <font color="green"># one two three を表示</font>
395 <font color="purple">func</font> update aList
396 <font color="purple">for</font> x <font color="purple">in</font> aList
397 <font color="purple">switch</font> x
398 <font color="purple">on</font> 1 x = "one"
399 <font color="purple">on</font> 2 x = "two"
400 <font color="purple">on</font> 3 x = "three"
401 <font color="purple">off</font>
402 <font color="purple">next</font>
409 aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
410 <font color="purple">see</font> aList <font color="green"># 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 を表示</font>
414 <a href="docs-1.11/faq.html#why-you-can-specify-the-number-of-loops-you-want-to-break-out-of" target="_blank"> → 理由 </a>
417 <font color="purple">for</font> x = 1 <font color="purple">to</font> 10
418 <font color="purple">for</font> y = 1 <font color="purple">to</font> 10
419 <font color="purple">see</font> "x=" + x + " y=" + y + nl
420 <font color="purple">if</font> x = 3 <font color="purple">and</font> y = 5
421 <font color="purple">exit</font> 2 <font color="green"># 二階層のループから脱出</font>
422 <font color="purple">ok</font>
423 <font color="purple">next</font>
424 <font color="purple">next</font>
433 <div class="panel panel-primary" id="encourageorg">
434 <div class="panel-heading"><h4> 組織化の奨励 </h4></div>
435 <div class="panel-body">
436 Ring ではプログラムの組織化を奨励しています。まずは関数、次にクラス、
437 そして関数とヘンテコなモノと組み合わせるプログラミング言語を使用していた悪夢の日々を忘却の彼方へ追いやります!
443 <li>ステートメントとグローバル変数</li>
447 これにより構成要素で end キーワードを記述しなくてもパッケージ、
450 一行コメントまたは複数行コメントを使用できます。
452 一行コメントは # または // で始まります。
454 複数行コメントは /* ~ */ の間に記述します。
457 <font color="green">/*
458 プログラム名 : Ring を使用したはじめてのプログラム
462 <font color="purple">see</font> "What is your name? " <font color="green"># 画面上にメッセージを表示します。</font>
463 <font color="purple">give</font> cName <font color="green"># ユーザからの入力を取得</font>
464 <font color="purple">see</font> "Hello " + cName <font color="green"> # hello を表示!</font>
466 <font color="green">// See "Bye!"</font>
474 <div class="panel panel-primary" id="libs">
475 <div class="panel-heading"><h4> 簡明なシンタックス </h4></div>
476 <div class="panel-body">
481 ステートメントの後に ; を記述したり ENTER や TAB を押して <b>行の区別</b> する必要はありません。
482 つまり、このようなコードを書くことができます。
486 <font color="purple">see</font> "The First Message" <font color="purple">see</font> " Another message in the same line! " + <font color="red">nl</font>
487 <font color="purple">see</font> "Enter your name?" <font color="purple">give</font> <font color="red">Name</font> <font color="purple">see</font> "Hello " + <font color="red">Name</font>
491 このコードは三種類の属性 X, Y および Z を有する Point クラスを作成します。
492 <b>パッケージ・クラス・関数の定義を終了するために end キーワードは使用していません。</b>
493 また、<b>クラスの名前の直下に属性の名前を書く</b>ことができます。
497 <font color="purple">class</font> Point X Y Z
501 <b>定義前にクラスと関数を使用</b>できます。
502 この用例では、オブジェクトの新規作成と属性の設定、および値を表示します。
506 o1 = <font color="purple">new</font> point o1.x=10 o1.y=20 o1.z=30 <font color="purple">see</font> O1 <font color="purple">class</font> Point X Y Z
510 ドット演算子 ‘.’ でオブジェクトの属性とメソッドへアクセスするのではなく、
511 <b>括弧 { } でオブジェクトへアクセスできます。その後にオブジェクトの属性とメソッドを使用できます。</b>
515 o1 = <font color="purple">new</font> point { x=10 y=20 z=30 } <font color="purple">see</font> O1 <font color="purple">class</font> Point X Y Z
519 <b>メソッドの呼出し後に { } を使用してオブジェクトへアクセス</b>します。
523 oPerson = <font color="purple">new</font> Person
526 Address = "Somewhere"
528 Print() <font color="green"># ここでは Print() メソッドを呼び出します。</font>
530 <font color="purple">class</font> Person Name Address Phone
531 <font color="purple">func</font> Print
532 <font color="purple">see</font> "Name :" + name + nl +
533 "Address :" + Address + nl +
534 "Phone : " + phone + nl
539 { } を使用してオブジェクトへアクセスしてから任意のオブジェクトの名前を記述するとき、
540 <b>自動的に呼び出される全ての setter/getter メソッドに対してクラスを検査します。</b>
544 <font color="purple">new</font> Number {
545 <font color="purple">see</font> one <font color="green"># GetOne() の実行</font>
546 <font color="purple">see</font> two <font color="green"># GetTwo() の実行</font>
547 <font color="purple">see</font> three <font color="green"># GetThree() の実行</font>
549 <font color="purple">class</font> Number one two three
550 <font color="purple">func</font> GetOne
551 <font color="purple">see</font> "Number : One" + nl
552 <font color="purple">return</font> 1
553 <font color="purple">func</font> GetTwo
554 <font color="purple">see</font> "Number : Two" + nl
555 <font color="purple">return</font> 2
556 <font color="purple">func</font> GetThree
557 <font color="purple">see</font> "Number : Three" + nl
558 <font color="purple">return</font> 3
565 <div class="panel panel-primary" id="libs">
566 <div class="panel-heading"><h4> オブジェクト指向に基づいた自然言語ステートメントの定義 </h4></div>
567 <div class="panel-body">
569 { } を使用してオブジェクトへアクセス後にクラスに BraceEnd() と呼ばれるメソッドがある場合は BraceEnd() メソッドを実行します!
570 <a href="docs-1.11/faq.html#why-the-ability-to-define-your-own-languages-instead-of-just-handing-over-the-syntax-so-you-can-parse-it-using-whatever-code-you-like" target="_blank"> → 理由 </a>
574 TimeForFun = <font color="purple">new</font> journey
575 <font color="green"># あっと驚く!</font>
577 Hello it is me <font color="green"># なんと美しいプログラミングの世界でしょう!</font>
579 <font color="green"># クラス本体</font>
580 <font color="purple">class</font> journey
581 hello=0 it=0 is=0 me=0
582 <font color="purple">func</font> GetHello
583 <font color="purple">See</font> "Hello" + nl
584 <font color="purple">func</font> braceEnd
585 <font color="purple">See</font> "Goodbye!" + nl
590 Eval() 関数は文字列に記述されたコードを実行します。</b>
594 cCode = "See 'Code that will be executed later!' "
595 Eval(cCode) <font color="green"># コードを実行してメッセージを表示します。</font>
600 <b>リストの作成後にリストから実行用のコードを生成できます。</b>
604 aWords = ["hello","it","is","me"]
605 <font color="purple">for</font> word <font color="purple">in</font> aWords cCode=word+"=0" eval(cCode) <font color="purple">next</font>
610 <b>Read(cFileName) 関数はテキストファイルを読み取ります。</b>
611 また Write(cFileName,cString) 関数はファイルへ書き込みます。
615 <font color="purple">see</font> "Enter File Name:" <font color="purple">give</font> cFileName <font color="purple">see</font> read(cFileName) <font color="green"># ファイルの内容を表示</font>
620 この用例は二つの命令を定義するクラスの作成方法です。<br>
621 最初の命令は : I want window<br>
622 次の命令は : Window title = <式><br>
623 ‘the’ などのキーワードは無視されます。<br>
627 <font color="purple">new</font> App
630 The window title = "hello world"
633 <font color="purple">class</font> App
635 <font color="green"># I want window 命令の属性</font>
638 <font color="green"># Window title 命令の属性</font>
639 <font color="green"># ここでは window 属性を再定義しません。</font>
642 <font color="green"># 値を与えると、キーワードは無視されます。</font>
645 <font color="purple">func</font> geti
646 <font color="purple">if</font> nIwantwindow = 0
648 <font color="purple">ok</font>
650 <font color="purple">func</font> getwant
651 <font color="purple">if</font> nIwantwindow = 1
653 <font color="purple">ok</font>
655 <font color="purple">func</font> getwindow
656 <font color="purple">if</font> nIwantwindow = 2
658 <font color="purple">see</font> "Instruction : I want window" + nl
659 <font color="purple">ok</font>
660 <font color="purple">if</font> nWindowTitle = 0
662 <font color="purple">ok</font>
664 <font color="purple">func</font> settitle cValue
665 <font color="purple">if</font> nWindowTitle = 1
667 <font color="purple">see</font> "Instruction : Window Title = " + cValue + nl
668 <font color="purple">ok</font>
675 前述の用例を完了するには read() を使用してファイルの内容を取得します。
678 The window title = "hello world"
680 そして eval() を使用してファイルの内容を実行します!<br>
681 また、 GUI ライブラリでウィンドウを作成するために GetWindow() と SetTitle() メソッドを更新します。<br>
688 <div class="panel panel-primary" id="libs">
689 <div class="panel-heading"><h4> オブジェクト指向に基づいた入れ子構造による宣言型言語の定義 </h4></div>
690 <div class="panel-body">
696 <b>自然言語 (Natural) ステートメントを使用したコードの実行、
697 および入れ子構造を使用したコードの実行方法について既に学んでいます。</b>
700 この用例は Web ライブラリからのものであり Bootstrap ライブラリで HTML ドキュメントを生成します。
701 この用例では HTML コードを直接記述せずに類似言語を作成しています (ただの用例です)。
702 その後、<b>宣言型言語を使用するために入れ子構造を使用して、 HTML ドキュメントを生成しています。</b>
704 この用例での考え方として <b>GetDiv() および GetH1() メソッドは { } を使用してアクセスできるオブジェクトを返します。
705 各オブジェクトへのアクセス後に BraceEnd() メソッドが実行されると生成された HTML を
706 BraceEnd() の出力表示がルートに到達するまで親オブジェクトへ送信します。</b>
710 <font color="purple">load</font> "weblib.ring"
711 <font color="purple">import</font> System.Web
713 <font color="purple">func</font> Main
719 classname = :container
722 classname = :jumbotron
723 H1 { text("Bootstrap Page") }
731 classname = "col-sm-4"
732 H3 { html("Welcome to the Ring programming language") }
733 P { html("Using a scripting language is very fun!") }
743 宣言型インタフェースを強化するクラスはこのようなものなります。
748 class Link from ObjsBase
751 cOutput = nl+GetTabs() + "<a href='" +
752 Link + "'> "+ Title + " </a> " + nl
754 class Div from ObjsBase
760 cOutput += nl+"</div>" + nl
761 cOutput = TabMLString(cOutput)
772 <div class="panel panel-primary" id="designgoals_syntaxflexibility">
773 <div class="panel-heading"><h4> 柔軟性のあるシンタックス </h4></div>
774 <div class="panel-body">
777 ソースコードの記述に関して様々な記法があります! <br> <br>
779 また、言語のキーワードと演算子を変更することで、お好みの記法を作成できます!<br>
787 <a name="education"></a>
788 <div class="panel panel-primary" id="transparentimplementation">
789 <div class="panel-heading"><h4> 透過型実装 </h4></div>
790 <div class="panel-body">
791 Ring は透過型実装です。コンパイラの処理段階および仮想計算機による実行中の処理内容を把握できます。<br>
793 例えば : ring helloworld.ring -tokens -rules -ic
797 <font color="purple">see</font> "Hello, World!"
805 ==================================================================
806 Tokens - Generated by the Scanner
807 ==================================================================
810 Literal : Hello, World!
813 ==================================================================
815 ==================================================================
816 Grammar Rules Used by The Parser
817 ==================================================================
819 Rule : Program --> {Statement}
822 Rule : Factor --> Literal
823 Rule : Range --> Factor
824 Rule : Term --> Range
825 Rule : Arithmetic --> Term
826 Rule : BitShift --> Arithmetic
827 Rule : BitAnd --> BitShift
828 Rule : BitOrXOR --> BitAnd
829 Rule : Compare --> BitOrXOR
830 Rule : EqualOrNot --> Compare
831 Rule : LogicNot -> EqualOrNot
832 Rule : Expr --> LogicNot
833 Rule : Statement --> 'See' Expr
835 ==================================================================
839 ==================================================================
840 Byte Code - Before Execution by the VM
841 ==================================================================
846 2 PushC Hello, World!
850 ==================================================================
859 <div class="panel panel-primary" id="visualimplementation">
860 <div class="panel-heading"><h4> ビジュアル実装 </h4></div>
861 <div class="panel-body">
863 プログラミング言語 Ring は<a href="http://doublesvsoop.sourceforge.net/" target="_blank">ビジュアルプログラミングツール PWCT (外部サイト)</a> で設計されています。
864 Ring 言語のビジュアルソースは “visualsrc” フォルダの *.ssf ファイルにあります。
865 生成された C 言語ソースコードは src フォルダおよび include フォルダにあります。 <a href="http://github.com/ring-lang/ring/" target="_blank">GitHub (外部サイト) から fork する。</a><br><br>
867 このスクリーンショットは ring_vm.ssf (ring_vm.c と ring_vm.h を生成) および ring_list.ssf (ring_list.c と ring_list.h を生成) ファイルからの引用です 。
870 <div class="col-xs-12">
871 <div id="myCarousel3" class="carousel slide" data-ride="carousel">
873 <ol class="carousel-indicators">
874 <li data-target="#myCarousel3" data-slide-to="0" class="active"></li>
875 <li data-target="#myCarousel3" data-slide-to="1"></li>
878 <!-- Wrapper for slides -->
879 <div class="carousel-inner" role="listbox">
881 <div class="item active">
882 <img src="ringvisualsrc1.jpg" alt="" width="1366" height="729">
883 <div class="carousel-caption">
890 <img src="ringvisualsrc2.jpg" alt="" width="1366" height="729">
891 <div class="carousel-caption">
899 <!-- Left and right controls -->
900 <a class="left carousel-control" href="#myCarousel3" role="button" data-slide="prev">
901 <span class="glyphicon glyphicon-chevron-left" aria-hidden="false"></span>
902 <span class="sr-only">前へ</span>
904 <a class="right carousel-control" href="#myCarousel3" role="button" data-slide="next">
905 <span class="glyphicon glyphicon-chevron-right" aria-hidden="false"></span>
906 <span class="sr-only">次へ</span>
914 <div class="panel panel-primary" id="smartgc">
915 <div class="panel-heading"><h4> スマートガベージコレクター </h4></div>
916 <div class="panel-body">
918 わずらわしいメモリ操作関連の問題から開放されます。
923 <li>未初期化メモリへのアクセス</li>
930 <li>グローバル変数は代入ステートメントで削除するまでメモリに存在し続けます。</li>
931 <li>ローカル変数は関数の処理終了後に削除されます。</li>
932 <li>プログラマは代入ステートメントでメモリから変数を削除する時期を完全に制御できます。</li>
939 二行目の直後、リスト [1,2,3,4,5] はメモリから削除され、文字列 “nice” が残ります。
941 <li>プログラマは callgc() 関数を呼び出すことで強制的に強制的にガベージコレクターを実行できます。</li>
942 <li>変数に参照がある場合は (関数へオブジェクトおよびリストを渡すとき)、参照カウントに基づいて変数を削除します。参照されない場合は全て削除されますが、参照がある場合はデータはメモリに残ります。</li>
949 <div class="panel panel-primary" id="designgoals_nogil">
950 <div class="panel-heading"><h4> インタプリタ (VM) 全体の停止なし (GIL なし) </h4></div>
951 <div class="panel-body">
954 アプリケーションでスレッドを使用するとき、インタプリタ (VM) 全体の停止 (global interpreter (VM) lock - GIL) は起こりません。 <br><br>
956 よって、スレッドは並列動作可能であり、Ring 命令は同時実行されます。 <br><br>
958 これはスレッドと平行性において最良のものです (さらなる高速化が実現できます!) <br>
973 <a href="#fastenough" class="btn btn-default" data-toggle="collapse" style="width:100%">高速動作</a>
974 <div id="fastenough" class="panel-group collapse in">
975 <div class="panel panel-default">
976 <div class="panel-heading"><h4>ほとんどのアプリケーションで十分に高速動作します</h4></div>
977 <div class="panel-body">
980 <div class="col-sm-12 col-md-12">
982 Ring は単純明快、小規模、柔軟な言語の頂点として設計されています。また、ほとんどのアプリケーションで十分に高速動作します。
985 これまで5年間、市販の電子計算機で Ring を使用してきました。<b>下記の処理は約1秒で完了します</b>。 <br><br>
987 (1) 100,000 行コードのコンパイル <br>
988 (2) 1 ~ 10,000,000 まで数え上げる空ループの実行 <br>
989 (3) 100,000 項目から成るリストで最後の項目を見つけようとして、線形検索で1000 回の検索処理を実行 (最悪の場合) <br>
990 (4) 1,000,000 項目から成るリストを作成後にリスト全項目の合計を計算<br>
991 (5) GUI アプリケーションで ListWidget へ 20,000 アイテムを追加 <br>
992 (6) GUI アプリケーションで TreeWidget へ 5,000 ノードを追加 <br>
993 (7) ターミナルのコンソールアプリケーションで 10,000 メッセージを表示 <br>
995 もっと高速化が必要なときは C/C++ 拡張機能を使用します! <br>
1000 <div class="col-xs-12">
1001 <div id="myCarousel2" class="carousel slide" data-ride="carousel">
1003 <ol class="carousel-indicators">
1004 <li data-target="#myCarousel2" data-slide-to="0" class="active"></li>
1005 <li data-target="#myCarousel2" data-slide-to="1"></li>
1006 <li data-target="#myCarousel2" data-slide-to="2"></li>
1007 <li data-target="#myCarousel2" data-slide-to="3"></li>
1010 <!-- Wrapper for slides -->
1011 <div class="carousel-inner" role="listbox">
1013 <div class="item active">
1014 <img src="ringdemo1_speed.png" alt="" width="1366" height="729">
1015 <div class="carousel-caption">
1022 <img src="ringdemo2_speed.png" alt="" width="1366" height="729">
1023 <div class="carousel-caption">
1030 <img src="ringdemo3_speed.png" alt="" width="1366" height="729">
1031 <div class="carousel-caption">
1038 <img src="ringdemo4_speed.png" alt="" width="1366" height="729">
1039 <div class="carousel-caption">
1049 <!-- Left and right controls -->
1050 <a class="left carousel-control" href="#myCarousel2" role="button" data-slide="prev">
1051 <span class="glyphicon glyphicon-chevron-left" aria-hidden="false"></span>
1052 <span class="sr-only">前へ</span>
1054 <a class="right carousel-control" href="#myCarousel2" role="button" data-slide="next">
1055 <span class="glyphicon glyphicon-chevron-right" aria-hidden="false"></span>
1056 <span class="sr-only">次へ</span>
1071 <a href="#features" class="btn btn-default" data-toggle="collapse" style="width:100%">特徴</a>
1072 <div id="features" class="panel-group collapse in">
1073 <div class="panel panel-default">
1074 <div class="panel-heading"><h4>特徴</h4></div>
1075 <div class="panel-body">
1078 <div class="col-sm-12 col-md-4">
1080 <div class="panel panel-primary">
1081 <div class="panel-heading">自由で画期的</div>
1082 <div class="panel-body">
1084 <li>自由なオープンソース (MIT ライセンス)</li>
1085 <li>オブジェクト指向プログラミングの頂点としての宣言型プログラミング</li>
1086 <li>ステートメントへの明示的な end が不要であるため、シンタックスは簡潔です (; または ENTER は不要)</li>
1087 <li>For in では値ではなく参照により項目を取得するため、項目を読み書きできます</li>
1088 <li>exit の使用による一階層以上のループからの脱出</li>
1089 <li>関数・クラス・パッケージには end キーワードは不要</li>
1090 <li>括弧 { } を使用することでオブジェクトへのアクセス、および属性・変数としてのメソッド・関数を使用できます。</li>
1091 <li>明瞭なプログラム構造 (ステートメントの後に関数、そしてパッケージとクラス)</li>
1092 <li>オプションで字句・構文・バイトコードを実行中に表示</li>
1098 <div class="col-sm-12 col-md-4">
1099 <div class="panel panel-primary">
1100 <div class="panel-heading">強力な実装</div>
1101 <div class="panel-body">
1104 <li>ハイブリッド実装 (コンパイラ + 仮想計算機)</li>
1105 <li>コンパイラ + 仮想計算機は 20,000 行の C コードです。</li>
1106 <li>そのほか 500,000 行のコードはライブラリ関連です!</li>
1107 <li>ANSI C で記述 (コード生成による)</li>
1108 <li>ビジュアル言語 (PWCT) を使用して開発</li>
1109 <li>移植性 (<ruby>Windows<rp>(</rp><rt>ウィンドウズ</rt><rp>)</rp></ruby>, <ruby>Linux<rp>(</rp><rt>リナックス</rt><rp>)</rp></ruby> および <ruby>macOS<rp>(</rp><rt>マック・オーエス</rt><rp>)</rp></ruby>, <ruby>Android<rp>(</rp><rt>アンドロイド</rt><rp>)</rp></ruby> など)</li>
1115 <div class="col-sm-12 col-md-4">
1117 <div class="panel panel-primary">
1118 <div class="panel-heading">簡明</div>
1119 <div class="panel-body">
1122 <li>コメント (一行および複数行)</li>
1125 <li>豪華な制御構造と演算子</li>
1127 <li>メイン関数 (オプション扱い)</li>
1131 <li>インデックスによる文字列内の文字へのアクセス (読み書き)</li>
1132 <li>リストのインデックスは 1 から開始</li>
1133 <li>範囲演算子。用例: 1:10 および “a”:”z”</li>
1134 <li>第一級変数、リスト、オブジェクトと関数</li>
1135 <li>値による格納・リストのコピー・オブジェクト (深いコピー)</li>
1136 <li>参照によるリスト・オブジェクト渡し</li>
1137 <li>8-bit クリーン設計であるためバイナリデータは直接動作します。</li>
1149 <div class="col-sm-12 col-md-4">
1151 <div class="panel panel-primary">
1152 <div class="panel-heading"> 動的言語 </div>
1153 <div class="panel-body">
1158 <li>レキシカルスコープ (グローバル、ローカルおよびオブジェクトのステート)</li>
1159 <li>関数の内側の変数のデフォルトスコープ (ローカル)</li>
1160 <li>関数の外側の変数のデフォルトスコープ (グローバル)</li>
1161 <li>ガベージコレクター - メモリの自動管理 (エスケープ解析と参照カウント)</li>
1163 <li>アプリケーション実行中に Eval() でコードを実行</li>
1170 <div class="col-sm-12 col-md-4">
1172 <div class="panel panel-primary">
1173 <div class="panel-heading"> オブジェクト指向へのネイティブ対応</div>
1174 <div class="panel-body">
1178 <li>Setter/Getter (オプション扱い)</li>
1179 <li>プライベートステート (オプション扱い)</li>
1184 <li>演算子のオーバーロード</li>
1186 <li>リフレクションとメタプログラミング</li>
1193 <div class="col-sm-12 col-md-4">
1195 <div class="panel panel-primary">
1196 <div class="panel-heading"> 標準ライブラリ </div>
1197 <div class="panel-body">
1205 <li>データベースへの対応 (ODBC, PostgreSQL, SQLite および MySQL)</li>
1206 <li>セキュリティ関数 (OpenSSL)</li>
1207 <li>インターネット関数 (LibCurl)</li>
1220 <div class="col-sm-12 col-md-4">
1222 <div class="panel panel-primary">
1223 <div class="panel-heading"> CGI ライブラリ (Ring にて記述) </div>
1224 <div class="panel-body">
1227 <li>CGI ライブラリ - HTTP Get</li>
1228 <li>CGI ライブラリ - HTTP Post</li>
1229 <li>CGI ライブラリ - ファイルのアップロード</li>
1230 <li>CGI ライブラリ - クッキー</li>
1231 <li>CGI ライブラリ - URL エンコード</li>
1232 <li>CGI ライブラリ - テンプレート</li>
1233 <li>CGI ライブラリ - HTML 特殊文字</li>
1234 <li>CGI ライブラリ - 関数を使用した HTML の生成</li>
1235 <li>CGI ライブラリ - クラスを使用した HTML の生成</li>
1236 <li>CGI ライブラリ - CRUD の用例 (MVC を使用)</li>
1237 <li>CGI ライブラリ - ユーザーによる用例 (登録、ログインと確認)</li>
1245 <div class="col-sm-12 col-md-4">
1247 <div class="panel panel-primary">
1248 <div class="panel-heading"> 拡張機能 </div>
1249 <div class="panel-body">
1252 <li>C/C++ による拡張機能の使用 (シンプルなAPI)</li>
1253 <li>C/C++ プログラムへの組み込み</li>
1254 <li>手軽に C/C++ ライブラリと接続するためのコード生成器 (Ring にて記述) があります。</li>
1255 <li>デスクトップとモバイル用の 2D ゲーム作成 (Allegro ライブラリ)</li>
1256 <li>デスクトップおよびモバイル用の GUI アプリケーションの作成 (Qt フレームワーク)。</li>
1263 <div class="col-sm-12 col-md-4">
1264 <div class="panel panel-primary">
1265 <div class="panel-heading"> これ以外にも </div>
1266 <div class="panel-body">
1271 <li>完成度の高い取扱説明書</li>
1287 <a id="ringbook" href="https://en.wikibooks.org/wiki/Ring" target="_blank" class="btn btn-default" style="width:100%">Wikibooks での Ring 紹介記事 (外部サイト)</a>
1288 <a id="ringsamples" href="https://rosettacode.org/wiki/Category:Ring" target="_blank" class="btn btn-default" style="width:100%">Ring のサンプルソ-ス (Rosetta Code)</a>