powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Ненормальное программирование
28 сообщений из 28, показаны все 2 страниц
Ненормальное программирование
    #38645934
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ненормальное программирование в InterSystems Caché

Обалдеть, всегда о таком в тайне мечтал - почему бы теоретически нельзя расширять язык COS произвольными вещами.
Дмитрий настоящий зверюга - такую вещь раскопал! Ну, может для кого-то она и была очевидной, для меня оказалась открытием.

Интересно, можно ли расширять уже стандартный кос другими макросами &html<> или <method language=NewLanguage>?
Макросы типа $$$MyMacros не нравятся, это не то.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646156
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. Ненормальное программирование в InterSystems Caché Да. Это отличная статья. Кто хочет реализовать поддержку серверного Javascript в Caché в студии оказывается может это сделать. Возможно это сложно (и даже невозможно), но попробовать стоит )
Более того - даем грант на реализацию полноценного JS в Студии по технологии DAiMor. Есть желающие?
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646309
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Контрпример с неоднозначностью трансляции JavaScript -> MUMPS:
var a = 123;
var b = 456;
alert( a + b);

var a = "123";
var b = "456";
alert( a + b);
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646327
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яКонтрпример с неоднозначностью трансляции JavaScript -> MUMPS:
var a = 123;
var b = 456;
alert( a + b);

var a = "123";
var b = "456";
alert( a + b);Я такое попытался решить в моем примере, если вижу + после или перед кавычкой, то меняю его на конкатенацию "_", но с переменными такое конечно не прокатит.
да, на javascript, это сработает как конкатенация, а вот в cache такое конечно уже будет сложно обработать
но, это был лишь пример о возможностях каше.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646366
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

ну там гораздо менее тупо надо будет делать. Особенно, когда пойдет динамическое создание свойство и методов.
Вообще, задачка интересная, жаль что я js знаю постольку поскольку.
У меня вопрос в другом - а как транслировать в этот серверный cache-js существующие библиотеки каше?
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646371
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, пример шикарен.
А что если генерировать не код на MUMPS как кросстрансляцию, а код на MUMPS как обращение к внешнему движку JavaScript для исполнения оригинального кода?
http://karataev.nm.ru/cache/ekscr.html
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646394
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я,

не, по-моему совсем не то будет. Как раз фишка в кАше - замесить несколько языков не через какие-то шлюзы, а прямо над данными.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646509
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яДа, пример шикарен.
А что если генерировать не код на MUMPS как кросстрансляцию, а код на MUMPS как обращение к внешнему движку JavaScript для исполнения оригинального кода?
http://karataev.nm.ru/cache/ekscr.html проблем сделать такое тоже не вижу, я думал реализовать и подобный подход, правда я думал сделать с NodeJS, но решил что, тогда весь смак от этого пропадает, насчет скорости доступа к данным.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646510
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.У меня вопрос в другом - а как транслировать в этот серверный cache-js существующие библиотеки каше?Да, это основная проблема, придумать конструкции не выходящие за рамки JS, но позволяющие их интерпретировать в COS функции, глобалы, обращение к классам и прочее.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646525
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н....гораздо менее тупо надо будет делать...Не могу даже представить себе требуемый уровень интеллекта, ибо в MUMPS/COS обе конструкции вполне законны: иset a="123"+"456", и set a="123"_"456"ИМХО (не только моё)), главное в языке - это семантика, поэтому предложенный путь реализации новых языков - лишь способ создания диалектов COS, не более того. При различиях в семантике упрёмся в ограничения ядра и будем вынуждены объявить новый язык "подмножеством языка X". Сами-то вы, уважаемые коллеги, станете писать на таком языке? Много ли программистов привлёк, к примеру, Cache' Basic?
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646552
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovМного ли программистов привлёк, к примеру, Cache' Basic?Если я не ошибаюсь, то запустить программу Cache' Basic не так просто как код на COS, поэтому наверно и не прижилось.
Я не предлагаю, перейти на новый язык, и в любом случае как и написал в статье это не JS это CJS, он в любом случае будет сильно отличается если его реализовать полностью. А на счет привлечения, ну скажем так Basic, все равно не столь интересный язык, и на JS пишут постоянно людей все равно больше. И опять же про совместимость, в моем варианте ее вроде чуть больше.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646589
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorЕсли я не ошибаюсь, то запустить программу Cache' Basic не так просто как код на COSОна компилируется в OBJ-код и точно так же запускается (по Do или как $$-функция).
DAiMorНасчет привлечения, ну скажем так Basic, все равно не столь интересный язык, и на JS пишут постоянно людей все равно больше.Сегодня да, но в начале нулевых, когда появился Cache' Basic, это было не совсем так (зачем бы тогда они стали заниматься Basic-ом, не только же ради Multi-Value?).
DAiMorИ опять же про совместимость, в моем варианте ее вроде чуть больше.В вашем варианте совместимость с COS всяко больше, т.к. вы компилируете в INT (BAS/MVB компилируются сразу в OBJ), что, конечно же, хорошо - твёрдая основа под ногами.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646818
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovНе могу даже представить себе требуемый уровень интеллекта, ибо в MUMPS/COS обе конструкции вполне законны: иset a="123"+"456", и set a="123"_"456"А как вы будете в таком случае транслировать a+b? Это должна быть какая-то операция, учитывающая тип данных, да и само создание констант, переменных и присвоение их друг другу должно везде учитывать типы данных. Мне кажется, даже если такой язык реализовать, потеряем в скорости

