Ним эквивалентен python `help()`

Компилирует ли nim строки документации, чтобы мы могли выводить их во время выполнения?

Что-то типа:

>>> echo help(echo)
"Writes and flushes the parameters to the standard output.[...]"

person 0atman    schedule 15.04.2020    source источник


Ответы (1)


отредактировано: есть способ реализовать функцию справки

Получается, что с помощью macros.getImpl можно реализовать аналогичный функционал на эхо, о котором вы сообщаете выше (игровая площадка):

import macros

macro implToStr*(ident: typed): string =
  toStrLit(getImpl(ident))
template help*(ident: typed) =
  echo implToStr(ident)

help(echo)

выход:

proc echo(x: varargs[typed, `$`]) {.magic: "Echo", tags: [WriteIOEffect],
                                    gcsafe, locks: 0, sideEffect.}
  ## Writes and flushes the parameters to the standard output.
                                                                  ## 
                                                                  ## Special built-in that takes a variable number of arguments. Each argument
                                                                  ## is converted to a string via ``$``, so it works for user-defined
                                                                  ## types that have an overloaded ``$`` operator.
                                                                  ## It is roughly equivalent to ``writeLine(stdout, x); flushFile(stdout)``, but
                                                                  ## available for the JavaScript target too.
                                                                  ## 
                                                                  ## Unlike other IO operations this is guaranteed to be thread-safe as
                                                                  ## ``echo`` is very often used for debugging convenience. If you want to use
                                                                  ## ``echo`` inside a `proc without side effects
                                                                  ## <manual.html#pragmas-nosideeffect-pragma>`_ you can use `debugEcho
                                                                  ## <#debugEcho,varargs[typed,]>`_ instead.

вывод немного шаткий (очень большой отступ после первой строки строки документации) и имеет некоторые ограничения: он не будет работать с некоторыми символами - например. работает с toStrLit, но не с getImpl; он не будет работать при перегрузке. Эти ограничения могут быть улучшены в будущем либо за счет лучшей реализации, либо за счет исправлений компилятора/stdlib.

предыдущий ответ

Нет, Nim не будет компилировать строки документации (редактировать: строки документации недоступны во время выполнения, но являются частью AST, и к ним можно получить доступ во время компиляции, см. выше). В поддерживаемом редакторе вы можете получить помощь при наведении курсора на идентификаторы или при переходе к определению в исходном коде.

Например, в VS Code (с расширением Nim) наведение курсора на эхо даст вам:

введите здесь описание изображения

А нажатие F12 (в Windows) перейдет к определению эха в systems.nim.

Другим полезным ресурсом для идентификатора стандартной библиотеки является указатель с возможностью поиска.

person pietroppeter    schedule 15.04.2020
comment
Хм, значит, мне придется использовать внешний инструмент, чтобы добавить их в мой проект repl (inim)? Нимсуггест? Как эти плагины и идеи получают информацию? - person 0atman; 15.04.2020
comment
Да, именно через nimsuggest. Да, чтобы реализовать справку в реплике, вы можете вызвать nimsuggest. - person pietroppeter; 16.04.2020
comment
Это соответствующая документация: nim-lang.org/docs/nimsuggest.html - person pietroppeter; 16.04.2020