<div>Hi!</div><div><br /></div><div><br /></div><div> I agree with all ideas/theses.</div><div><br /></div><div>(</div><div><br /></div><div>>  (maybe Oberon or some dialect of M2 is simpler, I dunno?)</div><div><br /></div><div> They are simply "more than need".</div><div><br /></div><div>)</div><div><br /></div><div>Beat regards, Victor Miasnikov</div><div><br /></div><div>08.03.2021, 21:13, "Mika Nystrom" <mika.nystrom@gmail.com>:</div><blockquote><div dir="ltr">I sort of agree with Jay here.  It's super important for M3 code to be able to co-exist well with C, and ideally with C++ as well.<div><br /></div><div>There is so much software out there that's written with C interfaces that we really want to be able to use.  The fact that M3 interfaces poorly with C++ is starting to be an issue.  M3 on the other hand interfaces amazingly well with C, if the C code is written well (i.e., if the C code is written in an "interface-based style" because that is what M3 itself lends itself to well).  Most modern C code I have seen is indeed written in an interface-based style.  The C folks finally learned something from the Modula world (ok the rest of the world calls it "Pascal" but we know that's a bit inaccurate), even if it has been slow going!</div><div><br /></div><div>In short, being able to interface to C/C++ is absolutely essential to being able to write useful M3 applications today.</div><div><br /></div><div>Although, Jay, I do disagree about rewriting m3front in C.  I think m3front should be in M3 and you can bootstrap (or for you, cross-compile) as needed.  Really think you should minimize the amount of C in the compiler and system in general, BUT maintain good general compatibity with C/C++.</div><div><br /></div><div>The reason I think it's important that the tools be written in M3 is a bit philosophical.  I write a lot of code generators.  And code "understanders" [not a real word I know but it's probably clear what I mean].  In my opinion, this is one of the strongest areas of M3: it's among the simplest of the practical imperative programming languages (maybe Oberon or some dialect of M2 is simpler, I dunno?) to parse and generate.  These are also extremely strong and effective general-purpose programming techniques.  If we can't use the code understanders and generators from M3 (eating our own dogfood) we are really not making a good show of programming.  In fact this I think is one of the real holes in the Java ecosystem: that the Java system itself is written in C++.  If M3 can't even implement its own compiler, I think it has no claim on the title "systems programming language".  And, in fact, I think it's quite a good "systems programming language" (doesn't everyone on this list???? you'd assume so...)</div><div><br /></div><div>      Mika</div><div><br /></div><div>P.S. Design example.  I had to write some code to deal with obnoxiously large polynomials a few months ago.  They had coefficients that were very large integers and high non-integer exponents (so they were actually so-called generalized polynomials and not normal polynomials).  I did not want to implement a big math package myself and wasn't entirely happy with what was in the m3 tree, so I used MPRF (multiple-precision floating point library) from GNU and INRIA.</div><div><br /></div><div>Adding this to M3 was really easy because MPFR already uses interfaces in the sense that the type mpfr_t is opaque.  A opaque C pointer</div><div><br /></div><div>INTERFACE MpfrP;</div><div>TYPE T         = ADDRESS;<br /></div><div><br /></div><div><*EXTERNAL MpfrC__alloc*> (* implemented in C glue *)<br />PROCEDURE alloc() : MpfrPtrT;</div><div><br /></div><div><*EXTERNAL MpfrC__free*> (* implemented in C glue *)</div><div>PROCEDURE free(x : MpfrPtrT);<br /></div><div><br /></div><div><*EXTERNAL mpfr_init2*><br />PROCEDURE init2(t : T; prec : Prec);<br /><br /></div><div><*EXTERNAL mpfr_add*><br />PROCEDURE add(tgt, a, b : T; rnd : Rnd): int;<br /><br /><*EXTERNAL mpfr_sub*><br />PROCEDURE sub(tgt, a, b : T; rnd : Rnd): int;<br /></div><div><br /></div><div>etc .... giving an interface to C code from the MPFR library plus a few glue bits to do alloc and free.</div><div><br /></div><div>Then on top of this build a very thin layer of M3 that looks like pure M3 and has the same procedures available but on an M3 type.</div><div><br /></div><div>INTERFACE Mpfr;<br /></div>TYPE<br />  T <: REFANY;<br /><br />  RM      = MpfrRoundingMode.T;<br />  Ternary = [ -1..1 ];<br /><div><br /></div><div>PROCEDURE New(prec : CARDINAL) : T;<br /></div><div>PROCEDURE Add(tgt, a, b : T; rnd := RM.N) : Ternary;<br /></div><div><br /></div><div>WeakRef on the M3 handles the freeing of the underlying C type.</div><div><br /></div><div>Then using the "understanders" I talked about above, I do the following one-liner in an m3makefile somewhere:</div><div><br /></div><div>SchemeStubs ("Mpfr")<br /></div><div><br /></div><div>I can now immediately use all this from the scheme interpreter ("mscheme" library).  So my scheme immediately has access to a very powerful floating-point library after that, with GC and everything working on this fairy low-level C code, right away.</div><div><br /></div><div>It was all done in a few hours, very easy.  But being able to pull these sorts of things off easily depends on being able to co-exist well with C.</div><div><br /></div><div>   </div><div><br /></div><div></div></div><br /><div class="f13ca48719c8a60033905b23b39675agmail_quote"><div class="334d7d341e3233c5b27ca91297445127gmail_attr" dir="ltr">On Mon, Mar 8, 2021 at 9:48 AM Jay K <<a href="mailto:jayk123@hotmail.com" target="_blank">jayk123@hotmail.com</a>> wrote:<br /></div><blockquote class="f13ca48719c8a60033905b23b39675agmail_quote" style="border-left-color:rgb( 204 , 204 , 204 );border-left-style:solid;border-left-width:1px;margin:0px 0px 0px 0.8ex;padding-left:1ex">




<div dir="ltr">
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
No.
<div><br />
</div>
<div>Windows 7 is good.</div>
<div>Windows 10 is good.</div>
<div>The Microsoft C++ toolchain is good.</div>
<div>If you don't like them, use Linux or Mac, etc. or turn off your computer.</div>
<div>I will not be converting Modula-x to Modula-y.</div>
<div>There are source to source transforms that are useful, but not that.</div>
<div>Consider instead C++ or JavaScript or TypeScript or Rust or LLVM IR or Java, as a means to connecting</div>
<div>to other good backends.</div>
<div><br />
</div>
<div>Writing a linker is a lot of work and not likely worthwhile.</div>
<div>Are you prepared to write symbols for debugging?</div>
<div><br />
</div>
<div>NT on Mips/PowerPC/Alpha might be nice, but OpenNT is apparently ancient unlicensed code.</div>
<div><br />
</div>
<div>Mips/PowerPC/Alpha are plenty usable otherwise, for example Linux in Qemu, or real hardware.</div>
<div><br />
</div>
<div>Though I find it difficult to care about any more than, already a long target list:</div>
 amd64, arm64, riscv64, WebAssembly (32 now, 64 soon), NT, Darwin, Linux, Fuschia.<br />
</div>
<div>
<div id="31319b05c953cda46d3493fe088b230cgmail-m_1568685723368508669appendonsend"></div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
And generating C++, really, gets you extremely broad reach.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
Though even then, closures, threads, exception handling, can be problems (esp. in wasm presently).</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
 - Jay</div>
<hr style="display:inline-block;width:98%" />
<div id="b5d4728fd182ebdaa44b22d323ae1951gmail-m_1568685723368508669divRplyFwdMsg" dir="ltr"><font color="#000000" face="Calibri, sans-serif" style="font-size:11pt"><b>From:</b> <a href="mailto:vvm@tut.by" target="_blank">vvm@tut.by</a> <<a href="mailto:vvm@tut.by" target="_blank">vvm@tut.by</a>><br />
<b>Sent:</b> Monday, March 8, 2021 5:33 PM<br />
<b>To:</b> Dirk Muysers <<a href="mailto:dmuysers@hotmail.com" target="_blank">dmuysers@hotmail.com</a>>; Jay K <<a href="mailto:jayk123@hotmail.com" target="_blank">jayk123@hotmail.com</a>>; <a href="mailto:m3devel@elegosoft.com" target="_blank">m3devel@elegosoft.com</a> <<a href="mailto:m3devel@elegosoft.com" target="_blank">m3devel@elegosoft.com</a>><br />
<b>Subject:</b> Re: [M3devel] eliminating lazy/strict align</font>
<div> </div>
</div>
<div>
<div>Hi!</div>
<div><br />
</div>
<div>  </div>
<div> I hope, that ReactOs as "free Windows" and(or) projects like OpenNT can be solution.</div>
<div><br />
</div>
<div>( *nix can't. Main reason: W N T := V++ M++ S++)</div>
<div><br />
</div>
<div> In addition, it's good idea convert all source code of OS from C language to Modula-3.</div>
<div><br />
</div>
<div> May be except 16bit part ( boot loader, MS DOS and Win16 emulation). It's can be convert to Modula-2.</div>
<div><br />
</div>
<div>> <span style="font-family:'arial';font-size:10pt">own linker</span></div>
<div><span style="font-family:'arial';font-size:10pt"><br />
</span></div>
<div><span style="font-family:'arial';font-size:10pt">  It's looks like "Oberon way".</span></div>
<div><br />
</div>
<div><br />
</div>
<div><span style="font-family:'arial';font-size:10pt">> free C tools (e.g. Pelles C)</span></div>
<div><span style="font-family:'arial';font-size:10pt"><br />
</span></div>
<div><span style="font-family:'arial';font-size:10pt"> Is it has free source code?</span></div>
<div><span style="font-family:'arial';font-size:10pt">It's based on lcc, that's good.</span></div>
<div><br />
</div>
<div>> <span style="font-family:'arial';font-size:10pt">latest Visual Studio</span></div>
<div><span style="font-family:'arial';font-size:10pt"><br />
</span></div>
<div><span style="font-family:'arial';font-size:10pt"> Why not? It's have native support of utf-8.</span></div>
<div><br />
</div>
<div>> <span style="font-family:'arial';font-size:10pt">Windows 7 Pro</span></div>
<div><span style="font-family:'arial';font-size:10pt"><br />
</span></div>
<div><span style="font-family:'arial';font-size:10pt"> As I known, Win 7 has equal telemetry level as Win 10.</span></div>
<div>( It's instaled by monthly hotfixes. 3-5 years ago)</div>
<div><br />
</div>
<div>Best regards, Victor Miasnikov</div>
<div><br />
</div>
<div><br />
</div>
<div>08.03.2021, 17:54, "Dirk Muysers" <<a href="mailto:dmuysers@hotmail.com" target="_blank">dmuysers@hotmail.com</a>>:</div>
<blockquote>
<div id="e750baae65d472449aab553c1b27fbfgmail-m_1568685723368508669x_3703dff1190c180ca2d747abb9609bd2__MailbirdStyleContent" dir="ltr" style="color:rgb( 0 , 0 , 0 );font-family:'arial';font-size:10pt;text-align:left">
The less M3 depends on Windows, the better. Don't oblige me to download the latest Visual Studio for Windows 10. For the moment I stick to AMD64 Windows 7 Pro (and a good Norton protection) because I want to own my computer instead of Microsoft owning it, spying
 on me, and force-install new versions that sometimes are buggy and prevent you from using your box as it happened lately. I think M3 should have at least its own linker or use free C tools (e.g. Pelles C) rather than MS's monstruous infrastructure.
<div></div>
<blockquote style="border-left-style:solid;border-width:1px;margin-left:0px;margin-top:20px;padding-left:10px">
<p style="color:rgb( 170 , 170 , 170 );margin-top:10px">On 08/03/2021 10:35:19, Jay K <<a href="mailto:jayk123@hotmail.com" target="_blank">jayk123@hotmail.com</a>> wrote:</p>
<div style="font-family:'arial' , 'helvetica' , sans-serif">
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
I'm looking at target-specificness in m3front/m3middle again, and lazyalign shows up.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
I would really really really like targets to have far less difference.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<span style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">I believe it is mostly counter productive.</span></div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
I understand x86 can pack things more tightly and this can save memory with certain structures.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
And sharing data with C is made easier sometimes.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
But I want the target matrix to be: <span style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">(NT or Posix) and (32bit or 64bit) and (endian)</span></div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<span style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">and then 32bit and big endian can be considered unusual, so</span><br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
people can just chose to download Windows or Unix archives,</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
and I don't think x86/amd64 merit a further expansion of this matrix.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
The system will be easier to setup, as long as it remains "self hosted".</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
  (Rewriting m3front in C or C++ is another alternative.)</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
This will break people's Pickles?<br />
Or the Pickle code will adapt, just as if tranferring across architecture?<br />
I think it will adapt.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
The lazyalign and strictalign pragmas would be ignored, or warn.</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
The way they are implemented seems dubious, in that when you see lazyalign,</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
it alters Target, and I don't know if the ordering of that is good -- does adding</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
a lazyalign type to a library change the code or layout of the entire library?</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
Thoughts please?</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
<br />
</div>
<div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">
 - Jay</div>
</div>
</blockquote>
</div>
<img height="1" src="https://tracking.getmailbird.com/OpenTrackingPixel/?messageId=Mailbird-e0f50663-7dc2-48e5-804f-8596f96e3624@hotmail.com&senderHash=7C02C40A7B379A07BCD8ED251F69A75A67BA121D56B24ACC64170A95F0D0C6A4&recipientHash=2B75E3E3DE5EE95514E28144F7FF217E4818AA12371CBC827E3E541A2097527F&internalId=87a8f667-bdbb-4e5b-aa8c-379307031075" width="1" style="border:0px" />
 ,
<p>_______________________________________________<br />
M3devel mailing list<br />
<a href="mailto:M3devel@elegosoft.com" target="_blank">M3devel@elegosoft.com</a><br />
<a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fm3lists.elegosoft.com%2Fmailman%2Flistinfo%2Fm3devel&data=04%7C01%7C%7C7341e3aba9f347cebfe308d8e2585835%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637508216352212030%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=HiG8FGj5U111E2FiqOZaIV1iK3mISc4WVZ6CB2uki1c%3D&reserved=0" target="_blank">https://m3lists.elegosoft.com/mailman/listinfo/m3devel</a><br />
</p>
</blockquote>
</div>
</div>
</div>

_______________________________________________<br />
M3devel mailing list<br />
<a href="mailto:M3devel@elegosoft.com" target="_blank">M3devel@elegosoft.com</a><br />
<a href="https://m3lists.elegosoft.com/mailman/listinfo/m3devel" rel="noreferrer" target="_blank">https://m3lists.elegosoft.com/mailman/listinfo/m3devel</a><br />
</blockquote></div>
</blockquote>