Автор Тема: Monkey Language  (Прочитано 27261 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Monkey Language
« : Ноябрь 20, 2012, 01:40:38 am »
Внезапно обнаружился, на первый взгляд, весьма годный ЯП о котором я не знал: Monkey.
Статья про него на хабре: http://habrahabr.ru/post/159377/

Это модульный статически типизированный язык с симула-подобной объектной моделью (ну, то есть с моделью схожей с java/c++/c#/delphi). Внимание! Модуль и класс в этом языке не одно и то же!

Кроме того, в языке имеются пищевые добавки дженерики (чтобы иметь одновременно и статическую типизацию, и 100500 раз один и тот же контейнер для разных типов не писать). Сборщик мусора также в наличии. Обработка ошибок возможна через механизм исключений.

Дока по языку: http://blitz-wiki.appspot.com/Language_reference
Доки по стандартным модулям: http://blitz-wiki.appspot.com/Module_reference

Ну и самое, для меня, вкусное: оно компилируется под кучу платформ: и в js компилируется, и в java и в c++ и в c#, что открывает большие возможности для написания алгоритмов - один раз написал, используешь везде (алгоритм). А не как в жабах всяких, которые не кроссплатформенны нифига.

Язык и компилятор под лицензией public domain, так что свободней (и бесплатней) некуда.

Вообще, автором этот язык преподносится как штука для игроделов (у него и коммерческая версия с тонной игро-заточенных либ имеется). Но я вижу где я мог бы его применять вне игр :-) (у меня постепенно разрабатывается пачка алгоритмов, которые мне, волею судеб, приходится постоянно таскать между сервером/йфоном/браузером/десктопом(причем разными десктопами). И меня несколько достало постоянно переписывать с C/ObjC на Java, а затем на js. Руками. А тут еще и C# нарисовался. Тьху.)
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Monkey Language
« Ответ #1 : Ноябрь 20, 2012, 09:52:41 am »
Оказывается в вики есть статья по этому языку.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Monkey Language
« Ответ #2 : Ноябрь 20, 2012, 10:20:17 am »
ну давайте еще бейсик  рекламировать...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Monkey Language
« Ответ #3 : Ноябрь 20, 2012, 10:40:27 am »
ну давайте еще бейсик  рекламировать...
А если объективно? Какие проблемы у этого (Monkey) языка? Чем он собственно хуже того же Оберона?
« Последнее редактирование: Ноябрь 20, 2012, 10:42:18 am от valexey_u »
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Monkey Language
« Ответ #4 : Ноябрь 20, 2012, 10:48:41 am »
а вы посмотрите внимательно на  статью ( в ней кусок кода)  - мне лично после анализа его желание взглянуть на описание языка пропало....

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Monkey Language
« Ответ #5 : Ноябрь 20, 2012, 10:51:34 am »
а вы посмотрите внимательно на  статью ( в ней кусок кода)  - мне лично после анализа его желание взглянуть на описание языка пропало....
Дык я посмотрел. Ну синтаксис местами диковат и архаичен, но в общем он ничем особым от других подобных языков (та же жаба) не отличается. Также я не обнаружил там потенциально опасных мест.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Monkey Language
« Ответ #6 : Ноябрь 20, 2012, 10:55:41 am »
хорошо - можете полную форму оператора IF - установить, или  сказать нахрена любая функция  содержит return 0, или чем отличается  SetUpdateRate 60 от  SetUpdateRate (60)...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Monkey Language
« Ответ #7 : Ноябрь 20, 2012, 10:57:00 am »
Мне вот так любопытно всегда было... За что так нелюбим васик?  ;D ;D ;D
Меня например VBA выручал несколько раз. Вполне себе норм для своих задач.

DIzer

  • Гость
Re: Monkey Language
« Ответ #8 : Ноябрь 20, 2012, 10:59:01 am »
Мне вот так любопытно всегда было... За что так нелюбим васик?  ;D ;D ;D
Меня например VBA выручал несколько раз. Вполне себе норм для своих задач.
так надо же одним нормальным людям отличаться  от других... нормальных людей...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Monkey Language
« Ответ #9 : Ноябрь 20, 2012, 11:33:14 am »
Посмотрел Monkey language reference.
Да... немного измененный (имхо в худшую сторону) VBA у них получился.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Monkey Language
« Ответ #10 : Ноябрь 20, 2012, 11:47:14 am »
хорошо - можете полную форму оператора IF - установить

If Expression [ Then ]
     Statements...
ElseIf Expression [ Then ]
     Statements...
Else
     Statements...
EndIf

Цитировать
, или  сказать нахрена любая функция  содержит return 0,
Затем, что писавший этот пример - либо быдлокодер, либо пользовался старой версией языка. Для void-функций ничего возвращать не нужно. В этом плане лучше смотреть пример из википедии.

Цитировать
или чем отличается  SetUpdateRate 60 от  SetUpdateRate (60)...
Первое допустимо в non strict mode и используется когда вызов функции это чистый statement (эдакий сахарок, примерно то же, что и в Обероне когда не обязательно явное разименовывание указателя при обращении к полюзаписи), второе - универсально и работает везде.

Strict

Function Main:Int()                     'in Strict mode, the :Int type definition is compulsory
   Print( "Strict mode is...strict!" )  'in Strict mode, all function calls require brackets.
   Return 0                             'in strict mode, we MUST return a value.
End

Собственно я этот язык в режиме non strict и не рассматривал вообще.

Да, и у меня ощущение, что автор постепенно допиливает strict mode, приближает его к человеческим языкам (поэтому примеры и в вики устаревшие).
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Monkey Language
« Ответ #11 : Ноябрь 20, 2012, 11:49:07 am »
Посмотрел Monkey language reference.
Да... немного измененный (имхо в худшую сторону) VBA у них получился.
А в каком месте оно на VBA похож? Динамической типизации нет (в Monkey), тихо-умолчательных объявлений переменных тоже нет. Зато есть статическая типизация и дженерики.

Ну а главное - это самый кроссплатформенный язык. Сравниться с ним в этом плане пожалуй не может никто. :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Monkey Language
« Ответ #12 : Ноябрь 20, 2012, 11:56:48 am »
......
Я же говорю  говно... мультиплатформенное...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Monkey Language
« Ответ #13 : Ноябрь 20, 2012, 11:59:20 am »
Проверил.

Function Foo:Void()
Return 0
End

Радостно ругается:
Error : Void functions may not return a value.

Так что, требую разъяснений, в каком именно место оно говно в случае strict mode :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Monkey Language
« Ответ #14 : Ноябрь 20, 2012, 12:03:43 pm »
Проверил.

Function Foo:Void()
Return 0
End

Радостно ругается:
Error : Void functions may not return a value.

Так что, требую разъяснений, в каком именно место оно говно в случае strict mode :-)
как от нефиг делать - в викишной статье  он тоже включен (strict)-  однако, что там написано... и endif -нет