nim

2018/03/01(木) 18:32:18.16ID:vh/yy2VS
https://nim-lang.org/
2022/11/08(火) 18:53:20.46ID:nCLZIP1Q
>>244
それは公式ドキュメントのここに書いてあるじゃないですか。
https://nim-lang.org/docs/strformat.html#limitations
2022/11/08(火) 19:07:14.22ID:2BJbmpY0
Pythonスレでテンプレになってる内容をNim用に変更したので
次スレからはテンプレにしてください

-----ここから

Nimの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://glot.io/new/nim    結構使える。
ttps://play.nim-lang.org/   本家。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。

-----ここまで
247デフォルトの名無しさん
垢版 |
2022/11/09(水) 22:27:24.03ID:5vHWfdFN
判り初めた my Revolution
2022/11/10(木) 13:14:50.85ID:JZ2iIpp8
試してみた
本家 https://play.nim-lang.org/#ix=4ftO
スッキリ https://glot.io/snippets/gf9x33imvc
ダメぽよ(実行時エラー?) https://ideone.com/9BYjHA (たまに死ぬよねこのサイト)
貼るだけ? https://pastebin.com/07h9Zjrx

ideoneがダメなのはバージョンの問題?
2022/11/10(木) 13:25:08.92ID:JZ2iIpp8
これで逝けました
https://ideone.com/HBEKZu
pragmaのNimNodeを指定出来なかったらしい
ideone の Nim は (nim 0.19.4)
2022/11/10(木) 14:16:57.58ID:JDmtuJFO
https://wandbox.org/
2022/11/10(木) 15:04:27.30ID:JDmtuJFO
↑のWandboxでも最新の安定版Nimを使えるしコードを共有できる。
2022/11/10(木) 15:55:36.21ID:hnXF7Xx/
ここまでのまとめ
ttps://glot.io/new/nim    結構使える
ttps://wandbox.org/ 最新のNim使える
ttps://play.nim-lang.org/  本家
ttp://pastebin.com/      ソース貼り付けのみ
253デフォルトの名無しさん
垢版 |
2022/11/10(木) 16:23:45.65ID:j+QMfGd1
やっぱオフサイドスタイルはクソかよ。
254デフォルトの名無しさん
垢版 |
2022/11/10(木) 16:52:41.86ID:JZ2iIpp8
>>250
wandboxだと(っていうかそれ以外でもかもだけど)
実行ボタンの上に
$ nim c ./prog.nim
って表示されてて c を cpp に変更したくても出来ない
左上の「コンパイルオプション」らしい枠に cpp を入れると
$ nim c ./prog.nim cpp
になったわ
2022/11/10(木) 20:00:36.53ID:JDmtuJFO
>>254
確かにwandboxだとnim cppでコンパイルできないっぽいね
もしかしたらgithubのwandboxリポジトリに要望を出せば対応してくれるかもしれない。もしくは自分で機能を実装してpull requestを出すか
256デフォルトの名無しさん
垢版 |
2022/11/11(金) 10:16:18.33ID:8dOB0zbX
ここは未完成なのかな
日本語マニュアルっぽいけど
https://2vg.github.io/Nim-World/
257デフォルトの名無しさん
垢版 |
2022/11/12(土) 14:40:51.16ID:OIoQvXCU
自分で育てる感覚楽しいですね
2022/11/15(火) 13:26:12.68ID:QGmQMBHU
type
Hoge* = object
fuga*: int
としないで
type
HogeObj* = object
fuga*: int
Hoge* = ref HogeObj
とするのは必須?習慣?
前者のデメリットは DeepCopy だというのは判るのですが
毎回後者を使った方が良い?
259デフォルトの名無しさん
垢版 |
2022/11/16(水) 09:07:52.80ID:qCq9+PtI
{.byref.} じゃね?
260sage
垢版 |
2022/11/16(水) 13:30:51.35ID:4BSq9VuL
横からだが
>>259 のbyrefと >>258 は完全に等価?
261デフォルトの名無しさん
垢版 |
2022/11/16(水) 15:57:06.50ID:z+sJwdsY
proc 読んだとき ref のフリをする fake が 259
2022/11/16(水) 18:16:18.08ID:kOxph/zs
ref objectは一つのオブジェクトを複数のオブジェクトから参照したいときや継承使ってオブジェクト指向なコードを書くときに必要となる。
それ以外の場合はrefのついていないobjectのほうが速くなることが多い。
ref型は常にヒープに確保されポインタ経由でアクセスされるけどobjectだとスタックに確保できるしポインタで間接的に参照する必要もない。
object型のseqだとメモリ上に連続して確保されるけどref object型のseqにするとメモリ上に連続して確保されるとは限らないからキャッシュミスが起きやすくなる。
ある程度大きなobjectはプロシージャに渡すときに自動的にポインタ経由で渡されるからコピーのコストが問題になることがあんまりないと思うよ。
C++で言えばobjectはstructをそのまま使っている感じでref objectはstructをstd::shared_ptrごしに使っている感じ。
2022/11/17(木) 09:41:27.60ID:V4QZv0Fq
proc incx(i: int): int =
let j = i
{.emit: "++j;".}
result = j

