イオプログラミング言語

私が卒業証書を擁護したという事実に基づいて、いくつかの自由時間が形成され、私はこの素晴らしい小さなことについてまとめて書くことにしました。

最近、匿名機能、カリー化、マップ/フォールド、メタプログラミング、その他のブラックジャックなど、非常に高いレベルのすべての言語に関心が高まっています。 神に感謝します。

タスクはより複雑になり、人々が比較的低レベルの開発ツールを使用する場合、解決される問題のフレームワークで抽象化のセットが小さい場合に状況がしばしば発生します。このようなものは「スパゲッティ」と自転車に見えます。 良いだけでは十分ではありません。 明らかな理由から、低レベルのプログラミングの役割を完全に軽視したくはありませんが。



最近では、2002年に、勇敢なアメリカ人のスティーブ・デコルテは、彼が何とかして自分の周りのすべてが好きではないことに気付きました。 まあ、それはそれのようですが、どういうわけか部分的に。 b-OOPの性質のSmalltalk、メタプログラミングシステムのLisp、LuaなどのプロトタイプのSelfのように、Lispはどこにでも小さくてクールに埋め込まれているためです。 しかし、それはすべて一度になります-何かが正しくありません。 勇敢なアメリカ人は火傷を負い、彼は自分のプログラミング言語であるIoに手を出した。



イオ



Ioは、動的な型付けと開発されたメタプログラミングシステム、匿名関数、および結果として得られるバンを備えた、小型で完全にオブジェクト指向のプログラミング言語です。 さらに、Ioは構文と内部の両方で非常に単純です。 オブジェクトとメッセージの2つのエンティティのみがあります。 他のすべては、これに基づいて構築されます。 一般に、言語全体は、ミニマリズムとシンプルさの禅の精神に従います。

Ioには、クラスの概念はなく、オブジェクトのみがあります。 オブジェクトは傾けたり修正したりできるので、別のオブジェクトを取得します(これがプロトタイプです)。 すべてのデータ型、値などはオブジェクトです。



さあ、行きましょう。



例のイオ



  「Hello world」プリント 


それは自己認識です。 多くの人(そしてイオとのプラトニックな関係の最初の段階で私)は非常に混乱していました。 それは簡単です。主なことは、Ioにはメソッドとプロパティがなく、スロットとメッセージがあることを理解することです。 この例では、文字列「Hello world」に印刷メッセージが送信されます。 従来のOOP言語では、次のようになります。

  「Hello world」.print() 


それは理解しやすいでしょう。



自慢のプロトタイプOOPについて直接説明します。

マッシュルーム:=オブジェクトのクローン
キノコisPoison:= false
キノコwhenEaten:= method(person、
   (self isPoison == true、 
    人殺し
   ) 
 )


このコードスニペットでは、Mushroomオブジェクトを作成し、それを食用として定義し、キノコが有毒である場合に食べられる人を殺すwhenEatenメソッドを作成します。

男:=オブジェクトのクローン
人間の状態:= "Living"
男が食べる:=メソッド(食品、
  食べるときの食事(自己)
 )
人殺し:=メソッド(
  自己状態:=「デッド」
 )


コードからわかるように、Muzhigオブジェクトを定義します。Muzhigは食べたり死んだりします(まあ、そのようなものです)。

セルゲイ・アナトリエヴィッチ・クリョーヒンが証明したように、レーニンはキノコだった。 したがって、Mushroomクラスを複製することでレーニンを定義できます。

レーニン:=きのこのクローン
レーニンisPoison:= false
レーニンが話す:=メソッド(
   「愛国心は最も深い感情の一つであり、 
   何世紀にもわたって何千年もの間、別々の故郷で守られていました。 
 )


また、変更のために、毒キノコを定義できます。

 InfectedMushroom:=マッシュルームクローン
 InfectedMushroom isPoison:= true 


農民に何かを与えようとすることができます:

 Man eat(マッシュルーム)
マンステートprintln


「Living」を印刷します。

男が食べる(感染キノコ)
マンステートprintln


したがって、「デッド」



レーニンが言っていた間:

レーニンが話す


男が来て食べました:

男が食べる(レーニン)


そして生き続けた。



メタプログラミング



Ioのメタプログラミングシステムは、同じLispの1000倍シンプルですが、それほど強力ではありません。 「マクロ」の概念はありません。ここでは、実行時にコードツリー全体を使用できます。 複雑な構文構造を持つ倒錯はありません。好きなように「オンザフライ」コードを変更するだけです。

私のお気に入りの例は、Ioのシングルトン実装です。

シングルトン:=オブジェクトのクローン
シングルトンクローン:=シングルトン


次に、同じオブジェクトを返すように標準のcloneメソッドを再定義しました。



最後に



イオは非常に若いですが、長年のクールな言語です。 その巨大な倒錯と力にもかかわらず、それは非常に簡単です。 この言語自体は、外国のシステムへの統合を容易にするために設計されており、パフォーマンスが必要な場合は、低レベル言語で簡単にモジュールを作成できます。 すでに十分なライブラリが彼のために書かれています。

Ioを積極的に使用するプロジェクトがいくつかあります。たとえば、 Itプロジェクトは、Pixarが開発したIoベースのスクリプト言語です。

現在、Ioのドキュメントをロシア語に翻訳しています。 もちろん、この記事ではほとんど説明していませんので、続きます(-;



参照資料



http://iolanguage.com



(私のブログから)



upd:ループ継続:IO 構文



All Articles