Копался во внутренностях гема rubocop (статический анализатор) и открыл для себя такой интересный гем как astrolabe
который рубокоп юзает для синтаксического разбора ruby кода.
Он переводит код ruby в абстрактное синтаксическое дерево.
Например такой код на руби
puts 'test'
arr = %w(1 2 3)
(begin
  (send nil :puts
    (str "test"))
  (lvasgn :arr
    (array
      (str "1")
      (str "2")
      (str "3"))))
А вот такой
module Test3
end
class Test1
end
class Test2 < Test1
  include Test3
  def qwer
    puts 'test'
    arr = %w(1 2 3)
  end
  private
    def qwer2(test, test1:, test2:)
      @arr = (1..10).map(&:to_f)
    end
    def qwer3(**)
    end
end
  (begin
  (module
    (const nil :Test3) nil)
  (class
    (const nil :Test1) nil nil)
  (class
    (const nil :Test2)
    (const nil :Test1)
    (begin
      (send nil :include
        (const nil :Test3))
      (def :qwer
        (args)
        (begin
          (send nil :puts
            (str "test"))
          (lvasgn :arr
            (array
              (str "1")
              (str "2")
              (str "3")))))
      (send nil :private)
      (def :qwer2
        (args
          (arg :test)
          (kwarg :test1)
          (kwarg :test2))
        (ivasgn :@arr
          (send
            (begin
              (irange
                (int 1)
                (int 10))) :map
            (block-pass
              (sym :to_f)))))
      (def :qwer3
        (args
          (kwrestarg)) nil)))),
Вопросы:
1) Какого хрена в моем уютном руби делает лисп?
2) Лисп так хорошо подходит для использования в качестве абстрактного синтаксического дерева?
3) Лиспофанатики кричащие о том что лисп это основа основ и нет ЯП кроме лиспа не так уж и далеки от правды?
4) Если лисп умер почему я встречаю его в самых неожиданных местах?
5) Как мне это развидеть? Мир уже никогда не будет прежним?











