「CのOOCはJavaのScalaに似ています」

今日、 Hacker Newsで 、(一見非常に)新しい「 ooc 」言語に関する投稿出会いました。 彼は一日中すべてのものを投げ、ピッキングを始めました-それは非常に興味深いようです。



したがって、「 oocは、モダンで、オブジェクト指向で、 機能的に(綿) 、高レベル、低レベル、セクシーなプログラミング言語です。 」 ( まさにそれを代表するの開発者です。まあ、「 コンパイル済み 」であることも付け加えます)



基本的に、 oocはガベージコレクターを備えたC言語の高レベル言語トランスレーターです。



あるサイト訪問者が言ったように、「 CのoocはJavaのScalaに似ています 」(jimbokun @ HN )。



oocの必須の「Hello、World」:



hello.ooc

"Hi, softer world =)" println()





出力はhello.cおよびhello.exeです。



oocコンパイラーはこれをcコードに変換し、利用可能なcコンパイラー(gcc、mingw、icc、tinycc)を使用してhello.exe(または./hello)を作成します。 Tinyccのサポートは宣言れていますが、実際にはtinycc自体でC99のサポートを待っています(作成者は回避策を講じると約束しましたが、まだ機能しません)。したがって、かなり弱い.exeサイズを確認しています(mingwのgccは他のものを作成しません)。



そのため、言語にすでにあるもの:クラス、オブジェクト、厳密な型付け、型推測( n := "Beer" length()



)、連鎖( .dothis().dothat()



)、cライブラリとの互換性、抽象クラス、C ++のテンプレート、リスト、スパースリスト、ハッシュ(ArrayList、SparseList、HashMap)、 for (i in list) { ... }



、C関数とクラスのラッパー、演算子のオーバーロード、ポリモーフィズム、コレクターガベージ(切断可能)、インポートファイル/名前(.hは不要、ただし.hはexternとして使用可能)、クロージャー、エッフェルのコントラクト、例外、リフレクション、パターンマッチング、範囲、三項演算子、バインディング、ジェネリック、コルーチン、GTK、SDL 、OpenGL、GLU、GLUTバインディング...



同志varjag @ HNが言ったように、「これはRubyユーザーによる冗談だと思いますが、本文には見当たりません。」いいえ、この言語は実際に存在します。 例、リンク、インストール、水中障害-カットの下...



その他の例


機能

add: func(a, b : Int) -> Int {

a + b

}






楽しい

for (i in 0..10) {

printf( "%d\n" , i)

}



for (i in list) {

printf( "%d\n" , i)

}






リスト

ints := SparseList<Int> new ()

ints add(13)

lucky := ints get(0)






OOP

Vector3f: class {

x, y, z : Float

init: func(=x, =y, =z)

}






oocはxがfloatであることを知っているため、このxに保存するだけでなく、タイプを省略できます(「ooc」では、オブジェクトのメソッドとプロパティの前のポイントは不要です)。 上記のC ++の類似物:

class Vector3f {

float x,y,z;

Vector3f( float x_, float y_, float z_): x(x_), y(y_), z(z_) {};

};

// ( C++ - ).






連鎖

me := RandomGuy new ()

me eatBreakfast() .drinkCoffee() .yawn() .goBackToBed()






ただし、これらのメソッドでこれ返す必要はありません



抽象クラス

Animal: abstract class {

shout: abstract func

}



Dog: class extends Animal {

shout: func { "Woof, woof!" println() }

}



Cat: class extends Animal {

shout: func { "Meoooww!" println() }

}






ガベージコレクターを使用したmalloc

myRawArray := gc_malloc(Int size * 100) as Int* // free .





GUIアプリケーション

use gtk

import gtk/[Gtk, Window] // acts like: import gtk/Gtk, gtk/Window

exit: extern func



main: func {

w := Window new ( "Hi, world" )

w setUSize(800, 600) .connect( "destroy" , exit) .showAll()

Gtk main()

}






