私は大学でコンピューターサイエンスの勉強を始めたばかりで、Schemeでプログラミングを教えてくれます。
私は過去6年間C++を学んだので、Schemeは私には少し奇妙に見えます。私のインストラクターは、CまたはJavaで書くことができる任意のプログラムを書くことができると言っています。
誰かが本当にこの言語を使用していますか?
私が知っているように、多くの人がそれを使用することはありませんが、それは間違いなく一見の価値があります(別のパラダイムでプログラミングを試してみて、別の考え方を学ぶ場合でも)。最近のほとんどの大学がJavaを教えているので、Schemeを使用するクラスを受講できるのは幸運です。 MITからの講義を見たい場合、またはサンプルの問題などに取り組みたい場合は、ここに良いリンクがあります。
MITオープンコースウェア-コンピュータプログラムの構造と解釈
付属の本があります オンラインで入手可能 無料でもあります(コンピュータプログラムの構造と解釈)。
更新:
JVMを利用し、Javaライブラリにアクセスできるスキームに類似)である言語に興味がある人のために(多くの大学がJavaを使用しているため) )、チェックアウト Clojure 。多分これはコンピュータサイエンスの紹介のための新しい選択言語になるでしょう(私たちは皆期待できます!)。
Square USAはそれを使って映画を作りましたファイナルファンタジー。
彼らが発表した論文は次のとおりです。 Gluing Things Together-Scheme in the Real-time CG Content Production 。
その論文から:
SIGGRAPH 2000および2001で、私たちSquare USA R&Dチームは、コンピューターで生成された完全な映画「ファイナルファンタジー:スピリッツウィズイン」のシーンのリアルタイムレンダリングを示しました。
[...]
リアルタイムレンダリングエンジンにSchemeインタープリターを組み込むことは非常に役立ちます。
スキームはあなたにプログラミングについて違った考え方をさせます。心を開いてみてください!
「本当にこの言語を使っている人はいますか?」
ポール・グレアム 、有名です。
JavaScriptは、多くの点でSchemeと非常に似ています(ただし、Schemeの継続と高度な数値システムが欠落しています)。
" ECMAScript言語の概要 "(PDF)から。 2007-10-23。 pp。4。2009年5月3日閲覧。
ES3は、Self言語とScheme言語から主要なアイデアを取り入れた、シンプルで非常に動的なオブジェクトベースの言語です。プログラミングスタイルは、オブジェクトベースのプログラミングと関数型プログラミングを組み合わせたものです。ES3の主要な抽象化メカニズムは、字句スコープの高階関数と可変オブジェクトです...
私は現在、 1986年にヒューレットパッカードでアベルソンとサスマンが行ったSICP講義 と ブライアンハーベイが行ったCal-Berkeley CS61Aポッドキャスト (同じものから教えられた)を通して取り組んでいます book )そしてSchemeをフォローしていて、その経験は私にとってまったく新しい考え方を開いています。私のように、正式なCSの高等教育を受けていない人には、私はそれを強くお勧めします...
私は本番環境でスキームコードを使用してプロジェクトに取り組んできましたが、それはかなりクールなものになる可能性があります。スキームには、 実行を自己最適化するために動的に再コンパイルする というこのクールな機能がありました。スカイネットから一歩離れたようなものだと思います。
大学で使っていましたが、それ以来あまり使っていません。
再帰に不安がある場合は、SchemeまたはLISPを学ぶことを強くお勧めします。あらゆる種類のことについて再帰的に考えることを学びます。再帰は常に正しい方法ですか?もちろん違います。しかし、それはツールボックスにあると便利なツールです。
私は常に開発者に新しい言語を学ぶことを勧めています。より多くの言語を学び、習熟すればするほど、問題についてより抽象的に考えるようになります。特定の言語に縛られることが少なければ少ないほど、問題に最も適した言語を選択する可能性が高くなります。
個人的な経験を超えて、客観的な推測に最も近いのは TIOBE index であり、これは現在LISP/Scheme 21位で0.470%の市場シェアを誇っています。 TIOBEは 検索エンジンの結果 を使用してリストを作成します。明らかに、あなたは一粒の塩でリスト(そしてSchemeの使用法に関する他の推測)を取りたいと思うでしょう。
恥知らずなプロモーション:チェックアウト PLTスキーム 。彼らはNiceコミュニティを作成し、多くのプラットフォームにIDE)を提供し、 Niceライブラリ をすぐに選択できるようにしました。
商用アプリのPLTスキームについて説明している記事は次のとおりです。 http://www.untyped.com/downloads/icfp068-welsh.pdf 。
Clojure はScheme/LISPのような言語であり、JVMで機能し、並列処理に非常に適しています(おそらく)。 Clojureを使用することの素晴らしい点は、Java API、およびその他のJavaライブラリー全体にアクセスできることです。
Clojureは、Scalaとともに、言語オタクの間でかなり人気が高まっています。
ここロシアでは、PLTスキームを使用してソフトウェアを開発しています。そしてそれはよく売れます;)
Javaプラットフォームには、かなりの数のスキーム実装があります。これらは、Javaアプリケーションのスクリプト作成とプロトタイピングに使用されます。J2EE用の継続ベースのWebフレームワークがあります。 SISCWeb と呼ばれるスキーム。
Guileスキームは、一部のGNUアプリでスクリプト言語として使用されます-たとえば、GnuCashは主にSchemeで記述されています。
また、 TinyScheme はGIMPのスクリプト言語として使用され、そのいくつかのバリエーションが組み込みシステムで使用されます。
Jazz Schemeは、Gambit Schemeに基づいて構築されたオープンソースのスキーム環境であり、産業用途を積極的に促進しているようです。チェックしてください。
彼らは彼らのニュースで新しい使用法を報告します:
this ページによると、SchemeはDEC、TI、Tektronix、HP、およびSunで使用されています(または使用されていました)。
この男 のLinkedIn CVは、ディズニーのChezSchemeを使用して報告しています。
少しグーグルするだけで多くのことが明らかになります。この場合、Schemeの使用はかなりユビキタスであり、あまり一般的ではないと聞いたことがあるという観察結果が裏付けられています。
十分な努力を払えば、すべての言語を使用して何でも書くことができます:)
ただし、Schemeはかなりクールです。私の経験では、Schemeを知っていると、他の言語のプログラミングに影響を与える傾向があります。
Schemeマクロは非常に強力であり、現在の継続を呼び出すとマインドワープ機能があります。
古典的なテストは、コンピュータプログラムの構造と解釈(「SICP」)です。読む価値があります。
絶対に。スキームは、さまざまなクラスの問題に適しています。 Jim Blandyは、Scheme マイナーと呼ばれる のバージョンに取り組んでいます。これは、ネイティブシステムと非常に緊密に統合されており、パフォーマンスを向上させることを目的としています。
LilyPondが拡張性のためにGuileを使用していることは理解していますが、OS Xのインストールに深刻な打撃を与えたため、LilyPondをソフトウェアの理想的な輝かしい例として保持するかどうかはわかりません...
はい!スキームは非常に興味深いものです。私はウォータールー大学での最初の年にそれを学びました。特にOOP /命令型のバックグラウンドから来た場合は、最初は少し異なります。
それはあなたにとって多くの素晴らしいことをします、そして機能パラダイムは間違いなくあなたが探求すべきものです。
また、非常に便利です。たとえば、Cの超簡略化バージョン用のコンパイラを作成したばかりで、関数型言語なしでそれを実行することは想像できませんでした(:
私は2年以上Schemeを学び、プログラマーとして非常に役立ちました。それは私に異なった考え方をし、プログラミング言語間のより深い概念とリンクを理解する方法を教えてくれました。 JavaおよびCのように、Schemeで任意のプログラムを記述できることは事実ですが、それはかなり困難です。解釈する前に実行する必要のある一連のプログラム変換があります。 as JavaまたはCコード。ただし、少なくとも基本を学ぶことは価値があります。
最近、stackoverflowポッドキャストで Reddit はもともとLISPで書かれていると聞きました!
私は最近IronSchemeで遊んでいますが、実際の作業にSchemeを使用している人は誰も知りません。
スキームは主に教育目的で使用されます。これが、(物議を醸す)RSR6システムまで標準モジュールシステムがなかった理由の1つです。宿題用の小さなプログラムを作成する場合、多くの大きなライブラリ。
スキームは、SmalltalkのようなOOPをLISPに追加する実験として始まりました。最終的にはマクロシステムを変更し、call/cc
(およびdynamic-wind
、dynamic-unwind
を追加しました) )、そしてかなり成長しました。
スクリプト言語としてGuileを使用するGNUプロジェクトを除いて、Schemeを使用する本番システムは知りません。LISPを使用する本番システムはいくつか知っていますが( Orbitzの予約システムにはLISPコードがあります )。
私はプログラム言語デザインのクラスでそれについて学んでいます、それはいくつかのきちんとした使用法を持っています。末尾再帰に適している問題にのみ使用します。