Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2012, 00:00   #1
unitpoint
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 15
Хорошо Ребят, презентация нового языка программирования ObjectScript

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

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

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

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

Синтаксис

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

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

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

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

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

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

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

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

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

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

Объекты

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

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

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

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

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

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

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

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

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

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

Продолжение следует...
unitpoint вне форума Ответить с цитированием
Старый 26.09.2012, 17:06   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Утиная типизация выполнена криво - появляются неоднозначности при выводе типов (что в примере - целое число или вещественное?). Отсюда все минусы php. Не в курсе какие? Проблемы в отладке и не возможность создания крупного проекта многочисленной командой программистов. Это означает, что ни один серьезный производитель не возьмет Ваш язык например в игры - основное место Lua.

Цитата:
Кроме этого, допускается отделение пар запятыми, точкой с запяток ( или не использовать разделитель вовсе. Следует также отметить, что использование разделяющих символов после конечного значения допускается, например, следующее выращение полностью допустимо в ObjectScript:
Это отлично, но только если используется раздельно. То есть нельзя перечислять через запятую и через пробел в одном и том же выражении. За это ставят на горох даже в естественных языках (как в произношении, так и в написании), не то что в языках программирования - фундаментальная ошибка. Скажу даже более, смещение стилей не допускается даже одним программистом, я уже молчу в рамках одной конторы. Есть установленные формы стилей - они написаны тысячами долларов и человеко-часов потраченных напрасно.

Цитата:
Продолжение следует...
Надеюсь после опубликования спецификации языка и исправления серьезных ляпов синтаксиса.

Цитата:
Объекты
А собственно про сами объекты ни слова...

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

ЗЫ. Все это остро напоминает недоделанный лисп с макро define поверх основного листинга... Неэффективно реализованная машина Тьюринга оформленная в обертку, удобную конкретно под создателя языка.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.09.2012 в 17:41.
Utkin вне форума Ответить с цитированием
Старый 26.09.2012, 19:58   #3
unitpoint
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 15
По умолчанию

Тут очень маленькая максимальная длина сообщения, видимо это хорошо, но не очень удобно, чтобы рассказать все то что я хотел. Как вариант, полный текст статью можно прочитать нахабре
unitpoint вне форума Ответить с цитированием
Старый 26.09.2012, 22:04   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

И на хабре тема объектов не раскрыта. И множественное присваивание в таком виде как Вашем языке есть абсолютное зло. Такое ощущение, что Вы решили взять из указанных Вами языков только самое плохое и вредное для написание программ.
Цитата:
Функция test возвращает два значения, в переменную a сохранится 1, а в b — 2. Если затребовать из функции больше значений, чем она возвращает, то количество результатов дополнится пустыми значениями — null
Это все что угодно, но только не функция. Функция всегда отождествляется только с математическим определением функции, а она всегда возвращает только одно значение.
Цитата:
Как можно было бы понять из названия языка, он просто обязан быть объектно ориентированным и поддерживает ООП во всей своей красе.
Тщеславное утверждение. Даже Руби и то с некоторыми оговорками можно назвать объектно-ориентированным. Полный ООП наверно только у Smalltalk. А ObjectScript там рядом не валялся.
Цитата:
print v3
Неявные и заранее не оговоренные методы помимо конструктора и деструктора в классе есть зло. где спецификация языка?
Цитата:
ObjectScript полностью совместим с JSON, т.к. понимает этот формат, как свой родной, но добавляет в описание объектов и масивов свой расширенный и простой синтаксис.
В результате программисты на данном языке фактически не смогут вести межпрограммный обмен. Ибо они будут понимать всех, но их не будет понимать никто.
Цитата:
ObjectScript — объектно-ориентированный язык программирования, реализует все его парадигмы
Это враки чистой воды. Ибо чистый ООП я встречал только в Smalltalke. Для примера - там числа есть объекты и имеют свои методы. Ваши числа объекты?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.09.2012 в 22:08.
Utkin вне форума Ответить с цитированием
Старый 29.09.2012, 10:00   #5
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Utkin
Цитата:
Это все что угодно, но только не функция. Функция всегда отождествляется только с математическим определением функции, а она всегда возвращает только одно значение.
В с#, c++ методы вполне могут возвращать несколько и возвращают.
the_deer_one вне форума Ответить с цитированием
Старый 29.09.2012, 15:08   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от the_deer_one Посмотреть сообщение
Utkin

В с#, c++ методы вполне могут возвращать несколько и возвращают.
пример в студию.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.09.2012, 16:40   #7
Vikenty
Заслуженный флудер
Участник клуба
 
Аватар для Vikenty
 
Регистрация: 31.03.2010
Сообщений: 1,473
По умолчанию

Бесполезный "язык". Есть гораздо более функциональные, распространенные, удобные C#, F#, Ruby.
Очень не нравится то, что нет строгости. Один код можно написать по-разному.
Цитата:
a = {x=1, y=3; "zero" "one", "two" last:7,}
По вашему это проще читать, чем
Цитата:
a = {x:1, y:3, "zero", "one", "two", last:7}
?

Последний раз редактировалось Vikenty; 29.09.2012 в 16:42.
Vikenty вне форума Ответить с цитированием
Старый 30.09.2012, 00:38   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Цитата:
Сообщение от Пепел Феникса
пример в студию.
Если честно, то я не знаю таких способов в C++, да и в C# тоже. В любом случае возвращается только один объект.
Например для C++:
Код:
tuple<int, string, vector<float>, double, double> function();
Так можно хоть 50 значений различных типов возвращать.
Допустимы еще и такие конструкции(from wiki)
Код:
struct Object
{
    float first;
    int second;
};
 
Object scalar = {0.43f, 10};
Цитата:
Сообщение от Vikenty
Бесполезный "язык". Есть гораздо более функциональные, распространенные, удобные C#, F#, Ruby.
Я так понял, что это что-то типа Lua, JavaScript, AngelScript ...

Последний раз редактировалось Kostia; 30.09.2012 в 00:57.
Kostia вне форума Ответить с цитированием
Старый 30.09.2012, 04:01   #9
unitpoint
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
Я так понял, что это что-то типа Lua, JavaScript, AngelScript ...
Все верно, OS нацелен на ту же нишу и те же задачи, которые сейчас делаются с помощью Lua, JavaScript, но делать эти задачи удобнее и быстрее.

Например, одна из конкретных задач - реализации кросс платформенного движка по типу Corona SDK, но только на ObjectScript. Вот тут на видео можно посмотреть, что из этого получается:

http://youtube.com/watch?v=uep2SvXdCNU
http://youtube.com/watch?v=3RHek-UhkCk
http://youtube.com/watch?v=OCWIfQYW9rc
http://youtube.com/watch?v=P5KPJOVSs3E
http://youtube.com/watch?v=htDqDNqHX-I
http://youtube.com/watch?v=wqiDeuf7yu8

Демки на видео сделаны полностью на ObjectScript, основной код на C++ пускает только одну функцию, которая уже все обновляет внутри движка. Сам движок на OS можно посмотреть тут (файлы с расширением .os):

https://github.com/unitpoint/cocos2d...ster/engine-os
unitpoint вне форума Ответить с цитированием
Старый 30.09.2012, 10:27   #10
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Kostia
Цитата:
пример в студию.
Ну например MyFunction(par1, out a, out b, out c). В C++ так же, только там слова out нету
the_deer_one вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор языка программирования dudeden Свободное общение 3 19.05.2012 22:17
Выбор языка программирования sechas Помощь студентам 6 28.03.2012 12:04
Что нового в последнем стандарте языка С++ Rusl92 Общие вопросы C/C++ 3 11.11.2009 17:01
Выбор языка программирования true_men_new Помощь студентам 1 12.01.2009 13:06