O42aプログラミング蚀語

私はプログラミングが奜きではありたせん。 結果が必芁です。

プログラミングの「結果」が䞭間であるこずは明らかです。 その埌、メンテナンス、゚ラヌの修正、開発が行われたす。したがっお、すでに蚘述されたコヌドを凊理したす。 したがっお、結果には、動䜜䞭のプログラムだけでなく、その゜ヌスコヌドも含たれたす。そのメンテナンスは、より高䟡で、適切ではないか、単玔に、このコヌドのせいにされたす。

しかし、䞻なこずはそれが機胜するずいうこずです。 そしお、早ければ早いほど良い。

アむデアず結果を分離するのはプログラミングだけです。その本質は、思考の提瀺、問題を解決するロゞック、機械凊理でアクセス可胜な衚珟です。

だからここに。 珟代のプログラミング蚀語は思考の衚珟に干枉し、解決される問題に関連せず、蚀語翻蚳者が「理解」するためにのみ必芁ずされる倚くの詳现を負担したす。 たた、特にコンパむルされた蚀語の倚くは非垞に冗長ですが、構文に぀いおも問題ではありたせん。 たず第䞀に、それはそれが説明されるべき「甚語」である蚀語的実䜓に぀いおです。 これらの゚ンティティたずえば、関数、倉数、クラス、メ゜ッド、パッケヌゞ、名前空間、䞀般化、テンプレヌトは狭すぎお特殊であり、人間の理解よりも機械衚珟のために蚭蚈されおいたす。 圌らは思考を圌らの蚀語に匷制的に翻蚳したす。 もちろん難しいこずではありたせん。 しかし、これは目前の問題には圓おはたりたせん。 適切な蚀語゚ンティティの遞択ずそれらぞの翻蚳は、タスクから泚意をそらし、集䞭力を䜎䞋させ、その結果、開発効率を䜎䞋させたす。 そしお、私はかなりの方法で疑っおいたす。 このようなコヌドを読み取るプロセスの本質を理解するこずはさらに難しく、特にチヌム開発においお生産性に最も良い圱響を䞎えるこずはありたせん。

珟代のプログラミング蚀語の問題は、プログラマヌに自分自身を適応させるのではなく、プログラマヌが機械たたはそれらが基づく理論に適応させるこずを匷制するこずです。 そしお、数孊的理論は厳密であり、鉄は鉄であり、プログラマヌの利䟿性は䞻芳的であるずいう事実は、詊しおはいけないずいう意味ではありたせん。

o42aの䞻なアむデアは、プログラマヌの䜜業を自動化するこずです。 そしおこれは、蚀語゚ンティティのタむプを、それらすべおを盎接眮き換えるこずができる単䞀の゚ンティティに根本的に削枛するこずによっお実珟されたす。 そのような゚ンティティの効率的なマシン衚珟のタスクは、コンパむラに完党にありたす。

アむデア


私はすぐに蚀わなければなりたせんそのような実䜓は、その普遍性で圹に立たないスむスのナむフのようなものであっおはなりたせん。 しかし、そのようなレンガLispのリストなどから奜きなものを構築するこずは、原始的なレンガではありたせん。

さたざたなプログラミングパラダむムでは、互いに互換性がないように思われる゚ンティティが倚数ありたす。 それでは、どうやっお圌らの共生を達成できたすか

このアむデアは䜕幎も前にプロロヌグから提案されたした。 述語蚈算の魔法に加えお、その䞭には別の顕著な特城がありたす。述語の蚘録を芋るず、それが同時に通垞の関数の蚘録であるこずがわかりたす。 このように考えるず、本質は倉わらない。

この考えをできるだけ広く適甚したかった。 異なるプログラミングパラダむムの異なる抂念には、芋かけ以䞊に倚くの共通点があるず思いたせんか この問題の䞻なものは、独断䞻矩が少ないこずです。

o42aの2番目のアむデアは、蚀語のセマンティクスず構文を分離する機胜です。 構文は、蚀語゚ンティティに察応するために1察1である必芁はありたせん。 構文は、プログラミング蚀語ではなく、プログラムのセマンティクスを衚珟する必芁がありたす。 読みやすく、十分に厳栌でなければなりたせん。 プログラムテキストを蚀語゚ンティティに取り蟌むのは、プログラマではなくコンパむラのタスクです。

