Jerome,
I am fine with having a macro IEEE_1666_SYSTEMC with a value that is 
hardcoded in the IEEE 1666-2011 standard (e.g. 201101L) together with a 
statement in the standard that says it is the intent that future versions 
of the standard will replace this macro with a numerically greater value.
I don't think the TLM version macros are useless at all: I think the most 
likely chain of events is that OSCI will make a point release of TLM-2.0 
before the next IEEE re-standardization (5 years from now) and that 
one-by-one EDA vendors will gradually adopt the latest OSCI release with 
at most minor alterations. The TLM version macros can then be used by 
applications to detect the version, long before the enhancements find 
there way into the IEEE. Whatever, since we all agree the TLM version 
macros are necessary for compatibility, we have nothing left to argue 
about 8=)
I disagree with your assumption that the version number of the IEEE 
standard will have much practical impact. I can't think of many EDA tools 
that offers 100% support for any IEEE standard, and SystemC is no 
exception. Vendors always have subsets, enhancements, and bugs. Even the 
OSCI PoC standard does not support dynamic processes or fixed point types 
unless you remember to turn them on, and it never has implemented 
sc_signal correctly out-of-the-box, yet presumably we would want it to 
define IEEE_1666_SYSTEMC? But again, I don't think we have anything left 
to argue about.
I propose we add IEEE_1666_SYSTEMC as defined above together with a full 
set of SC and TLM-2.0 macros/functions, modified with extern const and 
removing inline as proposed by Philipp.
Are we done?
Cheers,
John A
From:
Jerome CORNET <jerome.cornet@st.com>
To:
"john.aynsley@doulos.com" <john.aynsley@doulos.com>, 
"systemc-p1666-technical@eda.org" <systemc-p1666-technical@eda.org>
Date:
07/10/2010 15:57
Subject:
RE: Fw: Version number macros
John,
 
comments below.
 
From: john.aynsley@doulos.com [mailto:john.aynsley@doulos.com] 
Sent: Thursday, October 07, 2010 12:47 PM
To: Jerome CORNET; systemc-p1666-technical@eda.org
Subject: RE: Fw: Version number macros
 
All, 
I am okay with adding a macro to 1666 which indicates which version of the 
standard an implementation is nominally intended to support. But I would 
like to spell out a few things, just to be sure we are all on the same 
page. My apologies if this was all obvious to you anyway 8=) 
* I would prefer the name IEEE_1666_SYSTEMC, but only because that has the 
same rhythm as the actual title of the standard  (IEEE Standard SystemC® 
Language Reference Manual) 
No problem with that.
* The IEEE standard is set in concrete for a few years. The standard can 
try to anticipate the future, but cannot specify version numbers for 
future patches, branches etc. So, exactly what do we mean by defining a 
standard symbol with a standard value like 201001L? Who is going to 
control the succession of values (201002L and so forth). It would make 
sense to me that each IEEE standard specifies a value that identifies 
itself and itself alone (e.g. 2011L), rather than trying to allow for 
future increments. Say the IEEE releases a Clarification document 
alongside 1666-2011 in a few years time. That clarification document would 
specify its own value, e.g IEEE_1666_SYSTEMC  2013L (with some appropriate 
constraints on the data type).  But perhaps this is just what you intended 
all along? In which case 201001L (or whatever we finally choose) is fine, 
though I might prefer  yyyymmL 
I have taken a look again at the C++ standard. Indeed it is (mostly) on 
the same line as you. They basically say ?__cplusplus? is defined the 
following value xxxxxxx (which is hardcoded). There is
however a note that says: It is intended that future versions of this 
standard will replace the value of this macro with a greater value. (which 
is enough wording for the macro to be useful; i.e.
it can be tested with a < or > operator).
Now, I am not sure to understand what you prefer. To clarify my opinion: 
if we release in 2011 a clarification document,
and that the implementation wants to indicate that it obeys the 
clarification, I would choose 201002L as the macro value. That would 
means: this is ?revision? 2 of the IEEE 1666-2010 norm.
The 2 or whatever is up to us. In the case of C++, they start their mm at 
11 (probably because they made 10 attempts before?). But I would change 
the ?year? part only every 5 years (at each big norm revision).
* The presence of this macro does NOT guarantee compliance to any standard 
or to any version of any standard. It is just an indication of intent. 
"This implementation is supposed to support IEEE standard version 
such-and-such". That's another reason I don't see any point in making it 
fine-grained. It should just be enough to identify a specific version of a 
specific IEEE standard (and they don't change that often) 
I am not really convinced by that argument (and your next point seems 
contradictory with it btw). Anyway we are not writing a lawyer?s document 
;-)
I was just questioning what effective use can be done of the existing 
TLM_xxxx_VERSION macros in the TLM part (and the only answers I have got 
revolve around ?this is pretty
much useless as is?). That said, I prefer keeping / enhancing them and 
preserve backward compatibility.
* The OSCI PoC implementations (SystemC and TLM-2.0) have a special 
status, because OSCI is the "custodian" of SystemC standardization. When 
OSCI release an updated standard (without necessarily submitting this to 
the IEEE) then OSCI will increment the version numbers appropriately. Most 
software vendors would wish to indicate that their products are compatible 
with certain versions of the OSCI PoC implementations (as well as with 
certain IEEE standards), so would choose appropriate version numbers 
(perhaps using the same MAJOR and MINOR numbers but adding their own 
ORIGINATOR and PATCH). That is their call. We could make stronger 
recommendations in P1666 though? The point I'm making is that vendors will 
probably have good commercial reasons for basing their product versions on 
OSCI PoC versions as well as making a claim to support an IEEE standard. 
They are unlikely to want to generate SystemC or TLM-2 versions unrelated 
to the OSCI PoC. 
I am not sure this way of thinking is not counter-productive with respect 
to the IEEE norm. We want (at least I) the norm to be the reference in 
terms of features that can be used or not.
The prefered way of testing, say the availability of process control 
extension would be to look for the 2010 version number of the norm, 
instead of  saying that version 2.3.x of the OSCI PoC implements it
, everyone is based on it, therefore that the SYSTEM_VERSION macros can be 
used.
However, I see the SystemC version macros as useful to test for a 
particular SystemC implementation, to say implement a workaround or 
benefit for a particular feature that is not in the norm.
 
Regards,
Jerome
-- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Thu Oct 7 09:45:42 2010
This archive was generated by hypermail 2.1.8 : Thu Oct 07 2010 - 09:45:44 PDT