Nzym の紹介: マルチメディアに革命を起こすプログラミング言語に関するホワイトペーパー
Published on 12 Aug 2023
導入
Nzym 構文
数値 myInteger = 10;
メソッドは、ドット表記を使用してオブジェクトに対して呼び出されます。たとえば、Number 型のオブジェクトに対してAddメソッドを呼び出すには、次のように記述します。
6 を加算します。// myInteger の値が以前は 10 だった場合、今は 16 になります
また、すべてのステートメントを終了するためにセミコロン ( ; ) が使用され、コメントは 2 つのスラッシュ (//) と通常はその後にスペースを使用して作成されることにも注意してください。
プリミティブ型
- 数値– 整数、浮動小数点数、またはその両方の組み合わせを格納します
- 文字列– 文字を格納し、より複雑な式に使用できます。
- ブール型– 真偽値を格納するバイナリ型
- グループ– より複雑な要素を作成および定義するために使用されるオブジェクトの配列
- リンク– void または関数に誘導するユニークな型
クラスとメソッド
クラス Person;
文字列名=名前なし;
年齢 = 18;メソッド ShowName;
生の名前;
戻る;
戻る;
関数 GetPerson = 文字列;
人 randomPerson;randomPerson.name = 見知らぬ人;ランダムな人物の名前を表示します。
戻る;
上記のコードは、Person というクラスを作成し、name と age のプロパティをインスタンス化して、デフォルトの変数を設定します。また、Person には、指定された Person クラスの名前を出力するメソッドがあります。関数 GetPerson は、戻り値の型が String で、実際に新しい Person を作成し、Person クラスのメソッドを使用してその名前を画面に出力します。
継承
クラス スーパーヒーロー = 人;
グループのスーパーパワー = (レーザーアイ、超人的な力、飛行)
数値 activePower = 1;メソッド PowerInUse;
生の超能力[activePower];
戻る;
戻る;
SuperHero クラスは、Person クラスのすべてのプロパティとメソッドにもアクセスできます。
Nzymの流行語
Nzym: シンプルでオブジェクト指向、解釈型、命令型、マルチプラットフォーム、高性能、マルチスレッド、動的言語。
多くのプログラミング言語システムでは、パラダイム、型付け規則、言語が解決しようとしている問題に応じて、それらを特徴付ける一連の標準キーワードを使用しています。ここではバズワードと呼ぶこれらのキーワードを使用して、Nzym を説明し、その構造とエコシステムの中核となる部分を紹介します。
Nzym の開発を手がけた Sadomba-Mahari Computers (Private) Limited (略して SM) は、2010 年に会社登録から数か月後に Web 開発業界に参入し、ジンバブエの現地映画業界向けの専門ソフトウェアの開発にも着手しました。数年後には、Android、Windows Phone、iOS プラットフォームのハイエンド モバイル フォンをターゲットにしたモバイル アプリケーションの開発も開始しました。以下のインデントされた斜体部分は、SM が直面した問題の説明と、Nzym で提示されたキーワードの例を示しています。
単純
タイプ nameOfType = 値;タイプ名.メソッドタイプ = 値2;クラス NameOfClass = InheritFrom;関数 NameOfFx = ReturnType;メソッド名OfMethod = ReturnType;
C++ のあまり使われず、あまり理解されておらず、混乱を招く機能を削除し、多くの人にとって多大な苦痛と悲しみの原因となっていた C 型構文の混乱を招く側面を削除することで、よりシンプルな言語が誕生しました。
当初、SM はフルタイムのプログラマーを 3 人しか雇っておらず、そのうち 2 人は大学から採用されたインターンでした。彼らに課された最大の課題は、さまざまなタイプのクライアント向けにカスタマイズされた静的 Web サイトを作成し、複製しながら、制作時間を短縮することでした。もちろん、スタイルシートはプロジェクトごとに異なりますが、すべてのプロジェクトに存在する要素、特にナビゲーション、フッター ウィジェット、ホームページ、連絡先ページ、About ページ、製品のハイライトとポートフォリオを表示するページは、すべてのプロジェクトに存在する要素でした。プロトタイプを作成して制作するためのより簡単な方法が必要でした...
シンプルであることのもう 1 つの側面は、視覚的に移植可能であることです。Nzym の目標の 1 つは、あらゆるプラットフォームで実行でき、見た目と魅力を維持できるメディア アプリケーションの作成を可能にすることです。カスケーディング スタイルシートと Web テクノロジ要素を使用して標準的な視覚表示を作成することは、Nzym 開発のコア ターゲット機能になりました。ブラウザー、モバイル アプリケーション、デスクトップ アプリケーションでの画面の見え方は、すべてのプラットフォームで同じか、少なくとも外観と操作感が統一されます。
オブジェクト指向
Nzym のオブジェクト指向機能は、本質的にはそれ以前のほとんどの C 型言語の機能と同じですが、構文が異なり、ルールがはるかに緩和されています。Nzym スクリプト ファイルは Nzym プロジェクトの主要なオブジェクトであり、その中にはオブジェクトとして扱われるクラスも含めることができます。
SM のチームは、Web サイトの作業を行う際、問い合わせフォームやドロップダウン メニューなどの共通要素を、クライアントの要求に応じて多少変更を加えて再作成する必要があることを常に認識していました。主に静的 Web サイトの作成を扱っていたため、これらの共通要素を個別のファイルにグループ化して、必要に応じてクライアントの小さな変更でプロジェクトに簡単にインポートできる方法があればよいと考えました。たとえば、色の変更、フォームの特定のフィールドの追加または削除、メニューへのアイコンの組み込みなどです。
通訳
SM のチームは、Bootstrap や当時存在していた社内の定型文を使用して、さまざまな種類の Web サイトを再作成および生成していました。しかし、これらのコード ブロックには、特にさまざまなデバイスや古いブラウザーで表示する場合、多くの欠点がありました。
Nzym にとって、解釈プロセスの主な目標は、視覚的な移植性を維持するだけでなく、同じ機能とパフォーマンスを維持しながら、あらゆるデバイス、あらゆるプラットフォームで動作する製品を作成することでした。
命令形
SM のチームの仕事で難しかったことの 1 つは、すべてのプロジェクトで再利用している要素をどこに配置するかを正確に特定しなければならなかったことです。ある Web サイトでは、ページ上部のヘッダーの上にメニュー システムがあり、別の Web サイトではヘッダーの下にメニューがあります。メニューはヘッダー内、他のヘッダー要素の中にある場合もあれば、離れている場合もありました。メニューを含むコードの塊をどこに配置するかを把握することは、非常に注意を要する作業であり、プロジェクトからしばらく離れると、再開するのが常に困難でした。誰かが進行中のプロジェクトを他の人から引き継ぐ必要がある場合も、一目見ただけではプロジェクトの方向性や完了した内容がわからないため、同様に困惑しました。
Nzym の命令型プログラミングでは、明確な制御フローを表示できるため、言語の習得が容易になり、ユーザーはプログラムを変更、修正、最適化する力が高まります。また、プログラマーがコンピューター プログラムに正確に何をすべきかを指示できるため、効率性も高まります。手続き型の側面では、プログラムを小さな再利用可能な手順に分割でき、他のプログラムでも再利用できるというモジュール性の利点があります。命令型パラダイムにより、デバッグもはるかに簡単になります。
マルチプラットフォーム
ウェブサイトの作業が SM の主な仕事であった一方で、SM が参加した別の大きなプロジェクトがありました。それは、AVisPar (African Visual Package) と呼ばれるマルチメディア ソフトウェア パッケージの作業でした。AVisPar は、3D ビジュアライゼーション、映画、ゲーム、ゲーム アセット、視覚効果を作成するためのソフトウェア プログラムとツールのセットでした。AVisPar のユニークな点は、グラフィック カードを使用して高品質の 3D レンダリングを作成し、ほぼリアルタイムでディスクに保存できることでした。AVisPar は、最も一般的な商用デスクトップ オペレーティング システムだけでなく、一部の Linux ディストリビューションでも動作するように開発されました。
Nzym は、JavaScript と CSS を含む HTML ページを含む Web アセットを含む Web サイトを生成できるため、マルチプラットフォームと言えます。ただし、Nzym が ctlyst ファイルを生成する場合、Nzym Console が実装されている任意のプラットフォームでそのファイルを実行できます。
高性能
Nzym と Nzym Console の最新の実装は Rust を使用して作成されており、Rust コンパイラがコードを最適化して速度を上げることができるようになったため、この言語からさらに高性能な特性を継承しています。さらに、Rust 標準ライブラリは、Nzym の現在のビルドの作成に使用された多数の効率的なアルゴリズムとデータ構造を提供します。これが Nzym プログラムにとって何を意味するかを簡単に説明します。
- メモリの安全性: Rust の所有権システムにより、メモリが常に正しく管理され、メモリ リークやクラッシュを防ぐことができます。これにより、Nzym が手動でメモリを管理する時間を費やす必要がなくなり、パフォーマンスが大幅に向上します。
- 効率性: Rust のコンパイラーは、速度を重視してコードを最適化するのに非常に優れています。つまり、Nzym Console は、複雑なタスクでも可能な限り高速に実行できます。
マルチスレッド
AVisPar は、SM のチームにとってユニークなプロジェクトでした。関連するソリューションを作成する方法について多くの実験を行うことができましたが、チームが直面した大きな問題が 1 つありました。それは同時イベントの処理に関するものでした。AVisPar の最初のコード ベースは C++ で書かれており、Irrlicht などの他の 3D ゲーム エンジンのライブラリもいくつか含まれていました。特に 3D ゲーム エンジン Irrlicht には、1 台のマシンでさまざまなプロセスを実行するために使いやすく適応できるマルチスレッド機能がありました。しかし、さまざまな CPU やグラフィックス処理ユニットが関与するネットワーク上で複数のスレッドを実行すると、スレッドの処理が非常に難しく複雑になりました。
C と C++ は従来シングルスレッドであり、いくつかのライブラリを使用して複数のスレッドを作成すると、Java または Objective C を使用してマルチスレッドアプリケーションを作成するときにほとんどのプログラマが直面するのと同じ不利な点が生じます。通常、スレッドがどのように相互作用するかを把握する必要があるという点での複雑さ、設計が慎重に行われていない場合にオペレーティングシステムがスレッド間で切り替えることによるパフォーマンスの問題、そして最終的にはリソース使用量の増加から問題が発生します。一方、Nzym は、ctlyst ファイルの作成時に、並行コードに Rust の async/await モデルを使用します。ただし、Nzym には、JavaScript と同じように、Web Workers を使用するという点でのフォールバックもあり、Web サイトプロジェクト用に複数のスレッドを JavaScript に変換して、複数のスレッドを持つ JavaScript アプリケーションで得られるパフォーマンス、応答性、スケーラビリティの向上の恩恵を受けることができます。
動的
2011 年の初めから 2012 年の終わりまで、SM はモバイル アプリケーションの開発を依頼する顧客の増加を経験しました。SM は、当時大きな市場シェアを獲得していた Android フォンなど、Java をサポートする当時のスマートフォン向けのアプリを作成するために Java を利用しました。問題は、これらのプラットフォームのコードが同じ言語で書かれていても、同じではなく、同じにできないということでした。視覚的なプレゼンテーションは移植性がなく、機能も大きく異なり、開発に使用されるライブラリも異なっていました。
Javaはかつてモバイル言語の開発によく使われていたが、近年ではKotlinやSwiftなどの新しい言語に取って代わられている。Javaの主な問題は、
- パフォーマンス: Java は、一部の新しい言語ほどパフォーマンスが高くないため、アプリの速度が低下する可能性があります。
- 複雑さ: Java は複雑な言語であるため、学習や使用が困難になる場合があります。
- 断片化: Java にはさまざまなバージョンがあるため、すべてのデバイスで動作するアプリの開発が困難になる可能性があります。
Java は、ライブラリとツールのエコシステム、多くのベンダーによるサポート、成熟度の高さから、モバイル アプリケーションの開発で依然として人気がありますが、新しい言語が台頭しつつあります。Nzym の取り組みは、単一のコード ベースを目標として、できるだけ多くのデバイスにアプリケーションを簡単に、より良く、より速く作成して移植できるようにするという道を歩み、この目標に向かって突き進む Nzym は間違いなく注目すべき言語です。
結論
現在の開発
今後の展開
- より簡単かつ迅速にアプリを作成できる、構築済みのライブラリ
- より強力なクラスとオブジェクト
- より優れたデバッガー
- シンプルだがよりユーザーフレンドリーなIDE