Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования
Перезагрузить страницу Ребят, презентация нового языка программирования ObjectScript
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
unitpoint unitpoint вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.09.2012
Thumbs up Ребят, презентация нового языка программирования ObjectScript - 26.09.2012, 00:22

Сколько же существует всяких языков программирования, еще один? Ну можно и так сказать, а можно сказать и по другому: я программист и пишу программы на разных языках программирования для разных задач. В одних языках есть одни плюсы, в других - другие. Вот я и решил предложить свой универсальный язык программирования для множества задач.

ObjectScript - новый объектно-ориентированный язык программирования с открытым исходным кодом. Сами исходники занимают 459 Кб (парсер, компилятор и виртуальная машина) и находятся в двух файлах source\objectscript.h и source\objectscript.cpp. Скачать их можно тут github.com/unitpoint/objectscript/zipball/master ObjectScript - очень легкий, предназначен для вставки в приложение на C++.

ObjectScript сочетает в себе возможности таких языков, как JavaScript, Lua и PHP. Например, синтаксис в основном взят из JavaScript, множественное присваивание - из Lua, работа со свойствами через перегружаемые методы - из PHP.

Кроме унификации нескольких существующих языков программирования, ObjectScript добавляет также и свои уникальные и полезные фишки.

Далее по тексту я буду показывать код языка ObjectScript в теге для JavaScript, т.к. тега ObjectScript пока несуществует.

Синтаксис

JS Код:
x = 12;
    y = "Hello World!";
А что если убрать точки с запятыми?

JS Код:
x = 12
    y = "Hello World!"
ObjectScript автоматически разпознает отдельные выражения (новая строка тут не причем, все можно писать и в одну строчку), поэтому точку с запятой (;) можно не использовать без явной на то необходимости.

Вызовы функций

Привычный синтаксис, который используется в большинстве языках программирования:

JS Код:
print(5, " differences")
А зачем там собственно запятая?

JS Код:
print(5 " differences")
Запятые в ObjectScript при перечислении параметров не обязательны. Например, есть в языке такая функции concat, которая соединяет все аргументы в одну строку, тогда игнорируя запятые можно записать вот так:

JS Код:
var s = concat("name: "name", count: "count", time: "time)
Красиво и понятно! name, count и time - некоторые переменные. Соединение строк конечно же не обязательно делать через эту функция, есть специальный оператор .. (две точки) для конкатенации, но иногда функция concat может быть удобнее, да и быстрее при обработке нескольких параметров.

Иногда в функцию передается только один параметр, например:
JS Код:
print({firstname:"Ivan", lastname:"Petrov"})
В фигурных скобках задан объект в привычном для JavaScript синтаксисе. Такой синтаксис полностью поддерживается в ObjectScript, но подобный вызов выглядит НЕ очень красиво. А что если убрать круглые скобки?

JS Код:
print {firstname:"Ivan", lastname:"Petrov"}
Уже симпатичнее?! Эта возможность взята из Lua. Так можно вызывать любые функции и не только с объектом в качестве параметра, например:

JS Код:
print "Hello World!"
Довольно таки просто и читабильно!

Объекты

Но вернемся к предыдущему примеру. А зачем там собственно запятая в описании объекта? А если без нее?

JS Код:
print {firstname:"Ivan" lastname:"Petrov"}
Довольно неплохо, ничего лишнего, а еще можно так:

JS Код:
print {firstname="Ivan" lastname="Petrov"}
Т.е. при формировании пар в объекте (индекс и значение) можно использовать как двоеточие, так и знак равно. Кроме этого, допускается отделение пар запятыми, точкой с запяток (;) или не использовать разделитель вовсе. Следует также отметить, что использование разделяющих символов после конечного значения допускается, например, следующее выращение полностью допустимо в ObjectScript:

JS Код:
a = {x=1, y=3; "zero" "one", "two" last:7,}
Что полностью эквивалентно привычной в JavaScript-е записи:
JS Код:
a = {x:1, y:3, 0:"zero", 1:"one", 2:"two", last:7}
В данном примере используются не только ассоциативные значения, но и порядковые с автоматическим индексом, как в масиве. Индекс начинается с нуля. Например:

JS Код:
print a[1]
выведет one. А что если необходимо в качестве индекса значения использовать выражение, а не константу, легко:

JS Код:
a = {[2+3]="five" y=3}
Т.е. выражение в квадратных скобках будет вычислено на этапе выполнения программы и результат будет использован в качестве индекса соответствующего значения в объекте. Иначе говоря:

JS Код:
print a[5]
Выведет five

Порядок значений в объекте сохраняется таким, в каком порядке значения были добавлены в объект (это бывает важно в итерационных процессах, о которых мы поговорим позже).

Еще одной важной особенностью является то, что в качестве индекса значения может выступать значение любого типа, например:

JS Код:
a = {x=1 y=2}
    b = {[a]="powerful" 7="greate"}
    print b[a]
Выведет powerful, причем это никак не уменьшает скорость доступа к данным объекта и не увеличивает потребление памяти. Иначе говоря, если есть потребность, можно использовать смело.

Масивы

Масивы - это индексные списки. Как и в JavaScript масив можно записать следующим образом:

JS Код:
a = [10, 20, 30, 40]
Ну в целом все понятно и нормально, единственное, что можно тут упростить - убрать запятые:

JS Код:
a = [10 20 30 40]
Выглядит даже интересно и полностью валидно для ObjectScript.

Множественное присваивание

ObjectScript полностью поддерживает множественное присваивание и выглядит это следующим образом:

JS Код:
i, j, k = 0, 1, 3
Переменной i присвоится значение 0, j присвоится 1, k - 3. Интересным следствием множественного присваивания является возможность смены значений в переменых одной строкой:

JS Код:
i, j = j, i
Довольно просто и красиво. С помощью множественного присваивания можно одной строкой инициализировать сразу несколько переменных, менять в переменых значения, а также получать множественные результаты вызываемых функций, например:

JS Код:
var test = function(){ return 1, 2 }
    var a, b = test()
Функция test возвращает два значения, в переменную a сохранится 1, а в b - 2. Если затребовать из функции больше значений, чем она возвращает, то количество результатов дополнится пустыми значениями - null

JS Код:
var a, b, c = test()
    print(a, b, c)
Выведет: 1 2 null

Объектно-ориентированное программирование (ООП) в ObjectScript

Как можно было бы понять из названия языка, он просто обязан быть объектно ориентированным и поддерживает ООП во всей своей красе.

Опишем класс следующим образом ([at] - это символ в адресе почты, тут на форуме не проходит сообщение с этим символом):

JS Код:
Person = {
        __construct = function(firstname, lastname){
            this.firstname = firstname
            this.lastname = lastname
        }
        __get[at]fullname = function(){
            return this.firstname .. " " .. this.lastname
        }
        walk = function(){
            print this.fullname .. " is walking!"
        }
    }
Теперь создадим экземпляр данного класса:

JS Код:
var p = Person("James", "Bond")
Фактически Person - это обычный объект, когда объект вызывается, как функция, ObjectScript автоматически создает новый экземпляр данного объекта и инициализирует его методом __construct. Выше приведенный код будет реально выполнен следующим образом:

JS Код:
var p = {}
    p.prototype = Person
    p.__construct("James", "Bond")
Если затем выполнить:

JS Код:
p.walk()
    print p
то выведется:

JS Код:
James Bond is walking!
{"firstname":"James","lastname":"Bond"}
Из новых фишек следует выделить метод __get[at]fullname, который неявно вызывается из метода walk:

JS Код:
__get[at]fullname = function(){
        return this.firstname .. " " .. this.lastname
    }
    walk = function(){
        print this.fullname .. " is walking!"
    }
Метод __get[at]fullname возвращает значение свойства fullname. Могут быть также специальные методы для установки свойств, но об этом позже в разделе Свойства, getter-ы и setter-ы.

Из интересного тут нужно отметить, что метод __get[at]fullname содержит символ [at], который в ObjectScript является полностью валидным для любых имен методов и переменных, на ряду с символом $ и остальными стандартными символами.

Наследование

Теперь самое время унаследоваться от Person.
JS Код:
var IvanPerson = extends Person {
        __construct = function(){
            super("Ivan", "Petrov")
        }
    }
    var p = IvanPerson() // создадим экземпляр класса IvanPerson
    p.walk()
    print p
Выведется:

JS Код:
Ivan Petrov is walking!
{"firstname":"Ivan","lastname":"Petrov"}
Тут важно отметить:
JS Код:
super("Ivan", "Petrov")
super вызывает метод родительского класса (прототипа) с именем метода, из которого он был вызван, в данном случае - это __construct, который и инициализирует экземпляр объекта.

P.S. тут наступил предел в размере сообщения, некоторые видео:

youtube.com/watch?v=OCWIfQYW9rc
youtube.com/watch?v=P5KPJOVSs3E
youtube.com/watch?v=htDqDNqHX-I
youtube.com/watch?v=wqiDeuf7yu8
youtube.com/watch?v=uep2SvXdCNU

в описании к видео указаны ссылки c исходниками.

Продолжение следует...
Ответить с цитированием
  (#2 (permalink)) Старый
unitpoint unitpoint вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.09.2012
По умолчанию 02.12.2014, 04:11

Всем привет, давно не сообщал новости.

ObjectScript довольно сильно изменился, вышло много обновлений, новые примеры, в том числе для разработки игр (github.com/unitpoint/os2d), а также разработка под веб.

Добро пожаловать на сайт языка objectscript.org
Ответить с цитированием
Ads
Ответ

Метки
javascript , lua , objectscript , php

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с выбором языка программирования. Bernasloni Любые вопросы от новичков 0 07.11.2011 04:30
Подскажите с выбором языка программирования antoxa-ua Вопросы начинающих программистов 10 22.03.2011 22:24
Выбор языка программирования Rivers Вопросы начинающих программистов 5 28.10.2008 15:51
Презентация FIFA 09 в Москве Ledokol Игровой мир 0 12.07.2008 20:27
Презентация Psyco как реализовать Vladimir the Red Sunny Python 0 18.01.2008 12:11
Как в BDS 2006 скомпилировать независящее от языка программирования приложение Fiminka C++ Builder 0 19.01.2007 20:48
Советы по выбору языка программирования imported_TIK Вопросы начинающих программистов 10 27.09.2005 13:16
Выбор языка программирования для сравнения целочисленных переменных tvy Вопросы начинающих программистов 2 26.09.2005 20:34
Разработка языка программирования yureckor Некоммерческие проекты 56 09.09.2005 10:04
Интересует разработка языка программирования Andrey1 Некоммерческие проекты 2 01.08.2005 01:25
Аналих языка программирования IRENsuper С/С++ 0 23.06.2005 19:56
Выбор языка программирования для новичка Anonymous Вопросы начинающих программистов 2 18.08.2003 20:15



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов