質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Nim

Nimは、静的型付けプログラミング言語。Pythonの生産性でありながら、C言語のような高いパフォーマンスも持ち併せます。さらに自由度の高い言語で拡張性も重視されています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

並列処理

複数の計算が同時に実行される手法

コールバック

コールバックは他のコードに引数として渡されるコードのことを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

912閲覧

「Python」と「Go言語」と「Nim」の「特徴」と「ベンチ-マーク」、「マルチコア、マルチスレッドなどの並列処理」、 「コールバック地獄対策」、「良い意味で独創性が無くチームでの開発効率が高いか?

cloud9slack

総合スコア7

Nim

Nimは、静的型付けプログラミング言語。Pythonの生産性でありながら、C言語のような高いパフォーマンスも持ち併せます。さらに自由度の高い言語で拡張性も重視されています。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

並列処理

複数の計算が同時に実行される手法

コールバック

コールバックは他のコードに引数として渡されるコードのことを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2018/01/17 14:11

###前提・実現したいこと
**「Python」と「Go言語」と「Nim」の「特徴」と「ベンチ-マーク」、「マルチコア、マルチスレッドなどの並列処理」、
「コールバック地獄対策」、「良い意味で独創性が無くチームでの開発効率が高いか?」などを調べておりますが、
独学では限界がありまして、どなたか教えて頂ければ幸いです。

WEBプログラム言語「Nim」の特徴を調べております。
勉強の為に転載しました。
http://wolfbash.hateblo.jp/entry/2017/10/02/163017
参考資料の上記より引用すると、
「Nim は Python に強い影響を受けていて文法は Python そっくりです。そのためスッキリ書けて非常に見やすいです。Python をブラッシュアップして、秘伝の悪魔のタレをかけたような感じです。」

「C言語、Nim、Go言語、Pythonなどのベンチマーク」
http://h-miyako.hatenablog.com/entry/2015/01/23/060000
ベンチマーク結果は、最速は、C言語、Nimで次に、Go言語などが早いのが分かりました。**

■Nim用のWEBフレームワーク、テンプレートエンジン等も普通あるので、
Nimで、普通にWEBサイトを開発出来るのは分かりました。

□PythonとGo言語は、マルチコア、マルチスレッドなどの並列処理に対応してますが、
〇ポイント■Nimだと、どうでしょうか?

□PythonとGo言語は、コールバック地獄対策がされていて解決されていますが、
〇ポイント■Nimだと、どうでしょうか?

□PythonとGo言語の共通のメリットの特徴として
・Pythonだと、コードの記述規則ルールが厳格に決められているので、
打ち合わせや、会議が少なくても、チームでの開発効率が良い。
・Go言語だと良い意味でソースコードの独創性が無いので、チームでの開発効率が良い。
〇ポイント■Nimだと、どうでしょうか?

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

  • マルチコア, マルチスレッド状況

Nimではスレッドの生成も扱えますし、forkプロシージャでプロセスの複製も出来ます。
スレッドの作成は低レベルとして提供されてるようで、公式ではthreadpoolモジュールを使うことが推奨されています。
こちらにspawnというプロシージャがあり、プログラム起動時に作成されるスレッドプールに何かしらの関数などをタスクとして投げる感じですね。
スレッドに詳しいならば低レベルでスレッド作成してもいいでしょう。
低レベルのスレッド作成は、システムモジュールの一部なので--threads:onをコンパイルオプションで指定していれば使えます。
もちろんthreadpool使用時も同様にオプションが必要です。

  • コールバック地獄

非同期のコールバックについてでいいんですよね?
Nimではasyncdispatchというモジュールで非同期機能が提供されています。
async / awaitもあるので、
書きやすいとは思います。

yieldは、awaitしていてエラーが発生するかもしれない時に変わりにyeildを使って例外処理をする時に使うようです。
私はtryステートメントで例外処理をするので使ったことは無いです。

  • コーディング規約について

公式で一応規約があります。
インデントは2スペースで, キャメルケースを推奨しています。
公式のリンクは、既に回答されてる方のリンクがあるので割愛します。

投稿2018/01/25 08:40

編集2018/01/26 04:51
momf

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momf

2018/01/25 08:44

ちなみにWebフレームワークのjesterは有名で調べたと思うんですけど、使いやすさは置いといて、 パフォーマンスはすごく悪いのでGoとは比較にならないくらいダメです。 普通のプログラムを組む分には、早いほうだと思いますよ。 まだバージョンが0.17.2なのでこれからどうなるかは分かりません。
cloud9slack

2018/02/13 02:25

Nimの特徴についてとても参考になりました。 ベストアンサーとさせて頂きます。 Webフレームワークのjesterは検索しましたが、分かりませんでした。 ありがとう御座いました。
guest

0

私も興味を持ってNimをあれこれ調べましたが、
実際に使った事がないので分かる箇所だけ回答します。

そもそもNimはまだ1.0にもなっていません。
気に入った少人数のハッカーが手慰みで使う言語です。
落ち着いたらしいとはいえ、まだまだコンパイルのバグを踏み抜きそうなのでそういった意味でも業務利用ではオススメできません。


マルチコア、マルチスレッドなどの並列処理

まぁNimはCなんで、普通にスレッドを生成できます。
(ただし本当にCのスレッドと全く同じ性能かまではよくわかりません)

また、NimはCやC++のライブラリを取り込めます。
Cにはlibuvという超高速イベントループのライブラリが存在しており、
Node.jsの高速イベントループはこのlibuvを指しています。

この辺の事情から、実際に動かしてベンチマークを取らないとなんとも言えないものの、
そんじょそこらの言語と比べて遅くて使えないということはまずないと思います。

コールバック地獄対策

ドキュメントAsyncDispatchです。
全く読んでませんがざっと眺めた感じでの印象です。

yieldやらawaitやら期待できそうな予約語が用意されてるようですね。
サンプルコードを見る限り、上手く遅延しながら待つ仕組みが用意されているんじゃないかと思うのですが…
期待に適うか読み進めて見てください。

PythonとGo言語の共通のメリットの特徴として

ドキュメントコーディングルールです。
中々に殺風景で整備されてるとは言い難いですね。

というかVim-GOみたいな適当にコピペしたようなインデントぐしゃぐしゃなコードでも、
保存と同時にコーディング規約通りにバシッと修正してくれるようなものなんて無いでしょうし、これらの超メジャーな言語とコーディングルール的な所で勝負しようという方がおかしいです。

社内で使うなら規約の整備やレビューで頑張るしかなさそうですね。
ただし、基本的な構文はPythonが元になっているので、
不整合が出ないかぎりはPythonのコーディング規約をそのまま使ってはどうでしょうか?

投稿2018/01/17 15:51

編集2018/01/17 16:05
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cloud9slack

2018/01/18 05:13

■マルチコア、マルチスレッドなどの並列処理については、Nimはスレッドには、対応している様ですが、 どこまで対応しているかは不明なのでもう少し詳しいと助かります。 ■コールバック地獄対策については、yield、awaitで出来る様ですが、もう少し詳しく分ると助かります。 ■ソースコードのコーディングルールについては、 だいたい分かりました。Pythonが元になっているようなので、信頼できそうです。 ■以上についてもう少し詳しく教えて頂けると助かります。
cloud9slack

2018/02/13 02:23

>>ドキュメントのコーディングルールに関して >基本的な構文はPythonが元になっている。 と言う点は得にとても参考になりました。他の部分も参考になりました。 ありがとう御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問