> But with same reasoning you may ask why is Java, JavaScript  or C, C# not changed?

Java, C# and JavaScript have major new features every two to three years

I'm not talking about taking away old features, but adding new ones.

A major overhaul of Cache (Mumps) was when Objects, ProcedureBlocks and the $List were introduced, that didn't break anything.

Adding native JSON support was also very important.

..Method can be a instance method as well as a class method within the context of an instance, that's the syntax.

An instance method needs the instance (object) it belongs to, if you would like to 'job' that to another process, then in some way the object would need go go along with that (aka Beam Me Up Scotty ;-)) and that's not supported by Cache'.

If you have an instance method in your class that doesn't need the instance, you probably want to change that to a class method.

Do ##class(%Dictionary.ClassDefinition).%DeleteId("Test.Class")
Set ClassDef=##class(%Dictionary.ClassDefinition).%New()
Set ClassDef.Name="Test.Class"
Set ClassDef.Super="%Persistent"
Set ClassDef.ProcedureBlock=1
Set MethDef=##class(%Dictionary.MethodDefinition).%New()
Set MethDef.Name="Name"
Set MethDef.ReturnType="%String"
; Uncomment for ClassMethod
; Set MethDef.ClassMethod=1
Set MethDef.FormalSpec="First:%Boolean,Second:%String=""Default"""
Do MethDef.Implementation.WriteLine($Char(9)_"If First Return 1")
Do MethDef.Implementation.WriteLine($Char(9)_"Return Second")
Set MethDef.parent=ClassDef
Do ClassDef.Methods.Insert(MethDef)
Do ClassDef.%Save()

You can use XSLT to do this:

ClassMethod Run()
{
  Set XML=##class(%Dictionary.CompiledXData).%OpenId(..%ClassName(1)_"||XML").Data
  Set XSLT=##class(%Dictionary.CompiledXData).%OpenId(..%ClassName(1)_"||XSLT").Data
  Set sc = ##class(%XML.XSLT.Transformer).TransformStream(XML, XSLT, .Result,, .Params,)
  Do Result.OutputToDevice()
}

XData XML{
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
  <SOAP-ENV:Header>
<SomeCustomHeader/> </SOAP-ENV:Header>
  <SOAP-ENV:Body><SomeCustomBody/></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
}

XData XSLT {
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="@*|node()">
   <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
}

 

Couple of things I'm not sure of:

  • what is pCompletionKey  used for? Can that be used as a unique reference for that invocation of SendRequestAsync?
  • Is there such a thing as a sleep "Status" to use as Quit for OnRequest? Or do I need to loop until done? Will HANG in this case release the resources used by the process?
  • if the target operation responds with an error is that handled by OnResponse or only OnError?

The CompletionKey is a 'tag' which you can attach to each async call. So you can distinguish them in the OnResponse by that tag.

Just 'Quit' the OnRequest, Ensemble will call the OnResponse when needed.

At the end (all Requests have responded or an optional time-out has occurred) the OnComplete will be called.

If the target operation has responded with a error-message in the Response message it will be in the OnResponse.

(I think) the OnError will be called if the target operation exits with a status code of not $$$OK

I think your findings are very worrying.

I must confess I didn't do any Atelier testing myself (I don't like Eclipse, too premature, not enough time).

But six to four months later that some of these issues  you reported still have no sign of progress...

Also that there is no 'formal' feedback of issues or roadmaps on Atelier.

Personally I think that ISC jumped on the Eclipse bandwagon five years too late. My choice in these days would have  been Electron/Atom/MS VC but also keeping in mind that it could be totally different in four to five years time.  

I don't agree with you.

You might be right if you were talking about for-loops in the 'traditional' way:
For var=start:step:end { ... }

'While' would be very awkward, the condition would be Sub'="", but that would break the logic of the $Order which needs a Sub="" to start with.

The argumentless-For isn't really a For, it's more like a Loop statement, in fact that's what I asked for in one of my yearly wish-lists to ISC.

Loop {
    Do whatever you need to do
    Continue if needed
    Quit if needed
}

Furthermore I wouldn't use Stackoverflow as a authorative source (in any sense, but certainly not) for COS/Mumps.
I think there are far more COS/Mumps experienced developers in this gremium.

It would be very interesting to see if we could come up with some sort of 'For Each' construct.
Because that's what we are really interested in: For Each Subscript in ^Trans: do something or equivalent to $Query;
For Each DataNode in ^Trans do something