echo incx(5)

https://glot.io/snippets/gfgq0p65a6
let で定義された変数も書き換え可能なんですね素敵ですね
2022/11/17(木) 09:41:55.68ID:V4QZv0Fq
>>259-260
全く別物
2022/11/17(木) 09:45:16.34ID:V4QZv0Fq
>それ以外の場合はrefのついていないobjectのほうが速くなることが多い。

これはどうかなぁ
遅くなることの方が多いと思うが
2022/11/17(木) 10:53:32.89ID:hYmfXxMP
>>265
どうしてrefのついてないobjectのほうが遅くなる場合が多いの?
2022/11/17(木) 14:28:18.19ID:hYmfXxMP
>>263
emit pragma使っているんだからNimの安全性は無効になる。
rustでunsafeを使うようなもの。
2022/11/17(木) 15:18:49.83ID:fBlcqeZM
>>262
>ある程度大きなobjectはプロシージャに渡すときに自動的にポインタ経由で渡されるから

ってことは {.byref.} 描く必要無い?
2022/11/17(木) 17:33:28.89ID:7oSKGzG8
>>268
自動でやるのは関数の引数にオブジェとを渡した時だから
それ以外にコピーが頻繁に発生しないなら
byrefいらないんじゃね?
2022/11/17(木) 18:51:38.00ID:hYmfXxMP
>>268
https://nim-lang.org/docs/manual.html#procedures-var-parameters

var parameters are never necessary for efficient parameter passing. Since non-var parameters cannot be modified the compiler is always free to pass arguments by reference if it considers it can speed up execution.
って書いてあります。
2022/11/17(木) 19:03:15.70ID:hYmfXxMP
>>268
https://nim-lang.org/docs/manual.html#foreign-function-interface-byref-pragma

Nim manualではbyref pragmaがForeign function interfaceの章の下にある。
つまりbyref pragmaはC/C++の関数に引数をポインタ渡ししなきゃいけないときに使うもの。
それ以外のときに使う必要性はほぼ無いってこと。
2022/11/17(木) 21:39:23.14ID:ArWNCDPA
>>265
そんな速度差気付くことある?
273デフォルトの名無しさん
垢版 |
2022/11/18(金) 05:58:57.10ID:AmxJEdx7
君らスタックの消費は気にならんのけ?
2022/11/18(金) 06:16:37.43ID:IYaGyAsl
>>273
10kバイト以上のでかいobjectをたくさん使うとかならスタックを使わないようにref objectにしてヒープに確保してもいいと思う。
けどそんなにでかいobject型のローカル変数をたくさん使うことってあんまりないきがするけど。
275デフォルトの名無しさん
垢版 |
2022/11/18(金) 09:39:59.23ID:IJuokuF8
たとえば
https://qiita.com/dumblepy/items/8d13592d6760d0155d89
>オブジェクトの宣言にはref objectを使います。
>Nimでは関数の引数に入れられた変数の容量に応じてコンパイラが自動で値渡し/参照渡しを調節しますが、
>これは挙動の予測が付かずバグの原因になりえます。
>ref objectでオブジェクトを宣言していれば必ず参照渡しになるので、
>アプリケーション開発ではこちらに統一しましょう。

みたいなことが
276デフォルトの名無しさん
垢版 |
2022/11/18(金) 10:17:44.40ID:IJuokuF8
問題無い訳ではないとも
https://flat-leon.はてぶろ.com/entry/nim_arg_pass
バージョンや記事の年代に気を付けないといかんのかね
2022/11/18(金) 11:42:20.25ID:IJuokuF8
古いけどここの議論は判り易い
https://forum.nim-lang.org/t/1207
2022/11/18(金) 11:48:22.19ID:ygRIcUIa
>>270
それは var の説明であって ref の説明ではないですね
2022/11/18(金) 12:02:19.50ID:IYaGyAsl
>>275
>>278
refのついた型またはvar引数は常に引数を参照渡し(ポインタのコピー)する。
refやvarがついてない場合は引数のサイズにあわせてコピー渡しか参照渡しになるが、どちらにせよプロシージャ内で引数を変更するのは禁止
2022/11/18(金) 12:10:00.28ID:IYaGyAsl
だからデフォルトの引数の渡し方でそれがコピー渡しになろうが参照渡しになろうがそれで挙動が変わったりバグの温床になることはない。
ただしaddrとかemit, Assembler statementなどのNimが安全性を保証してない機能を使う場合は例外だ。
2022/11/18(金) 12:24:09.04ID:IJuokuF8
参照とか reference とか同じ名前だから混同してるのかも知れないが
Nim の参照型と C++ の参照型は全く別物
C++ の引数で使う参照型 & は Nim では var の方が近い
Nim の ref は C++ ではポインタ * と思った方が良い
Nim では
GC で管理されるポインタが ref
GC で管理されないポインタが ptr
2022/11/18(金) 17:46:16.11ID:PNsYUFFf
これ使うか使わないかでも全然違うのよね --gc:arc
2022/11/18(金) 18:35:09.65ID:yVVkBIHa
最近は --mm:arc
2022/11/19(土) 16:28:59.40ID:F8GIHVyH
--mm:orc 推奨
2022/11/19(土) 17:55:05.22ID:lavOlnrp
Nim2では--mm:orcがデフォルトになるらしいぞ。
みんな知ってると思うけど--mm:arcだともし循環参照があったときにメモリリークするぞ。
2022/11/19(土) 19:05:39.54ID:7QNjN12J
Nim2なんて10年以上先
2022/11/20(日) 10:26:07.81ID:MUgzJmMj
>>275 のリンク先なんか
「Nimでアプリケーション開発をするための設計のベストプラクティス」
みたいにイキってるけど
信用していいの?
288デフォルトの名無しさん
垢版 |
2022/11/20(日) 11:36:46.79ID:h2bm0L4T
object type 全部 ref 付けろ教のひと
たまにいるよね
迷惑
2022/11/21(月) 13:35:10.22ID:LzW8OiBh
割と実用になるわね
https://pastebin.com/Ry2wTRHi
290デフォルトの名無しさん
垢版 |
2022/11/22(火) 09:38:49.09ID:E0zMoWY7
理由を示さないお作法は無視していい
291デフォルトの名無しさん
垢版 |
2022/11/24(木) 09:24:22.39ID:qRYWlPaY
なんでもかんでもref付けろと
しつこく強要してる人は
あたまおかしい
大抵は{.byref.}で用足りる
2022/11/24(木) 15:02:15.10ID:7i9tpoXw
{.byref.}はnimからC/C++の関数を使うときに引数をポインタで渡しているときに使うもの。
それ以外では使う意味はないよ。
Nimはちゃんと最適な方法で引数を渡すから必要でもないのに{.byref.}とかvarとかつける必要はない。
2022/11/24(木) 18:37:53.45ID:m+x+kPsJ
var も ref も byref も全部別物だと何度言えば判るんだ?
2022/11/24(木) 18:42:50.52ID:RL/H9YUN
>>293
みんなが必ず遭遇する問題なので
短くまとめて次スレからテンプレにするのが良い
以下 >>293 のテンプレが続く
295デフォルトの名無しさん
垢版 |
2022/11/25(金) 09:06:20.12ID:PV2ZG9bu
{.byref.}をrefと間違うのは判らんでもないし同情するが
{.byref.}をvarと間違う香具師は初めて観た
2022/11/25(金) 16:53:59.56ID:s0hi6gQd
nim 1.6.10 出た

1.6.98 まで行くのかw
297デフォルトの名無しさん
垢版 |
2022/11/27(日) 12:26:56.31ID:IMKjsn3J
regexどれ使えば良いの?
2022/11/27(日) 16:05:43.13ID:/+GS7DyS
>>297
好きなのでいいんじゃ ?
2022/11/27(日) 17:37:23.28ID:1IfwvG7/
>>297
Nimでは正規表現よりPEGのほうがおすすめらしい。
https://nim-lang.org/docs/pegs.html

PEG (Parsing expression grammar) is a simple deterministic grammar, that can be directly used for parsing. The current implementation has been designed as a more powerful replacement for regular expressions. UTF-8 is supported.
300デフォルトの名無しさん
垢版 |
2022/11/28(月) 05:25:04.28ID:T/4+TPza
300
301デフォルトの名無しさん
垢版 |
2022/11/29(火) 12:04:17.71ID:+WMggzr1
pythonのStringIOとかBytesIOみたいなのは無い?
2022/11/29(火) 14:03:26.53ID:lz77OQ93
>>301
FileStreamとStringStream かも
https://nim-lang.org/docs/streams.html
2022/12/02(金) 09:32:24.76ID:ef8lBYgh
https://nim-lang.org/docs/streams.html を観ると
FileStream = ref FileStreamObj ← 判る
FileStreamObj = object of Stream ← 判らん
StringStream = ref StringStreamObj ← 判る
StringStreamObj = object of StreamObj ← 判る
Stream = ref StreamObj ← 判る
StreamObj = object of RootObj ← 判る

なんで
FileStreamObj = object of StreamObj
になっていないのでしょう?
意図を知りたいです
2022/12/02(金) 09:38:11.16ID:ef8lBYgh
https://github.com/nim-lang/Nim
lib/pure/streams.nim の type を観ても
FileStream のだけ
FileStream* = ref FileStreamObj
FileStreamObj* = object of Stream
でした
2022/12/02(金) 17:15:15.76ID:Ojlf0I9F
命名の推測で「WHY?」という話なら、ofキーワードの後に来るのが、必ずxxxObjという規約ではないから。

目的としてxxxObjでないのは、それを扱いやすくするためでStringStreamやStreamはそのまま宣言したり
引数に渡したり、戻り値の型として記述して使用するのに対してxxxObjは普通にライブラリの使用者は
めったに直接的に使用しない。(ライブラリの設計者・実装者は普通に使う)
例を言えば、MemMapFileStream、ReadSocketStreamなども利用者は直接的に使用するが、いずれも
ストリーム系だがobject of の後にくるものは違う。

例えば、利用者はプロセスの出力をStreamで使用するなら、このようなprocを使う
proc outputStream*(p: Process): Stream

これを、クライアントプログラムの実装者が受け取る変数の定義でStreamObjと書いていたらおかしい。
APIドキュメントには、「最も使用される一般名称にはそのままの名前を付ける」としか書いてないが
Nimに限らず一般的に、1つか少数の抽象名と数多くの具象名は一般名称でプレ・サフィックスは付けない
https://nim-lang.org/docs/nep1.html
When naming types that come in value, pointer, and reference varieties, use a regular name for the variety that is to be used the most, and add a "Obj", "Ref", or "Ptr" suffix for the other varieties. If there is no single variety that will be used the most, add the suffixes to the pointer variants only. The same applies to C/C++ wrappers.

似た話にxxxRefがあるがこちらはref objectに単に付けるが、型名をあまり使用しない場合で、なおかつ
ref objectであることを強調する場合が多い。
StringTabeRef* = ref StringTabeObj
var tbl = newStringTable(...)
2022/12/02(金) 18:20:09.03ID:hfqW6J8Y
https://play.nim-lang.org/#ix=4hrl
継承するときに基の型についてるrefは無視されるようなので
objectかref objectのどちらから継承しているかは重要ではないようだ。
2022/12/03(土) 14:54:39.83ID:H3EtATlx
>>306
なるほど!
2022/12/08(木) 15:32:48.39ID:0CftMozc
template とか macro とか使うと
流れる様にさらさら描けて気持ち良いわコレ
2022/12/12(月) 07:08:32.93ID:pbYUfvW7
templateとmacroを上手くに使えるようになりてえなあ☹
2022/12/13(火) 09:48:40.02ID:xx5dSLzS
こんな感じのmacroを書いていろんなコードを与えてみよう。
コンパイル時にecho x.treeReprの出力が表示される。
それを読めばNimのコードはAST(抽象構文木)になることが理解できると思う。
これがNimのmacroを理解する第一歩だと思う。

import std/macros

macro test(x: untyped): untyped =
 echo x.treeRepr

test:
 echo "test"

後はこれを読めばok
https://nim-lang.org/docs/manual.html#macros
https://nim-lang.org/docs/macros.html
2022/12/14(水) 10:22:41.84ID:LLXuibjV
macro は AST 知ってると有利だね
あと head と body を受け取るタイプのと
node を受け取るのと
static type を受け取るのとか
区別して理解しないと
自分が何やってるのか判らなくなる
312デフォルトの名無しさん
垢版 |
2022/12/14(水) 15:44:32.71ID:SCwOJhsV
へぇ、それはクソ仕様だね
313デフォルトの名無しさん
垢版 |
2022/12/14(水) 21:28:27.69ID:XhtdH9iq
node造る関数も直交性が無いな
2022/12/17(土) 10:10:45.75ID:a3CJqZUP
直交性という言葉を知ってるオジサン・・・
C/C++言語の#def, #include→別言語(直交性100%)、錆びのprintln!→実は別言語(直交性100%)
むしろこれは言語が習得で異なる仕様の言語を2つ覚えないといけない、敷居を高くする欠点
2022/12/17(土) 10:46:30.65ID:2DPGsS1m
NimNodeはseqに近い方法で扱えるようにmacrosモジュールにプロシージャが定義されているのはいいことでは。
2022/12/17(土) 12:04:27.61ID:OfpYIbSc
untyped は obsoleted
2022/12/17(土) 18:07:52.62ID:GzYo/1Xm
今はNimNodeじゃなく、quote do:で書くのが良いよな。どうしてもNimNodeじゃなきゃ書けないマクロもあるだろうけどね
2022/12/17(土) 19:18:25.81ID:2DPGsS1m
>>317
https://nim-lang.org/docs/genasts.html
https://github.com/nim-lang/Nim/pull/17426
https://github.com/nim-lang/RFCs/issues/122
2022/12/22(木) 07:38:06.92ID:Fm5nn8iV
最初のrelease candidate for Nim v2.0が公開されました。
https://nim-lang.org/blog/2022/12/21/version-20-rc.html
2022/12/22(木) 10:51:20.76ID:Y6cO6Ymu
ペース早いよなあ
2022/12/22(木) 10:52:43.57ID:N8bfJDIh
nim-2.0 RC1 がリリースされた
https://nim-lang.org/blog/2022/12/21/version-20-rc.html