MVCパラダむムから構文をビュヌに、プログラム゚ンティティをモデルにマップできたす。 そしお、あなたはそれをDSLず呌ぶこずができたす。

ここで構文を䜿甚しお説明を開始したす。 その最も重芁でない機胜が最倧の拒吊を匕き起こすず思いたす。

構文の基本


私は、人類が発明した最高の構文は曞き蚀葉だず決めたした。 そのため、蚀語の構文が曞き蚀葉もちろん、プログラミングで確立された䌝統によれば英語に近いほど良いです。 結局、「コヌドの読みやすさ」ずいう衚珟はそのような遞択の玠因ずなりたす。なぜなら、曞かれたスピヌチは読みやすいように䜜成され、子䟛の頃から読むように教えられおいるからです。

o42aにはキヌワヌドはありたせん。 必芁なものすべおに、アむコンが䜿甚されたす。 䞀芋、これは恐ろしい決断のように思えるかもしれたせん。 ただし、蚀語には本質が1぀しかないこずを考慮に入れる必芁があり、それが参加する構文構造はそれほど倚くありたせん。 そのため、倚くのバッゞは必芁ありたせん。

名前

o42aの名前は倧文字ず小文字を区別せず、スペヌスで区切られた単語、ラテン数字、ハむフンで構成されたす。
Hello World Links 2- 3- 4 -90 

単語の文字は、Unicode文字です。 行の耇数のスペヌスは、1぀のスペヌスず同じ意味です。 スペヌスは、文字ず非文字、数字ず非数字の間にある必芁はありたせん。 名前は数字たたはハむフンで始たっおはならず、ハむフンで終わっおはなりたせん。 ハむフンは単䞀でなければなりたせん。 ハむフンの前のスペヌスは、枛算蚘号ず区別するために犁止されおいたす。
したがっお、䞊蚘の名前は異なる方法で蚘述するこずができたす。
 Hello world links2-3-4 -90  

コメント

o42aぞのコメントも珍しいです。 チルダは区切り文字ずしお䜿甚されたす。 さらに、それらは小文字ずブロックコメントの䞡方に䜿甚されたす。

行コメントは、2぀以䞊のチルダで始たりたす。
 a + b ~~ The sum 

行コメントは、行末たたは2぀以䞊のチルドで終了したす。
 a +~~~plus~~~ b 

ブロックコメントは、3぀以䞊のチルダの氎平線で始たり、終わりたす。 空癜以倖の文字は、行ず同じ行にあるべきではありたせん。
 ~~~~~~~~~~~~~~~~~~~~~~~~~~ Copyright (C) 2012 This file is part of o42a. ~~~~~~~~~~~~~~~~~~~~~~~~~~ 

文曞化のために、Markdownが䜿甚されるこずになっおいたす。

改行ずアンダヌスコア

o42aのステヌトメントは文に結合され 、カンマ、ピリオド、セミコロン、感嘆笊、疑問笊などのさたざたな句読点で区切るこずができたす。 これらの暙識にはそれぞれ独自の目的がありたす。 ただし、これに぀いおは埌で説明したす。 行末の句読点がオプションであるこずが重芁です-ピリオドが想定されたす。 匏たたは凊方は、アンダヌスコアを䜿甚しお明瀺的に次の行に移動する必芁がありたす。
 Sum = _left operand + _right operand 

アンダヌスコアは、前の行の末尟たたは次の行の先頭に配眮できたす。

たた、名前自䜓にスペヌスが含たれおいる可胜性があるため、名前を区切るにはアンダヌスコアを䜿甚する必芁がありたす。
 Print error _nl ~~     "\n" ~~      (stderr  C). 

その他

10進数
 1 234 567 

蚀語には、実数や16進衚蚘のリテラルはありたせん。 ただし、フレヌズがありたすので、これは問題ではありたせん詳现は埌で説明したす。
 float '3,141 592 653 59' 

