はじめに
みなさん、こんにちは。12月へようこそ。お元気でお過ごしでしょうか。
10月はとても忙しかったです。コミュニティソリューションに大きな改善を加えたばかりです。重複を排除して、似たソリューションは1つだけ表示されるようにしました。新しい並べ替えオプション、コードで検索する機能も追加しました。C#を見てみると、さまざまなプログラミング概念でフィルタリングする機能も追加されているのがわかります。ビットシフトや再帰など、好きなものを使ったソリューションを検索できます。これはコミュニティウィークに他のトラックにも展開していく予定です。
さて、今は#12in23に集中しましょう。11月はアセンブリ言語を探求する面白い月でしたが、今月は非常に多様な言語、具体的にはColdFusion、Groovy、Lua、VimScript、Wrenに取り組みます。いつも通り、Erikがこれらの言語の面白さとユニークさについて説明してくれます。
バッジ
いつも通り、これらの言語の演習を5つ完了すると、December Diversionsバッジを獲得できます。また、多くの方が目指している年間バッジもあります。そのためには、完了すべき特集演習を5つ用意しています。それは以下のとおりです。
- All Your Base:数字の並びで表された数を、別の基数に変換します。
- 配列の平坦化:入れ子になったコレクションを受け取り、入れ子でない単一のコレクションを返します。
- クイーンの攻撃:チェス盤上の2つのクイーンが互いに攻撃できるかどうかを判定します。
- D&Dキャラクター:ダンジョンズ&ドラゴンズのキャラクターをランダムに生成します。
- ランレングス符号化:ランレングス符号化と復号を実装します。
概要
ColdFusion
- 1995年にAllaire Corporationによって作成されました。同社は2001年にMacromediaに買収され、その後2005年にAdobeに買収されました。
- 迅速なWeb開発プラットフォームとして設計されました。
- Java仮想マシン(JVM)上で動作します。
- 2つの別々の構文があり、見た目は異なりますが意味は同じです。
- 古いタグベースのマークアップ構文は、HTMLを拡張して動的コンテンツを表示します。
- 新しいECMAScript風の構文は、タグベースの構文が使われる場所でも使えますが、別のスクリプトファイルでも使えます。目的は、ビジネスロジックをマークアップから別のスクリプトファイルに移すことでした。
- CFScriptはJVM上で動作する汎用言語で、Exercismではこれを採用しています。実際には、Webサーバーとしてのルーツから大きく離れることはありませんでした。
- ColdFusionは有料製品ですが、Lucee Foundation(スイス拠点の非営利団体)がオープンソースのColdFusionサーバーを現在も活発に開発しています。Exercismのトラックでは、そのLucee Serverを使用しています。
- 現在も活発に開発が続いています。
- 主にエンタープライズソフトウェアで使用されています。顧客にはApple、Adobe、General Motorsなどが含まれます。
Groovy
- 2003年からJames Strachanによって開発されました。プロジェクトは2015年にApacheに採用されました。
- 目的は、JVM上で動的型付け言語を開発すること(静的型付けのJavaとは対照的)で、定型コードを減らすことも目指していました。
- ほとんどのJavaコードはGroovyコードとしても有効ですが、多くの違いがあります(たとえば、Groovyは動的型付けや高度なメタプログラミングを可能にします)。この言語はPythonやRubyからも大きな影響を受けています。
- スクリプト、ビルドツール(Gradle)、CI(Jenkins)、Webアプリ(Grails)、テスト(Spock)に使用されています。Atlassianツール向けの人気のサードパーティ製アドオンでは、Groovyスクリプトが使えます。
Lua
- Luaは1993年、ブラジルのリオデジャネイロ・カトリック大学でRoberto Lerusalimschy、Luiz Henrique de Figueiredo、Waldemar Celesによって作成されました。
- 名前は「ルーア」と発音し、ポルトガル語で月を意味します。これは、一部のインスピレーション元であるSol言語(ポルトガル語で「太陽」)への参照です。
- 主に埋め込み用に設計され、速度、移植性、拡張性、開発のしやすさに重点を置いています。
- Modula、CLU、C++、SNOBOL、AWKの影響を受けています。LISPやSchemeが単一で遍在するデータ構造メカニズム(リスト)を持っていたのと同様に、Luaはテーブルでそれを実現しています。
- バイトコードを介して解釈され、通常は実行中に行われますが、事前に行うこともできます。
- 主にスクリプト用途で使用され、たとえばWorld of Warcraft、Dota 2、Crysisなどのゲームや、Adobe Lightroom、一部のFreeBSDシステムソフトウェアなどのアプリケーションで使われています。また、Redis、Neovim、Nginxなどで拡張性を加えるためにもよく使われます。
VimScript
- VimScript(スペースを入れてVim Script、またはVim Languageの略でVimLとも呼ばれます)は、Vimテキストエディタで使われるスクリプト言語です。
- Viの前身である行指向のビジュアルエディタ、exから派生しました。
- 汎用言語ではなく、プラグイン、設定、マクロ、関数を通じてVimの機能を拡張・カスタマイズするための、効果的で最適化されたスクリプト環境を提供する専門言語です。
- Vimは主にCで書かれていますが、Vimscriptを使うと、高水準のスクリプト言語でVimをカスタマイズ・拡張できます。
- 使用場所は、そうですね、Vimですが、VimのフォークであるNeoVimでも使われています。
Wren
- 2016年、『Crafting Interpreters』の著者であるBob Nystromによって書かれました。
- 目標:小さく、シンプルで、高速。
- 他のアプリケーションに埋め込めるように設計されています。作者は既存の選択肢(LuaやTCLなど)に物足りなさを感じ、オブジェクト指向のバックグラウンドを持つ人にとって自然に感じられる、シンプルで埋め込み可能な言語を求めました。
- 使用例:
- TIC-80 - 小さなゲームを作って遊んで共有するためのファンタジーコンピューター(PICO8に似ています)
- DOME - ゲーム制作のためのクロスプラットフォームフレームワーク。
- luxe - ゲーム制作のためのクロスプラットフォームで迅速な開発ができるゲームエンジン。
- Wren Console - 長年のExercismコントリビューターであるJosh Goebelによって大部分がWren自体で書かれたWren REPLおよびCLIで、Wrenトラックで使用しています。
プログラミングの観点から見ると、どのように違うのでしょうか?
ColdFusion
- 動的型付け
- マルチパラダイムで、主にOOPですが、関数型の要素も増えています。
Groovy
- 通常は動的型付けですが、静的型付け(および漸進的型付け)も可能です。
- バージョン2以降、インタプリタとコンパイルの両方が可能です。そのためスクリプトでよく使われます。
- マルチパラダイム:主にオブジェクト指向ですが、命令型、関数型、宣言型でもあります。
Lua
- 動的型付けで通常はインタプリタですが、事前コンパイルもできます。
- マルチパラダイム:手続き型、オブジェクト指向(少し変わった形ですが)、関数型、データ駆動型。
VimScript
- 動的型付けでインタプリタ。
- マルチパラダイム:命令型、関数型、および単純な形のオブジェクト指向プログラミング。
Wren
- 動的型付けですが、静的に定義されているため、コンパイラを非常に高速にできます。
- 主にオブジェクト指向言語ですが、命令型や少しの関数型プログラミングも含みます。
これらの言語の素晴らしいところは何でしょうか?
ColdFusion
- サーバー管理とアプリケーション作成の優れた分離。管理コンソールでデータベース接続やサーバー監視(その他もろもろ)を設定し、アプリケーション作成者はデータソースの名前(必要なメソッドを持ち、DBMSの適切な部分に事前接続されたCFオブジェクト)と、アプリケーションファイル用ディレクトリへの書き込みアクセスがあればよいのです。
- JVMとJavaエコシステムの力を活用できます。これには、任意のJavaライブラリをインポートしてCF内で使えることも含まれます。
Groovy
- 汎用:アプリやWebサイトを含め、ほとんどあらゆるワークロードに使用できます。
- JVM上で動作するため、その利点がすべて当てはまります:成熟した高性能VMと、利用可能な膨大な数のライブラリ。Javaとの相互運用性も良好です。
- Javaに対して人が抱きがちな多くの問題を緩和します。たとえば、チェック例外、
- null安全、冗長さ、高度なメタプログラミングの欠如などです。
- モダンな言語:高度な型推論、クロージャ、正規表現の組み込み構文、getterとsetterの自動生成。
- 優れた関数型プログラミングのサポート:クロージャ(Rubyのブロックのようなもの)、カリー化(部分適用)、遅延評価、不変性など。
Lua
- 汎用:組み込みシステム、プロトタイピング、スクリプト、ゲーム、Web、バックエンド開発で使用されます。
- シンプル:構文が比較的少なく、言語を学びやすい。原子データ型がいくつかと、組み込みの複合データ型が1つだけ:テーブル。メモリはガベージコレクトされます。
- 移植性:インタプリタはANSI Cで書かれており、ほとんどすべてのプラットフォームにコンパイラが存在します。
VimScript
- シンプル:軽量な構文で、学びやすく使いやすい。
- 相互運用性:ファイル、シェル、その他のプログラムに簡単にアクセスできます。Vimを離れることなく、外部ツールの力をすべて利用できます。
- 表現力:少ないコードで多くのことができます。コンパクトで読みやすいスクリプトを書けます。
- 強力な正規表現エンジン:Vimscriptの正規表現実装はEmacs Lispのものに触発されており、テキスト操作のための強力なツールを提供します。
Wren
- 小さい:VMは4000行未満のコードで実装されています。
- 模範的:VMの実装は丁寧にコメントされ、Cで書かれており、それほど読みにくくありません。言語の作り方を学ぶのに最適です。標準ライブラリのほとんどはWrenで実装されているので、その実装も見ることができます。
- 親しみやすい:構文のおかげで素早く習得できます。JavaやC++に慣れているなら、すぐに馴染めるでしょう。アリティによるメソッドのオーバーロードが可能です。
- 非常に優れたドキュメント:言語と標準ライブラリのドキュメントは読みやすく、網羅的で、多くの例があります。
- 小さいながら驚くほど完全な標準ライブラリ。
注目の機能
ColdFusion
- バッテリー同梱:PDF、ZIP、Excel、XML、JSON、API作成、メール、S3統合、さまざまなデータベースなど、多くの機能が組み込まれています。追加パッケージをインストールする必要はありません。バージョンの非互換性を減らすのに最適です。
- スケーラブルで安全、エンタープライズソフトウェアに最適。
- シンプルで直感的なプログラミングにより、初心者でも複雑なデータ駆動型Webページを非常に迅速に動かせます。DreamWeaverとの統合も優れています。
Groovy
- 柔軟な構文:ドットと括弧を省略できるため、非常に優れたドメイン固有言語を作成できます。
- メタプログラミング:実行時とコンパイル時の両方のメタプログラミングをサポートします。たとえば、@ToStringアノテーションはコンパイル時にToString実装を生成し、実行時にオブジェクトのメタクラスを変更することでモンキーパッチングができます。
- ビルダー:見た目の美しいコードでJSON、XML、HTMLを迅速に処理・構築できます。Swingで構築すれば、迅速なGUI開発が可能です。
- トレイト:Groovyのトレイトを使うと、振る舞いとプロパティを再利用可能な単位で組み合わせられます。Rubyのミックスインに似ています。
Lua
- 埋め込み可能:簡単に埋め込めるように設計されています。簡単に埋め込めるように、比較的シンプルなC APIがあります。サイズは問題ではありません:完全なリファレンスインタプリタはわずか247kBです!
- 拡張可能:基本言語は意図的に比較的小さく保たれていますが、言語を簡単に拡張できます。これにより、言語は学びやすく、埋め込みが軽量で、非常に柔軟になります。
- 高速:Luaはしばしば最も高速な動的言語の1つであり、特にLuaJitインタプリタを使う場合に顕著です。
VimScript
- 拡張性:Vimscriptを使うと、エディタに新しい機能を追加できます。
- カスタマイズ可能:エディタを好みの動作にカスタマイズできます(Vimscriptプラグイン自体も主にVimscriptで書かれています)。
- イベント駆動:ファイルを開く、バッファを保存するなど、特定のイベントや条件に基づいてコードを自動実行します。
- Vimの力を利用:Vimの機能とAPIに組み込みでアクセスでき、スクリプトでテキスト、バッファ、ウィンドウなどを操作できます。
Wren
- 高速:動的言語としては優れたパフォーマンス。
- 埋め込み可能:他のソフトウェアに簡単に埋め込めます。言語作者は元ゲーム開発者で、ゲームにスクリプト機能を追加できるようにしたかったのです。C APIは非常にクリーンでシンプルです。
- 並行性:ファイバーによる簡単な並行処理とコルーチン。ファイバーは非常に軽量な構造で(goroutineやErlangプロセスのようなもの)、互いに簡単に通信できます。
どれを選ぶか
- Webアプリケーションを作りたいなら、ColdFusionとGroovyが良い選択です。
- 埋め込み可能な言語に興味があるなら、LuaとWrenが主な選択肢ですが、Groovyも検討する価値があるかもしれません。
- 汎用スクリプトを書きたいなら、同じ3つの言語、Lua、Wren、Groovyも理にかなっています。
- JVMを使っているなら、ColdFusionとGroovyは自然な選択です。
- パフォーマンスを重視するなら、LuaとWrenが最良の選択肢でしょう。
- 主なエディタがVimかNeoVimなら、VimScriptは明らかに優れた選択です。
- コンパイラや仮想マシンについて学んだり作ったりすることに興味があるなら、Wrenは最適です。
- オブジェクト指向のバックグラウンドがあるなら、Wrenはおそらく最も学びやすい言語です。
- LISPの単一で遍在するデータ構造設計が気に入ったなら、Luaを試してみてください。
- イベント駆動プログラミングを試してみたいなら、VimScriptをチェックしてみてください。
2023年12月01日(金)
·
役に立ちましたか?
公開元
Jeremy Walker