web-dev-qa-db-ja.com

LISPまたはSchemeでWebプログラミングを行うにはどうすればよいですか?

私は通常、PHPでWebアプリを作成します。RubyまたはPerl。Schemeの研究を始めています。この言語でWebプロジェクトを試してみたいと思います。この環境。

次の機能を探しています。

  • リクエストパラメータを取得する簡単な方法(get-get#key、get-post#key、get-cookie #keyなど)。
  • Mysqlアクセス。
  • HTMLフォームジェネレータ、処理、バリデータなど。
  • ユーザー入力データ(htmlentities、put in queryのエスケープ変数など)をフィルターするためのヘルパー。
  • フロス。
  • また、GNU/Linuxに対応しています。

したがって、すべての返信に事前に感謝します。

74
Castro

ラケット には必要なものがすべて揃っています。ラケットWebサーバー tutorial を参照してから documentation を参照してください。 Webサーバーはしばらく前から存在しており、lotの機能があります。おそらく含まれていない唯一のものはmysqlインターフェイスですが、それは PLaneT (Racketパッケージ配布ツール)のパッケージとして存在します。

更新:RacketにDBサポートが追加され、mysqlを含むいくつかのDBで動作します。

66
Eli Barzilay

Clojure をご覧ください。

Clojureは、Java仮想マシンをターゲットとする動的プログラミング言語です。[...] Clojureは、Javaフレームワーク、オプションのタイプヒント、型推論、Javaへの呼び出しがリフレクションを回避できるようにするため。

ClojureはLISPの方言であり、LISPとコードとしてのデータの哲学と強力なマクロシステムを共有しています。

Clojureでは、Javaとの相互運用が簡単なので、必要に応じて既存のJavaライブラリを再利用できます。 Web開発用。

clojure-contrib にはSQL APIがあり、 ClojureQL もあります。これはDBアクセスのニーズに対応する必要があります。

Compojure と呼ばれるClojureのWebフレームワークが開発中です。他にもあるかもしれません。

Clojureのソースは、 [〜#〜] epl [〜#〜] の下の githubで利用可能 です。 Linuxで実行するのは簡単です。 gitリポジトリのクローンを作成し、antを実行します。

19
Mike Mazur

guile scheme を使用してWeb開発を行うことができます。その標準ライブラリには、htmlの生成、操作、および解析に非常に役立つ(sxml simple)モジュールが含まれています。 guile-www ライブラリは、http、cgiなどのサポートを追加します。 guile-dbi ライブラリは、MySQLおよび他のデータベースへのアクセスを提供します。これらのビルディングブロックを使用すると、単純なcgiスクリプトから独自のHTTPサーバーを備えたWebアプリケーションまで、すべてを実装できます。

18
gcbenison

一般的なLISP WebフレームワークであるWeblocksを試してください。

http://weblocks.viridian-project.de/

15

このトピックに関する非常に広範なチュートリアル/電子ブックを作成しました。 http://lispwebtales.ppenev.com/

簡単な要約:

  • Common LISPを使用します
  • Restas フレームワークを使用します
  • DBアクセス、認証、HTML生成、テンプレート作成など、ほとんどの基本的なWeb開発の例があります。
  • Restasのドキュメントはかなり古いため、私のチュートリアルは最新のドキュメントに最も近いものです。
  • プラグイン可能なインターフェイスを作成できるポリシーなど、いくつかのより高度な機能を示します。たとえば、データストアレイヤーを作成し、さまざまなストレージメカニズムのバックエンドを比較的簡単に作成できます。認証フレームワークなどの再利用可能なコンポーネントを作成します。
  • LISPのインストール、ASDFビルドシステムのセットアップ、quicklispパッケージマネージャーなどが含まれます。
  • それはオンラインで無料です、そして、私がそれを終えるとすぐに、それは同様にleanpubでも無料になります。ソースは https://github.com/pvlpenev/lispwebtales にあり、CCライセンスの下で、ソースコードはMITです。まだすべてが公開されているわけではなく、私は改訂中です。
9
Pavel Penev

Common LISPに正確に興味があり、weblocksルートに行きたくない場合は、次のセットアップをお勧めします。

  1. LinuxでSBCLを使用しますが、マルチスレッドをサポートします
  2. HunchentootをWebサーバーとして使用すると、セッションやCookieなど、必要なすべてのサーバー処理が提供されます。
  3. ClSqlを使用してMySqlと通信します。豊富なドキュメントがあり、非常に安定しています。
  4. HTMl世代の場合、Edi Weitz Cl-WHO博士を使用できます(非常によく文書化されています)。

上記はすべてGPLまたは同様のライセンス(LISPプログラムでより機能するライセンス)の下にあることに注意してください。

8
Mackram
8
Unknown

Gambit Scheme には、Webアプリに対する独自のソリューションもあります。 Spork フレームワークを使用し、o ブラックホール モジュールシステム(両方ともPer Eckerdalによる)に基づいています。

Andrew Whaleyには、mod_proxyを使用してApacheでWebアプリを実行するGambit、Black Hole、Sporkの取得方法に関する最初の チュートリアル があります。あなたはそれを見てみたいかもしれません。

(場合によっては)関連するメモでは、Gambitは、あなたが物事をCにコンパイルし、それから実行可能ファイルにコンパイルします。

6
malvim

Paul Graham(およびその友人)は、特に基本的なWebアプリケーションを作成するためのLISP方言を作成しました。 Arcと呼ばれ、 arclanguage.org で取得できます。

多分本当に大きな複雑なウェブサイトには向いておらず、データベースサポートの状態はわかりませんが、Paul Grahamは LISPでのWebアプリケーションの作成方法 を知っているので、ArcはHTTP/HTML部分を作成します脳サイクルのほとんどをLISPの方法の学習に費やしている間、あなたにとって簡単です。

5
wm_eddie

Weblocksは、Common LISPでWebアプリを構築するための素晴らしいツールですが、私にとっては少し重すぎます。

次のスタックを使用します。

  • OpenMCL(オープンソースLISP、非常に素晴らしい)

  • ポータブルAllegroserve(Webサーバー、HTMLジェネレーター)

  • Ajaxyを行うための独自のRailsライクなツール(更新:これは WuWei としてオープンソース化されました)

  • Cl-json、cl-smtp、md5などのさまざまなCLライブラリ
3
mtraven

MzSchemeから派生したSchemeの独自のカスタマイズバージョンを使用します。新しいシンプルなWebアプリケーションフレームワーク、組み込みのWebサーバー(MzSchemeに付属するものではありません)、およびODBCライブラリ。( http:// spark -scheme.wikispot.org/Web_applications )。これは個人的なツールであるため、ドキュメントは網羅的ではないかもしれませんが、 コードリポジトリ には多くのサンプルコードがあります。

2
Vijay Mathew

Common LISP で何ができるか見てみましょう。

Common LISPエコシステムの状態(2015) および Awesome Common LISP リストは、いくつかの最新のフレームワークを示しています( CavemanLucerne 、すべてが新しい Clack Webアプリケーションサーバー、Hunchentootおよびその他のサーバーのインターフェイス上に構築されています)。独自の調査結果で議論しましょう。

update:少し後で、SlyまたはEmacsのYasnippetの作成者によって Snooze が見つかりました。穴居人と言うよりも良い印象。エンドポイントの宣言は関数の宣言に似ているため、Cavemanで退屈だったいくつかのことは、URLパラメーターにアクセスするなど、Snoozeでは明らかです。私はあまり経験がありませんが、チェックすることをお勧めします。

2018年6月更新:Weblocksの進行中の書き換えもお見逃しなく、巨大になるでしょう! :D http://40ants.com/weblocks/quickstart.html Weblocksは、Javascriptを使用せずに、前後を分離することなく、動的なwebアプリを構築できます。 Reactがサーバー側です。執筆時点では非常にアルファ版ですが、2018年6月に進行中です。動作しています。いくつかのシンプルなWebアプリが動作しています。

リクエストパラメータを取得する簡単な方法(get-get#key、get-post#key、get-cookie #keyなど)。

ルツェルンの方法の方が簡単だとわかりました。with-paramsマクロ( 実世界の例 ):

@route app (:post "/Tweet")
(defview Tweet ()
  (if (lucerne-auth:logged-in-p)
      (let ((user (current-user)))
        (with-params (Tweet)
          (utweet.models:Tweet user Tweet))
        (redirect "/"))
      (render-template (+index+)
                       :error "You are not logged in.")))

穴居人の道は 私にはあまり分かりません でした。

MySQLアクセス

Cavemanはデータベース統合を宣伝しています(深町のDataflyとsxqlを使用)。

Clsqlまたは水戸ORMを使用できます: https://lispcookbook.github.io/cl-cookbook/databases.html

HTMLフォームジェネレータ、処理、バリデータなど。

フォームジェネレーターがあるかどうかはわかりません。 editcl-forms および formlets 、または 1forms 、Caveman2での作業。

穴居人 持っていない (2011年に提起された問題)。

ユーザー入力データ(htmlentities、put in queryのエスケープ変数など)をフィルターするためのヘルパー。

Ratify は入力検証ライブラリですが、フレームワークには統合されていません。

FLOSSおよびGNU/Linuxフレンドリー✓

その他のウェブ関連

Webについて言えば、CLランドには その他のNiceライブラリ があります。

  • webサーバー: Woo はNodejs(グラフに注意してください...)よりも高速なHTTPサーバーです。 wookie は非同期HTTPサーバーです。
  • Dexador はHTTPクライアントです
  • Plumplquery および [〜#〜] clss [〜#〜] htmlの解析とDOMのクエリを簡単にします。
  • cl-bootstrap は、 cl-who テンプレートエンジン(通常のテンプレートもありますが、Jade/Pugに置き換わるものです)のTwitter-bootstrapショートカットを提供します。

LISPのAjax

(Weblockでは、上記を参照してください。これらは必要ないかもしれません)

  • Wuwei は、Common LISPでAjaxビューを作成できる興味深い実験です。このWebサイトには、実際のデモがあります。他のJavaScriptライブラリを含めることができます。
  • SmackJack 、この最近のブログ投稿(2017)で説明されています。
2
Ehvince

Clojureは、興味を引くLISPの方言です。この時点で、かなりまともなWeb開発スタックがあります。いくつかのことをお勧めできます。

  • 使用するleiningen依存関係マネージャーは、使用しているライブラリのインストールと管理が非常に簡単です。かなり素敵なプラグインのセットも。 Clojurescriptのプラグインもあります。これは、JavascriptにコンパイルされるClojureに基づく言語です。
  • ring HTTPサーバーの抽象化。ほとんどの実際のWebフレームワークで使用されます。実際のフレームワークにジャンプする前に、まずそれを学ぶことは非常に良い考えです。
  • hiccupは、Clojureで書かれたHTML dsl/templating言語です。その非常に表現力豊か!ある意味、ジェイドを少し思い出させます。
  • composureは、Clojureで最も人気のあるWebフレームワークでなければなりません。 express.jsのようなルーティングライブラリです。
2

Clojureはこれに最適です。非常に短く簡潔なコードを使用すると、ブログやフォーラムなどの非常に複雑なアプリケーションを実装できます。

0
Imagist