Common Lisp Webアプリケーションの開発(パート1)

このレビューは、彼らのスタートアップの未来をこの素晴らしい言語に委ねることを決定(または決定)する人々のための小さなガイドです。 主にウェブ開発に重点が置かれるという事実にもかかわらず、私はCommon Lispに関連する何らかの一般的なトピックもカバーしようとします。 資料は、 AlterMoby自身のWeb開発経験から収集されます。



このレビューの最初の部分は入門です。 経験豊富なリスパーは安全にスキップできます。 このパートでは、いつLispを使用する価値があるのか​​、そしてその実装がWebアプリケーションの構築に最適なものを説明しようとします。 後者は、もちろん、私の主観的な観点のみを反映しています。



画像



Lispを使用する場合


多くの現代のWeb指向言語は、かつてはLisp言語のみに属していたものの多くを武器にしています(そのようなものには、まず、匿名の関数と関数が含まれます)。 したがって、Lispを使用して典型的なWebアプリケーションを作成する場合、同じPHP、Python、またはRubyと比較して多くの利点を感じることはほとんどないでしょう。 Lispコミュニティーは十分に小さく、既成のソリューションを見つけるのがより困難になるため、まったく逆です。 ただし、Lispには、他の言語では達成できないレベルに抽象化できる1つの重要な機能があります。 私は、プログラムの実行(またはコンパイル)の過程で別のプログラムをビルドおよび実行する、つまりメタプログラミングの機能について話している。



この機能を示すCommon Lispのおもちゃの例を挙げましょう。



画像



この単純なコードは、指定された数の引数を使用して別の関数を作成する関数を定義します。 後者は合計を計算します。 もちろん、これは人為的な例です(+演算子は任意の数の引数の合計を計算します)が、他の言語と区別するユニークなLispプロパティを示しています。 メタプログラミングもマクロによって実装されます(C / C ++マクロと混同しないでください)。 マクロは同じ生成関数ですが、プログラム実行中ではなく、コンパイル中に使用されます。



Lispの使用はいつプロジェクトで適切になりますか? 第一に、実装されたアプリケーションに十分に複雑なセマンティクスが必要な場合、言い換えれば、プログラムコードの高い柔軟性が必要な場合です。 第二に、システムが少数のプログラマーによって構築され、すべての開発レベルで自動化を怠ることが非現実的である場合(そのような場合、この言語の低い普及の不便さはコードの潜在的な節約よりも重要です)。 さらに、Lispを使用して、重い負荷のWebアプリケーションを実装することをお勧めします(一見したところ、奇妙なことに)。 多くの最新のLispコンパイラは、同じPHPやPythonよりも桁違いに速いマシンコードを生成します(Rubyについてはまったく話していない)。



方言と実装


ご存知のように、Lispには2つの主要な方言があります。CommonLispSchemeです。 ここでは、それらの違いについては説明しません(インターネット上に豊富にあります)。 私の主観的な意見では、次の理由でCommon Lispを使用してWebアプリケーションを作成する方が良いと考えています。 Scheme標準では、標準ライブラリを無視して、言語自体の構文とセマンティクスを説明しています。 その結果、互いに互換性のない(アプリケーションプログラミングに必要な)多数の拡張機能を備えたエレガントでおもちゃの言語ができました。 一方、Common Lispは、多くの欠点があるにもかかわらず、実際のプロジェクトで必要とされるほとんどのことを明確に規制しています。 これらには、特に、Cで記述されたライブラリにアクセスできる外部呼び出しプロトコルが含まれます。したがって、Common Lispは、この機能を実装する多数のオープンライブラリを備えた実際の産業用言語です。



実装について説明します。 Common Lispには多くの高品質の実装があります。 それらはプロプライエタリとフリーに分けることができます。 プロプライエタリには、 LispWorksAllegro CLが含まれます。 どちらのシステムも幅広い機能を備えていますが、コストがかかります(特に2番目)。 お金を気にしないのであれば、質の高いサポートで素晴らしい製品を手に入れることができます。 しかし、そのような決定を下す前に、無料実装のキャンプに注意を払ってください。 非常に価値のある代表者が含まれています。



品質の無料実装には、 CLISPSMUCL、およびSBCLが含まれます。 1つは、クロスプラットフォームのバイトコードコンパイラです。 したがって、ランタイムと低パフォーマンスが必要です。 SMUCLは、非常に効率的なマシンコードを生成するUnixシステム用の高品質のネイティブコンパイラです。 標準に対する不完全なサポートの欠如と多くの対立するアタビズムの存在(結局、プロジェクトには長い豊かな歴史があります)。 SBCLは、SMUCLの改革に成功した試みです。 一般的な継続性を維持しながら、SBCLはより論理的であり、SMUCLの多くの歴史的な成長と層が取り除かれています。 これらのコンパイラーの両方の弱点には、移植性が弱いことが含まれます。これにより、Unixシステムでのみ動作が制限されます。 SBCLはWindowsを実験的にサポートしていますが、本格的なものではないため(特に、マルチスレッドはありません)、このプラットフォームでの深刻なプロジェクトは今のところ忘れてしまいます。



レビューの最初の部分の終わりに、SBCLコンパイラーに焦点を当てることをお勧めします。 これは、無料の高品質で絶えず進化している製品で、最も深刻なプロジェクトで信頼できます。



All Articles