30

Python、C、C++、PHP、Javascript、Haskell、Java、MIPS、x86 アセンブラーです。でも、新しいものを覚えてからもうすぐ2年が経ち、かゆみが出始めています. 私にはいくつかの基準があります:

  1. 必須 (繰り返し: 必須) 無料の Linux 実装が必要
  2. 私がすでに知っている言語とは異なるはずです。言い換えれば、新しい方法で問題を解決することについて考えさせる機能が必要です。
  3. 実用化の可能性を秘めているはずです。次の Java である必要はありませんが、これは Brainf* と Shakespeare を除外します :) 求人情報がいくつあるかはあまり気にしませんが、現実世界のアプリとライブラリはプラスです。
  4. 少なくとも、私がそれを始めるのに十分な無料の教材が必要です.

私はLisp(CL?何か他のもの?)またはOCamlを考えていました。Haskell を使用した関数型言語の経験はすでにあります (はい、Lisp/OCaml がマルチパラダイムであることは知っています)。私は専門家ではありません - たとえば、実世界の Haskell のコードの一部は私の脳をゆがめますが、基本的な概念といくつかの高度な概念 (ファンクター、モナド) は理解しています。

どちらを選ぶ?私が見落とした他の言語はありますか?また、良い本/チュートリアルなどへの便利なリンクをいくつか含めてください.

4

16 に答える 16

31

Lisp も OCaml も、あなたがすでに知っていることからかけ離れたものではありません。一部は本質的な関心のために、一部は視野を広げるために選ばれた 4 つの提案を次に示します。

  • 論理プログラミング言語、おそらく Prolog です。オンラインで良い資料を見つけられませんでしたが、Sterling と Shapiro によるThe Art of Prologという本は優れています。Clocksin と Mellishによるより基本的な教科書も良いです。主な関心事は、関数ではなくリレーションを使用したプログラミングです。

  • SmalltalkまたはSelfのいずれか の純粋なオブジェクト指向言語。ハイブリッド オブジェクト指向言語しか使用したことがない場合は、純粋なオブジェクト指向がいかに美しいものであるかに驚かれることでしょう。SmalltalkのSqueak実装にリンクしました。個人的には、Self に取り組む前に Smalltalk を学ぶことをお勧めします。非常に大規模で活発なコミュニティがあり、ソフトウェアは十分に開発されています。Self は Smalltalk の肩に乗っており、さらに刺激的なデザインですが、コミュニティははるかに小さくなっています。ACM Digital ライブラリにアクセスできる人には、HOPL-III での Dave Ungar による優れた講演をお勧めします。紙もかなり良いです。

  • Icon プログラミング言語には、2 つの優れた点があります。暗黙的なバックトラッキングを備えた強力で珍しい評価モデル、および正規表現を打ち負かすユーザー拡張可能な文字列処理モデルはすべて中空です。残念ながら、Icon は時代に完全に対応できていません。私のすべての推奨事項の中で、Icon は最も実用的ではありません。実際、言語が瀕死になるのではないかと心配しています。しかし、それは Haskell とほぼ同じくらい、そしてまったく異なる方向にあなたの心を広げてくれます。アイコンは、適度なサイズの文字列処理タスクには依然として非常に便利です。

    Computer Journalの Ralph Griswold による記事で、アイコン文字列処理について読むことができます。

  • Lua プログラミング言語は、私の最後の、そして最も過激でない提案です。その関心は、新しい言語の機能やパラダイムではなく、言語の優れたエンジニアリングとその実装にあります。Lua は、スクリプティング、ゲーム、文字列処理、軽量関数型プログラミングなど、多くのニッチを占めています。しかし、その主な関心事はC とのシームレスな統合であり、最大限のメリットを得るには、C ライブラリを Lua にバインドする必要があります。

    HOPL-IIIのWeb サイトには、Lua に関する優れた講演論文も含まれています。

于 2009-07-02T00:44:36.997 に答える
26

Common Lisp と Ocaml はどちらも、学ぶのに確かに役立ちます。Haskell を既に知っている場合、CL はより異なるエクスペリエンスになる可能性があります。

SBCLClozure CLはどちらも、Linux での Common Lisp の非常に便利な実装です。(さまざまな実装についての概要: Common Lisp 調査.)

出発点として、Peter Seibel の優れた本Practical Common Lispを使用することをお勧めします。これは、オンラインでも印刷物でも入手できます。

コミュニティ ポインタは次のとおりです: CLIKI .

于 2009-06-28T23:16:25.540 に答える
8