Alexey Maslovглавное в языке - это семантика, поэтому предложенный путь реализации новых языков - лишь способ создания диалектов COS, не более того. При различиях в семантике упрёмся в ограничения ядра и будем вынуждены объявить новый язык "подмножеством языка X".Ну вообще-то, семантика js и m разная.
Alexey MaslovСами-то вы, уважаемые коллеги, станете писать на таком языке? Много ли программистов привлёк, к примеру, Cache' Basic?Я нет. Но задача интересна для меня не с практической точки зрения. А вот среди специалистов IS такие идеи бродят (иногда до "выкинуть М"). И когда Евгений подкинул такую идею, я сразу подумал "где-то я это уже слышал". А после того, как намекнул на грант, сомневаться, что для IS это "не просто так" уже не стоит.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646823
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модераторы исполняют мои просьбы до того, как я их высказываю. Спасибо :-)
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646832
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом плане интересна интеграция sql и каше. И если для объектов был затронут движок, то sql реализован на чистом М. А поискать менее похожие языки, чем М и SQL еще надо постараться.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38646849
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, еще интересный факт, пока сильно в него правда не углублялся, но в качестве редактора может быть еще и веб страница.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648023
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я может маленько тупенький, а может просто плохо знаю JS или плохо представляю его применение в качестве серверного языка.
Киньте пару условных примеров, как может происходить открытие объектов или их сохрание? Вроде у JS объектов наличие какого-то там идентификатора не обязательно. От прямой работы с глобалами отказываемся или оставляем? В каком виде оставляем - в виде каше-вставок или в JS придумываем отображение какое-нибудь?
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648035
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Я может маленько тупенький, а может просто плохо знаю JS или плохо представляю его применение в качестве серверного языка.
Киньте пару условных примеров, как может происходить открытие объектов или их сохрание? Вроде у JS объектов наличие какого-то там идентификатора не обязательно. От прямой работы с глобалами отказываемся или оставляем? В каком виде оставляем - в виде каше-вставок или в JS придумываем отображение какое-нибудь?

в качестве серверного языка, это nodejs, и давно вполне успешно работает и на большом количестве проектов
Да в JS, ООП, несколько посредственное, объекты не требуют наличие идентификаторов
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
// объявление класса Person
// для него описываются все методы, открытие сохранение, и от него можно будет наследоваться
var Person = function(name) {
	this.name = name;

	return this;
}
// функция, чтобы открыть существующий объект, здесь может быть логика на проверку его существования, 
// и все равно нужно будет выполнить конструктор от Person, чтобы он имел все что в нем есть
Person.prototype.open = function(name) {
	return new Person(name);
}

// создать просто новый объект
var john = new Person('John');

// открыть уже существующий
var bill = new Person('Bill');


этот пример конечно всего не объясняет, поэтому лучше конечно покопать инет

работа с глобалами может сводится к обращению как большому массиву в JS
т.е. что-то типа этого

Код: javascript
1.
2.
3.
for(ind in MyGlobal) {
	console.log(MyGlobal[ind])
}

может служить аналогом на COS
Код: sql
1.
2.
3.
4.
5.
set ind="" for { 
	set ind=$order(^MyGlobal(ind)) 
	quit:ind="" 
	write !,^MyGlobal(ind)
}


Для идентификаторов в JS, символ "^" первым не допустим, может быть только "_" или "$" поэтому его можно например заменить на один из этих двух например на "_", а "$" так и оставить за функциями
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648073
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, спасибо.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648518
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет терпения дождаться официальной ( 14422425 ) поддержки JS наряду с COS/BAS/MVB?
Вариант JS->INT->OBJ-> Caché virtual machine изначально более ущербен, чем JS->CallIn (C/C++, native code).