ファイルを読む

import io/FileReader



main: func {

fr := FileReader new ( "/etc/hosts" )



while (fr hasNext())

fr read() print()



}






コルーチン(!) (スタックオーバーフローなしで1つのサブプログラムから別のサブプログラムにコード実行を転送する):

import coroutine/Coro

firstCoro, secondCoro : Coro



secondTask: func (context: Pointer) {

num := 0

printf( "secondTask created with value %d\n" , (context as Int*) @)

while ( true ) {

printf( "secondTask: %d %d\n" , secondCoro bytesLeftOnStack(), num += 1)

secondCoro switchTo(firstCoro)

}

}



firstTask: func (context: Pointer) {

value := 2

num := 0

printf( "firstTask created with value %d\n" , (context as Int*) @)

secondCoro = Coro new ()

firstCoro startCoro(secondCoro, value &, secondTask)

while ( true ) {

printf( "firstTask: %d %d\n" , firstCoro bytesLeftOnStack(), num += 1)

firstCoro switchTo(secondCoro)

}

}



main: func {

mainCoro := Coro new ()

value := 1

mainCoro initializeMainCoro()

firstCoro = Coro new ()

mainCoro startCoro(firstCoro, value &, firstTask)

}








ソース/ブログにまだあったものから: atexit、iniparser、filewriter、list、map、stack、os(launch、subprocess)、regexp、threads、i / o、events



GTK / SDL / OpenGL / GLU / GLUTバインディング。



そのため、この言語は非常に「セクシー」です。 残念ながら、もちろん、まだ湿っています。 多くの間違いや問題がありますが、もしあなたが最先端に住みたいなら、ハッキングの世界へようこそ。



Oocインストール


何が必要ですか?



1. git (配布キットをダウンロードする必要があります)

2. Java JDK 5以降

3. Linuxの場合はgcc、Windowsの場合はMingW (リンクはmingw.orgにはつながりませんが、より現代的なビルドになりますが、gcc 4に追いついた実際のmingwが含まれている場合があります)

4. Ant (システムをビルド、「make」と入力)



JAVA ??? コンパイルされたファイルはJava VMを使用しません ooc-> cトランスレータ自体のみがJavaを使用します(透過的)。 エンドユーザーはネイティブコードを受け取ります。単純に言うと、.exeで、どのような形式のJavaも必要ありません。



上記のすべてを配置し、Windowsではgit



、mingw / bin



、java / bin



、ant / bin



フォルダーをPATHに追加します(Linuxでは、yum install / sudo apt-getすべてが既に構成されています)。



正しいPATHの確認:コマンドラインでコマンド「git」、「javac」、「ant」、「gcc」を順番に実行します。 何かが見つからなかった場合(「パスまたはファイル名が正しく指定されていない」)-この特定のパッケージが展開された場所を探し、PATHにパスを追加します。



KO:PATHは、 Windows + Break、Advanced、Environment variables、下部ウィンドウのChangeで示されます 。 変更するたびに、[OK]をクリックしてコマンドラインを再起動する必要があります。 セパレーター (セミコロン)。



コマンドラインに移動して、次の操作を行います。



git clone git: //github.com/nddrylliog/ooc.git

cd ooc/

ant






すべてが成功した場合、 ooc.jar



ファイルがooc.jar



場所を見つけooc/bin/ooc.jar



。これは、おおよそooc/bin/ooc.jar



です。



(Windowsの下で)ooc.batファイルを作成し、PATHのどこかに配置します。



java -jar d:\ooc\bin\ooc.jar %*



(ここでooc.jarへのパスを入力します-上記を参照)



Linuxの場合:



sudo cp utils/ooc /usr/bin/

export OOC_DIST=/home/username/ooc/




/ home / username / ooc /にダウンロードした場合



hello.ooc



を作成しhello.ooc





main: func {

"Hello world!" println()

}






今私たちは:

ooc hello.ooc -r