Erlangは、その非常に効率的な同時実行モデルと、分散システムを簡単に作成できるため、学ぶのが非常に興味深いものです (この例として、CouchDBは Erlang で作成されています)。これは動的に型付けされる関数型言語ですが、手続き型の方法でコードを書くこともできます。私がそれを学んだチュートリアルは「Getting Started with Erlang」と呼ばれ、言語のほぼすべての部分をカバーしています。

于 2009-06-29T03:18:42.307 に答える
6

Java と関数型プログラミングの知識を活用したい場合、そして Lisp を学びたい場合は、Clojureを試してください。

実装は無料で、JVM 上で実行されるため、Linux を含むクロスプラットフォームです。Lisp であるため、他のほとんどの言語とは (便利で素晴らしい方法で) 十分に異なっており、興味深いものになっています。不変のデータ構造、マルチメソッド、メタデータのサポート、安全な並行性へのフォーカスなどの一部の機能は、リストした言語と比較してかなり斬新です。Clojure は、アカデミックな言語ではなく、実用的で有用な言語になることを重視しています。これは関数型言語ですが、「純粋」ではないため、間違いなく良いことです。Clojure 内から任意の Java ライブラリを簡単に利用することもできます。

Clojure は新しい言語なので、これまでに出版された本はProgramming Clojureだけですが、かなり良い本です。言語はまだ非常に急速に進化しているため、完全に最新ではないwikiもあります。メーリング リストと IRC チャネルは、とてもフレンドリーで、質問を歓迎する場所です。もちろん、公式ウェブサイトも優れたリソースです。

于 2009-06-29T02:05:22.440 に答える
5

Smalltalkをご覧ください!CincomVWSTまたはSmalltalk/Xのいずれか-インターフェイスがひどいので、Squeakを気にしないでください)。VASTも優れていますが、実際にはWindows中心のみです。そして、Smalltalkを軽蔑する懐疑論者を気にしないでください。彼らはそれを使用せず、編集-実行-デバッグサイクル言語と複数の意気消沈したリンクライブラリの泥沼にとらわれています。:-)

なぜこれらのSmalltalks-まあ、それらは優れたIDE、組み込みのGUIツール、これまでにない最高のデバッガー、オンラインヘルプを備えており、基盤となるOSから完全に独立しています。たとえば、Linuxで実行されているST/XプログラミングをWindowsST/ Xに転送(ソースコード)して実行する必要があります。

ST / Xは無料で、ライセンスの制限はごくわずかです。Cincomは、制限のない無料のNC(非商用)バージョンを提供しています。デフォルトのルックアンドフィールを好むので、ST/Xを使用します。それらのIDEインターフェースは非常に似ています。

IDEとGUIツールのない言語は、基礎となる言語がどれほど素晴らしいものであっても、世界は本当にGUIであるため、時間を無駄にしているだけです。たとえば、Rubyは素晴らしいですが、IDEや簡単なGUIツールがないため、本当にイライラします。

Smalltalkは簡単に理解できず、完璧ではありませんが(言語は何ですか?)、学習して使用するのは非常に満足のいくものです。そして今、ハードウェアとオペレーティングシステムがついにSmalltalksのニーズに追いついた。非常に効率的です。

于 2009-06-29T01:17:55.217 に答える
5

私は、Rainer の Common Lisp の推奨に 2 番目です。

CL はあなたが探しているものをすべて備えており、他の言語でのコーディング作業やアプローチを改善する真に斬新な体験を提供します。

しかし、忍耐と粘り強さを持って、最初は異質に見える多くの概念を把握する必要があります。

于 2009-06-30T19:38:16.833 に答える
3

Tclを試すことができます。脳に副作用を引き起こすほどの違いがあったので、どうやって違うのかはわかりませんが、いいものがたくさん書かれています(最近は以前より少ないかもしれません)。

于 2009-07-02T17:42:11.230 に答える
2

C# は、 Monoプロジェクトの下で Linux に無料で実装されており、 完全に反 Microsoft でない限り、間違いなく非常に市場性のあるスキルです。

私のお気に入りの C# の本は、『 Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition』です。

本当にエキゾチックなものが必要な場合、F# は .NET プラットフォームと mono 上で動作する OCaml スタイルの言語であり、最近多くの注目を集めています。

http://msdn.microsoft.com/en-us/fsharp/default.aspx

F# の本:
http://www.amazon.com/s/ref=nb_ss_gw?url=search-alias%3Daps&field-keywords=f%23

于 2009-06-28T23:11:56.937 に答える
1

では、FORTRAN を試してみますか? 科学や数学のコミュニティで今でも積極的に使用されていると聞いています。さらに、学習の課題になるほど似ていないはずです。

