123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- =encoding utf8
- =head1 NAME
- Sidef - The Sidef programming language.
- =head1 DESCRIPTION
- Sidef is a modern, high-level, general-purpose programming language, inspired by Ruby, Raku and Go.
- ** ** **** * ********* *********
- * * ** * * **** ** ** ** ** ** ** **
- ** ** **** *** ********* * * *
- ** ** ** **** * * ****** ******
- * * * * * * * * * **** ** ** ** ** ** **
- ** ** ** **** ****** ****** * *
- ** ** **** * * * ********* ***
- * * ** * * **** ** ** ** ** ** ** **
- ** ** **** ********* ********* *
- The main features of Sidef include:
- =over 2
- =item * object-oriented programming
- =item * functional programming
- =item * functional pattern matching
- =item * optional lazy evaluation
- =item * multiple dispatch
- =item * lexical scoping
- =item * lexical closures
- =item * keyword arguments
- =item * regular expressions
- =item * support for using Perl modules
- =item * optional dynamic type checking
- =item * big integers, rationals, floats and complex numbers
- =back
- =head1 SYNOPSIS
- use Sidef;
- my $sidef = Sidef->new(
- name => 'test', # name of the program
- opt => {}, # command-line options
- parser_opt => {}, # parser options
- );
- # Sidef code
- my $code = 'say "1 + 2 = #{1 + 2}"';
- # Execute the code
- $sidef->execute_code($code);
- # Compile the code to Perl
- my $perl = $sidef->compile_code($code, 'Perl');
- # Parse the Sidef code into an AST
- my $ast = $sidef->parse_code($code);
- # Optimize the AST by performing constant-folding
- my $oast = $sidef->optimize_ast($ast);
- # Compile the AST back into Sidef code
- print $sidef->compile_ast($oast, 'Sidef');
- =head1 SUBROUTINES/METHODS
- =head2 new
- my $s = Sidef->new(name => '...');
- Creates a new Sidef object and returns it.
- =head2 parse_code
- my $ast = $s->parse_code($code);
- Parses a given Sidef code and returns the AST.
- =head2 optimize_ast
- my $oast = $s->optimize_ast($ast);
- Performs constant-folding and some other optimizations on a given AST.
- Returns a new optimized AST.
- =head2 compile_ast
- my $ccode = $s->compile_ast($ast, $backend);
- Compiles the AST into code and returns it.
- Valid values for the backend are: C<'Sidef'>, C<'Perl'>.
- =head2 compile_code
- my $ccode = $s->compile_code($code, $backend)
- Parses and compiles the given Sidef code into target code and
- returns it.
- Valid values for the backend are: C<'Sidef'>, C<'Perl'>.
- =head2 execute_code
- my $result = $s->execute_code($code);
- Parses, compiles and executes a given Sidef code and returns
- the result of the last statement.
- =head2 version
- Sidef->version
- Returns the version of Sidef as a String object.
- =head2 numeric_version
- Sidef->numeric_version
- Returns the version of Sidef as a Number object.
- =head1 WWW
- You can find more info about Sidef, by clicking on the following links:
- =over 2
- =item * GitHub: L<https://github.com/trizen/sidef>
- =item * Gitbook: L<https://trizen.gitbook.io/sidef-lang/>
- =item * Tutorial: L<https://notabug.org/trizen/sidef/wiki>
- =item * RosettaCode: L<https://rosettacode.org/wiki/Sidef>
- =back
- =head1 QUESTIONS & ANSWERS
- Need help with Sidef? Feel free to ask questions here: L<https://github.com/trizen/sidef/discussions/categories/q-a>
- =head1 LICENSE AND COPYRIGHT
- Copyright (C) 2013-2024 Daniel Șuteu, Ioana Fălcușan
- This program is free software; you can redistribute it and/or modify it
- under the terms of the B<Artistic License (2.0)>. You may obtain a copy
- of the full license at:
- L<https://www.perlfoundation.org/artistic-license-20.html>
- Any use, modification, and distribution of the Standard or Modified
- Versions is governed by this Artistic License. By using, modifying or
- distributing the Package, you accept this license. Do not use, modify,
- or distribute the Package, if you do not accept this license.
- If your Modified Version has been derived from a Modified Version made
- by someone other than you, you are nevertheless required to ensure that
- your Modified Version complies with the requirements of this license.
- This license does not grant you the right to use any trademark, service
- mark, tradename, or logo of the Copyright Holder.
- This license includes the non-exclusive, worldwide, free-of-charge
- patent license to make, have made, use, offer to sell, sell, import and
- otherwise transfer the Package with respect to any patent claims
- licensable by the Copyright Holder that are necessarily infringed by the
- Package. If you institute patent litigation (including a cross-claim or
- counterclaim) against any party alleging that the Package constitutes
- direct or contributory patent infringement, then this Artistic License
- to you shall terminate on the date that such litigation is filed.
- Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER
- AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
- THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY
- YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR
- CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR
- CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- =cut
|