<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
 - sounds very good<BR>
 <BR>
 <BR>
 - no active target defaults to user threads <BR>
   The "closest" is FreeBSD 4.x. I mean, you know, that is the only one anyone here has expressed a recent desire to use, and used it and it was made to work. He can locally edit m3makefile.<BR>
 <BR>
 <BR>
 - I don't know of any significant platform without pthreads except NT and hypothetical DJGPP (Linux 2.4 mentioned below)<BR>
 <BR>
 <BR>
 - The following I know don't have make/get/set/swapcontext:<BR>
   any version of Cygwin, and I suspect not worth worrying about <BR>
   any version of NT, and I suspect not worth worrying about <BR>
     I don't think fibers are viable but maybe.<BR>
          Fibers don't interact propertly with any locking construct except Interlocked. e.g. critical sections nor any kernel object "work".<BR>
     Win7 has "user mode scheduling" that addresses problems with fibers but I think only on 64bit? <BR>
   any version of OpenBSD <BR>
   Darwin <=10.4; I synthesized them for PowerPC/10.4; you might try that (I found the PowerPC compat on x86 to be not very good though, maybe that was debugging only).<BR>
 <BR>
 <BR>
 - I think HP-UX manpage has strong warnings about these functions, being very version specific/fragile or something. But HP-UX has pthreads.<BR>
 <BR>
 <BR>
 - old Linux 2.4 still seems to be in somewhat active use, in specialized areas -- my router and a networked hard drive I have; pthreads is there I think, but not NPTL.<BR>
 <BR>
 <BR>
I wonder if we should have<BR>
  I386_FREEBSD_USERTHREADS<BR>
  I386_LINUX_USERTHREADS <BR>
  SPARC_SOLARIS_USERTHREADS?<BR>
 <BR>
and give them decent test/Hudson/release coverage?<BR>
 <BR>
Maybe<BR>
  I386_FREEBSD4_USERTHREADS <BR>
  I386_LINUX24_USERTHREADS<BR>
 <BR>
 <BR>
To "ghettoize" them via naming only, though they'd actually work and be tested on current systems?<BR>
 <BR>
That is, you know, make userthreads work a bunch, be more portable, maintainable, great, then what? They still sit unused/unbuilt/untested? How to fix that? At least built/testet?<BR>
 <BR>
Maybe just with cm3 -D thing, don't release them, just build/test them regularly?<BR>
 <BR>
 > The advantage of this move will be to eliminate a large swath of "cloned" <BR>
 <BR>
Good!<BR>
 <BR>
Specific questions about specific platforms ask me?<BR>
You can see the answer is kind of backwards -- notice how every platform I have introduced I didn't add user threads support for. Question is only then for old/dead/unused/dormant platforms, and most of them DO have pthreads these days. I have a few machines not setup or not powered on -- Irix (32bit and 64bit in one) and AIX (32bit and 64bit in one) and HP-UX/HPPA (32bit and 64bit in one), Linux/IA64 specifically are powered off. VMS/Alpha, VMS/IA64 HP-UX/IA64, Tru64 I haven't gotten up and running yet, but I think they all support pthreads a long time now so no big worry. I also don't have have Linux/PPC64 or Darwin/PPC64 capability yet. (I think after this release Linux/IA64 should be done and will require a small change -- it has "two stacks" to scan.)<BR>
 <BR>
 > but don't have easy access to existing ABIs for other targets<BR>
 <BR>
Please try the ssh commands I sent?<BR>
That'll give you OpenBSD. FreeBSD maybe but I think it is off. I can provide more but for purposes of this line of questioning doesn't seem criticla.<BR>
Birch gives you Linux/AMD64 and, in (slow/VM) a fashion NT and maybe Cygwin.<BR>
 <BR>
 <BR>
 - Jay<BR> <BR>
<HR id=stopSpelling>
From: hosking@cs.purdue.edu<BR>To: m3devel@elegosoft.com<BR>Date: Fri, 23 Oct 2009 14:43:59 -0400<BR>Subject: [M3devel] User-level threads using makecontext/getcontext/swapcontext<BR><BR>
<DIV>I have a (slightly rough) derivative version of ThreadPosix working on I386_DARWIN (implemented more along the lines of the current ThreadPThread) which abstracts all the nasty C-isms into ThreadPosixC.c.  I would like to propose that this become our updated user-level threads implementation to complement ThreadPThread and ThreadWin32, but doing so will require reworking the C code for the other targets.  My question is the following: which targets currently default to ThreadPosix (instead of ThreadPThread)?  Do those targets all have makecontext/getcontext/swapcontext (or equivalents that might be simulated with setjmp/longjmp)?  I can make the effort to ensure things work for SOLgnu/SOLsun, *_DARWIN, LINUXLIBC6, but don't have easy access to existing ABIs for other targets.  Can someone else do that?  The advantage of this move will be to eliminate a large swath of "cloned" RTMachine and RTThread implementations and simplify porting.  If we are in agreement on this then I can begin to tidy up and commit my changes.  The advantage of retaining the user-level threads code is its benefit as a live reference implementation of the Modula-3 thread semantics.</DIV><BR>
<DIV><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate">
<DIV style="WORD-WRAP: break-word"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate">
<DIV style="WORD-WRAP: break-word"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=ecxApple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate">
<DIV><FONT class=ecxApple-style-span color=#0000ff><FONT class=ecxApple-style-span face="Gill Sans"><SPAN class=ecxApple-style-span style="COLOR: rgb(0,0,255); FONT-FAMILY: 'Gill Sans'"><SPAN class=ecxApple-style-span style="COLOR: rgb(0,0,255); FONT-FAMILY: 'Gill Sans'">Antony Hosking</SPAN></SPAN></FONT></FONT><FONT class=ecxApple-style-span face="Gill Sans"><SPAN class=ecxApple-style-span style="FONT-FAMILY: 'Gill Sans'"><SPAN class=ecxApple-style-span style="FONT-FAMILY: 'Gill Sans'"><SPAN class=ecxApple-converted-space> </SPAN>|<SPAN class=ecxApple-converted-space> </SPAN></SPAN></SPAN><SPAN class=ecxApple-style-span style="FONT-FAMILY: 'Gill Sans'"><SPAN class=ecxApple-style-span style="FONT-FAMILY: 'Gill Sans'">Associate Professor</SPAN></SPAN><SPAN class=ecxApple-style-span style="FONT-FAMILY: 'Gill Sans'"><SPAN class=ecxApple-style-span style="FONT-FAMILY: 'Gill Sans'"> | Computer Science | Purdue University</SPAN></SPAN></FONT></DIV>
<DIV><FONT class=ecxApple-style-span face=GillSans-Light><SPAN class=ecxApple-style-span style="FONT-FAMILY: GillSans-Light">305 N. University Street | West Lafayette | IN 47907 | USA</SPAN></FONT></DIV>
<DIV><FONT class=ecxApple-style-span face="Gill Sans" color=#0000ff><SPAN class=ecxApple-style-span style="COLOR: rgb(0,0,255); FONT-FAMILY: 'Gill Sans'"><SPAN class=ecxApple-style-span style="COLOR: rgb(0,0,255); FONT-FAMILY: 'Gill Sans'">Office</SPAN></SPAN></FONT><FONT class=ecxApple-style-span face=GillSans-Light><SPAN class=ecxApple-style-span style="FONT-FAMILY: GillSans-Light"><SPAN class=ecxApple-style-span style="FONT-FAMILY: GillSans-Light"> +1 765 494 6001 |<SPAN class=ecxApple-converted-space> </SPAN></SPAN></SPAN></FONT><FONT class=ecxApple-style-span face="Gill Sans" color=#0000ff><SPAN class=ecxApple-style-span style="COLOR: rgb(0,0,255); FONT-FAMILY: 'Gill Sans'"><SPAN class=ecxApple-style-span style="COLOR: rgb(0,0,255); FONT-FAMILY: 'Gill Sans'">Mobile</SPAN></SPAN></FONT><FONT class=ecxApple-style-span face=GillSans-Light><SPAN class=ecxApple-style-span style="FONT-FAMILY: GillSans-Light"><SPAN class=ecxApple-style-span style="FONT-FAMILY: GillSans-Light"><SPAN class=ecxApple-converted-space> </SPAN>+1 765 427 5484</SPAN></SPAN></FONT></DIV>
<DIV><FONT class=ecxApple-style-span face=GillSans-Light><BR class=ecxkhtml-block-placeholder></FONT></DIV></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN><BR class=ecxApple-interchange-newline></SPAN></DIV></SPAN></DIV></SPAN><BR class=ecxApple-interchange-newline></DIV><BR>                                       </body>
</html>