
注目を集め始めるプログラミング言語「Nim」 60
ストーリー by headless
注目 部門より
注目 部門より
本家/.「Nim Programming Language Gaining Traction」より
Nimは最近注目を集め始めている新しい静的型付けプログラミング言語だ。入門用としては「Nimの特別な点は何か」「何がNimを実用的なものにしているか」「どのように導入するか」といった記事を読んでみるといいだろう。言語的にはPythonやPascalの影響を受けた文法を使用しており、優れたパフォーマンスやC言語とのインターフェイス、そして強力なメタプログラミング能力などを提供する。「Unix in Rust」の作者がRustを捨ててNimに移行したほか、アーリーアダプターの企業でも使われ始めている。
場合によっては C より速いらしいね (スコア:2, 興味深い)
ケースバイケースにしても,たいしたものだ…
ベンチマーク結果があった (スコア:2, 参考になる)
https://news.ycombinator.com/item?id=8776335 [ycombinator.com]
Re: (スコア:0)
C++はあるけどCとは比べてないね。
Re: (スコア:0)
コンパイラの吐くコードの性能でしょ?
「Cより速い」って言うとまるで言語仕様同士を比べてるみたいだけども。
Re: (スコア:0)
Cに変換するならCより速くはならねんじゃね?
Re: (スコア:0)
ぼくのみたのは次の web.
http://h-miyako.hatenablog.com/entry/2015/01/23/060000 [hatenablog.com]
習得 (スコア:1)
こういった新言語は毎年のように出ていますが、皆さんはどれぐらい乗り換えているもんでしょうか?
自分は一応試しては見るのですが、使いこなせる段階になる前に元の言語に戻ってしまいます
皆さんが新興言語の中で日常で使っているもの、あるいはきちんと自分のモノにした言語の数はどれぐらいでしょう?
Re:習得 (スコア:3, おもしろおかしい)
というか、既にアーリーアダプター(笑)にRustが見放された、という点に笑った。
Re:習得 (スコア:1)
Rustは関数型言語のパラダイムで再設計したC++なので、
C++を理解したプログラマーはRustを使う必要がなく、C++が理解できないプログラマ―にはRustも同様に理解できない。
Re:習得 (スコア:1)
よく言われる統計のウソ
結婚するカップルの5組に一組は離婚する、という話。
じゃあ、結婚した経験のある5人にひとりは離婚経験者かというと、そんなことはない。
同じ人がなんども離婚、再婚するから。
同じ人が何度も新しい言語覚えるだけでしょ。
Re: (スコア:0)
私もいつも疑問に思っています。
みんなそんなにホイホイ次々と言語を覚えて乗り換えられている(覚えることができる)んですかね・・・
有能な人や、仕事も普段の生活もプログラミングにどっぷり浸かっている人とかの場合、
乗り換えるというより、自分のスキルセットの中に片っ端から加えていくって感じなんですかね?
それ以外の人の場合、(能力そこそこ、普段の生活はプログラミングにそんなに浸かっていない人の場合)だと、
1つの言語(よくて2,3の言語)に噛り付くので精一杯な気もしますが。
# 気が付いたら、習得する必要のある言語がどんどん増えていて泣きたくなってきている件。
# C, C++,JAVA, Perl, Ruby, Python, javascript, Bourne Shell, kermit script, Lua, R, assembly, vim script, emacs lisp, C#, VB...
# 一つの言語さえ覚えれば後はすぐ覚えられるというのはまやかし。
Re:習得 (スコア:1)
# 気が付いたら、習得する必要のある言語がどんどん増えていて泣きたくなってきている件。
# C, C++,JAVA, Perl, Ruby, Python, javascript, Bourne Shell, kermit script, Lua, R, assembly, vim script, emacs lisp, C#, VB...
# 一つの言語さえ覚えれば後はすぐ覚えられるというのはまやかし。
え! そんだけ習得しといて?
それとも、習得する必要があるのに習得してない、って話なのかな?
それにしては、kermit scriptとかvim scriptとかemacs lispとかが謎。
Re:習得 (スコア:1)
いや、それだけ、必要だった事が驚き。
興味あるは色々、あるのだが、縁が無い。
今までの経験から、仕事とかで、必要になれば、一週間もあれば、何とかなった。
# ただし、とりあえず使えるレベル。
# マニュアル無しで、他人のコードと、コンパイラのみで覚えたのもあった。
興味だけだと、未だに覚えられないものが多数。
面白そうだけど、使える仕事ください。
Re:習得 (スコア:1)
たしかに。
LuaからVBまで必要な仕事って、やってみたいような、そうでもないような(笑)。
Re: (スコア:0)
え! そんだけ習得しといて?
それとも、習得する必要があるのに習得してない、って話なのかな?
それにしては、kermit scriptとかvim scriptとかemacs lispとかが謎。
習得する必要があったので習得しようとしたのだけれどもまともに習得しきれていなかった(いない)、ってところですね。
仕事などで、案件的に使わなければならなくなったので覚えようとしたんですが、
たいして習得できないうちにその案件が終わってしまい、また次の案件ではまた別の言語を・・・
という感じのループで今まで来ています。
# とてもじゃないけどこんな状況で使用経験言語の中に加えたくないです・・・
# 業務にガッツリC一筋5年! ってのなら加えていいと思うんだけど。
Re:習得 (スコア:1)
# 業務にガッツリC一筋5年! ってのなら加えていいと思うんだけど。
会社員だと高々8個しか習得できないですね。
Re:習得 (スコア:1)
アセンブラを一つに数えても 8は越えてる気がする。
まあ、長く Cだったけど、最近は縁が無いか? もっとも昔と今では、
微妙にルールが異なっているので、別とも言えなくも無いが。
# K&R と 最近のと、、初期は、全て英小文字だったのが、大文字が混じりだして、
# 見た目も違って、まるで別言語。
微妙なコードを別にすれば、どれも何とかなる。
微妙なコードなんて、そんなにあるわけでも無いし、
ただ、アセンブラだと、十数行が Cだと、一行なんてのがあるので、効率的には
色々あるけど。 最近の方がもっと効率良いかも知れないですが、
一行のコードでも実行モジュールサイズが、大きいので、用途次第。
Re: (スコア:0)
「~乗り換えられている(覚えることができる)~」
趣味でやっている人が大半で、既存(C,C++,Jave,etc)の言語とのインターフェイスが整っていれば、システムの一部分
にそれも一時的に採用してもいいかなぐらいでは。(局所的 = パフォーマンスを改善したい場所の部分に色々当てはめてている等)
「覚える」というよりも「パーツ」として、内容もシンプルな書き方で運用しているんじゃないかなー。
これはフレームワークにも当てはまる事では。
Re: (スコア:0)
今は全命令、文法丸暗記の時代ではありませんし。
デバイス、OS、プログラミング言語は設計思想と仕様分かれば、使うのはそう難しくないと思いますが?
向き不向き無視しなければ。。
ディープな技、不自然、冗長なコードが必要になるときは、何かが設計思想、仕様からずれてる、使い方が変なケースが多いんです。
Re: (スコア:0)
参考までにどんな言語を使ってきたのか遍歴を教えていただけないでしょうか…
例を上げてもらえると助かります
Re: (スコア:0)
覚えると言うほど大げさなもんでもなく、新しいシミュレーションゲームに手を出すような感じですかね。
面白そうなシミュレーションゲームがあったら、とりあえず起動してヘルプ見ながら何となく一通りプレイしてみて、
本当に面白そうだったらもうちょっとのめり込むし、そうでなければそれで終わり。
このゲームではこのポイントを貯めたらこれが出来るようになるんだなとか、細かな違いはあっても、基本は同じ。
基本的にプレイヤーが楽しく遊べるように作ってあるんだから、気合いを入れてこのゲームを習得するぞとやるほどのことでもなく。
全くやった事がないFPSにいきなりチャレンジなどだったら混乱もするだろうけど、
大ざっぱに言って関数型言語を除けば今時の言語はどれも同じジャンル。
プログラミング言語は、それぞれ何らかの意味でプログラマが使いやすいように作ってあるんだから、似たような雰囲気。
# リソースなどの制約があって、実際に使いやすいようには作れませんでした、
# という言語も少なからず存在するけど、使いやすいように作ろうとはされている
Re: (スコア:0)
>皆さんが新興言語の中で日常で使っているもの、あるいはきちんと自分のモノにした言語の数はどれぐらいでしょう?
JavaとPHPくらいかな。
#キリスト教だって2千年前なら新興宗教。
だって、そのくらいしか仕事に繋がるくらいに普及した言語がないんだもの。
Re:習得 (スコア:1)
JavaとPHPが「仕事」に繋がるなら、同じ「仕事」にJavaScriptも繋がりそうなもんだが。
普通に仕事で求人がありそう、って話なら、他にもいろいろありそうなもんだけど。
CでもRuby (on Rails)でも。
Re: (スコア:0)
親コメントの発言者の仕事と、あなたのいう仕事の定義とが違うだけでしょ。
Re:習得 (スコア:1)
上の人とは別人だけど、話がしたいらしいから答えてあげよう
>「仕事に繋がるくらいに普及した言語」と言う意味で、JavaやPHPを挙げるのに、JavaScriptを外すって言う「仕事」って何?
スマホのゲーム開発
Re:習得 (スコア:1)
JavaやPHPを挙げるのに、JavaScriptを外すって言う「仕事」って何?
スマホのゲーム開発
今どきクライアントサイドでもサーバサイドでもJavaScriptが使われてるのに?
それに、いまどきスマホゲームってPHPなの?
スマホゲームの開発を知らないから聞きたいんだけど。
Re: (スコア:0)
プログラミング言語の比較をしているサイトは多々あり、
ほとんどのサイトで「○○より使いやすい」だの何だのと色々書いているということは
紹介する全ての言語をひと通り使いこなしてから書いているはず。
彼らは一体どうやって習得をしているのだろうか?
彼らは一体なぜ新しい言語に挑み続けているのだろうか?
そして彼らは一体普段何を書いて居るんだろうか・・・?
そうそう、この機能が欲しかった (スコア:1)
従来、パターンマッチングによる置き換え最適化はコンパイラへの埋め込みでした (sinとcosをsincosにまとめるなど)。
そのため、非標準ライブラリを使用するコードの自動最適化には限界がありました (まぁ、C言語にはCoccinelleというセマンティックパッチ言語もありますが)。
このNimのTerm rewriting macros [mit.edu]は待ち望んでいた機能ですね。
とはいえ、ざっと見た限りでは、精度と値域と速度のトレードオフの問題や、構造体に中間物を入れる場合 (例えば平方根を計算しないで比較しソートする場合)など、
自動最適化が難しい面への解決策とまでは行かないような印象です。
Re: (スコア:0)
おっと、間違えた。Coccinelleはツールで、セマンティックパッチ言語はSmPLです。
Re: (スコア:0)
実用言語のとしてのnimは素晴らしいものだとは思いますが、term rewriting macrosは部分評価のサブセットに見えますし、
数十年前のアイディアが今になっても限定的な形でしか取り込まれていないことには(取り込むのは非常に難しいです!!!)、
少々いらだちがつのることろではあります。
Cへのトランスレータなのね (スコア:1)
Windowsでnimファイルをコンパイルしようとして、エラーメッセージ化けてて最初ワケわからんかったわ。
インストール時にMingWも含めてコンパイルの時はパス通しておかないとだめ。
なんでもいいから統一してくれ (スコア:0)
ポストC/C++言語にはDとかRustとかあるけど
もうひとつ加えられるのか…
言語が乱立してると、結局C/C++を使い続けることに
なりそうだな
個人的にはC++を置き換える言語は欲しいけど・・・
Re:なんでもいいから統一してくれ (スコア:1)
C/C++が担っている低レベルなプログラミングに注力しているようには見えません。
トップページにefficient, expressive, elegantとあるように、
Pythonくらい簡単な文法で、C/C++並みに高速化するには、Lisp並みの表現力を得るにはどうするのか、というのがコンセプト。
コンパイル時計算が非常に簡単で強力です。const付けるだけ。
マクロとテンプレートも、別言語を使わされているような見た目にはなっていません。
反面、型システムはそれほど凄いわけではありません。built-inな型でかなり楽をできますが。
Pythonライクな文法を、自身と似た文法で拡張できるってのが印象的です。Lispの如くマクロを使えということなのでしょう。
奇怪なASTを晒してメタプログラミング可!とふんぞり返る言語が多い中では好感が持てます。
bare metalな世界に安全性と表現力を持ち込もうとしているのがRust、
pythonに速さと表現力を持ち込もうとしているのがNim、
# GoはGoogleのGo。すいません知らないんです。
Re:なんでもいいから統一してくれ (スコア:1)
C++も14ならば、newとdeleteのほぼ完全な駆逐も可能だし、置き換えるにしてはNimも説得力がイマイチな気が。
(tutorial part I しか読んでないけど)
あとC++に今すぐ欲しい機能はstatic ifとマトモな標準ライブラリかなぁ
というか、Cythonと被って見える。
Re:なんでもいいから統一してくれ (スコア:1)
C++とかC系言語の最大の問題点は「○○が出来ない」ではなく、「○○が出来てしまう(その上、問題が検出もされずスルーされるのが危なすぎる)」だと思う
Re: (スコア:0)
でも、インラインアセンブラ禁止したら怒るんでしょ。
ムーブコンストラクタのせいで個人的にC++熱が再燃しているんだけれど、ムーブを実装していないと、一部の標準関数は実行時エラーになるのは何とかしてほしい。
Re: (スコア:0)
実行時エラー>たとえばどれ?
あとコンパイラはなんですか。
Re: (スコア:0)
本当これ
乱立することでユーザーも分散するからどれも流行らない
新しい言語を乱立するんじゃなくて協力し合えないのかな
Re:なんでもいいから統一してくれ (スコア:1)
そこはほれ、nim [wikipedia.org] ですから、なんというか、パイの奪い合いというか。
Re: (スコア:0)
新しい言語を乱立するんじゃなくて協力し合えないのかな
ああゆうのは、俺の考える高速で安全なC/C++代替言語なので協力できるわけがない。何を保証して何を保証しないかは言語作成者によってバラバラだからね。
Re: (スコア:0)
C/C++ を置き換えるなら、
SSE2/AVX/OpenCL/OpenMP あたりにも対応してくれないと意味ないよね。
nim は対応してるんだろうか?
Re: (スコア:0)
そもそも難しいのは低レベルなプログラミング自体であって、CやC++の問題は、言語仕様が低レベルなコードを記述することを前提にしている結果でしかない。
DやRustも今時のスクリプト言語に比べれば、言語仕様が複雑なのはかわりない、安全に低レベルな操作を提供する場合、安全が保証できる範囲を言語側で定義するして守らせる必要がある。
要するにこの手の言語が保証する安全は、スクリプト言語とかの適当に書いてもそれなりに動くものではなくて、プログラマーの自由をガチガチに制限するタイプだ、
まあ、それだけじゃ間に合わないのでunsafeブロックみたいな、非安全なコー
勝ち馬に乗りたいだけ (スコア:0)
細かい言語仕様()なんてどうでもいいんだよ。
どうせ同じだからどっちが勝つかしか興味ない。
同様の問題でPythonもRubyもどちらかが滅びるべきだと思う。
日本語でおk (スコア:0)
誰か日本語の紹介記事教えてくれ
Re: (スコア:0)
http://h-miyako.hatenablog.com/entry/2015/01/13/201846 [hatenablog.com]
いくつかあるけど、これが一番、まとまってるような気がする。
ただ、俺もnimは全く知らないので、内容が正確なのかどうかは知らん。
Python風Delphi待望論 (スコア:0)
Python風インデント構文で、コンパイラはC++を上回るトップ性能という事で
Pythonから入った人にはウケがいいのだろう。
でも影響を受けたのはPascalらしいので、Delphi使いの流浪の民が
流行を取り入れて新しい宗派を始めたという事なのかもしれないな。
Delphiのような統合開発環境に発展したら、かなり流行るのではなかろうか。
Nimrodそっくりのページだなぁ (スコア:0)
と思ったらいつの間にか名前変わってたのか…
# サイトデザインが大幅に変わった時も一瞬別なページ見てるのかと思ったけど
個人的には (スコア:0)
30年ばかり色々とやってきて、もうあまり、新しい言語は…という気になっている。
(現在はJavaメイン)
個人的には、awkの拡張言語ができればそれでいいかな…。
いや、基本文法はawk、文字列と変数はPerlがいいか。
関数の呼び出しは、なんだったっけ。割と最近出た言語のようなのがいい。
func(width,height,depth)に対してfunc(1,2,3)でも呼べるしfunc(width=1,depth=3,height=2)でも呼べる。
画期的な言語はもうでないのか? (スコア:0)
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97... [practical-scheme.net]
他の言語のデザイナが演算子の優先順位や文法に使う記号の善し悪しを 議論しているのが遠い世界のように感じられる。
なう、げっ、ざっ、ちゃんす (スコア:0)
Nim!