Pull to refresh
54
0
Евгений Головин @evgeniyup

User

Send message
скорее ruby, {|a| .... } — это сахар для

function(a){ .... }


а _F внутри функции — это алиас на саму функцию.

Сокращенная запись функции может быть удобна в конструкциях вида:

obj.each {|a| print a}
os-fcgi пока только на порт цепляется, в будущем конфиг os-fcgi будет лежать тут /etc/os-fcgi/conf.os, конфиги fpm находится тут /etc/php5/fpm/, стандартный набор в активной разработке в данный момент
Обработка запросов уже есть (нужно подключить github.com/unitpoint/objectscript.org/blob/master/www/core.os), работа с файлами тоже есть, список ближайших задач в моем плане: сессии, mysql, регулярные выражения, curl. Какой функционал по вашему мнению следует реализовать в первую очередь?
В последнем обновлении добавлен сокращенный синтаксис для функций:

{|y z| y*z}

это полный аналог:

function(y, z){ return y*z }

Ок, спасибо за коменты и ваше мнение, каждый отзыв нашел свое место и отложился в моем сознании. В работу операторов сравнения будут внесены изменения в ближайшем обновлении.
Характеристики — универсальный язык программирования для задач, которые я описал чуть выше. Но практика др. скриптовых языков показывает, что операторы сравнения ведут себе везде по разному, хотя цели примерно одинаковые. Поэтому и возник вопрос, какое поведение самое удачное.

На данный момент я определился с тем, что если один из аргументов — это число, но наиболее правильно делать численное сравнение, т.е. преобразовывать др. аргумент в число.

Осталось решить два вопроса:

1. как преобразовывать в число null, варианты: 0 или NaN
2. как преобразовывать в число string с невалидными символами, варианты: 0 или NaN

P.S. напомню, математические операции с NaN всегда дают NaN на выходе, а любое сравнение с NaN всегда дает false
Здесь все просто. OS нацелен на решение следующих задач: скриптование игровой и программной логики, кросс платформенные приложения, веб и серверные технологии. Т.е. все то же что сейчас делают как минимум 3 разных языка: JS, PHP и Lua, но делать это с человеческим ООП и реально нужными программисту возможностями. Изначально язык решил сделать для себя для разработки игр под мобильники, чтобы использовать легкий JS но с ООП. Начал делать язык как раз после изучения Dart и Go (т.е. совсем новых и как бы «передовых» направлений) и осознания того, что это совсем не то, что реально нужно программисту. Сейчас OS из себя представляет мое видение того, как должен был бы выглядеть JS.
Я постоянно сталкиваюсь с программистами, которые если не в бешенстве от того, что в JS есть null & undefined, то по крайнем мере в большой растерянности и толком не понимают, когда использовать null, а когда undefined. В OS я решил избавится от такой неопределенности и оставить null, но все равно остается вопрос, какое поведение трактовать при сравнении с null, как конвертировать null в число. Примеры диаметрально разного подхода в этом направлении хорошо видны в PHP и JS.
Поставил еще галочку в пользу числового сравнения. А что с null не так, вам хотелось бы, что бы в JS null и undefined вели себя одинаково? или что, объясните вашу точку зрения подробнее
На боевых машинах это сплошь и рядом, самая распространенная ошибка в коде на PHP, с которой мне приходится сталкиваться в каждом практически проекте, это сравнение с null вида if($a != null) вместо if($a !== null).
в OS за false принимается null и false, все остальное true (тут поведение эквивалентно Lua и Ruby).
Ок, поставил галочку в пользу числового сравнения. В OS есть === и !==, но с ними все понятно я думаю.
PHP приводит к числу, если один из аргументов число, т.е. PHP и JS ведут себя одинаково, разница в том, как PHP и JS к числу приводят строки.
Проект только появился, еще даже нет релизной версии. Начал я его, чтобы удобно было писать игры для мобильников. Начинал чисто для себя, потом решил выложить в паблик, потом решил немного задокументировать. Сейчас есть видео с демками игрового движка, который я начал делать на OS. Как закончу на логической точке с документацией, продолжу игровой проект на OS.
Тот уровень оптимизации, на котором сейчас находится OS — это наносекунды, а это значит, что существенное влияние на производительность оказывает все: лишнее присваивание, лишний вызов функции и т.п. Сейчас уже даже код, которые делает компилятор для инлайновой (inline) функции не достаточен, именно по этой причине Lua сплошь и рядом напичкам дефайнами, а PHP реализует основной код VM в хидере (.h), а не в cpp. Основной код VM в OS исполняется в функции execute. Для достижения максимальной производительности нужно вывернуть все функции, вызываемые из execute, внутрь самой execute, вручную. Обычно при этом удается сделать дополнительные оптимизации. Как следствие этого — большое дублирование кода, либо заворачивание особо частого функционала в дефайны, как поступили в Lua.
На линуксе народ пробует. Некто aperezdc (из иностранного лагеря) закомитил обновление Unix-related fixes and basic interactive interpreter, т.е. в репозитории сейчас есть makefile и main.cpp с командным интерпретатором.
PHP один из прародителей языка OS, к тому же они имеют VM и исполняют байткод, могут быть нацелены на одни и те же задачи. Наивно было бы полагать, что за 2 месяца работы над OS (в промежутке между основной работой, семьей, пивом и т.п.) я один переплюну Lua с его 19 летней историей разработки и огромным комьюнити и 18 летней историй PHP. Тем не менее тест проведен.
Разумеется, node не имеет VM и не исполняет байткод, это JIT на движке V8 — одной из лучших разработок от google. Да и вообще компания google — одна из самых уважаемых компаний в моем личном рейтинге. Но на практике JS мало используют как встраиваемый язык, особенно на мобильных платформах. В основном все через PhoneGap и т.п., а там с производительностью JS все очень плохо. А вот OS на мобильнике показал себе очень хорошо.
С рейтингом было все предсказуемо, цель поста была в другом, она достигнута. С node сравнивать бессмысленно, т.к. это JIT.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity