「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 / ...」。

゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。


ペむハゞ
ハブルからの眺め

Source: https://habr.com/ru/post/J72538/


All Articles