You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(80) |
Jun
(71) |
Jul
(34) |
Aug
(58) |
Sep
|
Oct
(220) |
Nov
(146) |
Dec
(36) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(28) |
Feb
(152) |
Mar
(293) |
Apr
(213) |
May
(158) |
Jun
(96) |
Jul
(78) |
Aug
(39) |
Sep
(169) |
Oct
(128) |
Nov
(83) |
Dec
(149) |
2003 |
Jan
(155) |
Feb
(14) |
Mar
(60) |
Apr
(86) |
May
(92) |
Jun
(109) |
Jul
(25) |
Aug
(44) |
Sep
(10) |
Oct
(39) |
Nov
(37) |
Dec
(128) |
2004 |
Jan
(71) |
Feb
(199) |
Mar
(192) |
Apr
(360) |
May
(93) |
Jun
(75) |
Jul
(51) |
Aug
(195) |
Sep
(390) |
Oct
(186) |
Nov
(173) |
Dec
(331) |
2005 |
Jan
(102) |
Feb
(154) |
Mar
(160) |
Apr
(88) |
May
(79) |
Jun
(78) |
Jul
(126) |
Aug
(94) |
Sep
(110) |
Oct
(187) |
Nov
(188) |
Dec
(31) |
2006 |
Jan
(12) |
Feb
(40) |
Mar
(123) |
Apr
(102) |
May
(62) |
Jun
(36) |
Jul
(19) |
Aug
(31) |
Sep
(59) |
Oct
(67) |
Nov
(57) |
Dec
(35) |
2007 |
Jan
(153) |
Feb
(53) |
Mar
(27) |
Apr
(11) |
May
(49) |
Jun
(3) |
Jul
(56) |
Aug
(58) |
Sep
(30) |
Oct
(57) |
Nov
(47) |
Dec
(155) |
2008 |
Jan
(71) |
Feb
(68) |
Mar
(79) |
Apr
(72) |
May
(82) |
Jun
(10) |
Jul
(19) |
Aug
(25) |
Sep
(17) |
Oct
(10) |
Nov
(32) |
Dec
(9) |
2009 |
Jan
(26) |
Feb
(1) |
Mar
(1) |
Apr
(12) |
May
(16) |
Jun
(7) |
Jul
(12) |
Aug
(22) |
Sep
(21) |
Oct
|
Nov
(7) |
Dec
|
2010 |
Jan
(3) |
Feb
(3) |
Mar
(1) |
Apr
|
May
(5) |
Jun
(5) |
Jul
|
Aug
|
Sep
(4) |
Oct
(2) |
Nov
|
Dec
(6) |
2011 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(8) |
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(8) |
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
(11) |
Mar
(1) |
Apr
(4) |
May
|
Jun
|
Jul
(2) |
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(5) |
Feb
|
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
(2) |
Dec
(1) |
2015 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(6) |
2016 |
Jan
(8) |
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2017 |
Jan
(3) |
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2018 |
Jan
(1) |
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
|
2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
2022 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2023 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
|
Dec
|
From: Eric B. <er...@go...> - 2016-11-25 21:06:54
|
Hi Wolfgang, Do you have an example where it actually crashes? I tried that: s := "" s.copy ("") And it did not crash. I noticed something wrong in your reasoning below. You wrote: >> If the string to copy is empty, i.e. `old_area=Void' then `area' is >> void, too, after `standard_copy' This is not true. `old_area' is not affected by `standard_copy'. It's a local variable, not an attribute. And as far as I can see, the `area' of a STRING_8 is never void. Even for an empty string, `make' creates an `area'. The reason why there is a test for Void with `old_area' is that when called from `twin', the target of `copy' may be a non-initialized object (with its reference attributes Void). -- Eric Bezault mailto:er...@go... http://www.gobosoft.com On 11/25/2016 10:37, Wolfgang Jansen wrote: > On 24/11/16 23:51, Wolfgang Jansen wrote: >> >> Hi Eric, >> >> I found an fatal error in routine READABLE_STRING_8.copy if the >> argument is a non-void but empty string. The origin text is as follows: >> >> copy (other: like Current) >> -- Reinitialize by copying the characters of `other'. >> -- (This is also used by `twin'.) >> local >> old_area: like area >> do >> if other /= Current then >> old_area := area >> standard_copy (other) >> -- Note: <= is needed as all Eiffel string should >> have an >> -- extra character to insert null character at the >> end. >> if old_area = Void or else old_area = other.area or >> else old_area.count <= count then >> -- Prevent copying of large `area' if only a >> few characters are actually used. >> area := area.resized_area (count + 1) >> else >> old_area.copy_data (area, 0, 0, count) >> area := old_area >> end >> internal_hash_code := 0 >> end >> ensure then >> new_result_count: count = other..count >> -- same_characters: For every `i' in 1..`count', `item' >> (`i') = `other'.`item' (`i') >> end >> >> >> If the string to copy is empty, i.e. `old_area=Void' then `area' is >> void, too, >> after `standard_copy'. Then branch `if old_area=Void or else ...' >> leads to instruction `area := area.resized_area (count + 1)' that must >> crash. I propose the following modification (it works fine for me): >> >> >> copy (other: like Current) >> -- Reinitialize by copying the characters of `other'. >> -- (This is also used by `twin'.) >> local >> old_area: like area >> do >> if other /= Current then >> old_area := area >> standard_copy (other) >> -- Note: <= is needed as all Eiffel string should >> have an >> -- extra character to insert null character at the >> end. >> if old_area = Void then >> elseif old_area = other.area or else old_area.count <= >> count then >> -- Prevent copying of large `area' if only a >> few characters are actually used. >> area := area.resized_area (count + 1) >> else >> old_area.copy_data (area, 0, 0, count) >> area := old_area >> end >> internal_hash_code := 0 >> end >> ensure then >> new_result_count: count = other..count >> -- same_characters: For every `i' in 1..`count', `item' >> (`i') = `other'.`item' (`i') >> end >> >> >> I do not know whether the bug is already in ISE's distribution of the >> class. >> >> Best regards >> Wolfgang >> >> -- >> Dr. Wolfgang Jansen >> Lauenburger Straße 40 >> D-12169 Berlin >> >> Tel: (+49) 0172 40 86 916 >> e-mail: wo....@ka... >> >> >> ------------------------------------------------------------------------------ >> >> >> _______________________________________________ >> gobo-eiffel-develop mailing list >> gob...@li... >> https://lists.sourceforge.net/lists/listinfo/gobo-eiffel-develop > > Sorry, I introduced another bug into the routine, now it fails if the > target string was empty. > We need to guard both possibilities: the target is empty or the source > is empty. The improved improvement of the critical lines reads as follows: > > if area = Void then > -- Nothing to copy or modify. > elseif old_area = Void or else old_area.count <= count > or else old_area = area then > -- Prevent copying of large `area' if only a few > characters are actually used. > area := area.resized_area (count + 1) > else > old_area.copy_data (area, 0, 0, count) > area := old_area > end > > The `if' condition guards the call in the `elseif' branch, the left > `elseif' condition guards the following call and the call in the `else' > branch. What case ever occurs, the target has at least as many > characters as needed, all characters of the source are copied, and > `count' is set correctly. > > -- > Dr. Wolfgang Jansen > Lauenburger Straße 40 > D-12169 Berlin > > Tel: (+49) 0172 40 86 916 > e-mail: wo....@ka... > > > > ------------------------------------------------------------------------------ > > > > _______________________________________________ > gobo-eiffel-develop mailing list > gob...@li... > https://lists.sourceforge.net/lists/listinfo/gobo-eiffel-develop > |
From: Wolfgang J. <wo....@ka...> - 2016-11-25 09:38:01
|
On 24/11/16 23:51, Wolfgang Jansen wrote: > > Hi Eric, > > I found an fatal error in routine READABLE_STRING_8.copy if the > argument is a non-void but empty string. The origin text is as follows: > > copy (other: like Current) > -- Reinitialize by copying the characters of `other'. > -- (This is also used by `twin'.) > local > old_area: like area > do > if other /= Current then > old_area := area > standard_copy (other) > -- Note: <= is needed as all Eiffel string should > have an > -- extra character to insert null character at the > end. > if old_area = Void or else old_area = other.area or > else old_area.count <= count then > -- Prevent copying of large `area' if only a > few characters are actually used. > area := area.resized_area (count + 1) > else > old_area.copy_data (area, 0, 0, count) > area := old_area > end > internal_hash_code := 0 > end > ensure then > new_result_count: count = other.count > -- same_characters: For every `i' in 1..`count', `item' > (`i') = `other'.`item' (`i') > end > > > If the string to copy is empty, i.e. `old_area=Void' then `area' is > void, too, > after `standard_copy'. Then branch `if old_area=Void or else ...' > leads to instruction `area := area.resized_area (count + 1)' that must > crash. I propose the following modification (it works fine for me): > > > copy (other: like Current) > -- Reinitialize by copying the characters of `other'. > -- (This is also used by `twin'.) > local > old_area: like area > do > if other /= Current then > old_area := area > standard_copy (other) > -- Note: <= is needed as all Eiffel string should > have an > -- extra character to insert null character at the > end. > if old_area = Void then > elseif old_area = other.area or else old_area.count <= > count then > -- Prevent copying of large `area' if only a > few characters are actually used. > area := area.resized_area (count + 1) > else > old_area.copy_data (area, 0, 0, count) > area := old_area > end > internal_hash_code := 0 > end > ensure then > new_result_count: count = other.count > -- same_characters: For every `i' in 1..`count', `item' > (`i') = `other'.`item' (`i') > end > > > I do not know whether the bug is already in ISE's distribution of the > class. > > Best regards > Wolfgang > > -- > Dr. Wolfgang Jansen > Lauenburger Straße 40 > D-12169 Berlin > > Tel: (+49) 0172 40 86 916 > e-mail:wo....@ka... > > > ------------------------------------------------------------------------------ > > > _______________________________________________ > gobo-eiffel-develop mailing list > gob...@li... > https://lists.sourceforge.net/lists/listinfo/gobo-eiffel-develop Sorry, I introduced another bug into the routine, now it fails if the target string was empty. We need to guard both possibilities: the target is empty or the source is empty. The improved improvement of the critical lines reads as follows: if area = Void then -- Nothing to copy or modify. elseif old_area = Void or else old_area.count <= count or else old_area = area then -- Prevent copying of large `area' if only a few characters are actually used. area := area.resized_area (count + 1) else old_area.copy_data (area, 0, 0, count) area := old_area end The `if' condition guards the call in the `elseif' branch, the left `elseif' condition guards the following call and the call in the `else' branch. What case ever occurs, the target has at least as many characters as needed, all characters of the source are copied, and `count' is set correctly. -- Dr. Wolfgang Jansen Lauenburger Straße 40 D-12169 Berlin Tel: (+49) 0172 40 86 916 e-mail: wo....@ka... |
From: Wolfgang J. <wo....@ka...> - 2016-11-24 22:51:39
|
Hi Eric, I found an fatal error in routine READABLE_STRING_8.copy if the argument is a non-void but empty string. The origin text is as follows: copy (other: like Current) -- Reinitialize by copying the characters of `other'. -- (This is also used by `twin'.) local old_area: like area do if other /= Current then old_area := area standard_copy (other) -- Note: <= is needed as all Eiffel string should have an -- extra character to insert null character at the end. if old_area = Void or else old_area = other.area or else old_area.count <= count then -- Prevent copying of large `area' if only a few characters are actually used. area := area.resized_area (count + 1) else old_area.copy_data (area, 0, 0, count) area := old_area end internal_hash_code := 0 end ensure then new_result_count: count = other.count -- same_characters: For every `i' in 1..`count', `item' (`i') = `other'.`item' (`i') end If the string to copy is empty, i.e. `old_area=Void' then `area' is void, too, after `standard_copy'. Then branch `if old_area=Void or else ...' leads to instruction `area := area.resized_area (count + 1)' that must crash. I propose the following modification (it works fine for me): copy (other: like Current) -- Reinitialize by copying the characters of `other'. -- (This is also used by `twin'.) local old_area: like area do if other /= Current then old_area := area standard_copy (other) -- Note: <= is needed as all Eiffel string should have an -- extra character to insert null character at the end. if old_area = Void then elseif old_area = other.area or else old_area.count <= count then -- Prevent copying of large `area' if only a few characters are actually used. area := area.resized_area (count + 1) else old_area.copy_data (area, 0, 0, count) area := old_area end internal_hash_code := 0 end ensure then new_result_count: count = other.count -- same_characters: For every `i' in 1..`count', `item' (`i') = `other'.`item' (`i') end I do not know whether the bug is already in ISE's distribution of the class. Best regards Wolfgang -- Dr. Wolfgang Jansen Lauenburger Straße 40 D-12169 Berlin Tel: (+49) 0172 40 86 916 e-mail: wo....@ka... |
From: Berend de B. <be...@po...> - 2016-05-25 21:35:23
|
>>>>> "Eric" == Eric Bezault <er...@go...> writes: Eric> The reason why I put only one ECF file is that I don't want Eric> to have to maintain several ECF files. That's why we Eric> invented Xace in the first place: avoid having to maintain Eric> multiple files. It seems your current .ecf files were hand-generated, so that's why I mentioned this. But isn't this only temporary? I.e. once we all move to void safe, I think ecf is sufficient, isn't it? So another solution would be a gexace patch then. Just changing the version number solves most of the problems. It seems ISE Eiffel is extremely finicky on having the same versions on all .ecf files, mixing versions produces very odd results. But does generating library ecf files work actually? I noticed you have to repeat include a reference to every library that is used by a library, so a completely different concept from xace. But having gexace generate a single .ecf file with a single ecf version number for a system sounds like a much simpler world than what ecf is currently trying to achieve. -- All the best, Berend de Boer |
From: Eric B. <er...@go...> - 2016-05-25 11:19:21
|
On 5/25/2016 04:29, Berend de Boer wrote: > As there is a library.ecf for void safe programs, how about adding a > library-unsafe.ecf? I have a bunch ready in case this is a good idea. The reason why I put only one ECF file is that I don't want to have to maintain several ECF files. That's why we invented Xace in the first place: avoid having to maintain multiple files. It's a shame that with ECF we have to duplicate files just because we don't want the same settings. This is a bad design in my opinion. My plan is to improve Xace to be better at generating ECF files. Then we would be able to maintain only one file (the Xace file) and generate several ECF files depending on the options we want. -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |
From: Berend de B. <be...@po...> - 2016-05-25 02:29:57
|
Hi All, As there is a library.ecf for void safe programs, how about adding a library-unsafe.ecf? I have a bunch ready in case this is a good idea. Still haven't switched to void safe, but have decided to switch to ecf (and the days of trouble getting things to compile for no gain in output). -- All the best, Berend de Boer |
From: Eric B. <er...@go...> - 2016-01-13 08:53:00
|
On 1/13/2016 03:45, Berend de Boer wrote: > Doesn't make much sense. to me, but in case something pops in your > head, let me know, else I may try to come up with a program that > repeats this. > > This is the code that creates the structure: > > local > fields: DS_HASH_TABLE [EPX_MIME_FIELD, STRING] > equality_tester: KL_CASE_INSENSITIVE_STRING_EQUALITY_TESTER > do > create fields.make (64) > create equality_tester > fields.set_key_equality_tester (equality_tester) > .... > if fields.has ("ST) then > ... > end > end When you change the key equality tester in a hash table, you should also change the hash function accordingly. Otherwise you might end up with two keys which are considered equal but which have two different hash code. l_hash_function: KL_AGENT_HASH_FUNCTION [STRING] ... create l_hash_function.make (agent STRING_.case_insensitive_hash_code) ... fields.set_hash_function (l_hash_function) -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |
From: Berend de B. <be...@po...> - 2016-01-13 02:50:09
|
>>>>> "Berend" == Berend de Boer <be...@po...> writes: Berend> if fields.has ("ST) then Just noticed that there is a field with value "St" so should find something, but doesn't. -- All the best, Berend de Boer |
From: Berend de B. <be...@po...> - 2016-01-13 02:45:42
|
Hi Eric, I just switched a KL_STRING_EQUALITY_TESTER to KL_CASE_INSENSITIVE_STRING_EQUALITY_TESTER and got a postcondition violation. Part of the stack trace: DS_HASH_TABLE search_position @35 slots_position_set: <00007FF1A127DE08> (From DS_SPARSE_CONTAINER) Postcondition violated. Fail ------------------------------------------------------------------------------- DS_HASH_TABLE search_position @35 <00007FF1A127DE08> (From DS_SPARSE_CONTAINER) Routine failure. Fail ------------------------------------------------------------------------------- DS_HASH_TABLE has @1 <00007FF1A127DE08> (From DS_SPARSE_TABLE) Routine failure. Fail ------------------------------------------------------------------------------- EPX_MIME_HEADER has @2 <00007FF1A127DD48> Routine failure. Fail ------------------------------------------------------------------------------- Doesn't make much sense. to me, but in case something pops in your head, let me know, else I may try to come up with a program that repeats this. This is the code that creates the structure: local fields: DS_HASH_TABLE [EPX_MIME_FIELD, STRING] equality_tester: KL_CASE_INSENSITIVE_STRING_EQUALITY_TESTER do create fields.make (64) create equality_tester fields.set_key_equality_tester (equality_tester) .... if fields.has ("ST) then ... end end -- All the best, Berend de Boer |
From: Berend de B. <be...@po...> - 2016-01-13 02:42:40
|
>>>>> "Eric" == Eric Bezault <er...@go...> writes: Eric> As a consequence, we should now consider that the repository Eric> on GitHub is the official Gobo repository from which one Eric> needs to fork in order to contribute to the project. The Eric> repository on Sourceforge has been made read-only and is now Eric> a mirror of the one in GitHub. Great! -- All the best, Berend de Boer |
From: Eric B. <er...@go...> - 2016-01-09 10:19:03
|
Hello, So far, the Git repository in Sourceforge was considered as the "official" Gobo repository, and there was one on GitHub as mirror. I noticed during the past couple of years that people who wanted to contribute to Gobo were actually forking the repository hosted on GitHub, and then were submitted pull requests from their GitHub fork. I find this solution more convenient than having to set permissions to the Sourceforge repository when people ask for it, and then have to "fix" what they pushed to the repository when they broke something. As a consequence, we should now consider that the repository on GitHub is the official Gobo repository from which one needs to fork in order to contribute to the project. The repository on Sourceforge has been made read-only and is now a mirror of the one in GitHub. -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |
From: Eric B. <er...@go...> - 2016-01-09 10:09:07
|
On 1/8/2016 23:54, Berend de Boer wrote: > Hi All, > > I'm trying to convert a program to be void-safe. How do I enable that > in system.xace? > > I've tried to set the option: > > <option void_safety="complete"/> > > but doesn't appear to do anything. Xace does not support void-safety yet. I'll add it in the near future. This task is not as easy as it seems, as you noticed below. > I've also tried to grab a generated compile_ise.ecf and make that void > safe by setting to conformance, and changing the libraries to the void > safe versions, but that gives weird compilation errors like: > > Error code: VDRD(2) > > Type error: redeclaration has non-conforming signature. > What to do: make sure that redeclaration uses signature (number and > types of arguments and result) conforming to that of the original. > > Class: UC_CHARACTER > Redefined feature: out: STRING_8 From: UC_CHARACTER > Precursor: out: STRING_8 From: ANY > > which doesn't make much sense to me, so perhaps an earlier error causing > this. I would assume that the version of `out' in ANY is considered by the compiler as attached whereas the one in UC_CHARACTER is considered as detachable. So I assume that you have a reference to base-safe.ecf in your compile_ise.ecf, but this latter ECF file does not specify the option 'is_attached_by_default'. -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |
From: Berend de B. <be...@po...> - 2016-01-08 22:54:44
|
Hi All, I'm trying to convert a program to be void-safe. How do I enable that in system.xace? I've tried to set the option: <option void_safety="complete"/> but doesn't appear to do anything. I've also tried to grab a generated compile_ise.ecf and make that void safe by setting to conformance, and changing the libraries to the void safe versions, but that gives weird compilation errors like: Error code: VDRD(2) Type error: redeclaration has non-conforming signature. What to do: make sure that redeclaration uses signature (number and types of arguments and result) conforming to that of the original. Class: UC_CHARACTER Redefined feature: out: STRING_8 From: UC_CHARACTER Precursor: out: STRING_8 From: ANY which doesn't make much sense to me, so perhaps an earlier error causing this. -- All the best, Berend de Boer |
From: Berend de B. <be...@po...> - 2016-01-08 22:18:26
|
>>>>> "Bernd" == Bernd Schoeller <be...@fa...> writes: Bernd> CMake is a huge tool-chain that needs to be ported to all Bernd> the different platforms. I would only vote for adding this Bernd> if there would be a really hard problem that we have to Bernd> solve. I agree with this assessment. Makefiles and shell scripts are pretty portable across unix. Perhaps people on Windows are thinking that cmake will solve the problem? -- All the best, Berend de Boer |
From: Wolfgang J. <wo....@ka...> - 2015-12-23 14:50:08
|
On 12/23/2015 07:38 AM, Eric Bezault wrote: > On 12/22/2015 19:42, CHAUVET Guillaume wrote: >> I hope one day GOBO will generate *.c *.h files per classes. By this >> way, we can enable ccache (natively supported by CMake 2.8.0) to detect >> what content files really change after C generation. > Note that it's not as easy as generating *.c and *.h files per classes. > Currently the Gobo compiler tries to optimize the C code generation by > performing a system level analysis of the Eiffel code. Which means that, > unless you just change one character in one string, it is likely that > every C file would change after each compile. In order to be truly > incremental at the C level, the Gobo compiler should have another C > code generation mode which is more focused on preserving the C code > unmodified rather than on global optimization. This is the same thing > as in ISE's EiffelStudio with workbench (frozen) and finalize modes. > Currently the Gobo compiler only has the finalize mode. > Hi Eric, Guillaume, excuse when i drop into your discussion. Conceptually, splitting C code per class or type should not very hard: writing a type's struct or routine had to be enclosed into file-open, file-close parentheses, one file per type. I see the problem at another level. Consider a large Eiffel system, e.g. the GEC. It consists of about 2000 alive types (i.e. types where C code is to be generated) from about 670 classes. Compilation may be per type or class but linkage needs all file names in the command line. The Unix command line allows after resolution of wildcards etc. for about 32000 characters (I do not know which restrictions Windows applies, if any). So we have up to 16 characters for 2000 files, three charactersare reserved: the dot, the extension 'c', the separating blank. This means class or type names are in general too long and artificial file names are to be generated like "gec1234.c". This is the way, EiffelStudio tackles the problem: compilation of the many C files having cryptic names in manageable chunks to intermediary object files and then linkage of the much fewer objects. The problem for GEC would be to generate the same file names for unchanged types/classes across various compilations, since it was the intension to reuse all the unchanged C code. EiffelStudio is an IDE, comparison of system states between forthcoming compilations is duty of the project management, unchanged parts will be detected and can be reused. So, the GEC had first to be upgraded to an IDE. Taking all together, it is worth thinking again about C code generation per type/class without turning GEC into an IDE. The true complication is organizing the make utilities for compilation in chunks. The risk for the user is to C-compile all the stuff if too many generated file names changed, the gain for the user is much less C-compilation time if file names were rather stable. Wolfgang -- Dr. Wolfgang Jansen Lauenburger Straße 40 D-12169 Berlin Tel: (+49) 0172 40 86 916 e-mail: wo....@ka... |
From: Eric B. <er...@go...> - 2015-12-23 07:15:00
|
On 12/22/2015 19:42, CHAUVET Guillaume wrote: > I hope one day GOBO will generate *.c *.h files per classes. By this > way, we can enable ccache (natively supported by CMake 2.8.0) to detect > what content files really change after C generation. Note that it's not as easy as generating *.c and *.h files per classes. Currently the Gobo compiler tries to optimize the C code generation by performing a system level analysis of the Eiffel code. Which means that, unless you just change one character in one string, it is likely that every C file would change after each compile. In order to be truly incremental at the C level, the Gobo compiler should have another C code generation mode which is more focused on preserving the C code unmodified rather than on global optimization. This is the same thing as in ISE's EiffelStudio with workbench (frozen) and finalize modes. Currently the Gobo compiler only has the finalize mode. -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |
From: CHAUVET G. <gch...@za...> - 2015-12-22 21:10:55
|
Hi Bernd, > I find it absolutely fantastic that you are contributing to GOBO. Every > help is welcome. Thank you, I've worked with Eiffel 10 years ago on my spare time. I always like this language for DbC and the strong typing. Unfortunately, my job required Javascript (Node.JS) and PHP like languages... > Perhaps things become clearer if you let us know why you thought the > .sh/.bat scripts needed improvement and start from there. Did you have > problems bootstrapping GOBO on some platform? Did you find it too > complicated? Well, my idea was to provide a single way to bootstrap GOBO independently of operating system. I've selected Makefile or CMake. I retain CMake because he have a good abstraction of environment and create CMake scripts is pretty easy. I've discussed with Eric, we will kept the current bootstrap mechanism and we will add CMake as a second choice (to be confirmed). > PS: Where I could see a use for CMake would be in the portability of > wrapped C libraries or similar. Because CMake has no idea about Eiffel, > things like incremental compilation and dependency analysis are not > supported with CMake and Eiffel. I hope one day GOBO will generate *.c *.h files per classes. By this way, we can enable ccache (natively supported by CMake 2.8.0) to detect what content files really change after C generation. Regards |
From: Bernd S. <be...@fa...> - 2015-12-20 21:57:10
|
Hi Guillaume, I find it absolutely fantastic that you are contributing to GOBO. Every help is welcome. Still, I have participated in your vote, and expressed a 'NO'. The reason is that there are no real problems with the shell scripts. They are a 'super low tech' solution to the bootstrap problem. And until now, they have rarely failed me - even on OSs like BSDs or Solaris. If they fail, because they are so simple, they are normally easy to fix. CMake is a huge tool-chain that needs to be ported to all the different platforms. I would only vote for adding this if there would be a really hard problem that we have to solve. Perhaps things become clearer if you let us know why you thought the .sh/.bat scripts needed improvement and start from there. Did you have problems bootstrapping GOBO on some platform? Did you find it too complicated? Regards, Bernd PS: Where I could see a use for CMake would be in the portability of wrapped C libraries or similar. Because CMake has no idea about Eiffel, things like incremental compilation and dependency analysis are not supported with CMake and Eiffel. On 19/12/15 13:58, CHAUVET Guillaume wrote: > Dear Gobo Eiffel users, > > I would like to discuss about an experimental patch for Gobo. Instead to > use batch or sh scripts to bootstrap Gobo, I propose to use the CMake > builder tool to manage this part (bootstrap only, not C code generated > by GEC - for the moment -). Eric recommended me to asking to the Gobo > Eiffel community/developpers what you think about this potential > feature, by voting with a Doodle at this URL : > http://doodle.com/poll/85tim76uttqbrzmx > > Best regards, > Guillaume > > ------------------------------------------------------------------------------ > _______________________________________________ > gobo-eiffel-develop mailing list > gob...@li... > https://lists.sourceforge.net/lists/listinfo/gobo-eiffel-develop > |
From: CHAUVET G. <gch...@za...> - 2015-12-19 14:35:41
|
Dear Gobo Eiffel users, I would like to discuss about an experimental patch for Gobo. Instead to use batch or sh scripts to bootstrap Gobo, I propose to use the CMake builder tool to manage this part (bootstrap only, not C code generated by GEC - for the moment -). Eric recommended me to asking to the Gobo Eiffel community/developpers what you think about this potential feature, by voting with a Doodle at this URL : http://doodle.com/poll/85tim76uttqbrzmx Best regards, Guillaume |
From: Guillaume Ch <gch...@gm...> - 2015-12-19 12:54:42
|
Subscribe |
From: Eric B. <er...@go...> - 2015-01-26 17:08:28
|
Hi Wolfgang, > today I found a minor bug (really, a milli or micro bug) in GEC > concerning time measurement. Thanks you for this bug report and the fix which comes with it. It's now committed in the Git repository. -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |
From: Wolfgang J. <wo....@ka...> - 2015-01-17 18:41:59
|
Hi Eric, today I found a minor bug (really, a milli or micro bug) in GEC concerning time measurement. File $GOBO/tool/gec/runtime/c/ge_time.h defines `GE_timebmillitm' in case of `HAS_GETTIMEOFDAY' as "((struct timeval*)(p))->tv_usec". But `timeval.tv_usec' is in microseconds, not in milliseconds. So the definition should be replaced by "((struct timeval*)(p))->tv_usec/1000". Maybe, the "u" in "usec" is to be understood as ASCII approximation to Greek "µ". Best regards Wolfgang -- Dr. Wolfgang Jansen Lauenburger Straße 40 D-12169 Berlin Tel: (+49) 0172 40 86 916 e-mail: wo....@ka... |
From: Eric B. <er...@go...> - 2014-12-01 00:55:43
|
Hi Wolfgang, > the Eiffel compilation of the attached micro class by GEC > works very well but C compilation fails because of imbalanced > parentheses. In Eiffel, this is a built-in macro, > other macro externals are treated correctly. Thank you for this bug report. It's now fixed in github. > BTW, macro 'GE_real_64_positive_infinity' is defined > in $GOBO/tool/gec/runtime/c/ge_real.h as > 'GE_real_64_from_bits(GE_nat64(0x7FF0000000000000))'. > What about defining it as 'INFINITY' coming from math.h? I'm using the same definition as in EiffelStudio. This limits the risk for incompatibilities. BTW, did you make an announcement of your Gobo debugger in Google+: https://plus.google.com/communities/109001715580721282898 -- Eric Bezault mailto:er...@go... http://www.gobosoft.com |
From: Wolfgang J. <wo....@ka...> - 2014-11-28 15:41:47
|
Hi Eric, the Eiffel compilation of the attached micro class by GEC works very well but C compilation fails because of imbalanced parentheses. In Eiffel, this is a built-in macro, other macro externals are treated correctly. BTW, macro 'GE_real_64_positive_infinity' is defined in $GOBO/tool/gec/runtime/c/ge_real.h as 'GE_real_64_from_bits(GE_nat64(0x7FF0000000000000))'. What about defining it as 'INFINITY' coming from math.h? With best regards Wolfgang -- Dr. Wolfgang Jansen Lauenburger Straße 40 D-12169 Berlin Tel: (+49) 0172 40 86 916 e-mail: wo....@ka... |
From: Wolfgang J. <wo....@ka...> - 2014-11-14 19:03:33
|
Hi All, a few years ago I announced a debugging tool for the Gec. The response was very poor that time. Here, I announce another one to be found at "https://github.com/wjansen/GOBO-Eiffel-debugger" branch "extra". While the first debugger had a CLUI, the current one has a GUI. It seems to work well under OS of the UNIX family, so far I could not test it under Windows. Details are described in file "doc/debugger/debug.pdf" of that distribution. With regards Wolfgang Jansen -- Dr. Wolfgang Jansen Lauenburger Straße 40 D-12169 Berlin Tel: (+49) 0172 40 86 916 e-mail: wo....@ka... |