Clif(1)

πŸ“¦ version 0.93, in ubuntu jammy

πŸ’– Clif(1) β€” the C-like Interpreter Framework, bestie edition πŸ’–

okay so. this is the manual page for Clif, and it lives in section 1 of the GNU Tools manual. she's giving compiler, she's giving interpreter, she's giving both actually, and we're gonna walk through the whole thing together. no skimming, no skipping, we're doing this properly 🫢


✨ NAME ✨

clif β€” C-like Interpreter Framework (v0.92)


✨ SYNOPSIS ✨

clif [ option | filename ]...

⚠️ WARNING ⚠️

bestie. listen. the tea in this manual page can be incomplete. for the full lore, go read The Interpreter Clif Programmer's Guide. that's the real one. this is the trailer. 🎬

🌸 DESCRIPTION 🌸

Clif β€” the C-like Interpreter Framework β€” is an open-ended system for fast development of programs that use C syntax. the whole vibe is: your program gets compiled, and if it's syntactically correct, code is generated immediately. and that code? generated for a virtual machine. and guess what β€” the virtual machine is part of the framework too. it's all in-house, it's all self-contained, it's giving ✨vertical integration✨.

so Clif works in two basic modes: as an interpreter and/or as a compiler (that's the -fhandle-main option's whole thing, more on her later). the interpreter mode is the default, periodt.

in interpreter mode, Clif compiles each function and each loop only once, and then the generated code just gets executed over and over. lowkey an optimization moment β€” the source code is not being parsed over and over again. she learned it once and she remembers it. main character energy fr fr πŸ‘‘

the compiler mode kicks in when you specify the -fhandle-main option. the files get compiled and code gets generated. once the compilation phase is done, Clif goes looking for the main function and starts executing it. that's the whole arc.

Clif ships with a subset of the standard C library. that subset is still under development β€” she's growing, she's evolving. the intrinsic functions can be easily enhanced for your own purposes, so if you need more, you can absolutely build her out. slay.

there are also interface functions supporting automatic control and data acquisition, and those can be optionally compiled with Clif. so that's a thing you can opt into. πŸ’…

now the honest part, because we don't lie to each other:

  • Clif does not recognize the bit-field definition syntax of the C language.
  • the C preprocessor is not implemented yet. (rip to #include girlies, we'll get there)

and there could be discrepancies between Clif and the ANSI C Standard. they're working on unifying the semantics of Clif with the ANSI C Standard. so like, she's on her journey. 🧚


πŸŽ€ OPTIONS πŸŽ€

for each command line, you can specify one or more filenames (usually with a .ci suffix). the files are parsed in the order of specification on the command line β€” order matters, bestie, don't be chaotic about it.

the file clif.ini is implicitly opened. it's an initialization file. options that you use invariably get specified in that file, so you don't have to retype them every single time.

some of the -fname options have a -fno-name form. and every default value is always mentioned in the option description β€” so if you ever wonder "wait what's the default", it's right there, we got you. πŸ’–

a summary of the options follows. the full explanations are in the next sections. here's the table of contents energy:

Overall Options

  • -bc
  • -c
  • -copying
  • -help
  • -v
  • -version
  • -verbose
  • -warranty

Options Controlling Clif behavior

  • -fcall-by-reference
  • -fno-call-by-reference
  • -fcall-by-value
  • -fno-call-by-value
  • -fhandle-main

Debugging Options

  • -g
  • -dy

Warning Options

  • -w
  • -Wcomment
  • -Wformat
  • -Wimplicit
  • -Wreturn-type
  • -Wtrigraphs
  • -Wuninitialized
  • -Wall
  • -W
  • -Waggregate-return
  • -Wunused

πŸ’« OVERALL OPTIONS πŸ’«

  • -bc β€” this option specifies the number of 512-Byte pages for the Clif environment's main memory. and heads up: the arithmetical and temporary stack is a multiple of this option as well. so it's not just the main memory, bestie, it's the whole memory vibe. 🧠
  • -c β€” Compile only. and ngl, she's not fully supported yet. so like, she's here, she's on the list, but manage your expectations okay? πŸ™ˆ
  • -copying β€” Show copying.
  • -help β€” Show short help. the little "hey here's the gist" moment. πŸŽ€
  • -v, -version β€” Show version.
  • -verbose β€” Prints the general purpose of Clif and the authors. it's like the "about me" slide but for a program. πŸ’…
  • -warranty β€” Show warranty.

🌈 OPTIONS CONTROLLING CLIF BEHAVIOR 🌈

this whole section is about parameter passing mechanisms, and the rules here are lowkey strict so pay attention:

  • -fcall-by-reference β€” Specifies the parameter passing mechanism, and this is the default. ⭐ but here's the catch: if you explicitly specify it, you must also specify -fno-call-by-value. they come as a pair, they're matching friendship bracelets, don't separate them. 🫢
  • -fno-call-by-reference β€” do not pass parameters by reference. if you explicitly specify it, you must also specify -fcall-by-value. same deal, same pairing rule.
  • -fcall-by-value β€” call by value parameter passing mechanism. if you explicitly specify it, you must also specify -fno-call-by-reference. see the pattern? it's giving ✨mutual exclusivity✨.
  • -fno-call-by-value β€” do not pass parameters by value, and yes, this is the default. if you explicitly specify it, you must also specify -fcall-by-reference. again with the pairing. i told you, they're a set.
  • -fhandle-main β€” this is the one that makes Clif simulate compiler-like behavior. the files on the command line and the included files get compiled. and then β€” important β€” the main function must be defined. if it's not, that's a whole problem. after the parsing pass, the generated code is executed, and the main function is the beginning of execution. she starts at main, like a normal C program, iconic behavior honestly πŸ‘‘

πŸ¦‹ DEBUGGING OPTIONS πŸ¦‹

  • -g β€” produce debugging information. the source lines are output during virtual machine code execution. so you can see where you are in your code while the VM is doing its thing. very "show me the receipts" of her.
  • -dy β€” dump debugging information during parsing, and it goes to standard error. so it's dumping while she's still reading, not while she's running. different moment, different tea. πŸ“

πŸ”₯ WARNING OPTIONS πŸ”₯

  • -w β€” Inhibit all warning messages. like, all of them. every single one. she will not be telling you anything. (bold choice, bestie, but do you.) πŸ’€
  • -Wcomment β€” Warn when a comment-start sequence /* appears in a comment. yes. inside a comment. because that's how you end up with chaos.
  • -Wformat β€” Check calls to printf, scanf, etc., to make sure that the arguments supplied have types appropriate to the specified format string. this one is genuinely so helpful, she's doing the type-checking so you don't have to find out at runtime. 😭
  • -Wimplicit β€” Warn if a function or parameter is implicitly declared. (the "you never told me what this is, so i'm guessing" warning.)
  • -Wreturn-type β€” Warn if the return statement is without a return value in a non-void function, or with a value in a void function. so both directions of wrong get flagged. equal opportunity warning. πŸ’…
  • -Wtrigraphs β€” Warn about trigraphs usage.
  • -Wuninitialized β€” An automatic variable is used without first being initialized. this is the "girl where did that value even come from" warning and honestly she's right to be suspicious. πŸ™ˆ
  • -Wall β€” All of the above warnings. every warning in this list, all together, the whole squad. ✨
  • -W β€” Print extra warning messages. extra. more than the above. yes she's greedy, she wants you to know everything. πŸ‘‘
  • -Waggregate-return β€” Warn if any functions that return structures or unions are defined or called.
  • -Wunused β€” Warn whenever a variable is unused aside from its declaration. (she sees your unused variable and she is going to say something.)

πŸ“ FILES πŸ“

  • file.ci β€” Clif source file
  • clif.ini β€” Initialization file

πŸ‘€ SEE ALSO πŸ‘€

cc(1), gcc(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).

also: The Interpreter Clif. Programmer's Guide., by L. Koren and T. Hruz. πŸ“–


πŸ’€ BUGS πŸ’€

There are many, for sure. (she said it, not me. 😭) but please β€” help make this software better and report them to Ludovit Koren <koren@vm.stuba.sk>. for instructions on reporting bugs, see the Interpreter Clif Programmer's Guide.

bestie if you find a bug, tell her. don't just sit there. she wants to know. it's giving community. 🫢

πŸ‘‘ COPYING πŸ‘‘

Copyright 1998, 1999, 2000 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English.


πŸ’œ AUTHORS πŸ’œ

See the Interpreter Clif Programmer's Guide for the contributors to Clif.


and that's the whole page, bestie!! πŸŽ€

sending you off with the official sign-off: this manual page is part of the GNU Tools collection, dated 2000/04/09. so like, she's been iconic since Y2K. mwah. πŸ’‹βœ¨

go compile something cute. πŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from
  • ubuntu jammy: clif 0.93-9.1build2
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms