More of my philosophy about formal methods and about Leslie Lamport and more of my thoughts..
I am a white arab from Morocco, and i think i am smart since i have also
invented many scalable algorithms and algorithms..
I think i am highly smart since I have passed two certified IQ tests and i have scored "above" 115 IQ, and I have just looked at the following video about the man who revolutionized computer science with math, and i invite you to look at it:
So i say that in mathematics, a conjecture is a conclusion or a proposition that is proffered on a tentative basis without proof. And Leslie Lamport the known scientist is saying in the above video the following: "An algorithm without a proof is conjecture, and if you are proving things, that means using mathematics.", so then i think that Leslie Lamport the known scientist is not thinking correctly by saying so, since i think that you can also prove an algorithm by highering much more the probability of the success of the proof without using mathematics to prove the algorithm, and i say that a proof has not to be just a conclusion as a boolean logic of true or false, since i think that a proof can be a conclusion in fuzzy logic and by logical analogy it looks like how race detectors in the very agressive mode don't detect all the data races, so then they miss a really small number of real races , so it is like a very high probability of really detecting real races, so read my below thoughts about it so that yo understand my views. And i think that the second mistake of Leslie Lamport the known scientist is that he is wanting us to use formal methods, but read the following interesting article below about why don't people use formal methods:
And I invite you to read the following new article of the known computer expert in the above video called Leslie Lamport , and that says programmers need to use math by using formal methods, and how Lamport discuss some of his work, such as the TLA+ specification language (developed by Lamport over the past few decades, the TLA+ [Temporal Logic of Actions] specification language allows engineers to describe objectives of a program in a precise and mathematical way), and also cited some of the reasons why he gives a prominent place to mathematics in programming.
Read more in the following article and you have to translate it from french to english:
But to answer the above expert called Leslie Lamport, i invite you to carefully read in the following interesting web page about the why don't people use formal methods:
WHY DON'T PEOPLE USE FORMAL METHODS?
More of my philosophy of the polynomial-time complexity of race detection and more of my thoughts..
I think i am highly smart since I have passed two certified IQ tests and i have scored "above" 115 IQ, so i have quickly understood how Rust
detects race conditions, but i think that a slew of
“partial order”-based methods have been proposed, whose
goal is to predict data races in polynomial time, but at the
cost of being incomplete and failing to detect data races in
"some" traces. These include algorithms based on the classical
happens-before partial order, and those based
on newer partial orders that improve the prediction of data
races over happens-before , so i think that we have to be optimistic
since read the following web page about the Sanitizers:
And notice carefully the ThreadSanitizer, so read carefully
the following paper about ThreadSanitizer:
And it says in the conclusion the following:
"ThreadSanitizer uses a new algorithm; it has several modes of operation, ranging from the most conservative mode (which has few false positives but also misses real races) to a very aggressive one (which
has more false positives but detects the largest number of
So as you are noticing since the very agressive mode doesn't detect
all the data races, so it misses a really small number of real races , so it is like a very high probability of really detecting real races ,
and i think that you can also use my below methodology of using incrementally a model from the source code and using Spin model checker so that to higher even more the probability of detecting real races.
Read my previous thoughts:
More of my philosophy about race conditions and about composability and more of my thoughts..
I say that a model is a representation of something. It captures not all attributes of the represented thing, but rather only those seeming relevant. So my way of doing in software development in Delphi and Freepascal is also that i am using a "model" from the source code that i am executing in Spin model checking so that to detect race conditions, so i invite you to take a look at the following new tutorial that uses the powerful Spin tool:
So you can for example install Spin model checker so that to detect race conditions, this is how you will get much more professional at detecting deadlocks and race conditions in parallel programming. And i invite you to look at the following video so that to know how to install Spin model checker on windows:
More of my philosophy about race detection and concurrency and more..
I have just looked quickly at different race detectors, and i think that
the Intel Thread Checker from Intel company from "USA" is also very good since the Intel Thread Checker needs to instrument either the C++ source code or the compiled binary to make every memory reference and every standard Win32 synchronization primitive observable, so this instrumentation from the source code is very good since it also permits me to port my scalable algorithms inventions by for example wrapping them in some native Windows synchronization APIs, and this instrumentation from the source code is also business friendly, so read about different race detectors and about Intel Thread Checker here:
So i think that the other race detectors of other programming languages have to provide this instrumentation from the source code as Intel Thread Checker from Intel company from "USA".
More of my philosophy about Rust and about memory models and about technology and more of my thoughts..
I think i am highly smart, and i say that the new programming language that we call Rust has an important problem, since read the following interesting article that says that atomic operations that have not correct memory ordering can still cause race conditions in safe code, this is why the suggestion made by the researchers is:
"Race detection techniques are needed for Rust, and they should focus on unsafe code and atomic operations in safe code."
Read more here:
More of my philosophy about programming languages about lock-based systems and more..
I think we have to be optimistic about lock-based systems, since race conditions detection can be done in polynomial-time, and you can notice it by reading the following paper:
Or by reading the following paper:
So i think we can continu to program in lock-based systems, and about
composability of lock-based systems, read my following thoughts about it it:
More of my philosophy about composability and about Haskell functional language and more..
I have just read quickly the following article about composability,
so i invite you to read it carefully:
I am not in accordance with the above article, and i think that the above scientist is programming in Haskell functional language and it is for him the way to composability, since he says that the way of functional programming like Haskell functional programming is the
the way that allows composability in presence of concurrency, but for him lock-based systems don't allow it, but i don't agree with him, and i will give you the logical proof of it, and here it is, read what is saying an article from ACM that was written by both Bryan M. Cantrill and Jeff Bonwick from Sun Microsystems:
You can read about Bryan M. Cantrill here:
And you can read about Jeff Bonwick here:
And here is what says the article about composability in the presence of concurrency of lock-based systems:
"Design your systems to be composable. Among the more galling claims of the detractors of lock-based systems is the notion that they are somehow uncomposable:
“Locks and condition variables do not support modular programming,” reads one typically brazen claim, “building large programs by gluing together smaller programs[:] locks make this impossible.”9 The claim, of course, is incorrect. For evidence one need only point at the composition of lock-based systems such as databases and operating systems into larger systems that remain entirely unaware of lower-level locking.
There are two ways to make lock-based systems completely composable, and each has its own place. First (and most obviously), one can make locking entirely internal to the subsystem. For example, in concurrent operating systems, control never returns to user level with in-kernel locks held; the locks used to implement the system itself are entirely behind the system call interface that constitutes the interface to the system. More generally, this model can work whenever a crisp interface exists between software components: as long as control flow is never returned to the caller with locks held, the subsystem will remain composable.
Second (and perhaps counterintuitively), one can achieve concurrency and
composability by having no locks whatsoever. In this case, there must be
no global subsystem state—subsystem state must be captured in per-instance state, and it must be up to consumers of the subsystem to assure that they do not access their instance in parallel. By leaving locking up to the client of the subsystem, the subsystem itself can be used concurrently by different subsystems and in different contexts. A concrete example of this is the AVL tree implementation used extensively in the Solaris kernel. As with any balanced binary tree, the implementation is sufficiently complex to merit componentization, but by not having any global state, the implementation may be used concurrently by disjoint subsystems—the only constraint is that manipulation of a single AVL tree instance must be serialized."
Read more here:
More of my philosophy about HP and about the Tandem team and more of my thoughts..
I invite you to read the following interesting article so that
to notice how HP was smart by also acquiring Tandem Computers, Inc.
with there "NonStop" systems and by learning from the Tandem team
that has also Extended HP NonStop to x86 Server Platform, you can read about it in my below writing and you can read about Tandem Computers here: https://en.wikipedia.org/wiki/Tandem_Computers
, so notice that Tandem Computers, Inc. was the dominant manufacturer of fault-tolerant computer systems for ATM networks, banks, stock exchanges, telephone switching centers, and other similar commercial transaction processing applications requiring maximum uptime and zero data loss:
More of my philosophy about HP "NonStop" to x86 Server Platform fault-tolerant computer systems and more..
Now HP to Extend HP NonStop to x86 Server Platform
HP announced in 2013 plans to extend its mission-critical HP NonStop technology to x86 server architecture, providing the 24/7 availability required in an always-on, globally connected world, and increasing customer choice.
Read the following to notice it:
And today HP provides HP NonStop to x86 Server Platform, and here is
an example, read here:
So i think programming the HP NonStop for x86 is now compatible with x86 programming.
And i invite you to read my thoughts about technology here:
More of my philosophy about stack allocation and more of my thoughts..
I think i am highly smart since I have passed two certified IQ tests and i have scored "above" 115 IQ, so i have just looked at the x64 assembler
of the C/C++ _alloca function that allocates size bytes of space from the Stack and it uses x64 assembler instructions to move RSP register and i think that it also aligns the address and it ensures that it doesn't go beyond the stack limit etc., and i have quickly understood the x64 assembler of it, and i invite you to look at it here:
64-bit _alloca. How to use from FPC and Delphi?
But i think i am smart and i say that the benefit of using a stack comes mostly from "reusability" of the stack, i mean it is done this way
since you have for example from a thread to execute other functions or procedures and to exit from those functions of procedures and this exiting from those functions or procedures makes the memory of stack available again for "reusability", and it is why i think that using a dynamic allocated array as a stack is also useful since it also offers those benefits of reusability of the stack and i think that dynamic allocation of the array will not be expensive, so it is why i think i will implement _alloca function using a dynamic allocated array and i think it will also be good for my sophisticated coroutines library that you can read about it from my following thoughts about preemptive and non-preemptive timesharing in the following web link:
And i invite you to read my thoughts about technology here:
Amine Moulay Ramdane.