コンパイラ:
http://gcc.gnu.org/wiki/GFortranBinaries
http://www.g95.org/
http://www.fortran.com/compilers.html
http://www.thefreecountry.com/compilers/ fortran.shtml

IDE:
http://www.eclipse.org/photran/
http://force.lepsch.com/ (FORTRAN 77 のみ)

チュートリアル:
最新の FORTRAN の紹介: http://www-uxsup.csx.cam.ac.uk/courses/Fortran/
FORTRAN 90 チュートリアル: http://www.cs.mtu.edu/~shene/COURSES/cs201/ NOTES/fortran.html

Visual Basic .NET の保守を余儀なくされた場合に備えて、Visual Basic .NET を学習することもできます。明らかにモノには、それの動作する Linux 実装があります: http://www.mono-project.com/Visual_Basic

于 2009-07-02T06:17:09.393 に答える
1

これまで見てきた提案の中で、私は Lisp (Secko を参照) と Smalltalk (brett を参照) が好きです。どちらも言語の別の見方を提供してくれるからです。プロローグはなおさらです。

異なるもう 1 つの言語は Erlang です。私はまだそれを学ぶ機会がありませんでしたが、並行処理を別の方法で処理しています。私が提供できる最良のリンクは、メインのウェブサイトです。

推奨事項に関しては、Lisp は現在使用されていることと非常に古いことの両方で優れています。他のソースを見て、どれが最も魅力的かを確認する必要があります.

于 2009-06-29T02:34:53.347 に答える
1

Factorは、あなたが知っていると言ったすべてのもの、およびリストされている他のすべてのものとはかなり根本的に異なります。Forth のようにスタックベースですが、かなり包括的なライブラリと多くの興味深い機能を備えています。

Ada は非常に実用的です (gcc ベースのコンパイラがあります) が、ご存知の他の命令型言語とは大きく異なります。型システムは少し息苦しいと思いますが、何かを学ぶ価値はありました。

于 2009-07-22T01:29:02.520 に答える
0

あなたと同じように、私は 12 以上の言語を身につけています。クロスコンパイラを書くための何かを買おうとしているときに、ML とファミリに出くわしました。そこには多くの非常に優れたアイデアがあり、コードを書くことはまったく異なる方法であると教えてくれました。たとえば、私の JavaScript は明らかに機能的に曲がっています。

Windows で OCaml をしばらくいじった後 (そして安定性の問題に不満を感じていた)、OCaml の子孫である F# に出くわしました。この 2 つは非常によく似ています (多くのコードをクロスコンパイルできます) が、OCaml には非常に優れたマクロ システム (P4) と型クラス (ジェネリック型に対して「強く型付けされた」演算子の記述をサポートする) があるようですが、F# には非同期および並列操作、モナド、数値型の測定単位の優れたサポート、およびよりクリーンな OO 構文と優れた IDE 統合 (VS2008 & VS2010 と共にインザボックスでリリースされます)。.NET ランタイム全体と多数のサード パーティ ライブラリにアクセスできるので、最近は F# の方がずっと好きです。実際、私は現在、1 回限りのコードとユーティリティ コードのほとんどを F# で記述しています。私にとっては、一般的に C++、JavaScript、C#、PowerShell などよりもはるかに生産的です。

F# は、Linux の Mono でかなりうまく機能し、そこでは十分な支持を得ています。コンパイラとランタイムは安定したらオープン ソース化され (VS2010 でリリース)、開発者は Mono のサポートを Microsoft 以外での使用を真剣に検討するのに十分な優先度と考えています。

于 2009-06-29T15:01:34.593 に答える
0

Scala は、私がプログラミングを新しい観点から見るのに非常に役立ちました。私はまだそれを仕事のようなものに使用していませんが、Java だけでなく PHP など、他の言語でコードを書く方法にもまだ影響を与えています。私は最近、WordPress プラグイン用の単純なパーサーを作成しました。コードは 6 か月前よりもはるかに機能的で不変であり、PHP の強制力がないにもかかわらず、より優れています。

私の仕事の仕方に劇的な影響を与えた言語は、Perl だけで、それより 10 年近く前の言語です。Perl は、言語自体にはまったく触れていませんが、私が疑似コードを作成する方法に大きく貢献してくれました。

多くの人が Scala の機能面を Haskell と比較します。Haskell を知っているということは、Scala が教えてくれることをすべて知っているということだと想像するかもしれませんが、私はそうは思いません。Scala が OO と関数を結合する方法には、実際には両方の真の形式であると思わせる方法があります。

于 2009-06-29T02:52:14.967 に答える