Nzym の紹介: マルチメディアに革命を起こすプログラミング言語に関するホワイトペーパー

Published on 12 Aug 2023

Nzym ロゴ

導入

Nzym は、プログラミングをより簡単、シンプル、高速にし、特にマルチメディア アプリケーションで、制作時間を短縮してより良い結果を生み出すことに重点を置いた新しいプログラミング言語です。Nzym の中核となるのは、単独で存在することも、他のオブジェクトとリンクして存在することもできるスクリプト ファイル オブジェクトです。これらのスクリプト オブジェクトを通じて、Nzym インタープリターはプログラムやコンテンツ ページを生成できます。このドキュメントでは、この言語とその新しい概念を紹介します。


Nzym 構文

Nzym の基本的な構文は非常にシンプルです。オブジェクトは、適切な型の変数に値を割り当てることによって作成されます。たとえば、Number 型の新しいオブジェクトを作成するには、次のように記述します。

数値 myInteger = 10;

メソッドは、ドット表記を使用してオブジェクトに対して呼び出されます。たとえば、Number 型のオブジェクトに対してAddメソッドを呼び出すには、次のように記述します。

6 を加算します。
// myInteger の値が以前は 10 だった場合、今は 16 になります

また、すべてのステートメントを終了するためにセミコロン ( ; ) が使用され、コメントは 2 つのスラッシュ (//) と通常はその後にスペースを使用して作成されることにも注意してください。

プリミティブ型

Nzym は、5 つの基本的なプリミティブ型を導入します。
  • 数値– 整数、浮動小数点数、またはその両方の組み合わせを格納します
  • 文字– 文字を格納し、より複雑な式に使用できます。
  • ブール型– 真偽値を格納するバイナリ型
  • グループ– より複雑な要素を作成および定義するために使用されるオブジェクトの配列
  • リンク– void または関数に誘導するユニークな型

クラスとメソッド

Nzym クラスを使用して、カスタム タイプを作成できます。プロジェクト内の各スクリプト ファイルは、クラスとして呼び出してアクセスできますが、スクリプト ファイル内では、他のクラスを作成できます。Nzym は、メソッドについても独自の考え方を持っています。メソッドの作成方法には 2 つのタイプがあり、これは、メソッドが作成される場所に基づいています。ネストされたクラスに含まれるメソッドは、単にメソッドと呼ばれます。クラスの外にあるメソッドは、関数と呼ばれます。次のコードは、2 つの例を示しています。


クラス Person;
文字列名=名前なし;
年齢 = 18;
メソッド ShowName;
生の名前;
戻る;
戻る;
関数 GetPerson = 文字列;
人 randomPerson;
randomPerson.name = 見知らぬ人;
ランダムな人物の名前を表示します。
戻る;

上記のコードは、Person というクラスを作成し、name と age のプロパティをインスタンス化して、デフォルトの変数を設定します。また、Person には、指定された Person クラスの名前を出力するメソッドがあります。関数 GetPerson は、戻り値の型が String で、実際に新しい Person を作成し、Person クラスのメソッドを使用してその名前を画面に出力します。


継承

Nzym クラスは他のクラスから継承できます。これにより、コードを再利用して、より複雑な型を作成できます。クラスから継承するには、クラスを作成した後に等号を使用します。たとえば、次のクラスは 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 で提示されたキーワードの例を示しています。

単純

Nzym 開発の主な方針の 1 つは、多くのトレーニングを必要とせずに簡単にプログラムでき、以前の概念といくつかの類似点を持ちながらも、プログラミングの初心者でも興味をそそられるような、よりシンプルなタッチを持つシステムが必要であるということでした。Nzym 開発時に教えられていた最も一般的なプログラミング言語は、C++、C#、Java、Python など、C++ 構文に似たものでした。これらのプログラミング言語もオブジェクト指向です。C++ には、メモリ管理の欠如やポインタの概念、演算子のオーバーロードなど、他の言語にはないレベルの複雑さがありましたが、他の言語はそれらの概念を改善しようとしましたが、ガベージ コレクション、多重継承、広範な自動強制などの追加のオーバーヘッドや概念があり、プログラマがそれらを習得するには依然として急な学習曲線が残っていました。
Nzym はオブジェクトに焦点を当て、中括弧や多くの括弧の種類、さらには引用符さえもまったく不要にします。Nzym のすべてのステートメントは、通常、主に次の形式の 2 つまたは 3 つの部分で構成されます。

タイプ nameOfType = 値;
タイプ名.メソッドタイプ = 値2;
クラス NameOfClass = InheritFrom;
関数 NameOfFx = ReturnType;
メソッド名OfMethod = ReturnType;

C++ のあまり使われず、あまり理解されておらず、混乱を招く機能を削除し、多くの人にとって多大な苦痛と悲しみの原因となっていた C 型構文の混乱を招く側面を削除することで、よりシンプルな言語が誕生しました。

当初、SM はフルタイムのプログラマーを 3 人しか雇っておらず、そのうち 2 人は大学から採用されたインターンでした。彼らに課された最大の課題は、さまざまなタイプのクライアント向けにカスタマイズされた静的 Web サイトを作成し、複製しながら、制作時間を短縮することでした。もちろん、スタイルシートはプロジェクトごとに異なりますが、すべてのプロジェクトに存在する要素、特にナビゲーション、フッター ウィジェット、ホームページ、連絡先ページ、About ページ、製品のハイライトとポートフォリオを表示するページは、すべてのプロジェクトに存在する要素でした。プロトタイプを作成して制作するためのより簡単な方法が必要でした...

シンプルであることのもう 1 つの側面は、視覚的に移植可能であることです。Nzym の目標の 1 つは、あらゆるプラットフォームで実行でき、見た目と魅力を維持できるメディア アプリケーションの作成を可能にすることです。カスケーディング スタイルシートと Web テクノロジ要素を使用して標準的な視覚表示を作成することは、Nzym 開発のコア ターゲット機能になりました。ブラウザー、モバイル アプリケーション、デスクトップ アプリケーションでの画面の見え方は、すべてのプラットフォームで同じか、少なくとも外観と操作感が統一されます。

オブジェクト指向

プログラミング言語を説明するときに最も頻繁に使用される流行語の 1 つであると言えますが、実際には Nzym を説明する際に重要な概念です。プログラミング パラダイムとしてのオブジェクト指向プログラミングは、データとコードで構成されたオブジェクトに基づいています。Nzym では、データはオブジェクトのさまざまなプロパティを構成する型の形式であり、コードはメソッド (プロシージャ) に格納されます。Nzym は、インターフェイスの明確な定義を容易にし、再利用可能な要素を提供できるようにするために、オブジェクト指向設計を活用しています。

Nzym のオブジェクト指向機能は、本質的にはそれ以前のほとんどの C 型言語の機能と同じですが、構文が異なり、ルールがはるかに緩和されています。Nzym スクリプト ファイルは Nzym プロジェクトの主要なオブジェクトであり、その中にはオブジェクトとして扱われるクラスも含めることができます。

SM のチームは、Web サイトの作業を行う際、問い合わせフォームやドロップダウン メニューなどの共通要素を、クライアントの要求に応じて多少変更を加えて再作成する必要があることを常に認識していました。主に静的 Web サイトの作成を扱っていたため、これらの共通要素を個別のファイルにグループ化して、必要に応じてクライアントの小さな変更でプロジェクトに簡単にインポートできる方法があればよいと考えました。たとえば、色の変更、フォームの特定のフィールドの追加または削除、メニューへのアイコンの組み込みなどです。

通訳

Nzym スクリプト ファイルは、Nzym Builder インタープリタ (Elephant と呼ばれます) によって解釈され、出力は、Web サイト全体から、他の Nzym プロジェクトで使用するライブラリとして機能する nzym ファイル、または任意のデバイスまたはマシンで Nzym Console の実装を使用して実行できる Nzym バイトコードである ctlyst ファイルになります。現在、Nzym Console はほとんどのオペレーティング システムで使用できますが、コンパイルされた Nzym プログラムを任意のデバイスで実行できるようにする実装がさらに開発されています。ただし、Nzym プログラムが Web サイトに解釈されると、出力は通常は静的 Web サイトとして、任意のデバイスまたはホストするサーバーにすぐに移植できるようになります。

SM のチームは、Bootstrap や当時存在していた社内の定型文を使用して、さまざまな種類の Web サイトを再作成および生成していました。しかし、これらのコード ブロックには、特にさまざまなデバイスや古いブラウザーで表示する場合、多くの欠点がありました。

Nzym にとって、解釈プロセスの主な目標は、視覚的な移植性を維持するだけでなく、同じ機能とパフォーマンスを維持しながら、あらゆるデバイス、あらゆるプラットフォームで動作する製品を作成することでした。

命令形

Nzym はステートメントを使用してプログラムの状態を変更するため、この場合、プログラムが各ステップでどのように動作するかを記述する命令型プログラミング言語です。また、Nzym は、関数を使用して 1 つ以上の手順からプログラムを構築し、状態の変更を特定のメソッドにローカライズできるという意味で、手続き型プログラミングの原則に従うこともあります。

SM のチームの仕事で難しかったことの 1 つは、すべてのプロジェクトで再利用している要素をどこに配置するかを正確に特定しなければならなかったことです。ある Web サイトでは、ページ上部のヘッダーの上にメニュー システムがあり、別の Web サイトではヘッダーの下にメニューがあります。メニューはヘッダー内、他のヘッダー要素の中にある場合もあれば、離れている場合もありました。メニューを含むコードの塊をどこに配置するかを把握することは、非常に注意を要する作業であり、プロジェクトからしばらく離れると、再開するのが常に困難でした。誰かが進行中のプロジェクトを他の人から引き継ぐ必要がある場合も、一目見ただけではプロジェクトの方向性や完了した内容がわからないため、同様に困惑しました。

Nzym の命令型プログラミングでは、明確な制御フローを表示できるため、言語の習得が容易になり、ユーザーはプログラムを変更、修正、最適化する力が高まります。また、プログラマーがコンピューター プログラムに正確に何をすべきかを指示できるため、効率性も高まります。手続き型の側面では、プログラムを小さな再利用可能な手順に分割でき、他のプログラムでも再利用できるというモジュール性の利点があります。命令型パラダイムにより、デバッグもはるかに簡単になります。

マルチプラットフォーム

Nzym は Web だけでなく、マルチメディア アプリケーション全体を念頭に置いて設計されました。マルチメディア アプリケーションとは、テキスト、画像、ビデオ、オーディオなどのさまざまな種類のメディアを組み合わせて、視聴者に情報を伝達するインタラクティブ ソフトウェアを指します。これらのアプリケーションは、さまざまなオペレーティング システム、ゲーム コンソール、携帯電話や時計などの消費者向けデバイスなど、さまざまな種類のデバイスやハードウェアで使用されている最も一般的な種類のソフトウェアです。

ウェブサイトの作業が SM の主な仕事であった一方で、SM が参加した別の大きなプロジェクトがありました。それは、AVisPar (African Visual Package) と呼ばれるマルチメディア ソフトウェア パッケージの作業でした。AVisPar は、3D ビジュアライゼーション、映画、ゲーム、ゲーム アセット、視覚効果を作成するためのソフトウェア プログラムとツールのセットでした。AVisPar のユニークな点は、グラフィック カードを使用して高品質の 3D レンダリングを作成し、ほぼリアルタイムでディスクに保存できることでした。AVisPar は、最も一般的な商用デスクトップ オペレーティング システムだけでなく、一部の Linux ディストリビューションでも動作するように開発されました。

Nzym は、JavaScript と CSS を含む HTML ページを含む Web アセットを含む Web サイトを生成できるため、マルチプラットフォームと言えます。ただし、Nzym が ctlyst ファイルを生成する場合、Nzym Console が実装されている任意のプラットフォームでそのファイルを実行できます。

高性能

ctlyst ファイル形式に関しては、Nzym コンソールは、実行時にアプリケーションが実行される特定の CPU のマシン コードに直接変換するように設計されています。このファイル形式は、化学反応を加速させるものを指す「触媒」という言葉にちなんで名付けられています。ただし、この場合、Nzym コンソールは ctlyst ファイルを実行し、プログラムがシステム上の他のアプリケーションと同じように実行できる環境を実現します。

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 アプリケーションで得られるパフォーマンス、応答性、スケーラビリティの向上の恩恵を受けることができます。

動的

Nzym は現在も開発が進められており、進化を続けています。Nzym は、進化を続けるテクノロジー環境に適応するように設計されています。Nzym コンソールとその実装が継続的に開発および拡張されることにより、Nzym はスマートウォッチやスマートフォンなどのポータブル デバイスやモバイル デバイス向けのアプリケーションを作成するための最適な言語となる可能性があります。

2011 年の初めから 2012 年の終わりまで、SM はモバイル アプリケーションの開発を依頼する顧客の増加を経験しました。SM は、当時大きな市場シェアを獲得していた Android フォンなど、Java をサポートする当時のスマートフォン向けのアプリを作成するために Java を利用しました。問題は、これらのプラットフォームのコードが同じ言語で書かれていても、同じではなく、同じにできないということでした。視覚的なプレゼンテーションは移植性がなく、機能も大きく異なり、開発に使用されるライブラリも異なっていました。

Javaはかつてモバイル言語の開発によく使われていたが、近年ではKotlinやSwiftなどの新しい言語に取って代わられている。Javaの主な問題は、

  • パフォーマンス: Java は、一部の新しい言語ほどパフォーマンスが高くないため、アプリの速度が低下する可能性があります。
  • 複雑さ: Java は複雑な言語であるため、学習や使用が困難になる場合があります。
  • 断片化: Java にはさまざまなバージョンがあるため、すべてのデバイスで動作するアプリの開発が困難になる可能性があります。

Java は、ライブラリとツールのエコシステム、多くのベンダーによるサポート、成熟度の高さから、モバイル アプリケーションの開発で依然として人気がありますが、新しい言語が台頭しつつあります。Nzym の取り組みは、単一のコード ベースを目標として、できるだけ多くのデバイスにアプリケーションを簡単に、より良く、より速く作成して移植できるようにするという道を歩み、この目標に向かって突き進む Nzym は間違いなく注目すべき言語です。


結論

Nzym は、シンプル、エレガント、そしてパワフルに設計された新しいプログラミング言語です。まだ初期段階ですが、オブジェクト指向のメディア アプリケーションや Web サイトを作成したいプログラマーにとっての選択肢となることを目指しています。そのシンプルさにより、文字列に中括弧や引用符を使用する必要がなくなり、構文がよりわかりやすく直接的になります。

現在の開発

Nzym の元の実装言語は C++ でしたが、2015 年に Rust 1.0 の最初の安定リリースが登場し、リリースされたため、Nzym の開発と制作は新しい言語に移行しました。ガベージ コレクションや参照カウントの使用を必要とせず、メモリの安全性を強化する言語を選択することは、高性能でバグの少ない強力なメディア アプリケーションを作成するために使用される言語として最適な選択肢であるように思われました。

今後の展開

Nzym はまだ開発中なので、今後のリリースではいくつかの機能が計画されています。これらの機能には次のものが含まれます。
  • より簡単かつ迅速にアプリを作成できる、構築済みのライブラリ
  • より強力なクラスとオブジェクト
  • より優れたデバッガー
  • シンプルだがよりユーザーフレンドリーなIDE
Nzym は、オブジェクト指向プログラミングの一般的な選択肢となる可能性を秘めた、将来有望な新しいプログラミング言語です。モバイルやインターネットなどのさまざまなプラットフォーム向けに、シンプルでエレガント、かつ高速なアプリケーションを作成したいプログラマーにとって、これは最適な選択肢です。詳細については、 hello@nzym.org まで電子メールでお問い合わせください。
Tags
  • #技術
Icon
THANK YOU

You will receive an email with a download link. To access the link, please check your inbox or spam folder