PS:
Пример кода на серверном javascript, взятый из очень ранней реализации/// This class introduces and demonstrates the server-side JavaScript facility.
Class JavaScript.Tutorial Extends %RegisteredObject
{

Property SampleProperty As %String [ InitialExpression = "SamplePropertyValue" ];

/// JavaScript can be used as the implementation language for class or instance methods of cache objects.
/// To use the facility, set the language keyword on the class or instance method to 'javascript'. This
/// instructs Studio to syntax check the method body as JavaScript. In previous versions of Cache, methods
/// with their language set to 'javascript' implicitly ran on the client. In current versions such methods 
/// have to be explicitly declared by using the new 'ClientMethod' or
/// 'ClientClassMethod' method introducers. Heres an example. This method won't generate any server code and 
/// cannot be called on the server.
ClientMethod Example1() [ Language = javascript ]
{
  // alert() is a function built into the browser, its part of the browsers intrinsic object model
  alert('Hello JavaScript');
}

/// This method is a regular method, so code will be generated and can be run on the server
ClassMethod Example2() [ Language = javascript ]
{
  // The server side javascript implementation has an intrinsic object model rooted in the 'Cache' object.
  // The Console object provides basic facilities to read and write to the console ( Terminal ). In this example
  // we write a string to the console 
  Cache.Console.WriteLine("Hello JavaScript");
}

/// This method demonstrates passing multiple arguments to Cache.Console.WriteLine
ClassMethod Example3() [ Language = javascript ]
{
  // The Cache.Console.WriteLine() method can take a variable number of arguments. Each is written to the console
  // followed by a newline
  var x = "This",y="Multiple Arguments";
  Cache.Console.WriteLine(x," is an example of ",y);
}

/// This method illustrates the difference between undefined in JavaScript and undefined in Cache
ClassMethod Example4() [ Language = javascript ]
{
  // Variables in javascript which are not assigned a value have the 'undefined' value. undefined is an object.
  // Cache does not have an undefined object so if these values are passed to cache either as method arguments
  // or return values from javascript methods, then Cache will treat them as undefined in the Cache sense
  var x; // undefined value
  if (x == undefined) {
    Cache.Console.WriteLine("x is undefined");
  }
  
  var y = "defined"; // define value
  
  // Call the helper method with an undefined value. This also illustrates how to call a method in the same class.
  // In javascript for cache, the 'this' object inside a class method refers to the class itself, whilst an instance
  // method will refer to the particular instance ( more on this later )
  this.HelperForExample4(x);
  
  // Call the helper method with a defined value
  this.HelperForExample4(y);
}

/// This is a helper method for example 4. Note that its written in COS and can be called from JavaScript
ClassMethod HelperForExample4(pArgument)
{
  If '$Data(pArgument) {
    Write "Passed Argument is undefined",!
  } else {
    Write pArgument,!
  }
}

/// This method illustrates the use of the Cache.Console.ReadLine() method
ClassMethod Example5() [ Language = javascript ]
{
  var x = Cache.Console.ReadLine();
  Cache.Console.WriteLine(x);
}

/// This method illustrates the use of the intrinsic object Cache.Class. Think of the Class object as an 'accessor' for
/// a Cache class. Cache classes appear as properties of the Cache.Class object. In the example below we are calling the 
/// Example4() class method on JavaScript.Tutorial. Also note the naming convention.  In COS names may begin with a
/// '%' character and may contain '.' characters within them. JavaScript doesn't allow those characters in names so we
/// have to have a naming convention in JavaScript to refer to such COS names. In JavaScript we substitute '$' for '%' 
/// and '_' for '.'
ClassMethod Example6() [ Language = javascript ]
{
  Cache.Class.JavaScript_Tutorial.Example4();
}

/// You can create new instances of Cache Classes by calling the %New() method on the class. Its very important to
/// have a clear understanding of the lifetime of objects created from within the JavaScript environment as the behavior
/// is different from Cache. When a object is created in this manner, the JavaScript environment 'owns' the object. It will
/// determine when the object is going to go out of scope and its memory be reclaimed. This is due to JavaScripts deferred
/// Garbage collection algorithm. If you don't care about the lifetime of objects then there is nothing special that has to
/// be done, the JavaScript engine will take care of things for you. However, if you DO care about having a object go out of
/// scope and have its %OnClose() method closed immediately then there is a special method that can be called. In JavaScript,
/// this is the $$Close() method. Call this if you want JavaScript to force the %OnClose() to be called.
ClassMethod Example7() [ Language = javascript ]
{
  // Create an instance of JavaScript.Tutorial, %OnNew() callback ( see below ) will be called
  var instance = Cache.Class.JavaScript_Tutorial.$New();
  
  // Write out the value of its SampleProperty
  Cache.Console.WriteLine(instance.SampleProperty);
  
  // Force the object to close, %OnClose() callback ( see below ) will be called
  instance.$$Close();
}