理想的にはhello.exeを取得します。 (「-r」は「実行」ですが、「-noclean」を実行できます-生成された.cソースは削除しないでください)。



まあ、それは動作しますか?


...しかし、実際には-言語はまだ生です。 真剣に生なので、確かに何らかのエラーが発生し、irc.freenode.comのチャネル#ooc-langに移動します。 同志「nddryliog」は言語の作者です。 私たちは質問をし、回答を得ます。 (私は時々そこに「slavav」と表示されます)。



ちなみに、言語は開発中です。著者はチャンネルの言語構文の変更や革新についても議論することを嫌っていません (彼らは自分たちで書いています-「 言語導入するための革新を提案し、それを行う方法を考えます」)。 ここでのプラスは、言語の背後に大きな組織や委員会がないので、すべてが急速に発展しており、あなたの個人的な意見も考慮することができます。



実際、hello.exeを取得することはできましたが、たとえばWindowsのFileReaderを使用すると、プロセスがハングしてハングします。 しかし、開発者は作業し、探し、完成しています。 チャンネル番号ooc-langは非常にフレンドリーで、リアルタイムで問題を本当に助けてくれます(特にnddryliogがオンラインの場合)。



一方、Rockがあります-ooc自体で書かれたoocコンパイラです。 だから私はすべてがそんなに悪いとは思いません。 Linuxの作者がそれを持っているだけで、その下でより多くのテストを行っているため、Windowsとの互換性は優れているとは言えません。



はい、コンパイルが遅くなる場合-ウイルス対策を無効にします。 私のhello.exeは30秒間コンパイルされ、ウイルス対策(Comodo)は3秒でオフになりました。



チャンネルのサポートが必要な場合は、「 git pull && ant clean && ant



」を使用して言語バージョンを更新できます。



aglitskyの詳細:

ホームページ、例

Oocインストール

プロジェクトブログ (必読!)

Hacker News(FAQ)でのディスカッション

docs.ooc-lang.orgは便利なドキュメントですが、たとえば、 oocからcコードを利用可能にする方法についてはそれほどではありません。

GTK、GLなどのバインディング + Rock-ooc自体で書かれた実験的なoocコンパイラ。



バインディングがダウンロードされ、 oocフォルダーに関連するsrc/sdk



に展開されることが実験的に検出されます。 (私はoocがそれらを探しているFileMonを調べました。サイト上でそれについての言葉ではありません)。



免許


ちなみに、 oocコード BSDライセンスに基づいて配布されます。ロシア語では、「 ダウンロードして使用し 、ブルースを歌って庭を復venすることができます 。ほこりをしないでください! どこでも開くために ソースコード は必要ありません。 訴えないことを約束する場合は、コードを印刷してシートを鼻に入れることができます。 作者のみを示してください 。」(明確にするために、言語の作者は私ではなく、言語とは何の関係もありません。私はコミュニティと有望な発見を共有しています)。



OOC。 最終的にスローガンがなくなる


メインプロジェクトのスローガンはおもしろいです-それらはリフレッシュとともに変化します。 その中には「Y2k互換」があります:)、「退屈に対するあなたの保険」、「オブジェクト指向、サブツイスト」、「手作りのハッキング」、「完璧にもたらされた間違い」、「遅かれ早かれ、スローガンを使い果たします」...



ドキュメント


ooc-lang.org- 作成日: 30-May-2009なので、暑いうちに分解してみましょう。 (一般的に、言語は5か月です)



ここで、はい、トラブル。 著者自身がこれを認めているので、あなたが道に沿って理解するすべて-公開しよう-次を助けてください。



別の障害は、gitリポジトリが先日その場所を変更したため、存在しないgithub.comへのリンクを見つけることができることです。この場合、URLの「 github.com amoswenger / ...」を->「 github .com nddrylliog / ...」。



ソースコードは、 ソースコードハイライターで強調表示されました。





ヨイハジ

ハブルからの眺め



All Articles