<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "https://jats.nlm.nih.gov/publishing/1.3/JATS-journalpublishing1-3.dtd">
<article article-type="research-article" dtd-version="1.3" xml:lang="ru">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Computing, Telecommunication and Control</journal-title>
        <trans-title-group xml:lang="ru">
          <trans-title>Информатика, телекоммуникации и управление</trans-title>
        </trans-title-group>
      </journal-title-group>
      <issn pub-type="epub">2687-0517</issn>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="publisher-id">4</article-id>
      <article-id pub-id-type="doi">10.18721/JCSTCS.16104</article-id>
      <title-group>
        <article-title>Flovver: A graphical functional language with a compiler focused on recursion optimization</article-title>
        <trans-title-group xml:lang="ru">
          <trans-title>Flovver: графический функциональный язык с ориентированным на оптимизацию рекурсии компилятором</trans-title>
        </trans-title-group>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <contrib-id contrib-id-type="orcid">0000-0002-8052-6832</contrib-id>
          <name>
            <surname>Zavyalov</surname>
            <given-names>Anton</given-names>
          </name>
          <xref ref-type="aff" rid="aff1"/>
          <email>a.zavyalov.98@yandex.ru</email>
        </contrib>
        <contrib contrib-type="author">
          <contrib-id contrib-id-type="orcid">0000-0001-5183-9736</contrib-id>
          <name>
            <surname>Staroletov</surname>
            <given-names>Sergey</given-names>
          </name>
          <xref ref-type="aff" rid="aff2"/>
          <email>serg_soft@mail.ru</email>
        </contrib>
      </contrib-group>
      <aff id="aff1">Novosibirsk State University</aff>
      <aff id="aff2">Polzunov Altai State Technical University</aff>
      <pub-date publication-format="electronic" date-type="pub" iso-8601-date="2023-03-31">
        <day>31</day>
        <month>03</month>
        <year>2023</year>
      </pub-date>
      <volume>16</volume>
      <issue>1</issue>
      <fpage>46</fpage>
      <lpage>59</lpage>
      <abstract xml:lang="en">
        <p>Visual languages reflect many parts of textual programming languages, however, the existing visual programming solutions lack higher-order functions and recursion concepts. The article introduces the design of a visual language Flovver, which implements the concepts of graphical functional programming. We propose a programming language that supports higher-order and recursive computations. The language accepts programs in a specially designed notation with semantics which we explain in this paper using the lambda calculus. The syntactic unit of such a program is a function that can be combined in a specific way with other functions. We present a fixpoint combinator that helps to specify a recursive behavior in the graphical functional language. To obtain calculate-effective programs, we design and implement a compiler for it, which is capable to optimize recursive programs. We also discuss code generation to JavaScript using the static single assignment (SSA) form. Finally, we propose a sketch of graphical integrated environment to design programs in Flovver using pre-defined blocks, and we present the generated SSA-like code in the paper. The approach is demonstrated on well-known Factorial and Fibonacci recursive programs.</p>
      </abstract>
      <kwd-group xml:lang="en">
        <kwd>programming language</kwd>
        <kwd>graphical language</kwd>
        <kwd>functional language</kwd>
        <kwd>optimizing compiler</kwd>
      </kwd-group>
    </article-meta>
  </front>
</article>