来年1月か2月には正式2.0になるのかも
2022/12/23(金) 02:05:06.61ID:PNJSSvHF
もう2.0かよ(´・ω・`)公開してるライブラリ大丈夫かな
2022/12/23(金) 20:17:33.78ID:244A80LW
バージョンが大きく変わって大丈夫と思う方が
無理がある
324デフォルトの名無しさん
垢版 |
2023/01/16(月) 16:24:59.02ID:MsfEWWA2
あっという間に2月
2023/01/23(月) 22:52:56.91ID:NHwV5soq
書き込みが1ヶ月に1回しかないスレ w
2023/01/26(木) 03:28:17.45ID:To7TXanK
Nim言語を使っていても特につまづくことがないから話題があんまりないんだよね。
2023/01/26(木) 18:39:32.28ID:MzjwjnoQ
使用者の絶対数が少なすぎ
2023/02/01(水) 01:23:34.72ID:p1uaZW7X
てすと
2023/03/01(水) 09:22:10.73ID:68s28u+f
!omikuji
2023/03/01(水) 12:20:14.81ID:q8rzgPd8
初心者はys3mとかrs3mで十分

Ziicubeでys3m出た
1割引き価格後の値段

679円 マグネット
1151円 Maglev
1623円 Boall-Core

https://www.ziicube.com/Moyu-333-HuaMeng-YS3M
2023/03/01(水) 12:20:39.02ID:q8rzgPd8
>>330
誤爆
2023/03/05(日) 11:11:16.11ID:/Qd0pRlS
WinnyとNimってネーミングセンス似てるね
2023/03/05(日) 19:55:40.66ID:gl/xkADq
>>332
Nimは元々Nimrodっていう名前だったんだけどその由来は
https://forum.nim-lang.org/t/9591#63054
2023/03/06(月) 14:19:57.93ID:diWxUEyJ
https://www.cosme.net/product/product_id/10190076/top
2023/04/03(月) 17:59:13.21ID:dNC7VYHk
この言語ってRustみたいにプログラマに押し付けるmutなんて使ってないのに、なんでいわゆるMove操作が勝手に出来るの?
説明しろください!
2023/04/03(月) 18:32:57.47ID:3grB/pQG
>>335
こちらの資料には目をとおされましたか?
https://nim-lang.org/docs/destructors.html
337デフォルトの名無しさん
垢版 |
2023/04/09(日) 09:29:43.33ID:Dm0aM9sg
Nim良いよね
Rustは宣伝がうざいだけだが
Nimは判ってる人の間でまったり進化してくれ
2023/05/04(木) 21:15:01.62ID:wwnsNcS0
公式読めばだいたいのことはわかるから特にここでも議論は出ないよね
唯一日本語の書籍がもう一冊くらい欲しいなあくらい
2023/05/06(土) 09:24:18.50ID:u7gslL5e
importとincludeの違いってなに?
2023/05/07(日) 06:11:02.39ID:uVIPnqNg
>>339
https://qiita.com/tauplus/items/80afbd47f3a44158ea1f#import-statement
https://qiita.com/tauplus/items/80afbd47f3a44158ea1f#include-statement
2023/06/28(水) 19:11:48.73ID:cQY5DEV3
Nim言語 1.6.14 リリース
https://nim-lang.org/blog/2023/06/27/version-1614-released.html
2023/07/02(日) 18:18:52.72ID:4yDce2PB
夜遅くにすいません。
SyntaxHilighter用のNim Brushってどっかにありませんか?
2023/07/02(日) 18:34:57.51ID:DcMb4mOQ
>>342
話の内容が全然理解できないけど。。。
2023/07/02(日) 21:16:17.65ID:w86HyNV3
>>343
ごめんなさい。
SyntaxHighlighter でした。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況