ほぼすべての種類のアプリケーションをほぼすべてのプログラミング言語、特にLisp(SchemeやCommon Lispなど)のような強力なアプリケーションで作成することは明らかに可能です。しかし、それをWeb開発に使用することは現実的でしょうか?もしそうなら、何が良い出発点であるべきですか?この種のプロジェクトに適したリソース(ツール、ライブラリ、ドキュメント、ベストプラクティス、例など)はどこにありますか?
ほぼすべての種類のアプリケーションをほぼすべてのプログラミング言語、特にLisp(SchemeやCommon Lispなど)のような強力なアプリケーションで作成することは明らかに可能です。しかし、それをWeb開発に使用することは現実的でしょうか?もしそうなら、何が良い出発点であるべきですか?この種のプロジェクトに適したリソース(ツール、ライブラリ、ドキュメント、ベストプラクティス、例など)はどこにありますか?
回答:
はい、Web開発はCommon Lispの今日の強みの1つです。
Webサーバとして、使用Hunchentoot博士エドモンド・ワイツで、以前はtbnlとして知られているが、。
mod_proxyをリバースプロキシとして、またはスタンドアロンサーバーとして使用して、Apacheのバックエンドとして実行できます。
PHPスタイルのテンプレートからLispマクロハックからXSLTまで、さまざまなHTML生成ソリューションが利用可能です。ちょうどあなたのピックを取る。
HTML-TEMPLATEはその一例です。
クロージャーXMLは、XML解析、シリアル化、XPath 1.0、XSLT 1.0で使用できます。HTMLタグスープ解析用のクロージャーHTMLもあります。
(完全な開示:私はClosure XMLとClosure HTMLのメンテナーです。)
必要に応じて、ParenscriptはJavaScriptエクスペリエンスをより洗練されたものにすることができますが、もちろん、昔ながらのJavaScriptを自分で作成することもできます。
Common Lispで記述され、JavaScriptを変換して継続サポートを追加するjwacsのもう 1つの優れた JavaScript 拡張ソリューション。
Webサービスプロジェクトでは、サーバーに加えてHTTPクライアントが必要になる場合があります。
ドラクマは、今日そのために使用するライブラリです。
PURIはURI操作に役立ちます。
そしてもっとあります!開始点の1つはclikiです(例:cliki.net/web)。
Web上では、サーバーがCommon Lispで記述されていることは誰にもわかりません:-)
Common LispでのWeb開発は効果的で楽しいものです。
いくつかの例:
CL-WHOを使用すると、終了タグを忘れずにHTMLを記述できます。
Weblocksでは、組み込みの検証を使用して宣言的にフォームを定義できます。
(defview signup (:type form :caption "Sign up")
(username :satisfies #'valid-username)
(password :present-as dual-password :parse-as dual-password)
(receive-newsletter-p :present-as checkbox :parse-as predicate))
また、ブラウザがAJAXをサポートしていない場合は通常のリンクにフォールバックして、AJAXを完全に自動でサポートします。
cl-prevalenceは、SQLの非常にシンプルな代替手段です。
かなり多くの人々が最近これらのテクノロジーをミッションクリティカルなアプリケーションに使用しています-成功しています。
実際、最も重要なCLオープンソースプロジェクトには、優れたコミュニティサポートがあります。
Web開発用のWebフレームワークがいくつかあります。見て:
十分にサポートされたlispツールが必要な場合は、それらの料金を支払う必要があります。オープンソースツールを取り巻くコミュニティはそれほど大きくないので、たとえばPythonのDjangoと同じレベルのドキュメント/採用はありません。
ここにいくつかの商用lisp製品があります:
Redditが最初はLispでビルドされたことにも注目に値しますが、作者は後でPythonに移行しました。(リンク)
私は他のフレームワークと話すことはできませんが、ウェブサーバーにHunchentootを使用して非常に幸運でした(それ自体で正常に動作するか、Apacheの背後に置くこともできます)。それを本当に輝かせているのは(おそらくこれはショックになるかもしれません)ライブラリです!
CLをWebに使用することについて私が本当に気に入っているのは、実行中にすべてを調整できることです。常にREPLを稼働させてサーバーコードを実行しているので、何も停止することなく、そのREPLに接続してコードの動作を変更または検査できます。サイトの実行中に関数を再定義しました。次に関数が呼び出されたときに、新しいコードを取得して機能します。
Lisp Webフレームワークがないという神話を払拭するために、ここではまだ言及されていないものを示します。
明らかに多くの人が、Lispが多くのWebフレームワークを書くのに十分であると思っているようです。
私はWebフレームワークを使用または推奨していません。私は、作成するアプリケーションに実際に適した方法で設計パターンを使用して、直交ツール(David Lichteblauがいくつかの優れたツールについて言及している)を組み合わせてWebアプリケーションを作成することを好みます。これが、私が推奨するアプローチです。Common Lispは、そのような豊富なツールと、それらを組み合わせる比類のない機能の両方を提供します。
Adam Petersenは昨年、このスタイルでLisp Webアプリケーションの構築を開始する方法についての優れた入門チュートリアルを公開しました:
それほど面倒なことなしに「はい」と言えるでしょう。
最初のHTTPサーバーの1つはcl-httpでした
DrSchemeの周りの人々がそれにかなりの時間を費やした計画:
www.franz.comは、独自のWebサーバー(AllegroServer)とwebframework(webactions)で実行されます
疑問がある場合は、Edi Weitzの一般的なlispパッケージを確認してください。彼らは通常働きます。
つまり、Common Lispを使用して「深刻な」Webプログラミングを行うことができます。私としては、いくつかのCommon LispルートまたはRuby on Railsをたどるのは現在のところ未定です。.NETのどちらよりも両方を好みます。
Paul Grahamの会社Viaweb は Common Lispで製品を書き、その後Yahoo Shopsになりました。どうやらYahooはその後C ++でそれを書き直したようだ。Lispプログラミングのためのかなりの数のWebリソースがあります。
この質問には、Lisp Webアプリケーション用のツールに関する情報が含まれています。
また、Redditの連中がLispでWebサイトを実行した経験(およびPythonへの切り替え)について少し話したStack Overflow Podcast 27を聞く価値があるかもしれません。
意見はさまざまです。一般的な知識は次のとおりです。LAMP、.NET、Ruby on Rails、Javaなど、別の言語、または別のWebスタックを使用するほうがよいでしょう。Lispで成功した有名なWebプロジェクトは、Paul GrahamのViaWebでした。Redditは当初lispで実装されていましたが、その後pythonに切り替えられました。lispを使用することに決めた場合は、Seibelの本、Practical Common Lispを試してください。
Orbitzの多くはLISPで作成されたか、作成されたようです。
Allegro Common Lispをご覧ください。特にWeb開発用のWebサーバーを含むいくつかのライブラリがあります。