Well, I've answered your various points but, overall, I'm disappointed that
you've again failed to offer any actual technical content. Perhaps Thomas
Maul would contribute? He often does not agree with me, but his arguments
are always well-reasoned and technically interesting. Even if Thomas scolds
someone, it's after providing good information.

I also think it may be too easy to get caught up in how cranky I sound. So
I sound cranky, so what? That's more my problem than anyone else's. Does it
make me or my arguments more convincing when I sound like that guy on the
bus that no one will sit next to? No, not really. I do myself no favor,
your best option is to ignore my frustrated sounds and focus on the
technical merits of what I'm saying. If I'm missing something or being
stupid, I invite correction. And at least I'm still here, the other 4D
people of my generation are quiet...because mostly they are gone. Hey, I
like 4D! We all do. I mean, there's no real need to convince 4D people to
use 4D. We all want it to be better.

Since this whole thing has gotten absurdly long, I'll repeat my basic point
on its own:

CALL WORKER is a remote procedure call system that injects EXECUTE(code)
into a process.
If cooperative code is injected into a preemptive process, bad things
happen.
4D should do less bad things and tell us about the problem via ON ERR call.

That's it. It strikes me as a pretty uncontroversial statement so I don't
understand what the fuss is about. Why wouldn't someone thing it makes
sense to provide an error at this point?
> Concept of Workers is very new in V16, you know that you can expect
improvements in the future.

Of course! Discussion of the subject would be pointless if there were no
chance of change. However, I cannot make any plans based on what *might*
happen in the future. So, speculation is of zero practical value for me.

I'll also note that while "workers" are new in 4D V16, the underling
concepts and tools are neither new nor unfamiliar. They're just new in 4D.
Meaning, there are many, many long-standing implementations that 4D very
likely looked at and considered while developing their design. Like any
other programming team, the crew at 4D must have considered alternative
designs when they came up with what is now CALL WORKER and CALL FORM. I can
see why they picked a remote procedure call scheme, but I can't think of a
single other messaging architecture that works that way. But either way, it
was a design choice made in France, not some sort of discovery and not some
sort of law of nature. Their is nothing sacred about the design.

Now, they had to make choices to deliver a product. Their choices have very
good results and less desirable results. I have been continuously praising
the good aspects. So much so that these features convinced me to move my
own development from V13 to V16. I was also excited enough about these
features arriving in 4D to sign up to do my first 4D presentations in a
decade. So, yeah, I'm a fan.

I'm also willing to say what is a weak spot and what I see as preferable
design choices going forward. Error handling has always been a terrible
weak spot in 4D and my latest "feature request" (it's really about a
bug/design flaw) shows me that 4D still doesn't appreciate the importance
of consistent and reliable exception handling.

> You cannot get something at this level of complexity and have all
finished at once, in a perfect way.

And you cannot expect customers not to say that are unsatisfied by an
incomplete implementation. As it stands, the current design makes a great
many normal messaging patterns difficult or impossible to implement. 4D
could have done this sort of design *without more work* and given us a very
different system:

LAUNCH WORKER("Worker_Name";"Worker_Handler_Name"")
CALL WORKER("Worker_Name";$object)
// Worker_Handler_Name (Object)
C_OBJECT($1;$message)
$message:=$1
// Do whatever you like.

That's the simplest alternate version. At that point, the problem I have
been describing *would be impossible to create.* The flaw doesn't come from
some future feature not being implemented, it's a consequence of the design
itself. 4D can improve the situation by trapping the error when running
EXECUTE inside the worker....but the underlying design is what makes it
possible. The positive side of the design is that it's very easy for people
to reuse existing code without having to mess with C_OBJECT. The downside
is that you can blow up your server.

> IMHO, it's the new way (for 4D Developers) to think their application's
programming.
> We go from a synchronous way of programming, into a totally asynchronous
way, from
> loops to messaging (CALL FORM & CALL WORKER), which is not simple for
many developers.

I can't say. Anyone that's dealt with JavaScript has dealt with a vastly
harder to deal with version of asynchronous programming. In order to
achieve many normal results in 4D you'll need to roll your own versions of
features provided by asynchronous environments. I'm sure you get these
questions all the time:

Q: How do I get an answer from a worker?
A: You don't. A worker can send another message. But only to a worker or a
form.

Q: What form event is triggered by CALL FORM.
A: There isn't one. It's not a form event.

Q: So how does my form method catch CALL FORM?
A: It doesn't. The code is executed in the process that runs the form in
the context of that form. (In case you're using form variables.)

So, there's plenty to learn anyway and some obvious features
(call-response) that aren't implemented.

4D's implementation is only partially asynchronous anyway, but in a good
way. It's not that hard to follow. I don't see how using remote EXECUTE is
easier to understand than sending messages.

> I don't really care the way it works today, as long as I can use
> it until the next 4D versions,  in which these concepts will be expanded.

Just to get back to the original report, I'm talking about a *bug* in the
*current version* that makes these features *unreliable* for use in the
very situation they were supposedly designed for. As far as "future
versions" go. I don't care. How can I? They're completely imaginary. 4D
doesn't publish road maps so I can't even go on something like that. And,
based on history, there's no way to count on what I want or need being
implemented.

A bunch of examples:
-- Improvements to the SQL engine? Nope.
-- Object fields in SQL: Nope. Don't put them in your tables.
-- Proper JSON parsing? Nope. You don't need it. (Every other on earth has
it.)
-- Decent SVG support? No, we have a widgety thing.
-- 4D Chart? No. But we did give you a little graphing toy.
-- Support for later versions of XSLT? Answer: We're dropping all support.
-- 31 frickin characters. Seriously?
-- No structs/rects/classes
-- No data hiding
-- No try/catch
-- No dots in "objects". Actually, that seems to be coming. But if it's
just dot syntax and nothing more, it's only a convenience & I use Cannon's
tool already.

Contrarily, I saw 'contextual mode' in *alpha* and said, more or less "Nuke
it from orbit, it's the only way to be sure!"...but it lingered on for,
what, a decade?

Then again, 4D Write did come back to life and is looking great.

So, no, plans based on future versions aren't a safe bet. And given how
long the future is, I might not have time to wait long enough. 4D might do
something very welcome (4D Write users must be happy), or something very
disappointing (no 4D Chart, no JSON parsing.) Either way, "the future"
hasn't arrived yet so it's not worth a plan.

> I do not concentrate on the missing features in 4D, I prefer to learn how
to use the new ones,
> and to do the preliminary work in order to find the easiest practical way
to use it, for
> developers to not waste time disentangling the different possible paths.

I find it deeply disturbing that a representative of 4D France somehow
thinks that basic error checking is a weird thing to worry about. It's
basic. I need to know and consider what happens when things go wrong.
Otherwise, you can't deploy reliable software. Quality control is a
fundamental part of modern software development. It's not some exotic or
optional idea. When I'm doing due diligence, I try things out to assess if
they are reliable enough to use. Nothing, nothing at all could be more
practical. This is a fundamentally practical concern. In this case, I'm not
talking about a weird condition, an edge case, or anything unlikely. I'm
talking about a very basic problem that the design absolutely allows. It's
a simple fix for 4D and I absolutely reject your implication that I'm
somehow not understanding or doing something wrong. No.

Now, if I were looking for trouble with these new features, I could find
them. I stumbled across a race condition *that should be impossible* having
to do with the file system. I found this (by accident) and put together a
demo to reproduce the problem in about a minute. On Windows, it crashes the
machine. On Mac, it just locks up 4D so badly you have to force quit it. I
submitted everything through official channels and it's in the bug system.
Here's what I've heard from 4D France:



Full quote. I've tried it out again in 16R2 and 16.1, no difference. So,
yeah, I'm concerned about quality. I talk to lots of developers and my
impression is (and has been for years) that people care more about
*reliability* than features. Speed bumps and features are great! But people
most need reliability. When things crash or don't work right, customers get
very upset and it's stressful. That's most developers #1, #2, and #3


>> That's true. But you know, Life is unsafe at any speed.
> ? That's just an odd thing to say.
Yes, probably, but this is the way it works...

I honestly have no idea what you're trying to say. That everything carries
a risk so don't worry about it? That's a frankly frightening attitude
towards risk analysis or software quality. Not all risks are of the same
likelihood, size, or consequence.
**********************************************************************
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**********************************************************************

Reply via email to