/// Contrast this example with Example7. Here the object isn't closed and will only be closed when JavaScript garbage
/// collects the object. If you close the terminal following Example8 you will see the %OnClose() method called before
/// the process exits.
ClassMethod Example8() [ Language = javascript ]
{
  // Create an instance of JavaScript.Tutorial, %OnNew() callback ( see below ) will be called
  var instance = Cache.Class.JavaScript_Tutorial.$New();
  
  // Write out the value of its SampleProperty
  Cache.Console.WriteLine(instance.SampleProperty);
}

/// You can also force ALL objects that are eligible for garbage collection to be collected by calling the
/// %JavaScript.Runtime.%GarbageCollect() method
ClassMethod Example9() [ Language = javascript ]
{
  // Create an instance of JavaScript.Tutorial, %OnNew() callback ( see below ) will be called
  var instance = Cache.Class.JavaScript_Tutorial.$New();
  
  // Write out the value of its SampleProperty
  Cache.Console.WriteLine(instance.SampleProperty);
  
  // Make instance elligible for collection
  instance = null;
  
  // Force a Garbage Collection
  Cache.Class.$JavaScript_Runtime.$GarbageCollect();
}

/// This method illustrates an alternatve means of creating an object with the JavaScript 'new' command
ClassMethod Example10() [ Language = javascript ]
{
  // Create an instance with the JavaScript 'new' command
  var instance = new Cache.Class.JavaScript_Tutorial;
  
  // Write out the value of its SampleProperty
  Cache.Console.WriteLine(instance.SampleProperty);
  
  // Make instance elligible for collection
  instance = null;
  
  // Force a Garbage Collection
  Cache.Class.$JavaScript_Runtime.$GarbageCollect();
}

/// This method illustrates how to open and update an instance of a persistent Cache Object. Note also enumeration of property
/// names with the for/in syntax and indirect property value access with the [] syntax.
ClassMethod Example11() [ Language = javascript ]
{
  // Make sure Sample.Person is populated with sample data
  Cache.Class.Sample_Person.Populate(10);
  
  // Open instance number 1
  var instance = Cache.Class.Sample_Person.$OpenId(1);
  
  // Display the properties
  for (var property in instance) {
    Cache.Console.WriteLine(property," = ",instance[property]);
  }
  
  // Expand the home address
  var address = instance["Home"];
  
  for (var line in address) {
    Cache.Console.WriteLine(line," = ",address[line]);
  }
  
  // Update the name
  instance["Name"]="Buffy The Vampire Slayer";
  
  // Save the object
  instance.$Save();
  
  // Finished with this object
  instance.$$Close();
}

/// Access to Cache globals is through the intrinsic Cache.Global object
ClassMethod Example12() [ Language = javascript ]
{
   // Clean up any pre-existing data
   Cache.Global.Kill("^JavaScript");
   
   // Set some data, subscripts are specified by a JavaScript Array
   Cache.Global.Set("^JavaScript",["a"],"abba");
   Cache.Global.Set("^JavaScript",["b"],"beatles");
   Cache.Global.Set("^JavaScript",["c"],"clapton");
 
   // Traversal is natural
   var global="^JavaScript", array = [""], key = Cache.Global.Order(global,array);
   while (key !="") {
     
     // We are removing the last value from the array and replacing it with the new key
     array.pop();array.push(key);
     
     // Test to see if data exists at this node
     if (Cache.Global.Data(global,array)%2) {
       
       // Yes it does, get it
       var data = Cache.Global.Get(global,array);

      // Display the data and key       
       Cache.Console.WriteLine(key," = ",data);
       
     } else {
       
       // Just display the key
       Cache.Console.WriteLine(key);
     }
     
     // Get the next key
     key = Cache.Global.Order(global,array);
   }
}

