Марк Сибли у себя в блоге сообщил о том, что начал работу над 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 по прежнему будет поддерживаться и дорабатываться.