рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реАред рдкрд╛рд░реНрд╕рд░

рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдХрд░рдг рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕рдорд░реНрдерди / рдмрджрд▓рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реБрдП рдЕрдзрд┐рдХрддрдо рдЙрдкрдХрд░рдг рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдореЙрдбрд▓ рдФрд░ рддрдХрдиреАрдХ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдкрд╛рд░реНрд╕рд░ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд╛рдардХ рдЯреЗрд░реЗрдВрд╕ рдкрд░реНрд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рдореИрдиреБрдЕрд▓ рдХреЛ рдкрдврд╝реЗред

рдкреВрд░реНрдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ANTLR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


ANTLR рд▓рдЧрднрдЧ 1 kb рдФрд░ 10 kb рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рдХрд╛рдо рднреА рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рдЖрдкрдХреЛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд░рдЦрдиреЗ рдХреА рдореБрдЦреНрдп рд╡рдЬрд╣ рдпрд╣ рд╣реИ рдХрд┐ ANTLR рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЛ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдЫреЛрд░реЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдирд┐рдпрдо рд╕реНрд╡рдпрдВ рдХрдИ рдЕрдиреНрдп рдирд┐рдпрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдпрдг рдХреА рд╕реНрдерд┐рддрд┐, рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

var f = fun a(b) { b = 10; return b; }

рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

start: stmt* EOF;
stmt: varDecl | funDecl | expr ';' | 'return' expr ';';
varDecl: 'var' id '=' expr;
expr: id ('=' expr)? | number;
funDecl: 'fun' id '(' id* ')' '{' stmt* '}'

рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ stmt рдХреЛ funDecl рдирд┐рдпрдо рдХреЗ рдЕрдВрджрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд▓реВрдк рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП 4 GB RAM рд╣реАрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП 100 kb рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА, рдЬреЛ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрдерд┐рддрд┐ рд╣реИред ред

рдЗрд╕ рдЦрд╛рдореА рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЯреЛрдХрди рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, {to block in a рдЯреЛрдХрди, рдЗрди рдкрд╛рд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдмрд╛рдж рдореЗрдВ рдПрдХ рдирдП рдкрд╛рд░реНрд╕рд░ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдЯреВрдЯреЗ рд╣реБрдП рдЯреЛрдХрди рдХреЛ рдЗрдирдкреБрдЯ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ANTLR рдореЗрдВ рдЖрдк lexer рдХреЗ org.antlr.v4.runtime.Lexer # nextToken рддрд░реАрдХреЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЖрдк рдХрдирд╡рд▓реНрд╢рди рдлрдВрдХреНрд╢рдирд▓рд┐рдЯреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  override def nextToken(): Token = super.nextToken() match {
      case x: RScanToken if x.getType == foldOpen => buildFoldToken(x)
      case x: Token => x
  }

  def buildFoldToken(start: RScanToken): RScanToken = {
    val (token, list) = createFoldBlockBody(
      mutable.MutableList[RScanToken]()
        ++ List(start.asInstanceOf[RScanToken])
    )
    val result = new RScanToken(path, _tokenFactorySourcePair, foldBlock, Lexer.DEFAULT_TOKEN_CHANNEL, start.getStartIndex, token.getStopIndex)
    result.setLine(start.getLine)
    result.setCharPositionInLine(start.getCharPositionInLine)
    result.setFoldedTokens(list)
    result
  }

  private def createFoldBlockBody(list: mutable.MutableList[RScanToken]): (RScanToken, mutable.MutableList[RScanToken]) = {
    var current: RScanToken = null
    while (current == null || current.getType != Token.EOF && current.getType != foldClose) {
      current = nextToken().asInstanceOf[RScanToken]
      list += current
    }
    if (current.getType == Token.EOF)
      throw new IllegalStateException()
    (current, list)
  }

рд╡реНрдпрд╛рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

startJavaScript 
    :   HashBangLine? jsFileBody? EOF
    ;

startFoldBlock
   :   block EOF
   ;

block
    :   LBRACE stmtList? RBRACE
    |   FoldBlock 
//     ,
//     startFoldBlock
    ;

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╕рдЬрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЯреЛрдХрди рдХреЛ рдЕрд╡рд╢реЛрд╖рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдПрдЧрд╛ред

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ 2 рд╕реЗ 10 рдЧреБрдирд╛ рддрдХ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдЕрдВрддрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ minified js рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЕрдиреБрдХреВрд▓рди рдХреЗ ANTLR рдСрдкрд░реЗрд╢рди рдкрд░ рдкреНрд░рднрд╛рд╡:
рдлрд╝рд╛рдЗрд▓рдЖрдХрд╛рд░ kbрдЕрдиреБрдХреВрд▓рди рд╕реЗ рдкрд╣рд▓реЗ, рдПрдо.рдПрд╕.рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рдж, рдПрдордПрд╕
рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд▓реЛрдб metadata.js1018391372
рдкреБрдирд░реНрд▓реЗрдЦрди-рд▓рд┐рд╡-references.js8899528
dom.umd.min.js13043,8526607
react.pure.umd.min.js13951,6686495
tsserver.js8151362,857117,787

рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛, рдХрд╛рдо рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИред

рд▓реЙрдиреНрдЪ рдХреЛ 64 рдЬреАрдмреА рд░реИрдо, Intel┬о Core (TM) i7-9700K CPU @ 3.60GHz, OpenJDK рд░рдирдЯрд╛рдЗрдо рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ AdoptOpenJDK (рдмрд┐рд▓реНрдб 11.0.4 + 11) рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

JVM рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреБрдВрдЬрд┐рдпрд╛рдБ: -Xmx4G -XX: + UseG1GC -XX: MaxHeapFreeRatio = 30 -XX: MinHeapFreeRatio = 10
tsserver.js рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА -Xmx32G рд╣реИ, рдЬрдмрдХрд┐ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд 22 GB рддрдХ рдкрд╣реБрдБрдЪ рдЧрдИ рд╣реИ! рдЬрдмрдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде 200 kb рддрдХ рдХреА рдорд┐рдиреАрдлрд╛рдЗрдб рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреВрдбрд╝реЗ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рднрд╛рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо 2% рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЛрдб рдореЗрдВ 128 mb рдХреА рдвреЗрд░ рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ!

рд░реВрдкрд░реЗрдЦрд╛


ANTLR рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкрд╛рд░реНрд╕рд░ / рд▓реЗрд╕рд░ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: org.antlr.v4.runtime.Parser # setProfile рдХрд┐рд╕реА рднреА рдирд┐рдпрдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдлрд┐рд░ рдЖрдк рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд╕реЗ:

    private def printProfileInfo(parser: AbstractRScanParser, tokenStream: TokenStream): Unit = {
      // do the actual parsing
      val parseInfo = parser.getParseInfo
      val atn = parser.getATN
      for (di <- parseInfo.getDecisionInfo if di.ambiguities.size() > 0) {
        val ds = atn.decisionToState.get(di.decision)
        val ruleName = parser.ruleName(ds.ruleIndex)
        log.debug("Ambiguity in rule '" + ruleName + "' -> {}", di)
        log.debug("=========================")
        log.debug(tokenStream.getText)
        log.debug("=========================")
      }
    }

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд▓рд╕ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрдореА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓реНрдкреЛрдВ рдХреЛ {} рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рд╕реНрдерд╛рдиреАрдп рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рддреЗрдЬ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рд▓реЗрдЦ ANTLR рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдФрдкрдЪрд╛рд░рд┐рдХ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдХрд╛рдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЕрдиреБрдХреВрд▓рди рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдирдкреБрдЯ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рд╕рдВрдХреНрд░рдордг рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдореА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП 512 рдПрдордмреА рдХреА рдореЗрдореЛрд░реА рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ (1 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ) рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреБрдХреВрд▓рди рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП 50 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕реНрд░реЛрдд рдХреЛрдб рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдиреБрдХреВрд▓рди рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрд╛рдХрд░рдг рдкрд░реАрдХреНрд╖рдХ рд╡рд░реНрдЧ рдореЗрдВ рдЕрдзреНрдпрдпрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдиреНрдЪ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрде рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Rscan.tester.cache.dir рдХреБрдВрдЬреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд▓рд┐рдЦреА рдЬрд╛рдПрдВрдЧреА, рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдлрд▓ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдкрд╛рд░реНрд╕рд░ рдХреЛ рджреВрд╕рд░реА рдмрд╛рд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ - рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдХреЛрд░ рд░рд┐рдПрдХреНрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рд╕реЗ 17 рд╣рдЬрд╛рд░ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЗрд╡рд▓ рдиреЗрд╕реНрдЯреЗрдб рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рдЗрд╖реНрдЯрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдФрд░ рдЖрд░ (рдкреНрд░рддрд┐рдмрд┐рдВрдм) рдореЙрдбрд▓ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдиреНрдпреВрдирддрдо рд╕реНрдореГрддрд┐ рдЦрдкрдд рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрдЯрд┐рд▓рддрд╛ рдУ (1) рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдФрд░ рдХреНрд░рдордмрджреНрдз рд░реВрдк рдореЗрдВ рдбрд┐рд╕реНрдХ рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ, рд╕рд╛рде рд╣реА рдЯреВрд▓ рдХреЗ рдпреВрдирд┐рдЯ-рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдкрд╛рд░реНрдЯреНрд╕ред

Source: https://habr.com/ru/post/undefined/


All Articles