/// This callback method is invoked by the <METHOD>%New</METHOD> method to 
/// provide notification that a new instance of an object is being created.
/// 
/// <P>If this method returns an error then the object will not be created.
/// <p>It is passed the arguments provided in the %New call.
/// When customizing this method, override the arguments with whatever variables and types you expect to receive from %New().
/// For example, if you're going to call %New, passing 2 arguments, %OnNew's signature could be:
/// <p>Method %OnNew(dob as %Date = "", name as %Name = "") as %Status
Method %OnNew(initvalue As %CacheString) As %Status [ Private, ProcedureBlock = 1, ServerOnly = 1 ]
{
  Write "Instance ",##this," of ",..%ClassName(1)," Created",!
  Quit $$$OK
}

/// This callback method is invoked by the <METHOD>%Close</METHOD> method to 
/// provide notification that the current object is being closed.
/// 
/// <P>The return value of this method is ignored.
Method %OnClose() As %Status [ Private, ProcedureBlock = 1, ServerOnly = 1 ]
{
  Write "Instance ",##this," of ",..%ClassName(1)," Destroyed",!
  Quit $$$OK
}

}
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648556
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitНет терпения дождаться официальной ( 14422425 ) поддержки JS наряду с COS/BAS/MVB?
Вариант JS->INT->OBJ-> Caché virtual machine изначально более ущербен, чем JS->CallIn (C/C++, native code).А в какой версии это можно проверить ?
в 2014.1 ошибка компиляции
ОШИБКА #5486: Неверное язык метода: JS.Test:Example11:javascript
только ClientMethod, компилируется с языком javascript
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648566
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorА в какой версии это можно проверить ?Пока ни в какой.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648710
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitНет терпения дождаться официальной ( 14422425 ) поддержки JS наряду с COS/BAS/MVB?Лично я и не жду, для меня эта задача пока из области разминки для мозга. А там поглядим :-)
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648835
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яКонтрпример с неоднозначностью трансляции JavaScript -> MUMPS:
var a = 123;
var b = 456;
alert( a + b);

var a = "123";
var b = "456";
alert( a + b);Что подтверждает вывод выше.
С нативной поддержкой такой проблемы нет:Class test.demo [ Abstract ]
{

ClassMethod Test() [ Language = javascript ]
{
  var a = 123;
  var b = 456;
  Cache.Console.WriteLine(a + b);
  
  a = "123";
  b = "456";
  Cache.Console.WriteLine(a + b);
}

}Результат:

Код: plaintext
1.
2.
USER>d ##class(test.demo).Test()
579
123456
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648918
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

А покажите другой код этого класса? Поддержка точно нативная?
А поддержка создания методов есть?

Кстати, откуда у вас эта версия каше? В WRC нет RC-версий. Вы имеете доступ к девелоперским версиям?
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38648985
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.А покажите другой код этого класса? ;test.demo.1
 ;(C)InterSystems, generated for class test.demo.  Do NOT edit.
 ;;test.demo
 ;
zTest(args...)  New classmethod,method,classname Set classname="test.demo",classmethod=1,method="Test" Goto JSCall^%occJavaScriptБлок А.Н.Поддержка точно нативная?Да, используются вызовы $ZF(-6) для JS Runtime Library.
Блок А.Н.А поддержка создания методов есть?Что имеется в виду?
Блок А.Н.Кстати, откуда у вас эта версия каше? В WRC нет RC-версий. Вы имеете доступ к девелоперским версиям?В одном из Field Test старой версии ( 7771601 ) был такой функционал для "попробовать". Потом эту версию из WRC убрали.
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38649000
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitБлок А.Н.А поддержка создания методов есть?Что имеется в виду?

Например http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1095727&msg=16051076
...
Рейтинг: 0 / 0
Ненормальное программирование
    #38649053
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Например http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1095727&msg=16051076 Class test.demo [ Abstract ]
{

ClassMethod Test() [ Language = javascript ]
{
  // объявление класса Person
  // для него описываются все методы, открытие сохранение, и от него можно будет наследоваться
  var Person = function(name) {
    this.name = name;

    return this;
  }
  
  // функция, чтобы открыть существующий объект, здесь может быть логика на проверку его существования, 
  // и все равно нужно будет выполнить конструктор от Person, чтобы он имел все что в нем есть
  Person.prototype.open = function(name) {
    return new Person(name);
  }

  // создать просто новый объект
  var john = new Person('John');

  // открыть уже существующий
  var bill = john.open('Bill');

  Cache.Console.WriteLine(john['name'],' ',bill.name);
}
}Результат:

Код: plaintext
1.
USER>d ##class(test.demo).Test()
John Bill
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Ненормальное программирование
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]