1. 2 г. назад

    devolonter

    3 May 2015 Администратор

    Марк Сибли у себя в блоге сообщил о том, что начал работу над Monkey2. В новой версии языка планируется исправить большинство недочетов дизайна, а также добавить те особенности, о которых давно просили пользователи.

    Судя по заметке, проект будет некоммерческим, а средства на его развитие и поддержку будут собираться с помощью краудфандинга на Patreon . Также из заметки понятно, что Марк хочет избежать фрагментации, и в тоже время предоставить пользователям как можно больше возможностей. В связи с этим, первоначально Monkey2 будет транслироваться только в C++.

    Планируемые улучшения языка:

    Вложенные классы, функции и т.д.

    class List<T>
       class Node
          field succ:Node
          field pred:Node
          field data:T
       end
       field head:Node
    end
    
    function fun1:void()
       class C
       end
       function fun2:void( c:C )
       end
       local c:=new C
       func2( c )
    end

    Обобщенные функции с авто-выведением типа

    function Min<T>:T( x:T,y:T )
       if x<y return x else return y
    end
    
    function Main()
       print Min( 10,20 )
       print Min( "hello","there" )
    end

    Функции как Значение/Тип

    function NegateValue:float( value:float )
       return -value
    end
    
    function ProcessValue:float( value:float,process:float( value:float ) )
       return process( value )
    end
    
    function Main:void()
       print ProcessValue( 10.0,NegateValue )
    end

    Использование псевдонимов для именования делегатов

    alias ValueProcessor:float(value:float)
    
    function NegateValue:float( value:float )
       return -value
    end
    
    function ProcessValue:float( value:float,process:ValueProcessor )
       return process( value )
    end
    
    function Main:void()
       print ProcessValue( 10.0,NegateValue )
    end

    Запоминание контекста методов при передаче их как указателя

    class ValueScaler
       field scale:float
    
       method new( scale:float )
          self.scale=scale
       end
       
       method ScaleValue:float( value:float )
          return value*scale
       end
    end
    
    function ProcessValue:float( value:float,process:float( value:float ) )
       return process( value )
    end
    
    function Main:void()
       local scaler:=new ValueScaler( 3 )
       print ProcessValue( 10.0,scaler.ScaleValue )
    end

    Использование полей и свойств в качестве сигналов и слотов

    alias GizmoModifiedListener:void( Gizmo )
    
    class Gizmo
       field OnModified:GizmoModifiedListener  'signal
    
       method Modify:void()
          OnModified self
       end
    end
    
    function GizmoModified:void( gizmo:Gizmo )   'slot
       print "Gizmo modified!"
    end
    
    function Main:void()
       local gizmo:=new Gizmo
       gizmo.OnModified=GizmoModified
       gizmo.Modify
    end

    А также:

    • Улучшение механизма переопределения и перегрузки функций
    • Контекстно-зависимый Null
    • Улучшенная система сборки
    • Улучшения система импорта стороннего кода

    Сейчас на официальном сайте создан форум Monkey2 , на котором можно найти некоторую информацию, а также оставить свое мнение и внести свои предложения по новой версии языка.

    P.S. Первая версия Monkey по прежнему будет поддерживаться и дорабатываться.

или зарегистрируйтесь чтобы комментировать!