Inline attribute documentation
This commit is contained in:
parent
3cbd8f0113
commit
c8175a7550
68
gitlab-pages/docs/advanced/inline.md
Normal file
68
gitlab-pages/docs/advanced/inline.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
id: inline
|
||||||
|
title: Inlining
|
||||||
|
---
|
||||||
|
|
||||||
|
import Syntax from '@theme/Syntax';
|
||||||
|
|
||||||
|
When compiling a contract in LIGO some functions get inlined in the place where
|
||||||
|
they are used and some are not. Inlining a function often results in larger
|
||||||
|
contracts and is therefore not aggressively done.
|
||||||
|
|
||||||
|
In some cases you might want to override the default behaviour of LIGO and
|
||||||
|
force inlining.
|
||||||
|
|
||||||
|
|
||||||
|
## Inline attribute
|
||||||
|
|
||||||
|
To force inlining you can use the inline attribute.
|
||||||
|
|
||||||
|
<Syntax syntax="pascaligo">
|
||||||
|
|
||||||
|
```pascaligo
|
||||||
|
function fst(const p : nat * nat) : nat is p.0; attributes ["inline"] ;
|
||||||
|
|
||||||
|
function main(const p : nat * nat; const s : nat * nat) : list(operation) * (nat * nat) is
|
||||||
|
((list end : list(operation)), (fst(p.0,p.1), fst(s.1,s.0)))
|
||||||
|
```
|
||||||
|
|
||||||
|
</Syntax>
|
||||||
|
<Syntax syntax="cameligo">
|
||||||
|
|
||||||
|
```cameligo
|
||||||
|
let fst (p: (nat * nat)) : nat = p.0 [@@inline]
|
||||||
|
|
||||||
|
let main (p : (nat * nat)) (s : (nat * nat)) : (operation list * (nat * nat)) =
|
||||||
|
(([]: operation list), (fst (p.0, p.1), fst (s.1, s.0)))
|
||||||
|
```
|
||||||
|
|
||||||
|
</Syntax>
|
||||||
|
<Syntax syntax="reasonligo">
|
||||||
|
|
||||||
|
```reasonligo
|
||||||
|
[@inline]
|
||||||
|
let fst = (p: (nat, nat)) : nat => p[0]
|
||||||
|
|
||||||
|
let main = (p : (nat, nat), s : (nat, nat)) : (list(operation), (nat, nat)) =>
|
||||||
|
(([]: list(operation)), (fst((p[0], p[1])), fst((s[1], s[0]))))
|
||||||
|
```
|
||||||
|
|
||||||
|
</Syntax>
|
||||||
|
|
||||||
|
Now if we measure the difference between inlining and without inlining, using
|
||||||
|
`ligo measure-contract name_of_contract.ligo <entrypoint>`, we see the
|
||||||
|
following results:
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>With inlining</td><td>66 bytes</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Without inlining</td><td>170 bytes</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
:::info
|
||||||
|
Note that these results can change due to ongoing work to optimize output of
|
||||||
|
the LIGO compiler.
|
||||||
|
:::
|
@ -19,7 +19,8 @@
|
|||||||
"advanced/entrypoints-contracts",
|
"advanced/entrypoints-contracts",
|
||||||
"advanced/include",
|
"advanced/include",
|
||||||
"advanced/first-contract",
|
"advanced/first-contract",
|
||||||
"advanced/michelson-and-ligo"
|
"advanced/michelson-and-ligo",
|
||||||
|
"advanced/inline"
|
||||||
],
|
],
|
||||||
"Reference": [
|
"Reference": [
|
||||||
"api/cli-commands",
|
"api/cli-commands",
|
||||||
|
@ -122,6 +122,7 @@ let md_files = [
|
|||||||
"/gitlab-pages/docs/advanced/first-contract.md";
|
"/gitlab-pages/docs/advanced/first-contract.md";
|
||||||
"/gitlab-pages/docs/advanced/entrypoints-contracts.md";
|
"/gitlab-pages/docs/advanced/entrypoints-contracts.md";
|
||||||
"/gitlab-pages/docs/advanced/timestamps-addresses.md";
|
"/gitlab-pages/docs/advanced/timestamps-addresses.md";
|
||||||
|
"/gitlab-pages/docs/advanced/inline.md";
|
||||||
"/gitlab-pages/docs/api/cli-commands.md";
|
"/gitlab-pages/docs/api/cli-commands.md";
|
||||||
"/gitlab-pages/docs/api/cheat-sheet.md";
|
"/gitlab-pages/docs/api/cheat-sheet.md";
|
||||||
"/gitlab-pages/docs/reference/list.md";
|
"/gitlab-pages/docs/reference/list.md";
|
||||||
|
Loading…
Reference in New Issue
Block a user