ポーランドの開発者の趣味プロジェクト-Go言語の改良および拡張バージョン





プログラミング言語が成功した兆候の1つは、それに基づいた新しい言語の出現です。 有名な例はJavaScriptです。 それに基づいて、TypeScript、GorillaScript、Kaffeine、Sweet.jsなどの言語が生まれました。



時間が経つにつれて、Googleが開発したGoプログラミング言語は、アドオンや方言の数でJavaScriptと競合できるようになります。



おでんは、Goエコシステム内で開発された静的な典型的な機能を備えた関数型言語である世界に既に公開されています。 同時に、Goアドインとして作成され、その最高の側面を吸収しました。



そして今、新しい言語-Haveが登場しました 。これは、Goの改良および補足バージョンになる可能性がすべてあります。 少なくとも、これは著者であるポーランドの開発者Marcin Wrohniakの意見です。



彼はこれがこれまでの趣味のプロジェクトであることを認めていますが、深刻なレベルに到達し、Goエコシステムの地位を確立したいと考えています。 彼のブログで、彼は言語のいくつかの機能とGoとの違いについて話しました



まず、Haveの書式設定は明らかに異なります:Goは中かっこを使用します(Cのように)。



if a() { b() } else { c() }
      
      





この点でPythonのパスをたどっています。



 if a(): b() else: c()
      
      





別のスタイルの違いは、変数、構造体、およびインターフェイスを宣言する方法です。



Goで構造とそのメソッドを宣言する:



 type A struct { x int } func (a A) String() string { return fmt.Sprintf("x:%d", ax) }
      
      





Wrohnyakは、この広告スタイルが迷惑なミスを避けるのに役立つと考えています。



 struct A: x int func String() string: return fmt.Sprintf("x:%d", ax)
      
      





 interface Reader: func Read(p []byte) (n int, err error)
      
      





テンプレートを使用した作業を実装しました。 Googleのデベロッパーは、シンプルさの理由でGoに追加しませんでした。 それにもかかわらず、Vrokhnyakは、これが存在しなければならない重要かつ強力なツールであると信じています-彼らが言うように、持っている必要があります:



 struct SampleStruct[T]: func Method(p T) T: return p
      
      





Tはデータ型の名前です。



 var a SampleStruct[int], b SampleStruct[string] var x int = a.Method(1), y string = b.Method("one")
      
      





同様に、テンプレートは関数で使用されます:



 func SampleFunc[T](p T) T: return p
      
      





開発者はそこで止まらず、いわゆる専門化を追加しました。 たとえば、関数内のタイプに応じて、このデータ処理またはそのデータ処理を実行できます。 分岐は、「when」キーワードを使用して行われます。



 func SomeFunc(): when int is int: print("int is int, who would've thought?") is string: print("int is string, better report a compiler error!")
      
      





コンパイル段階で、あるタイプまたは別のタイプの置換が発生します。 Vrokhnyakは、パターンのコンテキスト以外では、「いつ」は実用的ではないと指摘しています。



 func CopyBytes[T, K](src T, dst K): when T, K is []byte, implements io.Writer: #        pass is []byte, []byte: #         pass implements io.Reader, is []byte: #        pass implements io.Reader, io.Writer: #        pass default: #  -   pass
      
      





Haveは開発の初期段階にあるため、その中のGo問題の多くは解決されていません。 たとえば、Goでエラー処理を実装すると、同じタイプのコードを書くのに時間がかかります。



著者には大きな計画がありますが、いつものように、時間はほとんどありません。 近い将来、言語は改善されます。 Haveでは、かなりの量のGo機能がまだ実装されていません。 近い将来、これが優先されます、とVrokhnyakは述べています。



2番目に重要なタスクは、Goとの互換性を確保することです。Haveで記述されたプロジェクトでGoをプログラミングできるようにします。



GoはGoogle内部で開発されました。 Goの初期開発は2007年9月に始まり、Robert Griesmer、Rob Pike、Ken Thompsonが指揮しました。 公式には、この言語は2009年11月に導入されました。



Go言語は、最新の分散システムおよびマルチコアプロセッサで実行される非常に効果的なプログラムを作成するためのシステムプログラミング言語として開発されました。 これは、C言語の代替を作成する試みと見なすことができます。 少なくとも、Go開発者はそう信じています。



All Articles