ご要望に応じて...(Pikeプログラミング言語)

この記事は、Pikeの簡単な紹介です。 認めてください-この言語について聞いたことのある人はほとんどいません。 ただし、Pike言語は実稼働環境でも使用されます(OperaがTurboモードで動作するため)。



簡単な特徴:



-解釈されます(コンパイル中に何をすべきか考えられません)。

-構文:Cに基づいています(最小限の違い)。

-ライセンス-GNU GPL、GNU LGPLおよびMPL。

-オブジェクト指向;

-ガベージコレクターを使用します(実際に必要な場合は、プロンプトが表示されることがあります)。

-...



物語



この言語は1994年に登場しました。 FredrikHübinetteによる投稿。 前身はLPC言語と見なされます(主にゲーム開発用に作成されたC言語に基づいたオブジェクト指向言語-LPCこれは実際に興味深い話ですが-Wikiをコピーアンドペーストしても意味がありません。



私はすぐにドキュメントが大丈夫ではないことを言わなければなりません。 すべての例(初心者でも)が機能するわけではありません(Hello world!でもかまいません)。



インタプリタを起動して開始できます。 これを行うには、コンソールにパラメーターなしでpikeと入力するだけです。 そして実験。 しかし、それはしません。 書きましょう(たとえば、ノートブックに)。



こんにちは世界!



プログラムテキスト:



int main() { write("Hello world!\n"); return 0; }
      
      





このテキストをhello.pikeに保存し、コマンドラインで実行します: pike hello.pike



今ウィンドウで:



 int main() { GTK.setup_gtk(); object w = GTK.AboutDialog(); w.set_program_name("My GTK hello world program"); w.signal_connect("destroy", lambda(){exit(0);}); w.set_title("My first program"); w.set_comments("Pike is a dynamic programming language with a syntax similar to Java and C. "+ "It is simple to learn, does not require long compilation passes and has powerful built-in" + "data types allowing simple and really fast data manipulation."); array(string) arr1=({"Mr. Smith", "and others"}); array(string) arr2=({"Mrs. Smith", "and others"}); w.set_authors(arr1); w.set_artists(arr2); w.show_now(); return -1; }
      
      









ご覧のとおり、作業はGTKを通過します。 プログラムがすぐに動作を停止しないように、メイン関数から-1を返す必要があります。そうしないと、ウィンドウが表示されません。 終了とプログラムは、添付のラムダ関数lambda(){exit(0);}を使用してウィンドウを閉じるボタンによって実行されます。



公式チュートリアルでは、GTK.Alert(「Hello world!」)がこれに使用されていますが、私にとっては機能しませんでした(バージョン8.0)-どうやらチュートリアルは古くなっています。



データ構造:



基本的なデータ構造を操作する構文は優れています。



配列



 int main() { array(string) arr1 = ({ "red", "green", "white" }); write(arr1); write("\n"); array(string) arr2 = ({ "red", "green", "yellow" }); write(arr2); write("\n"); write(arr2 + arr1); //     write("\n"); write(arr2 & arr1); // write("\n"); write(arr2 | arr1); //  write("\n"); write(arr2 ^ arr1); //xor - ..        write("\n"); write(arr2 - arr1); // write("\n"); return 0; }
      
      





結果



レッドグリーンホワイト

レッドグリーンイエロー

赤緑黄赤緑白

レッドグリーン

赤緑黄白

黄白

黄色い



地図



 int main() { mapping map2 = (["red":4, "white":42, "blue": 88]); mapping map1 = (["red":4, "green":8, "white":15]); print_map(map2 + map1); print_map(map2 - map1); print_map(map2 & map1); print_map(map2 | map1); print_map(map2 ^ map1); return 0; } void print_map(mapping m){ array(string) arr; arr = indices(m); foreach(arr, string key){ write(key + ":" + m[key] + " "); write("\n"); }
      
      





結果



赤:4緑:8白:15青:88

青:88

赤:4白:15

赤:4白:15緑:8青:88

緑:8青:88



いわゆるmultisetもあります。 基本的にマッピングと同じですが、値はありません:



 int main(){ multiset o = (< "", 1, 3.0, 1, "hi!" >); print_multiset(o); return 0; } void print_multiset(multiset m){ array(string) arr; arr = indices(m); foreach(arr, string key){ write(key + ":" + m[key] + " "); }; write("\n"); }
      
      





結果



1:1 1:1 3.0:1:1 hi !: 1



オブジェクト



 class car { public string color; public string mark; private string driver; void create(string c, string m, string d){ color = c; mark = m; driver = d; } string who(){ return mark + " " + color + "\n"; } } int main(){ car car1 = car("red", "vaz", "Mike"); write(car1.who()); car car2 = car("green", "mers", "Nik"); write(car2.who()); write(car2.mark); return 0; }
      
      





結果



ヴァズレッド

マーズグリーン

マーズ



createメソッドはコンストラクターの役割を果たします。 アクセス修飾子があります。 ただし、静的修飾子には注意してください。 それはあなたが思ったことをまったく意味しないだけでなく、非難されています。



Java接続



そして今、私たちはJavaコードをジャークします(できたらどうして?):



 int main() { float pi = Java.pkg.java.lang.Math.PI; write("Pi = " + pi + "\n"); object syst = Java.pkg.java.lang.System; write("time = " + syst.currentTimeMillis() + "\n"); object str = Java.pkg.java.lang.String("...Hello!..."); write((string)str.substring(3,str.length()-3) + "\n"); object map2 = Java.pkg.java.util.HashMap(); object key = Java.pkg.java.lang.String("oops"); object val = Java.pkg.java.lang.String("ha-ha"); map2.put(key, val); write((string) map2.get("oops") + "\n"); object map = Java.JHashMap(([ "one":1, "two":2 ])); write((string) map.get("two") + "\n"); return 0; }
      
      





この例からわかるように、JavaクラスへのアクセスはJava.pkgを介して行われます。 印刷するときは、(string)を使用してJavaオブジェクトを文字列にキャストすることを忘れないでください。 通常のJavaメソッドを呼び出すことができます。 この例からわかるように、作業を容易にするためのHashMapの特別な設計もあります(ただし、これは驚くべきことではありません)。



インターネットで作業する



インターネットからページをダウンロードして、コンソールに表示します。



 int main() { Protocols.HTTP.Query web_page; web_page = Protocols.HTTP.get_url("https://pike.lysator.liu.se/about/"); string page_contents = web_page->data(); write(page_contents); return 0; }
      
      





パイクはソ連を覚えています:



 int main(){ Geography.Countries.Country c = Geography.Countries.USSR; write(c.name + "\n"); return 0; }
      
      





トピックからの逸脱
(この資料を準備している間、IPアドレスで国を決定するタスクと並行して、もちろん自分のアドレスで実験しました。プログラムを混同して「ソ連」が戻ってきたときに飛びました。)



おわりに



私の個人的な意見は好奇心language盛な言葉ですが、非常に生々しいものです。 または、特定のプロジェクト用に作成された言語と見なすこともできます。 ドキュメントは非常に不十分です。 しかし、すべての花を育てましょう。



参照資料



ホーム

ウィキペディア

言語の記事

github

Roxen(PikeのWebサーバー)



All Articles