探検
nim
250デフォルトの名無しさん
2022/11/10(木) 14:16:57.58ID:JDmtuJFO251デフォルトの名無しさん
2022/11/10(木) 15:04:27.30ID:JDmtuJFO ↑のWandboxでも最新の安定版Nimを使えるしコードを共有できる。
252デフォルトの名無しさん
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/ ソース貼り付けのみ
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
になったわ
wandboxだと(っていうかそれ以外でもかもだけど)
実行ボタンの上に
$ nim c ./prog.nim
って表示されてて c を cpp に変更したくても出来ない
左上の「コンパイルオプション」らしい枠に cpp を入れると
$ nim c ./prog.nim cpp
になったわ
255デフォルトの名無しさん
2022/11/10(木) 20:00:36.53ID:JDmtuJFO >>254
確かにwandboxだとnim cppでコンパイルできないっぽいね
もしかしたらgithubのwandboxリポジトリに要望を出せば対応してくれるかもしれない。もしくは自分で機能を実装してpull requestを出すか
確かにwandboxだとnim cppでコンパイルできないっぽいね
もしかしたらgithubのwandboxリポジトリに要望を出せば対応してくれるかもしれない。もしくは自分で機能を実装してpull requestを出すか
256デフォルトの名無しさん
2022/11/11(金) 10:16:18.33ID:8dOB0zbX257デフォルトの名無しさん
2022/11/12(土) 14:40:51.16ID:OIoQvXCU 自分で育てる感覚楽しいですね
258デフォルトの名無しさん
2022/11/15(火) 13:26:12.68ID:QGmQMBHU type
Hoge* = object
fuga*: int
としないで
type
HogeObj* = object
fuga*: int
Hoge* = ref HogeObj
とするのは必須?習慣?
前者のデメリットは DeepCopy だというのは判るのですが
毎回後者を使った方が良い?
Hoge* = object
fuga*: int
としないで
type
HogeObj* = object
fuga*: int
Hoge* = ref HogeObj
とするのは必須?習慣?
前者のデメリットは DeepCopy だというのは判るのですが
毎回後者を使った方が良い?
259デフォルトの名無しさん
2022/11/16(水) 09:07:52.80ID:qCq9+PtI {.byref.} じゃね?
261デフォルトの名無しさん
2022/11/16(水) 15:57:06.50ID:z+sJwdsY proc 読んだとき ref のフリをする fake が 259
262デフォルトの名無しさん
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ごしに使っている感じ。
それ以外の場合はrefのついていないobjectのほうが速くなることが多い。
ref型は常にヒープに確保されポインタ経由でアクセスされるけどobjectだとスタックに確保できるしポインタで間接的に参照する必要もない。
object型のseqだとメモリ上に連続して確保されるけどref object型のseqにするとメモリ上に連続して確保されるとは限らないからキャッシュミスが起きやすくなる。
ある程度大きなobjectはプロシージャに渡すときに自動的にポインタ経由で渡されるからコピーのコストが問題になることがあんまりないと思うよ。
C++で言えばobjectはstructをそのまま使っている感じでref objectはstructをstd::shared_ptrごしに使っている感じ。
263デフォルトの名無しさん
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 で定義された変数も書き換え可能なんですね素敵ですね
let j = i
{.emit: "++j;".}
result = j
echo incx(5)
https://glot.io/snippets/gfgq0p65a6
let で定義された変数も書き換え可能なんですね素敵ですね
264デフォルトの名無しさん
2022/11/17(木) 09:41:55.68ID:V4QZv0Fq >>259-260
全く別物
全く別物
265デフォルトの名無しさん
2022/11/17(木) 09:45:16.34ID:V4QZv0Fq >それ以外の場合はrefのついていないobjectのほうが速くなることが多い。
これはどうかなぁ
遅くなることの方が多いと思うが
これはどうかなぁ
遅くなることの方が多いと思うが
266デフォルトの名無しさん
2022/11/17(木) 10:53:32.89ID:hYmfXxMP >>265
どうしてrefのついてないobjectのほうが遅くなる場合が多いの?
どうしてrefのついてないobjectのほうが遅くなる場合が多いの?
267デフォルトの名無しさん
2022/11/17(木) 14:28:18.19ID:hYmfXxMP268デフォルトの名無しさん
2022/11/17(木) 15:18:49.83ID:fBlcqeZM269デフォルトの名無しさん
2022/11/17(木) 17:33:28.89ID:7oSKGzG8270デフォルトの名無しさん
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.
って書いてあります。
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.
って書いてあります。
271デフォルトの名無しさん
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++の関数に引数をポインタ渡ししなきゃいけないときに使うもの。
それ以外のときに使う必要性はほぼ無いってこと。
https://nim-lang.org/docs/manual.html#foreign-function-interface-byref-pragma
Nim manualではbyref pragmaがForeign function interfaceの章の下にある。
つまりbyref pragmaはC/C++の関数に引数をポインタ渡ししなきゃいけないときに使うもの。
それ以外のときに使う必要性はほぼ無いってこと。
272デフォルトの名無しさん
2022/11/17(木) 21:39:23.14ID:ArWNCDPA >>265
そんな速度差気付くことある?
そんな速度差気付くことある?
273デフォルトの名無しさん
2022/11/18(金) 05:58:57.10ID:AmxJEdx7 君らスタックの消費は気にならんのけ?
274デフォルトの名無しさん
2022/11/18(金) 06:16:37.43ID:IYaGyAsl >>273
10kバイト以上のでかいobjectをたくさん使うとかならスタックを使わないようにref objectにしてヒープに確保してもいいと思う。
けどそんなにでかいobject型のローカル変数をたくさん使うことってあんまりないきがするけど。
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でオブジェクトを宣言していれば必ず参照渡しになるので、
>アプリケーション開発ではこちらに統一しましょう。
みたいなことが
https://qiita.com/dumblepy/items/8d13592d6760d0155d89
>オブジェクトの宣言にはref objectを使います。
>Nimでは関数の引数に入れられた変数の容量に応じてコンパイラが自動で値渡し/参照渡しを調節しますが、
>これは挙動の予測が付かずバグの原因になりえます。
>ref objectでオブジェクトを宣言していれば必ず参照渡しになるので、
>アプリケーション開発ではこちらに統一しましょう。
みたいなことが
276デフォルトの名無しさん
2022/11/18(金) 10:17:44.40ID:IJuokuF8277デフォルトの名無しさん
2022/11/18(金) 11:42:20.25ID:IJuokuF8 古いけどここの議論は判り易い
https://forum.nim-lang.org/t/1207
https://forum.nim-lang.org/t/1207
278デフォルトの名無しさん
2022/11/18(金) 11:48:22.19ID:ygRIcUIa >>270
それは var の説明であって ref の説明ではないですね
それは var の説明であって ref の説明ではないですね
279デフォルトの名無しさん
2022/11/18(金) 12:02:19.50ID:IYaGyAsl280デフォルトの名無しさん
2022/11/18(金) 12:10:00.28ID:IYaGyAsl だからデフォルトの引数の渡し方でそれがコピー渡しになろうが参照渡しになろうがそれで挙動が変わったりバグの温床になることはない。
ただしaddrとかemit, Assembler statementなどのNimが安全性を保証してない機能を使う場合は例外だ。
ただしaddrとかemit, Assembler statementなどのNimが安全性を保証してない機能を使う場合は例外だ。
281デフォルトの名無しさん
2022/11/18(金) 12:24:09.04ID:IJuokuF8 参照とか reference とか同じ名前だから混同してるのかも知れないが
Nim の参照型と C++ の参照型は全く別物
C++ の引数で使う参照型 & は Nim では var の方が近い
Nim の ref は C++ ではポインタ * と思った方が良い
Nim では
GC で管理されるポインタが ref
GC で管理されないポインタが ptr
Nim の参照型と C++ の参照型は全く別物
C++ の引数で使う参照型 & は Nim では var の方が近い
Nim の ref は C++ ではポインタ * と思った方が良い
Nim では
GC で管理されるポインタが ref
GC で管理されないポインタが ptr
282デフォルトの名無しさん
2022/11/18(金) 17:46:16.11ID:PNsYUFFf これ使うか使わないかでも全然違うのよね --gc:arc
283デフォルトの名無しさん
2022/11/18(金) 18:35:09.65ID:yVVkBIHa 最近は --mm:arc
284デフォルトの名無しさん
2022/11/19(土) 16:28:59.40ID:F8GIHVyH --mm:orc 推奨
285デフォルトの名無しさん
2022/11/19(土) 17:55:05.22ID:lavOlnrp Nim2では--mm:orcがデフォルトになるらしいぞ。
みんな知ってると思うけど--mm:arcだともし循環参照があったときにメモリリークするぞ。
みんな知ってると思うけど--mm:arcだともし循環参照があったときにメモリリークするぞ。
286デフォルトの名無しさん
2022/11/19(土) 19:05:39.54ID:7QNjN12J Nim2なんて10年以上先
287デフォルトの名無しさん
2022/11/20(日) 10:26:07.81ID:MUgzJmMj288デフォルトの名無しさん
2022/11/20(日) 11:36:46.79ID:h2bm0L4T object type 全部 ref 付けろ教のひと
たまにいるよね
迷惑
たまにいるよね
迷惑
289デフォルトの名無しさん
2022/11/21(月) 13:35:10.22ID:LzW8OiBh 割と実用になるわね
https://pastebin.com/Ry2wTRHi
https://pastebin.com/Ry2wTRHi
290デフォルトの名無しさん
2022/11/22(火) 09:38:49.09ID:E0zMoWY7 理由を示さないお作法は無視していい
291デフォルトの名無しさん
2022/11/24(木) 09:24:22.39ID:qRYWlPaY なんでもかんでもref付けろと
しつこく強要してる人は
あたまおかしい
大抵は{.byref.}で用足りる
しつこく強要してる人は
あたまおかしい
大抵は{.byref.}で用足りる
292デフォルトの名無しさん
2022/11/24(木) 15:02:15.10ID:7i9tpoXw {.byref.}はnimからC/C++の関数を使うときに引数をポインタで渡しているときに使うもの。
それ以外では使う意味はないよ。
Nimはちゃんと最適な方法で引数を渡すから必要でもないのに{.byref.}とかvarとかつける必要はない。
それ以外では使う意味はないよ。
Nimはちゃんと最適な方法で引数を渡すから必要でもないのに{.byref.}とかvarとかつける必要はない。
293デフォルトの名無しさん
2022/11/24(木) 18:37:53.45ID:m+x+kPsJ var も ref も byref も全部別物だと何度言えば判るんだ?
294デフォルトの名無しさん
2022/11/24(木) 18:42:50.52ID:RL/H9YUN295デフォルトの名無しさん
2022/11/25(金) 09:06:20.12ID:PV2ZG9bu {.byref.}をrefと間違うのは判らんでもないし同情するが
{.byref.}をvarと間違う香具師は初めて観た
{.byref.}をvarと間違う香具師は初めて観た
296デフォルトの名無しさん
2022/11/25(金) 16:53:59.56ID:s0hi6gQd nim 1.6.10 出た
1.6.98 まで行くのかw
1.6.98 まで行くのかw
297デフォルトの名無しさん
2022/11/27(日) 12:26:56.31ID:IMKjsn3J regexどれ使えば良いの?
298デフォルトの名無しさん
2022/11/27(日) 16:05:43.13ID:/+GS7DyS >>297
好きなのでいいんじゃ ?
好きなのでいいんじゃ ?
299デフォルトの名無しさん
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.
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みたいなのは無い?
302デフォルトの名無しさん
2022/11/29(火) 14:03:26.53ID:lz77OQ93303デフォルトの名無しさん
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
になっていないのでしょう?
意図を知りたいです
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
になっていないのでしょう?
意図を知りたいです
304デフォルトの名無しさん
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
でした
lib/pure/streams.nim の type を観ても
FileStream のだけ
FileStream* = ref FileStreamObj
FileStreamObj* = object of Stream
でした
305デフォルトの名無しさん
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(...)
目的として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(...)
306デフォルトの名無しさん
2022/12/02(金) 18:20:09.03ID:hfqW6J8Y https://play.nim-lang.org/#ix=4hrl
継承するときに基の型についてるrefは無視されるようなので
objectかref objectのどちらから継承しているかは重要ではないようだ。
継承するときに基の型についてるrefは無視されるようなので
objectかref objectのどちらから継承しているかは重要ではないようだ。
307デフォルトの名無しさん
2022/12/03(土) 14:54:39.83ID:H3EtATlx >>306
なるほど!
なるほど!
308デフォルトの名無しさん
2022/12/08(木) 15:32:48.39ID:0CftMozc template とか macro とか使うと
流れる様にさらさら描けて気持ち良いわコレ
流れる様にさらさら描けて気持ち良いわコレ
309デフォルトの名無しさん
2022/12/12(月) 07:08:32.93ID:pbYUfvW7 templateとmacroを上手くに使えるようになりてえなあ☹
310デフォルトの名無しさん
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
コンパイル時に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
311デフォルトの名無しさん
2022/12/14(水) 10:22:41.84ID:LLXuibjV macro は AST 知ってると有利だね
あと head と body を受け取るタイプのと
node を受け取るのと
static type を受け取るのとか
区別して理解しないと
自分が何やってるのか判らなくなる
あと head と body を受け取るタイプのと
node を受け取るのと
static type を受け取るのとか
区別して理解しないと
自分が何やってるのか判らなくなる
312デフォルトの名無しさん
2022/12/14(水) 15:44:32.71ID:SCwOJhsV へぇ、それはクソ仕様だね
313デフォルトの名無しさん
2022/12/14(水) 21:28:27.69ID:XhtdH9iq node造る関数も直交性が無いな
314デフォルトの名無しさん
2022/12/17(土) 10:10:45.75ID:a3CJqZUP 直交性という言葉を知ってるオジサン・・・
C/C++言語の#def, #include→別言語(直交性100%)、錆びのprintln!→実は別言語(直交性100%)
むしろこれは言語が習得で異なる仕様の言語を2つ覚えないといけない、敷居を高くする欠点
C/C++言語の#def, #include→別言語(直交性100%)、錆びのprintln!→実は別言語(直交性100%)
むしろこれは言語が習得で異なる仕様の言語を2つ覚えないといけない、敷居を高くする欠点
315デフォルトの名無しさん
2022/12/17(土) 10:46:30.65ID:2DPGsS1m NimNodeはseqに近い方法で扱えるようにmacrosモジュールにプロシージャが定義されているのはいいことでは。
316デフォルトの名無しさん
2022/12/17(土) 12:04:27.61ID:OfpYIbSc untyped は obsoleted
317デフォルトの名無しさん
2022/12/17(土) 18:07:52.62ID:GzYo/1Xm 今はNimNodeじゃなく、quote do:で書くのが良いよな。どうしてもNimNodeじゃなきゃ書けないマクロもあるだろうけどね
318デフォルトの名無しさん
2022/12/17(土) 19:18:25.81ID:2DPGsS1m319デフォルトの名無しさん
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
https://nim-lang.org/blog/2022/12/21/version-20-rc.html
320デフォルトの名無しさん
2022/12/22(木) 10:51:20.76ID:Y6cO6Ymu ペース早いよなあ
321デフォルトの名無しさん
2022/12/22(木) 10:52:43.57ID:N8bfJDIh322デフォルトの名無しさん
2022/12/23(金) 02:05:06.61ID:PNJSSvHF もう2.0かよ(´・ω・`)公開してるライブラリ大丈夫かな
323デフォルトの名無しさん
2022/12/23(金) 20:17:33.78ID:244A80LW バージョンが大きく変わって大丈夫と思う方が
無理がある
無理がある
324デフォルトの名無しさん
2023/01/16(月) 16:24:59.02ID:MsfEWWA2 あっという間に2月
325デフォルトの名無しさん
2023/01/23(月) 22:52:56.91ID:NHwV5soq 書き込みが1ヶ月に1回しかないスレ w
326デフォルトの名無しさん
2023/01/26(木) 03:28:17.45ID:To7TXanK Nim言語を使っていても特につまづくことがないから話題があんまりないんだよね。
327デフォルトの名無しさん
2023/01/26(木) 18:39:32.28ID:MzjwjnoQ 使用者の絶対数が少なすぎ
328デフォルトの名無しさん
2023/02/01(水) 01:23:34.72ID:p1uaZW7X てすと
330デフォルトの名無しさん
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
Ziicubeでys3m出た
1割引き価格後の値段
679円 マグネット
1151円 Maglev
1623円 Boall-Core
https://www.ziicube.com/Moyu-333-HuaMeng-YS3M
331デフォルトの名無しさん
2023/03/01(水) 12:20:39.02ID:q8rzgPd8 >>330
誤爆
誤爆
332デフォルトの名無しさん
2023/03/05(日) 11:11:16.11ID:/Qd0pRlS WinnyとNimってネーミングセンス似てるね
333デフォルトの名無しさん
2023/03/05(日) 19:55:40.66ID:gl/xkADq334デフォルトの名無しさん
2023/03/06(月) 14:19:57.93ID:diWxUEyJ335デフォルトの名無しさん
2023/04/03(月) 17:59:13.21ID:dNC7VYHk この言語ってRustみたいにプログラマに押し付けるmutなんて使ってないのに、なんでいわゆるMove操作が勝手に出来るの?
説明しろください!
説明しろください!
336デフォルトの名無しさん
2023/04/03(月) 18:32:57.47ID:3grB/pQG337デフォルトの名無しさん
2023/04/09(日) 09:29:43.33ID:Dm0aM9sg Nim良いよね
Rustは宣伝がうざいだけだが
Nimは判ってる人の間でまったり進化してくれ
Rustは宣伝がうざいだけだが
Nimは判ってる人の間でまったり進化してくれ
338デフォルトの名無しさん
2023/05/04(木) 21:15:01.62ID:wwnsNcS0 公式読めばだいたいのことはわかるから特にここでも議論は出ないよね
唯一日本語の書籍がもう一冊くらい欲しいなあくらい
唯一日本語の書籍がもう一冊くらい欲しいなあくらい
339デフォルトの名無しさん
2023/05/06(土) 09:24:18.50ID:u7gslL5e importとincludeの違いってなに?
340デフォルトの名無しさん
2023/05/07(日) 06:11:02.39ID:uVIPnqNg341デフォルトの名無しさん
2023/06/28(水) 19:11:48.73ID:cQY5DEV3 Nim言語 1.6.14 リリース
https://nim-lang.org/blog/2023/06/27/version-1614-released.html
https://nim-lang.org/blog/2023/06/27/version-1614-released.html
342デフォルトの名無しさん
2023/07/02(日) 18:18:52.72ID:4yDce2PB 夜遅くにすいません。
SyntaxHilighter用のNim Brushってどっかにありませんか?
SyntaxHilighter用のNim Brushってどっかにありませんか?
343デフォルトの名無しさん
2023/07/02(日) 18:34:57.51ID:DcMb4mOQ >>342
話の内容が全然理解できないけど。。。
話の内容が全然理解できないけど。。。
344デフォルトの名無しさん
2023/07/02(日) 21:16:17.65ID:w86HyNV3345デフォルトの名無しさん
2023/07/02(日) 21:56:05.97ID:DcMb4mOQ346デフォルトの名無しさん
2023/07/03(月) 07:33:58.97ID:VgAxDpje347デフォルトの名無しさん
2023/07/03(月) 10:05:16.82ID:erf1sDFe348デフォルトの名無しさん
2023/07/03(月) 12:35:43.48ID:VgAxDpje >>347
恐がらせてごめん。
恐がらせてごめん。
349デフォルトの名無しさん
2023/07/04(火) 04:16:26.79ID:YbUZ4vjn Nim言語はコンパイル時にreadFileとwriteFileを使えるんだけどコンパイル時にファイルを読み書きできるプログラミング言語ってあまりないんじゃないか?
staticExecていうコンパイル時にコマンドを実行できるプロシージャもあるし。
staticExecていうコンパイル時にコマンドを実行できるプロシージャもあるし。
350デフォルトの名無しさん
2023/07/07(金) 02:08:00.59ID:B1cwSpdy どっかで既出かもしれんけど、結局VSCの拡張は何入れれば安牌?
351デフォルトの名無しさん
2023/08/01(火) 18:27:12.50ID:JtUN40O9352デフォルトの名無しさん
2023/08/02(水) 00:52:58.78ID:4aCNkU8+ Nim 2.0がリリースされました。
https://nim-lang.org/blog/2023/08/01/nim-v20-released.html
https://nim-lang.org/blog/2023/08/01/nim-v20-released.html
353デフォルトの名無しさん
2023/08/26(土) 23:20:45.36ID:6K2VICrE 初めてお邪魔します
下のスレッドでフィボナッチ数列(回帰関数)のベンチマークをやったのですが
Nim 2.0がダントツの速さでした
原因が分かる方、教えていただけますでしょうか、よろしくお願いいたします
Qiita 3 - キータぞ、来たぞ、キータだぞー
https://mevius.5ch.net/test/read.cgi/tech/1685235361/368-371
https://mevius.5ch.net/test/read.cgi/tech/1685235361/373-375
上記スレ、fibonacci(44)の計算、抜粋
Nim(44はコマンドライン引数)
https://wandbox.org/permlink/WoYP0STRKxaRBGCY
>Time= 0.240s Result=701408733
C/gcc(44はソース直書き)
https://wandbox.org/permlink/9OYZBH14tYooZHF7
> Time: 0.89583 seconds
C/clang(44はソース直書き)
https://wandbox.org/permlink/U97PecZYrzymnfH4
>Time=1.58712s Result=701408733
下のスレッドでフィボナッチ数列(回帰関数)のベンチマークをやったのですが
Nim 2.0がダントツの速さでした
原因が分かる方、教えていただけますでしょうか、よろしくお願いいたします
Qiita 3 - キータぞ、来たぞ、キータだぞー
https://mevius.5ch.net/test/read.cgi/tech/1685235361/368-371
https://mevius.5ch.net/test/read.cgi/tech/1685235361/373-375
上記スレ、fibonacci(44)の計算、抜粋
Nim(44はコマンドライン引数)
https://wandbox.org/permlink/WoYP0STRKxaRBGCY
>Time= 0.240s Result=701408733
C/gcc(44はソース直書き)
https://wandbox.org/permlink/9OYZBH14tYooZHF7
> Time: 0.89583 seconds
C/clang(44はソース直書き)
https://wandbox.org/permlink/U97PecZYrzymnfH4
>Time=1.58712s Result=701408733
354デフォルトの名無しさん
2023/08/27(日) 00:54:05.78ID:M561FwxM >>353
Nimでコンパイルするときに'--listcmd'オプションを与えるとNimがgccを呼び出すときにどんな引数を渡しているか表示されるようになります。
もしかすると凄く最適化されるようなオプションを渡しているのかもしれません。
Nimでコンパイルするときに'--listcmd'オプションを与えるとNimがgccを呼び出すときにどんな引数を渡しているか表示されるようになります。
もしかすると凄く最適化されるようなオプションを渡しているのかもしれません。
355デフォルトの名無しさん
2023/08/27(日) 01:58:10.81ID:CxwZcjGE >>354
早速の回答ありがとうございます
wandboxのspeedだとO3が見られたので、nim.cfgに gcc.options.speed = "-O2" を追加してついでに-d:ltoも外しました
Nim 2.0.0 + gcc 12.2.0(-O2) --verbosity:2 --listcmd --passL:-s (strip symbols)
https://wandbox.org/permlink/RVJ4eHKKl5DARK3u
>CC: prog.nim: /opt/wandbox/gcc-12.2.0/bin/gcc -c -w -fmax-errors=3 -O2 -I...
>Hint: /opt/wandbox/gcc-12.2.0/bin/gcc ... -lm -lm -lrt -s -ldl [Link]
>Hint: mm: orc; opt: speed; options: -d:danger
>Time= 0.274s Result=701408733
>Time= 0.252s Result=701408733
>Time= 0.251s Result=701408733
>Time= 0.250s Result=701408733
>Time= 0.250s Result=701408733
今度は確実に LTO無し gcc -O2 になりましたが、実効速度はダントツに速いままでした
何か気が付く点がありましたらまた今度教えてください (私の方は今日は限界です...)
早速の回答ありがとうございます
wandboxのspeedだとO3が見られたので、nim.cfgに gcc.options.speed = "-O2" を追加してついでに-d:ltoも外しました
Nim 2.0.0 + gcc 12.2.0(-O2) --verbosity:2 --listcmd --passL:-s (strip symbols)
https://wandbox.org/permlink/RVJ4eHKKl5DARK3u
>CC: prog.nim: /opt/wandbox/gcc-12.2.0/bin/gcc -c -w -fmax-errors=3 -O2 -I...
>Hint: /opt/wandbox/gcc-12.2.0/bin/gcc ... -lm -lm -lrt -s -ldl [Link]
>Hint: mm: orc; opt: speed; options: -d:danger
>Time= 0.274s Result=701408733
>Time= 0.252s Result=701408733
>Time= 0.251s Result=701408733
>Time= 0.250s Result=701408733
>Time= 0.250s Result=701408733
今度は確実に LTO無し gcc -O2 になりましたが、実効速度はダントツに速いままでした
何か気が付く点がありましたらまた今度教えてください (私の方は今日は限界です...)
356デフォルトの名無しさん
2023/08/27(日) 17:22:00.42ID:P6KX7G/o >>355
Nim言語が高速なのはC言語コードを吐き出した時に
再帰処理をgotoループに置き換えている可能性があります
その場合C言語のオプションをいくら変更してもあまり意味はない
です
確認はコマンドライン引数に --nimcache:.cache を加えて
コンパイルして.cacheフォルダ内のC言語ファイルを確認すれば
わかるはず
nim c --nimcache:.cache -d:release ...
-d:relsese の部分は -d:danger で 置き換え可能で
dangerのほうが高速です
詳細はここ
https://nim-lang.org/docs/nimc.html
コンパイル型言語のベンチを取る時は再帰処理コードは
避けた方が良いと思います
Nim言語が高速なのはC言語コードを吐き出した時に
再帰処理をgotoループに置き換えている可能性があります
その場合C言語のオプションをいくら変更してもあまり意味はない
です
確認はコマンドライン引数に --nimcache:.cache を加えて
コンパイルして.cacheフォルダ内のC言語ファイルを確認すれば
わかるはず
nim c --nimcache:.cache -d:release ...
-d:relsese の部分は -d:danger で 置き換え可能で
dangerのほうが高速です
詳細はここ
https://nim-lang.org/docs/nimc.html
コンパイル型言語のベンチを取る時は再帰処理コードは
避けた方が良いと思います
357デフォルトの名無しさん
2023/08/27(日) 17:25:13.06ID:P6KX7G/o >>356 追記
末尾再帰になっている可能性もありかな
末尾再帰になっている可能性もありかな
358デフォルトの名無しさん
2023/08/27(日) 22:36:37.59ID:M561FwxM Nimコンパイラ自体は再帰関数の最適化はしてなかったと思う。
gccは再帰関数をループに置き換えているかもしれないからその確認をしたかったら-S -masm=intelを付けてアセンブリコードを出力させて読んでみよう。
gccは再帰関数をループに置き換えているかもしれないからその確認をしたかったら-S -masm=intelを付けてアセンブリコードを出力させて読んでみよう。
359デフォルトの名無しさん
2023/08/28(月) 06:30:35.88ID:eKgmQu1D >>356
変換キャッシュの見方、ありがとうございます
>再帰処理をgotoループに置き換えている可能性があります
確認したところ、置き換わっていませんでした
>コンパイル型言語のベンチを取る時は再帰処理コードは
>避けた方が良いと思います
↑ここ詳しくお願いします
>再帰処理をgotoループに置き換えている
↑こうなっていませんでしたが、これ前提での話だったのですか?
再帰fibonacciは個別の言語コンパイラ(更にバージョン)の
最適化ベンチマークには持って来いに見えますので
変換キャッシュの見方、ありがとうございます
>再帰処理をgotoループに置き換えている可能性があります
確認したところ、置き換わっていませんでした
>コンパイル型言語のベンチを取る時は再帰処理コードは
>避けた方が良いと思います
↑ここ詳しくお願いします
>再帰処理をgotoループに置き換えている
↑こうなっていませんでしたが、これ前提での話だったのですか?
再帰fibonacciは個別の言語コンパイラ(更にバージョン)の
最適化ベンチマークには持って来いに見えますので
360デフォルトの名無しさん
2023/08/28(月) 06:40:36.37ID:eKgmQu1D >>358
>Nimコンパイラ自体は再帰関数の最適化はしてなかったと思う。
その通りでした
確かめたところ二つの再帰関数コールがそのまま残っていて、
その他はNimのトランスパイル過程でのノイズがあるだけです
gccがノイズを消すために最適化を頑張った結果、Cより速くなったのですかね
>Nimコンパイラ自体は再帰関数の最適化はしてなかったと思う。
その通りでした
確かめたところ二つの再帰関数コールがそのまま残っていて、
その他はNimのトランスパイル過程でのノイズがあるだけです
gccがノイズを消すために最適化を頑張った結果、Cより速くなったのですかね
361デフォルトの名無しさん
2023/08/28(月) 06:47:48.48ID:eKgmQu1D 何気にNim + gcc HEADにしてみたら、更に速かったです
Nim 2.0.0 + gcc 12.2.0 -O2 (44はコマンドライン引数)
https://wandbox.org/permlink/RVJ4eHKKl5DARK3u
>Time= 0.250s Result=701408733
これ↑がこう↓
Nim 2.0.0 + gcc HEAD 14.0.0 -O2 (44はコマンドライン引数)
https://wandbox.org/permlink/cpYesJtnlRNJiu7Z
>Time= 0.197s Result=701408733
参考値再掲(>>353)
C/gcc -O2 (44はソース直書き)
https://wandbox.org/permlink/9OYZBH14tYooZHF7
> Time: 0.89583 seconds
C/clang -O2 (44はソース直書き)
https://wandbox.org/permlink/U97PecZYrzymnfH4
>Time=1.58712s Result=701408733
gccの最適化が凄すぎて意味わからないですが、ありがたく享受する事にします
Nim 2.0.0 + gcc 12.2.0 -O2 (44はコマンドライン引数)
https://wandbox.org/permlink/RVJ4eHKKl5DARK3u
>Time= 0.250s Result=701408733
これ↑がこう↓
Nim 2.0.0 + gcc HEAD 14.0.0 -O2 (44はコマンドライン引数)
https://wandbox.org/permlink/cpYesJtnlRNJiu7Z
>Time= 0.197s Result=701408733
参考値再掲(>>353)
C/gcc -O2 (44はソース直書き)
https://wandbox.org/permlink/9OYZBH14tYooZHF7
> Time: 0.89583 seconds
C/clang -O2 (44はソース直書き)
https://wandbox.org/permlink/U97PecZYrzymnfH4
>Time=1.58712s Result=701408733
gccの最適化が凄すぎて意味わからないですが、ありがたく享受する事にします
362デフォルトの名無しさん
2023/09/06(水) 06:10:42.54ID:8VjD58re レバテックωωω
Rust in
Nim out
ωωωωωω
Rust in
Nim out
ωωωωωω
363デフォルトの名無しさん
2023/11/15(水) 08:06:37.71ID:6Kiw7POr364デフォルトの名無しさん
2023/11/28(火) 09:23:46.10ID:XbNpNPYt happyxってdjungoの上位互換なれねーかな
https://hapticx.github.io/happyx/#/
https://hapticx.github.io/happyx/#/
365デフォルトの名無しさん
2023/12/06(水) 09:31:30.20ID:oM0gjrfW >>363
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
366デフォルトの名無しさん
2023/12/06(水) 20:32:47.84ID:7Cu2FhSW Nim って python を強調し過ぎてるのはミスリードだと思うな
python と相性が良いってのは事実だけど Nim の特徴のほんの一部でしかない
python と相性が良いってのは事実だけど Nim の特徴のほんの一部でしかない
367デフォルトの名無しさん
2023/12/08(金) 21:38:37.62ID:xBCOoZoU >>366
Python使える人が多いからNimを広めるためにNim言語はpythonと同じだという人は多い。
文法がpythonに近いだけで中身は静的型言語だからpythonよりC++とかRustに近いと思う。
pythonしか知らない人がNimのオーバーロードとかGenericsとかobjectとref objectの違いとかちゃんと理解して使えるのかどうか心配になる。
Python使える人が多いからNimを広めるためにNim言語はpythonと同じだという人は多い。
文法がpythonに近いだけで中身は静的型言語だからpythonよりC++とかRustに近いと思う。
pythonしか知らない人がNimのオーバーロードとかGenericsとかobjectとref objectの違いとかちゃんと理解して使えるのかどうか心配になる。
368デフォルトの名無しさん
2023/12/10(日) 11:41:19.18ID:1MxEINjf 「文法がpythonに近い」が事実じゃないんだよな
観た目が似てるだけであって文法が似てる訳じゃない
全然別物
観た目が似てるだけであって文法が似てる訳じゃない
全然別物
369デフォルトの名無しさん
2023/12/10(日) 17:02:37.56ID:S5Hrhavn そういう意味では構文で結構損してそう
オフサイドルールが気に入らない人にとってはそもそも検討に値しないし
Python好きな人ならそこは気にならないだろうけど、別に移行しやすくもない
オフサイドルールが気に入らない人にとってはそもそも検討に値しないし
Python好きな人ならそこは気にならないだろうけど、別に移行しやすくもない
370デフォルトの名無しさん
2023/12/11(月) 04:52:12.28ID:E9pPgJ3z371デフォルトの名無しさん
2023/12/11(月) 06:10:19.79ID:dU0p99Eo 型で安全性を静的に担保したいと考える人が、同時にインデントで意味が変わってしまうオフサイドを好むってのはちぐはぐさを感じる
372デフォルトの名無しさん
2023/12/11(月) 06:46:36.74ID:Oijs0Efp HaskellとデフォルトF#もオフサイドルールありですね。どうせインデントするんだしって使ってやれってくらいの感じなのかね?
あとは、インデントに意味はないけれど、goが標準のフォーマッタでインデント入れてくるね。
あとは、インデントに意味はないけれど、goが標準のフォーマッタでインデント入れてくるね。
373デフォルトの名無しさん
2023/12/11(月) 06:54:57.74ID:n3cFiyWX Python登場当時だと{}前後のどこで改行するか論争みたいなのがあったりして確かに括弧書くのが面倒な空気はあったんだよな
それがGo/Rustの世代だと言語標準のフォーマッタが勝手にやってくれるってなって
めんどくさくないっていうオフサイドのメリットはなくなってしまった
そうすると自動フォーマットしづらいとかコピペしづらいとかデメリットばかり目立つことになってしまう
それがGo/Rustの世代だと言語標準のフォーマッタが勝手にやってくれるってなって
めんどくさくないっていうオフサイドのメリットはなくなってしまった
そうすると自動フォーマットしづらいとかコピペしづらいとかデメリットばかり目立つことになってしまう
374デフォルトの名無しさん
2023/12/12(火) 04:50:08.02ID:X9wYEqIf ブロック毎に'{}'や行末に';'があるとソースコードが少し汚く見えるし
無いとすっきりして読みやすいと思うけどね。
無いとすっきりして読みやすいと思うけどね。
375デフォルトの名無しさん
2023/12/12(火) 05:58:22.17ID:6YpoyKxr そんなの単なる慣れ
376デフォルトの名無しさん
2023/12/12(火) 08:04:30.17ID:BxX9TTWN まぁ人によるんじゃない
自分は{}がある方がブロックの識別性が良くて読みやすい
オフサイドは特にネストしたブロックの戻りが何段戻ったか見づらいんだよな
自分は{}がある方がブロックの識別性が良くて読みやすい
オフサイドは特にネストしたブロックの戻りが何段戻ったか見づらいんだよな
377デフォルトの名無しさん
2023/12/12(火) 08:08:33.42ID:BYtUbVYs カッコありなら、lisp系が好き。
悩む事が減る。
悩む事が減る。
378デフォルトの名無しさん
2023/12/12(火) 13:00:45.46ID:GxOznL1S >>374
セミコロンはオフサイドルールじゃなくてもRuby/Go/Kotlin/Swiftのように無しできるから関係ないよね
それにセミコロンをタイプするのは面倒だとは思うが慣れると読む時のノイズにはならない
自然言語の文章で句点やピリオド+改行がノイズにならないのと同じこと
セミコロンはオフサイドルールじゃなくてもRuby/Go/Kotlin/Swiftのように無しできるから関係ないよね
それにセミコロンをタイプするのは面倒だとは思うが慣れると読む時のノイズにはならない
自然言語の文章で句点やピリオド+改行がノイズにならないのと同じこと
379デフォルトの名無しさん
2023/12/12(火) 19:48:14.86ID:X9wYEqIf CやC++を10年以上使っていたけど';'や'{}'が無いほうがすっくりして読みやすいと思うから慣れでどうにかなるものでは無いと思う。
こういうのは個人差があるのかもしれないが
こういうのは個人差があるのかもしれないが
380デフォルトの名無しさん
2023/12/12(火) 19:54:02.65ID:X9wYEqIf ttps://github.com/jeetsukumaran/vim-indentwise
このVimのプラグインを使うと同じインデント間のカーソル移動、異なるインデント間のカーソル移動が簡単にできるからお勧めです。
このVimのプラグインを使うと同じインデント間のカーソル移動、異なるインデント間のカーソル移動が簡単にできるからお勧めです。
381デフォルトの名無しさん
2023/12/12(火) 22:53:30.64ID:wCEkJKJx382デフォルトの名無しさん
2023/12/12(火) 23:44:06.92ID:CyOM3fCk そりゃ仕事で使える言語でオフサイドルールなのってPythonくらいだし
ほんとはオフサイドがいいけどC/C++の仕事してるって人くらいいるでしょ
ほんとはオフサイドがいいけどC/C++の仕事してるって人くらいいるでしょ
383デフォルトの名無しさん
2023/12/13(水) 00:18:56.36ID:YitMt0Fm384デフォルトの名無しさん
2023/12/13(水) 04:42:50.35ID:/pcasGi0385デフォルトの名無しさん
2023/12/13(水) 05:36:33.39ID:R3z2LBuJ 主観で読みやすいかどうか力説しても結論でるわけない
オフサイドは誤ってインデントずれても気付かないままになってしまうのが問題
オフサイドは誤ってインデントずれても気付かないままになってしまうのが問題
386デフォルトの名無しさん
2023/12/13(水) 06:48:31.89ID:RhfHz66O387デフォルトの名無しさん
2023/12/13(水) 07:21:31.19ID:vQeZuGNk f#みたいに、使う側が選択できれば、解決なんじゃない?
388デフォルトの名無しさん
2023/12/13(水) 07:35:42.19ID:q/L8o2wk やれやれお前らCOBOLを知らんのか
389デフォルトの名無しさん
2023/12/13(水) 11:38:44.64ID:rzHxkjlX390デフォルトの名無しさん
2023/12/14(木) 19:26:43.32ID:xAMEKx/6 エディタの色設定で{};を薄い色にすればいいだけやん
391デフォルトの名無しさん
2023/12/15(金) 03:05:56.17ID:/ClHmJDY {}がノイズになるようなら:や=はもちろんのことblock:なんて発狂ものだろうからNimは無理やろな
392デフォルトの名無しさん
2023/12/15(金) 05:55:25.21ID:12rLPAnL 思考ノイズって
エロい事連想してるって意味だよな?
エロい事連想してるって意味だよな?
393デフォルトの名無しさん
2023/12/15(金) 06:50:06.26ID:4QMbv0z8 Nimってオフサイドルール以外の所は目立った欠点の無い言語なんかな。
それに実際にオフサイドルールでコードを書いていて困ったことないし。
インデントがずれても困るという人はインデントの幅をスペース4個とか広めにすればいいのでは
それに実際にオフサイドルールでコードを書いていて困ったことないし。
インデントがずれても困るという人はインデントの幅をスペース4個とか広めにすればいいのでは
394デフォルトの名無しさん
2023/12/15(金) 17:55:10.13ID:BxRUp1+8 オフサイドルールは欠点だらけ
Pythonを例にすると
- カットペーストは命がけ
- ネット等で共有しにくい
- テキストエディタやIDEの支援が激弱
- dedentは手動タイピング必須
- 改行のために追加の()や\が結局必要
- インデントだけでは可読性が低いから余計な:が必要
- 空行の数まで厳密に意識する必要もある
- lambdaのone expression縛りのように言語の成長を阻害しやすい
- “explicit is better than implicit”と言いながらブロックはimplicit
Pythonを例にすると
- カットペーストは命がけ
- ネット等で共有しにくい
- テキストエディタやIDEの支援が激弱
- dedentは手動タイピング必須
- 改行のために追加の()や\が結局必要
- インデントだけでは可読性が低いから余計な:が必要
- 空行の数まで厳密に意識する必要もある
- lambdaのone expression縛りのように言語の成長を阻害しやすい
- “explicit is better than implicit”と言いながらブロックはimplicit
395デフォルトの名無しさん
2023/12/15(金) 18:18:19.69ID:b3hxnew5 次は、良い点を挙げてみて!
396デフォルトの名無しさん
2023/12/15(金) 18:24:50.43ID:pkr2dCwK397デフォルトの名無しさん
2023/12/15(金) 20:46:34.27ID:4QMbv0z8 Vim使ってるけどコピペは問題無くできるしインデントの深さもブロックごと'>'で調整できる。
vim-indentwiseでブロック毎カーソル移動可能。
スペース一個分だけでインデントするとかしない限りブロックの開始、終わりは前後の行のインデントの位置の違いでわかる。
vim-indentwiseでカーソル移動すればブロックの範囲も簡単にわかる。
以前はC/C++を書いてたけど{}や;が無くて読みづらいとか書きづらいとか思ったことは無いよ。
Nim書いていて改行のために追加の()や\が必要になることはほぼ無い
空行の数を厳密に意識する必要もない。
Nimを実際に書いたことあるの?
vim-indentwiseでブロック毎カーソル移動可能。
スペース一個分だけでインデントするとかしない限りブロックの開始、終わりは前後の行のインデントの位置の違いでわかる。
vim-indentwiseでカーソル移動すればブロックの範囲も簡単にわかる。
以前はC/C++を書いてたけど{}や;が無くて読みづらいとか書きづらいとか思ったことは無いよ。
Nim書いていて改行のために追加の()や\が必要になることはほぼ無い
空行の数を厳密に意識する必要もない。
Nimを実際に書いたことあるの?
398デフォルトの名無しさん
2023/12/15(金) 21:02:40.08ID:4QMbv0z8399デフォルトの名無しさん
2023/12/15(金) 22:17:03.24ID:kBMLRaUx400デフォルトの名無しさん
2023/12/15(金) 22:29:33.41ID:kBMLRaUx >>397
論点理解せずにvim使いなら誰でも知ってる基本を必死に解説されても困るわ
>以前はC/C++を書いてたけど{}や;が無くて読みづらいとか書きづらいとか思ったことは無いよ。
{}や;が無くて読みづらいとか書きづらいとか誰もそんなこと言ってないだろ?
勝手に脳内変換するなや
ついでに言うとセミコロン無い方が書きやすいのは当たり前のこと
だから新しい言語の多くがセミコロンレスを採用してる(オフサイドは採用しないけど)
論点理解せずにvim使いなら誰でも知ってる基本を必死に解説されても困るわ
>以前はC/C++を書いてたけど{}や;が無くて読みづらいとか書きづらいとか思ったことは無いよ。
{}や;が無くて読みづらいとか書きづらいとか誰もそんなこと言ってないだろ?
勝手に脳内変換するなや
ついでに言うとセミコロン無い方が書きやすいのは当たり前のこと
だから新しい言語の多くがセミコロンレスを採用してる(オフサイドは採用しないけど)
401デフォルトの名無しさん
2023/12/15(金) 23:45:28.85ID:4QMbv0z8 >>399
アロー関数ってNimのsugarモジュールにある`=>`マクロのこと?
あくまでこの=>は二項演算子だから両辺は式になっていないといけない。
オフサイドルールに関係無く二項演算子の両辺に文を直接書けず式を置かないといけないのは殆どのプログラミング言語で同じじゃない?
複数文を書きたければanonymous procedureで書けばよいし。
オフサイドルールじゃない言語で無名関数に複数文を書くときは必ず{}で囲む必要があるし。
どうしてこれが言語の成長を阻害していることになるの?
明らかなバグなのに修正しようとしないって言うけどGithubのNimのリポジトリにそういうissueある?
無名関数を書くときはdo notationというのもあるよ。
https://nim-lang.org/docs/manual.html#procedures-do-notation
アロー関数ってNimのsugarモジュールにある`=>`マクロのこと?
あくまでこの=>は二項演算子だから両辺は式になっていないといけない。
オフサイドルールに関係無く二項演算子の両辺に文を直接書けず式を置かないといけないのは殆どのプログラミング言語で同じじゃない?
複数文を書きたければanonymous procedureで書けばよいし。
オフサイドルールじゃない言語で無名関数に複数文を書くときは必ず{}で囲む必要があるし。
どうしてこれが言語の成長を阻害していることになるの?
明らかなバグなのに修正しようとしないって言うけどGithubのNimのリポジトリにそういうissueある?
無名関数を書くときはdo notationというのもあるよ。
https://nim-lang.org/docs/manual.html#procedures-do-notation
402デフォルトの名無しさん
2023/12/16(土) 08:47:38.44ID:yzC0WAGQ 「vimを使えばいい」とか「無名関数を使えばいい」などと列挙されても
他の言語はそんな特別なケアなしに使えるわけでな…
このあたりがいまいち広まらない原因なんじゃない?
他の言語はそんな特別なケアなしに使えるわけでな…
このあたりがいまいち広まらない原因なんじゃない?
403デフォルトの名無しさん
2023/12/16(土) 08:53:10.18ID:mPzLcjX0 以前インデントの代わりに{}を使える機能があったようだ。
https://github.com/nim-lang/Nim/commit/10bd488daafa79f52fec0d5e7ea76ec8d5902465
https://forum.nim-lang.org/t/10730#71570
けれども殆ど使われなかったのと、{}があるとgrammarとparserが発展するのが難しくなるので削除されたらしい。
https://forum.nim-lang.org/t/10349#68930
https://github.com/nim-lang/Nim/commit/10bd488daafa79f52fec0d5e7ea76ec8d5902465
https://forum.nim-lang.org/t/10730#71570
けれども殆ど使われなかったのと、{}があるとgrammarとparserが発展するのが難しくなるので削除されたらしい。
https://forum.nim-lang.org/t/10349#68930
404デフォルトの名無しさん
2023/12/16(土) 09:38:42.94ID:mPzLcjX0 >>402
現代では高機能なテキストエディタやIDEが使えるから
それを使うことを前提にプログラミング言語をデザインしたらいいんじゃね?
って話は聞いたことがある。
sugarの`=>`マクロはNim言語のanonymous procedureを特定の条件下で簡単に書けるよう作られたもので完全にanonymous procedureを置き換えられるものでない。
sugarモジュール自体がシンタックスシュガーのようなものを提供するマクロなどを集めたものだし。
制限とか気にせずにanonymous procedureを書きたかったら=>を使わずに書くしかない。
現代では高機能なテキストエディタやIDEが使えるから
それを使うことを前提にプログラミング言語をデザインしたらいいんじゃね?
って話は聞いたことがある。
sugarの`=>`マクロはNim言語のanonymous procedureを特定の条件下で簡単に書けるよう作られたもので完全にanonymous procedureを置き換えられるものでない。
sugarモジュール自体がシンタックスシュガーのようなものを提供するマクロなどを集めたものだし。
制限とか気にせずにanonymous procedureを書きたかったら=>を使わずに書くしかない。
405デフォルトの名無しさん
2023/12/16(土) 09:56:43.39ID:yzC0WAGQ >>404
そのへんがまさに省略記法の悪い点が出てる感じするな
省略するってことはソースコードの情報量は減っていて、それはタダではない
「OOのときにはXXを使う」みたいな規則がたくさん発生するというコストがあるんだよね
これはセミコロンレスもそうで、時々変なエッジケースが発生したりする
そのへんがまさに省略記法の悪い点が出てる感じするな
省略するってことはソースコードの情報量は減っていて、それはタダではない
「OOのときにはXXを使う」みたいな規則がたくさん発生するというコストがあるんだよね
これはセミコロンレスもそうで、時々変なエッジケースが発生したりする
406デフォルトの名無しさん
2023/12/16(土) 16:45:38.17ID:kvk3r8Lt オフサイドルールと違ってセミコロンレス(optional semicolon)は多くの言語で妥当なトレードオフ
オフサイドルールが妥当なトレードオフとして成立してるのはHaskell系の言語くらい
オフサイドルールが妥当なトレードオフとして成立してるのはHaskell系の言語くらい
407デフォルトの名無しさん
2023/12/16(土) 20:00:00.36ID:USjLXMUH なんかどうでもいいことをいつまでも
うじうじと
気に入らないなら使わなきゃいいだけ
気に入ったら使えばいいだけ
うじうじと
気に入らないなら使わなきゃいいだけ
気に入ったら使えばいいだけ
408デフォルトの名無しさん
2023/12/17(日) 07:10:31.29ID:clYlz397 >>407
気に入っていても:
ある日突然:
気に入らなくなる事ってあるよね?
気に入らなくても:
ちょっとしたきっかけで:
すごく気に入ってしまうことも
あるよね?
そういう時はどうすればいいの?
気に入っていても:
ある日突然:
気に入らなくなる事ってあるよね?
気に入らなくても:
ちょっとしたきっかけで:
すごく気に入ってしまうことも
あるよね?
そういう時はどうすればいいの?
409デフォルトの名無しさん
2023/12/17(日) 12:19:34.98ID:WUPd6f5k >>408
> すごく気に入ってしまうことも
> あるよね?
Error: invalid indentation
> すごく気に入ってしまうことも
> あるよね?
Error: invalid indentation
410デフォルトの名無しさん
2023/12/17(日) 18:41:59.56ID:F9NekDqG Nimはよく考えずに機能追加して既にC++並みに複雑化してる
目新しさだけで飛びつくと後悔するぞ
目新しさだけで飛びつくと後悔するぞ
411デフォルトの名無しさん
2023/12/18(月) 02:13:02.65ID:DdCrjTir そうなの? じゃあもうC++でいいじゃん
412デフォルトの名無しさん
2023/12/18(月) 08:55:26.31ID:DG+uqCiP 例えば最近実装している変更についてもちゃんとここに理由とか書いてあるよ。
https://github.com/nim-lang/RFCs/issues/516
このあたりをよく読めばちゃんと考えて機能を実装していることがわかるよ。
https://github.com/nim-lang/RFCs/issues
https://github.com/nim-lang/Nim/pulls
Discord/Nimのinternalチャンネルをときどき読んでるけど
開発者は論文読んだり他のプログラミング言語の機能を調査しているようだよ。
https://en.cppreference.com/w/cpp
と
https://nim-lang.org/docs/manual.html
を読み比べてみればわかると思うけどC++のほうがはるかに複雑だよ。
https://github.com/nim-lang/RFCs/issues/516
このあたりをよく読めばちゃんと考えて機能を実装していることがわかるよ。
https://github.com/nim-lang/RFCs/issues
https://github.com/nim-lang/Nim/pulls
Discord/Nimのinternalチャンネルをときどき読んでるけど
開発者は論文読んだり他のプログラミング言語の機能を調査しているようだよ。
https://en.cppreference.com/w/cpp
と
https://nim-lang.org/docs/manual.html
を読み比べてみればわかると思うけどC++のほうがはるかに複雑だよ。
413デフォルトの名無しさん
2023/12/18(月) 20:40:29.88ID:DG+uqCiP Nim言語がどのような考えで設計されたか知りたい人はNimのblogを読むといいよ。
https://nim-lang.org/araq/
https://nim-lang.org/blog.html
https://nim-lang.org/araq/
https://nim-lang.org/blog.html
414デフォルトの名無しさん
2023/12/18(月) 20:49:37.54ID:CbnA3O4k Nimの現状を知りたい人はこれを読むといい
https://forum.nim-lang.org/t/9145
https://forum.nim-lang.org/t/9145
415デフォルトの名無しさん
2023/12/19(火) 00:16:35.74ID:mrSFrPG8 議論をよく読めば何やらちゃんと考えて実装しているらしいのはC++も同じなんだよなあ
416デフォルトの名無しさん
2023/12/19(火) 08:00:58.06ID:w9OEXcqM417デフォルトの名無しさん
2023/12/20(水) 12:37:14.01ID:Cvw2c2UZ バグ修正版のNim 2.0.2と1.6.18がリリースされました。
https://nim-lang.org/blog/2023/12/19/versions-1618-202-released.html
https://nim-lang.org/blog/2023/12/19/versions-1618-202-released.html
418デフォルトの名無しさん
2023/12/23(土) 09:16:16.92ID:VfEmk1mn 寂しいスポンサーページだな😢
https://nim-lang.org/sponsors.html
こりゃnimが普及しないのも当然か
rustとは大違い
https://foundation.rust-lang.org/members/
https://nim-lang.org/sponsors.html
こりゃnimが普及しないのも当然か
rustとは大違い
https://foundation.rust-lang.org/members/
419デフォルトの名無しさん
2023/12/23(土) 10:35:51.40ID:M8dtHAyN でもRustは誰も使ってないじゃん
420デフォルトの名無しさん
2023/12/23(土) 11:58:51.47ID:BXldyzev Rust言語はトヨタ自動車が採用してると
どこかで読んだ
どこかで読んだ
421デフォルトの名無しさん
2023/12/23(土) 13:41:38.19ID:fLdoaHTJ >>419
誰も使ってないは草
誰も使ってないは草
422デフォルトの名無しさん
2023/12/23(土) 13:46:35.58ID:6J3b/0Sr Nimと書き間違えたんだと思うが
423デフォルトの名無しさん
2023/12/23(土) 18:13:17.30ID:A6gu1Hml Nimを使っている組織のリスト
https://github.com/nim-lang/Nim/wiki/Organizations-using-Nim
https://github.com/nim-lang/Nim/wiki/Organizations-using-Nim
424デフォルトの名無しさん
2023/12/27(水) 19:41:58.29ID:g/RhhP+m プログラムをビルドするためにC++だったらCMake、Rustだったらcargo.tomlにTOMLを使う。
Nimだったらconfig.nimsも.nimbleファイルもNim言語で書ける。
一つの言語でコンパイル言語としてもスクリプト言語としても使えて便利。
Nimはマクロやconstなどをコンパイル時に実行するためにVM使ってるんだけど、そのVMを使ってNimをスクリプト言語のように実行できるらしい。
Nimだったらconfig.nimsも.nimbleファイルもNim言語で書ける。
一つの言語でコンパイル言語としてもスクリプト言語としても使えて便利。
Nimはマクロやconstなどをコンパイル時に実行するためにVM使ってるんだけど、そのVMを使ってNimをスクリプト言語のように実行できるらしい。
425デフォルトの名無しさん
2023/12/27(水) 19:50:00.04ID:J2C6aYvl rustも複雑なことをしようと思ったらbuild.rsに書けるけど、それはそうとして依存関係をプログラム言語で書きたいかと言われると
426デフォルトの名無しさん
2023/12/27(水) 20:16:43.40ID:E4kPlntL あれもこれもできて便利!みたいなのはぱっと見良さそうでも
大規模・多人数・長期開発になると負債になりがちではある
大規模・多人数・長期開発になると負債になりがちではある
427デフォルトの名無しさん
2023/12/27(水) 20:24:29.72ID:qErwbOrg happyxが起爆剤にならないかなぁ、、🙏
428デフォルトの名無しさん
2023/12/27(水) 23:05:07.37ID:LUGQIuRd zigなら全部zigで書ける(便乗)
429デフォルトの名無しさん
2023/12/27(水) 23:27:30.38ID:7WiLoZ1Z 一体なにがエレガントなんだろうなこの言語って
430デフォルトの名無しさん
2023/12/27(水) 23:34:47.36ID:qmMlPacq まあアイコンはエレガントなんじゃない?王冠だし
431デフォルトの名無しさん
2023/12/27(水) 23:51:57.04ID:Ra91RrOg procとmethodとfuncを使い分けつつ{.global.}や{.async.}なとの{.pragma.}とmacroでぐちゃぐちゃにかき混ぜられるのが超エレガントw
他の言語では類を見ない
他の言語では類を見ない
432デフォルトの名無しさん
2023/12/28(木) 22:46:05.11ID:u+MANgUc エレガントすぎてついていけないわ
433デフォルトの名無しさん
2023/12/28(木) 23:18:44.60ID:u+MANgUc エレガントすぎてついていけないわ
434デフォルトの名無しさん
2024/02/20(火) 19:40:26.76ID:iQdtjO/s 新年の記念 保守
435デフォルトの名無しさん
2024/06/17(月) 22:36:28.67ID:y0rZbngO https://nim-lang.org/blog/2024/06/17/version-206-released.html
Nim version 2.0.6がリリースされました。
Nim version 2.0.6がリリースされました。
436デフォルトの名無しさん
2024/10/04(金) 21:03:40.29ID:jm0g8/rX https://github.com/kostya/benchmarks#primes
から派生させた、Atkin Sieveベンチマーク
計算本体だけの計測に改め、更に桁を増やし、途中計算がオーバーフローしないように関係変数はすべて64bit
UPPER_BOUND: 500_000_000
Zig 1912ms
g++ 1916ms
Nim 1920ms gcc
Nim 1969ms clang
clang++ 2151ms
Rust 2411ms overflow-checks = false
Rust 2430ms overflow-checks = true
Zigが速かったので他は色々と変更した
Zigの変更は最小限なので再現検証をする場合は各自のZig計測値を基準にしてください
から派生させた、Atkin Sieveベンチマーク
計算本体だけの計測に改め、更に桁を増やし、途中計算がオーバーフローしないように関係変数はすべて64bit
UPPER_BOUND: 500_000_000
Zig 1912ms
g++ 1916ms
Nim 1920ms gcc
Nim 1969ms clang
clang++ 2151ms
Rust 2411ms overflow-checks = false
Rust 2430ms overflow-checks = true
Zigが速かったので他は色々と変更した
Zigの変更は最小限なので再現検証をする場合は各自のZig計測値を基準にしてください
437デフォルトの名無しさん
2024/10/04(金) 21:11:00.73ID:jm0g8/rX 特にデータ構造で
Nim seq[bool]
Rust Vec<bool>
は遅いので直ぐに取り換えてください
C++のvector<bool>は最適化がされていますが、最終的に別のものにしました
Nim seq[bool]
Rust Vec<bool>
は遅いので直ぐに取り換えてください
C++のvector<bool>は最適化がされていますが、最終的に別のものにしました
438デフォルトの名無しさん
2024/10/04(金) 21:12:20.19ID:jm0g8/rX >>436は取り換えた後の計測値です
439デフォルトの名無しさん
2024/12/31(火) 13:29:53.82ID:dvbSbmj1 ねんまつ記念 保守
440デフォルトの名無しさん
2025/02/18(火) 12:43:21.45ID:HbHlBTpR C++のVectorは最悪
441デフォルトの名無しさん
2025/03/30(日) 03:12:16.26ID:oBGwoxyW 最近元気ないな
442デフォルトの名無しさん
2025/04/27(日) 14:57:44.22ID:rRExk4WB ねこのすれ
443デフォルトの名無しさん
2025/05/08(木) 16:20:58.41ID:anhDrZ/H バイアグラ飲め
レスを投稿する
ニュース
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- まみちゃん
- ちっしゃーねーな。俺が習近平のアナルに武力侵攻してきてやるよ
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- Doraemon's Solus
