summary refs log tree commit diff stats
path: root/doc/manual_experimental.md
Commit message (Collapse)AuthorAgeFilesLines
* make `genericsOpenSym` work at instantiation time, new behavior in `openSym` ↵metagn2024-09-181-5/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | (#24111) alternative to #24101 #23892 changed the opensym experimental switch so that it has to be enabled in the context of the generic/template declarations capturing the symbols, not the context of the instantiation of the generics/templates. This was to be in line with where the compiler gives the warnings and changes behavior in a potentially breaking way. However `results` [depends on the old behavior](https://github.com/arnetheduck/nim-results/blob/71d404b314479a6205bfd050f4fe5fe49cdafc69/results.nim#L1428), so that the callers of the macros provided by results always take advantage of the opensym behavior. To accomodate this, we change the behavior of the old experimental option that `results` uses, `genericsOpenSym`, so that ignores the information of whether or not symbols are intentionally opened and always gives the opensym behavior as long as it's enabled at instantiation time. This should keep `results` working as is. However this differs from the normal opensym switch in that it doesn't generate `nnkOpenSym`. Before it was just a generics-only version of `openSym` along with `templateOpenSym` which was only for templates. So `templateOpenSym` is removed along with this change, but no one appears to have used it.
* opensym for templates + move behavior of opensymchoice to itself (#24007)metagn2024-08-281-18/+39
| | | | | | | | | | | | | | | | | | | | | | | fixes #15314, fixes #24002 The OpenSym behavior first added to generics in #23091 now also applies to templates, since templates can also capture symbols that are meant to be replaced by local symbols if the context imports symbols with the same name, as in the issue #24002. The experimental switch `templateOpenSym` is added to enable this behavior for templates only, and the experimental switch `openSym` is added to enable it for both templates and generics, and the documentation now mainly mentions this switch. Additionally the logic for `nkOpenSymChoice` nodes that were previously wrapped in `nkOpenSym` now apply to all `nkOpenSymChoice` nodes, and so these nodes aren't wrapped in `nkOpenSym` anymore. This means `nkOpenSym` can only have children of kind `nkSym` again, so it is more in line with the structure of symchoice nodes. As for why they aren't merged with `nkOpenSymChoice` nodes yet, we need some way to signal that the node shouldn't become ambiguous if other options exist at instantiation time, we already captured a symbol at the beginning and another symbol can only replace it if it's closer in scope and unambiguous.
* opensym as node kind + fixed experimental switch (#23892)metagn2024-08-121-1/+10
| | | | | | | | | | | | | | | refs https://github.com/nim-lang/Nim/pull/23873#discussion_r1687995060, fixes #23386, fixes #23385, supersedes #23572 Turns the `nfOpenSym` node flag implemented in #23091 and extended in #23102 and #23873, into a node kind `nkOpenSym` that forms a unary node containing either `nkSym` or `nkOpenSymChoice`. Since this affects macros working on generic proc AST, the node kind is now only generated when the experimental switch `genericsOpenSym` is enabled, and a new node flag `nfDisabledOpenSym` is set to the `nkSym` or `nkOpenSymChoice` when the switch is not enabled so that we can give a warning. Now that the experimental switch has more reasonable semantics, we define `nimHasGenericsOpenSym2`.
* Asm syntax pragma (#23119)ASVIEST2023-12-251-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | (Inspired by this pragma in nir asm PR) `inlineAsmSyntax` pragma allowing specify target inline assembler syntax in `asm` stmt. It prevents compiling code with different of the target CC inline asm syntax, i.e. it will not allow gcc inline asm code to be compiled with vcc. ```nim proc nothing() = asm {.inlineAsmSyntax: "gcc".} """ nop """ ``` The current C(C++) backend implementation cannot generate code for gcc and for vcc at the same time. For example, `{.inlineAsmSyntax: "vcc".}` with the ICC compiler will not generate code with intel asm syntax, even though ICC can use both gcc-like asm and vcc-like. For implement support for gcc and for vcc at the same time in ICC compiler, we need to refactor extccomp --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* add switch, warning, and `bind` support for new generic injection behavior ↵metagn2023-12-221-0/+40
| | | | | | | | | | | | | | | | | | | | | (#23102) refs #23091, especially post merge comments Unsure if `experimental` and `bind` are the perfect constructs to use but they seem to get the job done here. Symbol nodes do not get marked `nfOpenSym` if the `bind` statement is used for their symbol, and `nfOpenSym` nodes do not get replaced by new local symbols if the experimental switch is not enabled in the local context (meaning it also works with `push experimental`). However this incurs a warning as the fact that the node is marked `nfOpenSym` means we did not `bind` it, so we might want to do that or turn on the experimental switch if we didn't intend to bind it. The experimental switch name is arbitrary and could be changed. --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* document `--experimental:vtables` (#23111)ringabout2023-12-211-0/+35
|
* fixes nimdoc warnings (#23110)ringabout2023-12-211-1/+1
|
* fixes #18073; fixes #14730; document notnil is only applied to local … ↵ringabout2023-12-191-3/+7
| | | | | | | | (#23084) …symbols fixes #18073 fixes #14730
* fixes not nil examples (#23080)ringabout2023-12-151-0/+1
|
* Minor documentation change (#22951)Marko Schütz-Schmuck2023-11-171-3/+2
| | | I've made a small change in the explanation of `void` types.
* doc: update manual_experimental.md (#22949)Ikko Eltociear Ashimine2023-11-161-1/+1
| | | sematics -> semantics
* complete std prefixes for stdlib (#22887)ringabout2023-10-301-1/+1
| | | | follow up https://github.com/nim-lang/Nim/pull/22851 follow up https://github.com/nim-lang/Nim/pull/22873
* doc: fix typos (#22869)shuoer862023-10-251-1/+1
| | | doc: fix typos
* adds support for noDecl in constructor (#22811)Juan M Gómez2023-10-111-1/+1
| | | Notice the test wouldnt link before
* marking a field with noInit allows to skip constructor initialiser (#22802)Juan M Gómez2023-10-081-0/+50
| | | Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Make `typeRel` behave to spec (#22261)Ryan McConnell2023-09-301-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | The goal of this PR is to make `typeRel` accurate to it's definition for generics: ``` # 3) When used with two type classes, it will check whether the types # matching the first type class (aOrig) are a strict subset of the types matching # the other (f). This allows us to compare the signatures of generic procs in # order to give preferrence to the most specific one: ``` I don't want this PR to break any code, and I want to preserve all of Nims current behaviors. I think that making this more accurate will help serve as ground work for the future. It may not be possible to not break anything but this is my attempt. So that it is understood, this code was part of another PR (#22143) but that problem statement only needed this change by extension. It's more organized to split two problems into two PRs and this issue, being non-breaking, should be a more immediate improvement. --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* removes references to `this` in the `constructor` section (#22730)Juan M Gómez2023-09-201-4/+3
|
* Document C++ Initializers (#22704)Juan M Gómez2023-09-151-0/+27
| | | Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* updates manual with codegenDecl on params docs (#22333)Juan M Gómez2023-08-171-3/+2
| | | | | | | | | | | | * documents member * Update doc/manual_experimental.md Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com> --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de> Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* documents member (#22460)Juan M Gómez2023-08-121-0/+59
| | | | | | | | | | | | | | | | | | | | | | | | * documents member * Apply suggestions from code review Co-authored-by: Juan Carlos <juancarlospaco@gmail.com> * Update doc/manual_experimental.md * Update doc/manual_experimental.md * Update doc/manual_experimental.md * Update doc/manual_experimental.md * Update doc/manual_experimental.md * Update doc/manual_experimental.md --------- Co-authored-by: Juan Carlos <juancarlospaco@gmail.com> Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* unify starting blank lines in the experimental manual (#22396)ringabout2023-08-061-23/+0
| | | unify starting blank lines in the experimental manal
* Add experimental inferGenericTypes switch (#22317)SirOlaf2023-08-031-0/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Infer generic bindings * Simple test * Add t * Allow it to work for templates too * Fix some builds by putting bindings in a template * Fix builtins * Slightly more exotic seq test * Test value-based generics using array * Pass expectedType into buildBindings * Put buildBindings into a proc * Manual entry * Remove leftover ` * Improve language used in the manual * Experimental flag and fix basic constructors * Tiny commend cleanup * Move to experimental manual * Use 'kind' so tuples continue to fail like before * Explicitly disallow tuples * Table test and document tuples * Test type reduction * Disable inferGenericTypes check for CI tests * Remove tuple info in manual * Always reduce types. Testing CI * Fixes * Ignore tyGenericInst * Prevent binding already bound generic params * tyUncheckedArray * Few more types * Update manual and check for flag again * Update tests/generics/treturn_inference.nim * var candidate, remove flag check again for CI * Enable check once more --------- Co-authored-by: SirOlaf <> Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* implemented 'push quirky' switch for fine grained control over the ex… ↵Andreas Rumpf2023-07-231-11/+70
| | | | | | | (#22318) * implemented 'push quirky' switch for fine grained control over the exception handling overhead * documentation
* fixes typos in the constructor docs (#22035)Juan M Gómez2023-06-091-3/+3
| | | | | | | | | | | * fixes typos in the constructor docs * updates constructor docs * Update doc/manual_experimental.md --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* documents constructor (#22013)Juan M Gómez2023-06-061-0/+58
| | | | | | | | | * documents constructor * Apply suggestions from code review --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Moves virtual under its own section manual_experimental.md (#21870)Juan M Gómez2023-05-201-2/+2
|
* documents virtual (#21860)Juan M Gómez2023-05-191-0/+76
| | | | | | | | | * documents virtual * Apply suggestions from code review --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* isolation spec update; WIP (#21843)Andreas Rumpf2023-05-141-0/+123
| | | | | | | | | | | * isolation spec update; WIP * wip * docs update, WIP * progress * Update doc/manual.md
* alias syntax fixes, improvements and tests (#21671)metagn2023-04-221-10/+7
| | | | | | | | | | | | | * alias syntax fixes, improvements and tests * even better, cannot use alias syntax with generics * more type tests, improve comment * fix again * consistent error message + make t5167_5 work * more comments, remove {.noalias.}
* generic `define` pragma + string alias (#20979)metagn2022-12-131-0/+23
| | | | | | | | | * generic `define` pragma + string alias * clean * add tests and document * remove char/float, minimize changelog
* alternative, much simpler algorithm for strict func checking (#21066)Andreas Rumpf2022-12-111-10/+6
| | | | | | | | | | | | | * alternative, much simpler algorithm for strict func checking * forgot to git add new compiler module * new spec is incredibly simple to describe * fixes bigints regression * typos * closes #16305; closes #17387; closes #20863
* definite assignment analysis for let (#21024)ringabout2022-12-061-0/+14
| | | | | | | | | | | | | | | | | | | * draft for let daa * patch * fixes bugs * errors for global let variable reassignments * checkpoint * out param accepts let * add more tests * add documentation * merge tests
* fix a few "broken link" warnings (#20837)Andrey Makarov2022-11-141-1/+1
|
* implemented strictCaseObjects (#20608)Andreas Rumpf2022-10-211-0/+36
| | | | | * implemented strictCaseObjects * changelog update
* 'lock levels' are deprecated, now a noop (#20539)ringabout2022-10-111-99/+0
| | | | | * 'lock levels' are deprecated, now a noop * fixes tests
* Automatic dereferencing is removed (#20531)ringabout2022-10-101-23/+0
|
* DAA and 'out' parameters (#20506)Andreas Rumpf2022-10-061-3/+129
| | | | | | | | | | | * DAA and 'out' parameters * progress * documented strictDefs and out parameters * docs, tests and a bugfix * fixes silly regression
* Markdown indented code blocks (#20473)Andrey Makarov2022-10-051-12/+12
| | | | | | | | | | | | | | | | | | | | | | | * Implement Markdown indented code blocks Additional indentation of 4 spaces makes a block an "indented code block" (monospaced text without syntax highlighting). Also `::` RST syntax for code blocks is disabled. So instead of ```rst see:: Some code ``` the code block should be written as ```markdown see: Some code ``` * Migrate RST literal blocks :: to Markdown's ones
* Unicode Operators are no longer experimental (#20444)ringabout2022-09-281-21/+0
| | | | | | | | | * Unicode Operators are no longer experimental * fixes tests * Update doc/manual.md Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* minor improvements to follow up recent PRs (#20342)metagn2022-09-141-38/+0
| | | | | | put mOpenArrayToSeq in compile-time evaluation whitelist (it was mNone before which was whitelisted), homogenize "ordinal type expected" errors, put overloadable enums in non-experimental manual
* Markdown links migration part 1 (#20319)Andrey Makarov2022-09-091-7/+7
| | | | | | | | | | | | | Markdown link migration part 1 Also the warning is improved a bit. Local links (targeting inside its document) which had had a full anchor were turned into concise form. The very fact that they existed may be due to the bug in reference to subsections fixed https://github.com/nim-lang/Nim/pull/20279, now they are working well (both in RST syntax and new Pandoc Markdown syntax implemented in https://github.com/nim-lang/Nim/pull/20304)
* overloadable enums no longer experimental (#20298)metagn2022-09-051-3/+3
| | | depends on #20126
* top-down type inference, implements rfc 149 (#20091)metagn2022-08-241-0/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * micro implementation of rfc 149 refs https://github.com/nim-lang/RFCs/issues/149 * number/array/seq literals, more statements * try fix number literal alias issue * renew expectedType with if/case/try branch types * fix (nerf) index type handling and float typed int * use typeAllowed * tweaks + const test (tested locally) [skip ci] * fill out more of the checklist * more literals, change @ order, type conversions Not copying the full call tree before the typedesc call check in `semIndirectOp` is also a small performance improvement. * disable self-conversion warning * revert type conversions (maybe separate op later) * deal with CI for now (seems unrelated), try enums * workaround CI different way * proper fix * again * see sizes * lol * overload selection, simplify int literal -> float * range, new @ solution, try use fitNode for nil * use new magic * try fix ranges, new magic, deal with #20193 * add documentation, support templates Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Markdown code blocks part 4 (#20189)Andrey Makarov2022-08-121-137/+139
| | | No logic was added, just 8 more files have been migrated.
* Markdown code blocks part 2; migrate Nim Manual (#20080)Andrey Makarov2022-07-251-10/+5
| | | | | * Change headings underscored by `~~~` to `###` * Markdown code blocks part 2; migrate Nim Manual
* Improve Markdown code blocks & start moving docs to Markdown style (#19954)Andrey Makarov2022-07-151-0/+1943
- add additional parameters parsing (other implementations will just ignore them). E.g. if in RST we have: .. code:: nim :test: "nim c $1" ... then in Markdown that will be: ```nim test="nim c $1" ... ``` - implement Markdown interpretation of additional indentation which is less than 4 spaces (>=4 spaces is a code block but it's not implemented yet). RST interpretes it as quoted block, for Markdown it's just normal paragraphs. - add separate `md2html` and `md2tex` commands. This is to separate Markdown behavior in cases when it diverges w.r.t. RST significantly — most conspicously like in the case of additional indentation above, and also currently the contradicting inline rule of Markdown is also turned on only in `md2html` and `md2tex`. **Rationale:** mixing Markdown and RST arbitrarily is a way to nowhere, we need to provide a way to fix the particular behavior. Note that still all commands have **both** Markdown and RST features **enabled**. In this PR `*.nim` files can be processed only in Markdown mode, while `md2html` is for `*.md` files and `rst2html` for `*.rst` files. - rename `*.rst` files to `.*md` as our current default behavior is already Markdown-ish - convert code blocks in `docgen.rst` to Markdown style as an example. Other code blocks will be converted in the follow-up PRs - fix indentation inside Markdown code blocks — additional indentation is preserved there - allow more than 3 backticks open/close blocks (tildas \~ are still not allowed to avoid conflict with RST adornment headings) see also https://github.com/nim-lang/RFCs/issues/355 - better error messages - (other) fix a bug that admonitions cannot be used in sandbox mode; fix annoying warning on line 2711