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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2012, 21:50   #41
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Язык изначально был спроектирован для интеграции с C++
Что автоматом означает все проблемы Си остаются.
Цитата:
Как подключать свои типы данных, я напишу в одной из статей.
Это один из важнейших вопросов обойденных стороной. Ну и по-прежнему о спецификации языка ни слова. Где стандарт?
Цитата:
Но вопрос-то в том, что некоторые языки нацелены на высокую производительность, поэтому в них, например, for является структурной единицей языка, а не объектом. Это не означает, что авторы таких языков не додумались то того, чтобы for сделать объектом, просто нету в этом целесообразности.
Здесь нет к Вам претензий. Это всплыло в результате некоторых высокоабстрактных вопросов. Не переживайте в этом плане. Основная проблема языка - не строгость, ведущая к путанице и неоднзначности.
Цитата:
В то же время в Lua, в записи объекта допустимы разделители запятая и точка с запятой. Я лишь пошел немножко дальше.
Напрасно, это снижает степень полезности языка.
Вообще язык создается не с пустого места. Какие потребности заставили писать на языке от балды? Хочу с запятой, хочу с точкой. Почему это вообще реализовано? Кто в этом нуждается?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 05.10.2012 в 21:59.
Utkin вне форума Ответить с цитированием
Старый 10.10.2012, 03:22   #42
unitpoint
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 15
По умолчанию биндинг пользовательских классов и функций на C++

Как обещал, статья о том, как подключать классы на C++.

Предположим, у нас есть следующий тестовый класс на C++, который мы хотим использовать в коде на OS:

Код:
class TestClass
{
public:
    int i;
    float j;

    TestClass(int _i, float _j){ i = _i; j = _j; }

    int getI() const { return i; }
    void setI(int _i){ i = _i; }
    
    float getJ() const { return j; }
    void setJ(float _j){ j = _j; }

    double doSomething(int a, float b, double c, TestClass * pb)
    {
        return i + j + a + b + c + pb->i + pb->j;
    }

    void print()
    {
        printf("test class: %d, %f\n", i, j);
    }
};
Подключаем его к OS:

Код:
// 1. нужно объявить класс в пространстве имен ObjectScript
//    OS_DECL_USER_CLASS - это макрос, в котором объявляются несколько 
//    служебных функций для правильной типизации класса на C++
namespace ObjectScript { OS_DECL_USER_CLASS(TestClass); }

// 2. нужно сделать функцию, которая будет создавать экземпляр класса
TestClass * __constructTestClass(int i, float j){ return new TestClass(i, j); }

// 3. описать протопит класса и зарегистрировать его в OS
OS::FuncDef funcs[] = {
    def("__construct", __constructTestClass),
    def("__get@i", &TestClass::getI),
    def("__set@i", &TestClass::setI),
    def("__get@j", &TestClass::getJ),
    def("__set@j", &TestClass::setJ),
    def("doSomething", &TestClass::doSomething),
    def("print", &TestClass::print),
    {}
};
registerUserClass<TestClass>(os, funcs);
Готово, проверяем в OS:

Код:
var t = TestClass(1, 0.25)
print "t.i: "..t.i
print "t.j: "..t.j

var t2 = TestClass(2, 0.5)
t2.i = t2.i + t.j
print "t2"
t2.print()

print "t.doSomething(10, 100.001, 1000.1, t2): "..t.doSomething(10, 100.001, 1000.1, t2)
Вывод:

Код:
t.i: 1
t.j: 0.25
t2
test class: 2, 0.500000
t.doSomething(10, 100.001, 1000.1, t2): 1113.8509994506835
Полный текст статьи
unitpoint вне форума Ответить с цитированием
Старый 10.10.2012, 14:40   #43
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Неплохо, но я не заметил возможности регистрации операторов.
Например есть у меня класс matrix4x4, vector3d, quaternion... и у них перегружены +,-,*...
Kostia вне форума Ответить с цитированием
Старый 10.10.2012, 19:08   #44
unitpoint
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 15
По умолчанию

В исходниках к статье есть пример этого. Вкратце так, заодно покажу с клонированием, в классе:

Код:
	TestClass * add(TestClass * a, TestClass * b)
	{
		return new TestClass(a->i + b->i, a->j + b->j);
	}
	TestClass * clone()
	{
		return new TestClass(*this);
	}
при регистрации функций прототипа:

Код:
def("__add", &TestClass::add),
def("__clone", &TestClass::clone),
на ObjectScript:

Код:
var t = TestClass(1, 0.25)
print "t.i: "..t.i
print "t.j: "..t.j

var t2 = TestClass(2, 0.5)
t2.i = t2.i + t.j
print "t2"
t2.print()

var t2 = clone t
t2.i = t2.i + 10
t2.j = t2.j + 20.5

var t3 = t + t2
t3.print()
P.S. другие магические методы для перегрузки операторов: __concat, __bitand, __bitor, __bitxor, __bitnot, __plus, __neg, __len, __add, __sub, __mul, __div, __mod, __lshift, __rshift, __pow

Последний раз редактировалось unitpoint; 10.10.2012 в 20:08.
unitpoint вне форума Ответить с цитированием
Старый 13.10.2012, 22:58   #45
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нет понятия язык сценария.
есть понятие скриптовый язык программирования.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.12.2014, 02:13   #46
unitpoint
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 15
По умолчанию

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

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

Добро пожаловать на сайт языка http://objectscript.org/
unitpoint вне форума Ответить с цитированием
Старый 02.12.2014, 07:15   #47
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Введение говорит, что язык универсален, но я подозреваю что нет. Итак я хочу запилить на нем калькулятор. Ну вот просто, чтобы появлялось окошечко имитирующее вид и повадки обычного калькулятора. Это можно? Если да, дайте листинг.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 02.12.2014, 09:39   #48
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А теперь контрольный выстрел: какой нормальный веб-программист разворачивает проект на Windows? Не встречал хостинг который предлагает платформу на Windows, за гроши.
И ещё: Он может то, что может Node.JS?
Человек_Борща вне форума Ответить с цитированием
Старый 02.12.2014, 11:05   #49
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
А теперь контрольный выстрел: какой нормальный веб-программист разворачивает проект на Windows? Не встречал хостинг который предлагает платформу на Windows, за гроши.
И ещё: Он может то, что может Node.JS?
ASP.NET, не?
не стоит мыслить узко, серверная винда не первый год существует.
сейчас многое изменилось правда, но все равно, сервера на винде это не так плохо как нас пытаются уверить(просто надо серверную брать)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.12.2014, 12:07   #50
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
ASP.NET, не?
Так то да, серверная винда работает хорошо, особенно 2012й сервачек.
Сути это не меняет. На VPS/VDS на сколько знаю, не дадут поставить любую операционную систему, а если дадут, то исключительно лицензионную и за ваши денюшки + за обслуживание, а то и сами обслуживать будете. Как-то так...

Много таких найдется?
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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