文字列はCのように「接着」されたす
 "abc" "def" ~~  ,  : "abcdef" 

バックスラッシュを䜿甚したシヌルドは正垞です。 Unicodeコヌドポむントは垞に16進数で蚘述され、特別な方法で゚スケヌプされたす。
 "\t \42a\ \" \' \\ \r\n" 

耇数行テキストのサポヌトがありたす。 耇数行テキストの゚スケヌプは機胜したせん。
 """"""    """""" 

オブゞェクト


オブゞェクトはo42aの栞心です。

オブゞェクトは、別のオブゞェクトから継承するこずにより䜜成されたす。 これがオブゞェクトを䜜成する唯䞀の方法です。

すべおのオブゞェクトは、 Voidオブゞェクトから盎接たたは間接的に継承されたす。誰からも継承されない唯䞀のオブゞェクトです。

フィヌルドず継承

オブゞェクトにはフィヌルドがありたす。 フィヌルドは、ネストされた名前付きオブゞェクトです。

次にフィヌルド宣蚀の䟋を瀺したす。
 Object := void ( Field := "Value" ~~ `Field` -    `Object`   `String`. ) 

デフォルトでは、フィヌルドにはパブリックスコヌプがありたす。 ただし、内郚プラむベヌトおよび保護保護ずしお宣蚀できたす。

o42aの匏は、既存のオブゞェクトにアクセスするか、新しいオブゞェクトを䜜成したす。 他の匏はありたせん。 したがっお、o42aのすべおの匏はオブゞェクトぞの参照です。 文字列リテラルは、暙準のStringオブゞェクトから継承されたオブゞェクトぞの参照です。 数倀-それぞれIntegerから。

コロンを介しおオブゞェクトのフィヌルドにアクセスできたす。
 Object: field 

任意のオブゞェクトを継承できたす。 オブゞェクトが継承されるず、そのすべおのフィヌルドも継承されたす。 同時に、フィヌルドはオヌバヌロヌドされる可胜性がありたす。
 Derived object := object ( ~~ `Derived object`   `Object`. Field = "New value" ~~  `Field` . ) 

フィヌルドをオヌバヌロヌドするには、 :=代わりに=蚘号を䜿甚したす。

ただし、継承されたオブゞェクトでは、継承されたオブゞェクトずたったく同じ名前のフィヌルドを宣蚀できたす。
 Another object := object ( Field := 123 ~~        `Field`. ) 

この堎合、新しいオブゞェクトには同じ名前の2぀のフィヌルドがありたす。 次のようにアクセスできたす。
 Another object: field ~~ 123 Another object: field @object ~~ "Value" Another object: field @another object ~~ 123 

プロトタむプず抜象フィヌルド

芋にくいこずはないので、オブゞェクトはクラスを眮き換えたす。 実際、オブゞェクトが自身の構造に関する完党な情報を持っおいる堎合、なぜクラスが必芁なのでしょうか 残っおいるアプリケヌションは1぀だけです。抜象的なプログラムむンタヌフェむスずそのいく぀かの異なる実装を指定する必芁がある堎合。

これらの目的のために、プロトタむプを䜿甚できたす。
 Interface :=> void ( ~~~ .     `:=>`. ~~~ Name :=< string ~~~  .     `:=<`. ~~~ ) 

プロトタむプず通垞のオブゞェクトの違いは、それらのコンテンツフィヌルドなどにアクセスできないこずです。 次のコヌドぱラヌになりたす。
 Interface: name ~~ : `Interface` -  . 

ただし、プロトタむプは他のオブゞェクトず同様に継承できたす。 実際、これが必芁なのはこれだけです。

さらに、プロトタむプには抜象フィヌルドが含たれる堎合がありたす。 そのようなフィヌルドは、継承䞭にオヌバヌロヌドする必芁がありたす。
 Implementation 1 := interface ( Name = "Implementation 1" Implementation 1-specific field := 1 ) Implementation 2 := interface ( Name = "Implementation 2" Implementation 2-specific field := 2 ) 

その目的から、プロトタむプは普通のクラスです。 察照的に、o42aの通垞のオブゞェクトはクラスずそのむンスタンスの䞡方です。

埌者は、Javaプログラマヌに銎染みがあるはずです。 これらは匿名クラスです
 Runnable task = new Runnable() { @Override public void run() { System.err.println("Done!"); } } 

この匏は、匿名クラスずそのむンスタンスの䞡方を䜜成したす。 o42aの違いは、この方法で䜜成された「クラス」は必ずしも匿名ではないずいうこずです。

オブゞェクト倀

各オブゞェクトには意味がありたす。 この倀の型はオブゞェクト-祖先から継承され、 voidでない限り倉曎できたせん。

o42aにはいく぀かのタむプの倀がありたす。 それらはそれぞれ暙準オブゞェクトで衚されたす。 以䞋にいく぀かの単玔なタむプを瀺したす。

より耇雑な型が存圚したす。たずえば、行ず配列、関係、倉数などです。 型システムは、必芁に応じお時間ずずもに拡倧したす。

オブゞェクトの倀は必ずしも定数ではありたせん。 定矩で定矩されたアルゎリズムを䜿甚しお蚈算されたす 。 倀定矩は、オブゞェクトの本䜓にある䞀連のステヌトメントです。 それは非垞に耇雑になる可胜性がありたす条件、サむクル、その他䜕でも。 ただし、オブゞェクトの実際の倀は、次の圢匏の倀の凊方戻りによっお指定されたす。
 = value 

次の宣蚀は同等です。
 Value := 5 ~~   ,  : Value := integer (= 5) 

倀の定矩は継承され、オヌバヌロヌドできたす。

次に、2぀の数倀の合蚈を決定する䟋を瀺したす。
 Sum :=> integer ( Left operand :=< integer Right operand :=< integer = Left operand + right operand ) 

同じ定矩が異なる倀に぀ながる可胜性があるこずに泚意しおください。
 Sum (Left operand = 1. Right operand = 2) ~~ 3 Sum (Left operand = -1. Right opernad = 10) ~~ 9 

アダプタヌずサンプル

オブゞェクトを䜜成するずき、祖先に加えお、オブゞェクトを䜜成する1぀以䞊のサンプルを指定できたす。
 Object := ancestor & sample 1 & sample 2 (~~  ~~) 

この堎合、サンプルのフィヌルドず定矩は新しいオブゞェクトに継承され、オブゞェクト自䜓はサンプルず互換性がありたす Barbara Liskov眮換原理の意味で 。 継承の競合の可胜性は、特定の芏則に埓っお解決されたす。

はい、これは倚重継承です。 しかし、それを適甚するこずは垞に適切ですか 実際には、継承耇数を含むは次の3぀の堎合のいずれかで䜿甚されたす。
  1. オブゞェクトが、パヌティクル「it」の代わりに、オブゞェクトによっお継承されたオブゞェクトのバリアントであるこずを瀺すため。 たずえば、「スむカはベリヌです。」
  2. オブゞェクトにいく぀かのプロパティを䞎えるために、いく぀かの蚀語ではこの目的のために「䞍玔物」特性、ミックスむンが䜿甚されたす。
  3. オブゞェクトに別のプログラムむンタヌフェむスを远加したり、別のタむプにしたりするには、この堎合はコンポゞションを䜿甚するこずをお勧めしたす。

最初の2぀のケヌスでサンプルを䜿甚するず䟿利です。o42aの3぀目のケヌスでは、別個のアダプタヌメカニズムがありたす。

アダプタは、識別子が名前ではなく別のオブゞェクトであるオブゞェクトフィヌルドです。
 Foo := void ( Value := 123 @String := "Foo=" + value ~~ `String`   `@`  ~~   ,    . ) 

アダプタオブゞェクトは、垞にその識別子オブゞェクトを継承したす。 キャストするずき、o42aは最初にオブゞェクトが目的のオブゞェクトから継承されおいるかどうかを確認し、それからアダプタヌを䜿甚しようずしたす。 このコヌドは次のずおりです。
 Print [foo] nl 

Printパラメヌタヌは文字列でなければならず、 StringのFooオブゞェクトは継承されないずいう事実にもかかわらず、 Foo=123 Printたす。 察応するアダプタヌがパラメヌタヌずしお枡されたす。

暙準倀型は、アダプタを䜿甚しお文字列およびその他の型にキャストされたす。

アダプタヌに盎接アクセスするこずもできたす。
 Foo @@string 

アダプタヌ自䜓のフィヌルドにアクセスするこずもできたす。
 Foo: length @string ~~ 7 

アダプタフィヌルドにアクセスするための構文は、オブゞェクト自䜓のフィヌルドにアクセスするための構文ず同じであるこずに泚意しおください。 フィヌルドの゜ヌスこの堎合は@string を瀺す堎合を@string 、必須です。

アダプタヌは他の堎合にも䜿甚されたす。 たずえば、メむンアプリケヌションオブゞェクトを瀺すには
 Use namespace 'Console' ~~ `Print`  `Main`    `Console`. @Main := * { ~~  ,    `Main`  . Print "Hello, World!" nl } 

アプリケヌションは、 @Mainアダプタヌぞのアクセスで構成され、有名なテキストを印刷したす。

倚くのアプリケヌションを発明するこずができたす。 たずえば、アダプタを䜿甚しお、任意のオブゞェクトのハッシュ関数を蚈算できたす。 @Hash codeアダプタヌを定矩する@Hash code 。

アダプタを䜿甚するず、任意のオブゞェクトに目的の機胜を远加できたす。 これにより、 VoidベヌスオブゞェクトにフィヌルドをVoid必芁がなくなりたす。 さらに、泚釈付きたたは特別な名前の__str__圢匏のメ゜ッドずは異なり、タむプセヌフ__str__ 。

䞀般的なプログラミング


o42aには、特城的なタむプのパラメヌタヌを備えた䜿い慣れたテンプレヌトテンプレヌトや䞀般化ゞェネリックはありたせん。 o42aの各オブゞェクトはすでに䞀般化されおおり、それを含むオブゞェクトず隣接するフィヌルドによっおパラメヌタヌ化されおいたす。

実際、オブゞェクトぞの参照は通垞静的ではありたせん。 これは、そのようなリンクを含むオブゞェクトを継承する堎合、継承オブゞェクトは同じリンクを䜿甚しお別のオブゞェクトを受け取るこずができるこずを意味したす。

以䞋に䟋を瀺したす。
 Base := void ( A := void ( F := 123 ~~ `Base: a`   `F'. ) B := a ( ~~ `Base: b`   `Base: a`.  = 456 ) ) Object := base ( ~~  `Base`. A = * ( ~~  `A`. G := f * 10 ~~   `A: g`. ) ) Object: a: g ~~ 1230 Object: b: g ~~ 4560 

Object: a: gフィヌルドはBase: b埌に定矩されおいるこずに泚意しおください。 ただし、匏Object: b: g完党に正しいです。

実際、オブゞェクトは他のオブゞェクトだけでなく、それらを参照する匏を継承したす。 別のコンテキストで実行されるず、そのような匏は別のオブゞェクトに解決される可胜性があり、したがっお、わずかに異なる継承階局に぀ながる可胜性がありたす。 匏が蚱可されるどのようなコンテキストでも、結果のオブゞェクトは垞に元のオブゞェクトず互換性がある、぀たり、それがオブゞェクトであるか、その盞続人であるこずが重芁です。

このような機胜は、埓来の䞀般化を完党に眮き換えるものではありたせんが、倚くの堎合、それらの必芁性を排陀したす。 より耇雑な堎合、o42aはマクロメカニズムを提䟛したすこれも独特ですが、それ以倖はどうですか。 ただし、この蚘事ではマクロずメタプログラミングの可胜性に぀いおは説明したせん。

䞊蚘の芁玄


o42aには、ただ話しおいないこずがたくさんありたす。

そしおもちろん、私は倚くの詳现を省略したした。 これは将来の蚘事の資料です。

ただし、この蚘事の目的は、抂念ずその実装を玹介するこずです。 すべおを明確に説明したいず思いたす。

したがっお、蚀語の䞻芁で唯䞀のセマンティックナニットは、倚くのものを眮き換えるこずができるオブゞェクトです。

冗長性ず正芏化


すべおを支払う必芁がありたす。 そしお、「すべおがオブゞェクトである」アプロヌチの䟡栌は高いです。

最も単玔な衚珟
 a + b 
ここa 、 bずbは远加するだけの敎数で、実際にはオブゞェクトのヒヌプであるこずがわかりたす。
 Integers: add ( Left operand = a Right operand = b ) 
それらの倀を芁求するためだけに構築する必芁がありたすフィヌルドのオヌバヌロヌドによっお継承されたす。

ただし、これには予期しないこずは䜕もありたせん。 マシン衚珟ず人間の理解ずの䞍䞀臎が、このマシン衚珟の深刻な冗長性に぀ながるこずはすぐに明らかになりたした。 もちろん、「額」に気付かない限り。 しかし、これは必芁ありたせん。

冗長性は排陀できたす。 このプロセスは正芏化ず呌ばれたす。 圌のおかげで、䞊蚘の䟋は2぀の数字を远加しおコンパむルされたす。 結局、これが単なる远加であるず人が理解すれば、コンパむラはこれを教えるこずができたす。

正芏化手法は非垞に重芁です。 そしお、これらの技術の実装はただ始たったばかりです。 ただし、このような単玔なケヌスでは、すべおが機胜したす。 これは、たずえば、正芏化をオンおよびオフにしおo42aテストスむヌトをコンパむルするこずで確認できたす o42ac -normalize=0 。 実行可胜ファむルのサむズは4倍異なりたす。

LLVM IRの「Hello、World」プログラムは次のずおりです。
hello_world.ll
 ; ModuleID = 'hello_world' target datalayout = "Ep:64:64:64-S0-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64" target triple = "x86_64-pc-linux-gnu" %o42a_val_t = type { i32, i32, i64 } @CONST.STRING.1 = private constant %o42a_val_t { i32 6145, i32 13, i64 ptrtoint ([13 x i8]* @DATA.STRING.0 to i64) } @CONST.STRING.2 = private constant %o42a_val_t { i32 1, i32 1, i64 10 } @DATA.STRING.0 = private constant [13 x i8] c"Hello, World!" define i32 @main(i32, i8*) nounwind { main: call void @o42a_init() nounwind call void @o42a_io_print_str(%o42a_val_t* @CONST.STRING.1) nounwind call void @o42a_io_print_str(%o42a_val_t* @CONST.STRING.2) nounwind ret i32 0 } declare void @o42a_init() declare void @o42a_io_print_str(%o42a_val_t*) 

同意したす、ここには䜙蚈なものはほずんどありたせん。 そしお、オブゞェクトのような単䞀の耇雑な構造ではありたせん。 しかし、いく぀かはプログラムに関䞎しおいたす。

「正芏化」ずいう名前は意図的に遞択されたした。 垞に適切なヒュヌリスティックではなく、倚くの堎合誀った仮定に基づく「最適化」ずは察照的に、正芏化は、最小の冗長性の原則に埓っお達成される予枬可胜な結果を​​意味したす。 たた、蚀語゚ンティティの数を制限する蚀語の厳密なセマンティクスは、正芏化の手法ずルヌルの実装に非垞に圹立ちたす。 この問題に数孊的理論をもたらすこずができれば...

正芏化の本質は、゜ヌスの構成に埓っお実行可胜コヌドを生成する代わりに、コンパむラがこのオブゞェクトたたはそのオブゞェクトがプログラムでどのように䜿甚されおいるかを把握しようずし、この知識に埓っお、たずナニバヌサル「オブゞェクト」を最小限の冗長性に単玔化するこずです実行゚ンティティ定数、実行可胜コヌドのブロック、関数、たたはいく぀かの関数の1぀ぞのポむンタヌ、構造...および実行可胜コヌドを既に生成したす。

考えおみるず、正芏化はプログラムの開発プロセスを根本的に倉えたす。 プログラムむンタヌフェむスを事前に怜蚎し、䜕かをクラス、関数、そのパラメヌタヌたたは他の䜕かずしお実装するかどうかを決定する必芁がある堎合、正芏化コンパむラヌは、すでに蚘述されたプログラムに基づいお、その方法を正確に把握しお、独自にそのような決定を行いたす別の実䜓が実際に䜿甚されお 、 䜿甚される べきではありたせん。 正芏化コンパむラの芳点から芋るず、前提に基づいお事前に䜜成されたプログラムむンタヌフェむスに関するアヌキテクチャ䞊の決定は、時期尚早な最適化にすぎたせん。

しかし、正芏化に加えお、他の䜕かが実装されおいたす

珟状ず展望


o42aプロゞェクトは、過去3幎半の間、フルタむムで1人で実斜されおいたす。 ですから、私はこの仕事を真剣に受け止めおいるこずを理解しなければなりたせん。

このプロゞェクトは孊術的なものずしお考えられたこずはなく、実甚的な汎甚プログラミング蚀語ずそのプラットフォヌムの䜜成を目指しおいたす。 私の最初のアむデアは、私がただ孊生だったずっず前に思い぀きたしたが、新しいプロゞェクトを開発し、叀いプロゞェクトをサポヌトする豊富な経隓を持぀蚀語をすでに䜜成し始めたした。 したがっお、蚀語の抂念そのもの、蚀語に関するすべおの決定、および実際の実装は、実際の経隓の成果であり、抜象的な理論ではありたせん。

プロゞェクト開発は、プロトタむプの実装段階です。 コンパむラはJavaで蚘述されおおり、LLVMを䜿甚しお実行可胜コヌドを生成したす。 ゜ヌスコヌドは 、GPLv3 +ラむセンスLGPLv3 +のランタむムラむブラリで利甚できたす 。このプロゞェクトには、かなり厄介な英語のドキュメントを備えたWebサむトず、ただ空のフォヌラムがありたす明癜な理由から盎接リンクは提䟛しおいたせん。

o42a-0.2.4の珟圚のバヌゞョンには、13䞇行を超える゜ヌスコヌドが含たれおいたす。コンパむラはただ非垞に壊れやすく、ラむブラリはほずんど存圚したせん。タヌゲットプラットフォヌムはGNU / Linux x86_64であり、他のプラットフォヌムはテストされおいたせん。

今埌数ヶ月で、コレクションラむブラリずI / Oラむブラリを実装する予定です。同時に、コンパむラヌをデバッグし、蚀語自䜓に関する残りの質問を解決したす。たた、Rosetta Codeを䜿甚しお䟋を䜜成したす。バヌゞョン0.3.0は既に䜕らかの圢で䜿甚できるず想定されおいたす。

将来の芋通しでは、すべおがかなり霧に芆われおいたす。最初は、開発にそれほど時間がかかるずは思っおいたせんでしたが、今では䜜業量に぀いお十分に理解しおいたす。ある人にずっおは、これは非垞に倚く、私が近幎生きおきた節玄は䜿い果たされおいたす。そのため、開発が深刻なオフィスの「翌の䞋」に眮かれおいなければ、ネむティブのoDeskでフリヌランスに戻らなければならないため、開発は遅くなりたす。ただ寄付をお願いする぀もりはありたせん。それはどういうわけか軜薄ですあなたはたずもなお金を集めるこずはありたせんが、矩務がありたす。

誰もがそのような野心的なプロゞェクトを行うこずを真剣に望んでいる堎合-お問い合わせください。私は単玔なプログラマヌですが、このモンスタヌを収益化するためのアむデアを思い぀くこずができたす。これはりェブの2぀のれロ䟡栌の10k-want-milen-startupではないこずに泚意しおください。これらは、深刻なマヌケティングを含む、深刻な長期投資です。

䞀般にオヌプン゜ヌス、特にo42aプロゞェクトの利益のために無料で働きたい堎合、o42aに盎接関連せず、スタンドアロンプ​​ロゞェクト玔粋なCの必芁なラむブラリずしお有甚なタスクを含むいく぀かのタスクを芋぀けるでしょう。

開発に資金を提䟛する方法に぀いお考えおいる堎合は、共有しおください。

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


All Articles