| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Ny compiler-fejl rekort. Fra : Martin Moller Peders~ | 
  Dato :  25-07-02 08:11 |  
  |   
            Det maa naesten vaere en rekort for en enkelt C++-fejlbesked.
 
 Undefined                       first referenced
  symbol                             in file
 __rwstd::__rb_tree<std::basic_string<char,std::char_traits<char>,std::allocator<c
 har> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,__rws
 td::__ident<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,
 std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::less<
 std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::alloc
 ator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::it
 erator __rwstd::__rb_tree<std::basic_string<char,std::char_traits<char>,std::allo
 cator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> 
 >,__rwstd::__ident<std::basic_string<char,std::char_traits<char>,std::allocator<c
 har> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std
 ::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std
 ::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > 
 > >::erase(__rwstd::__rb_tree<std::basic_string<char,std::char_traits<char>,std::
 allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<ch
 ar> >,__rwstd::__ident<std::basic_string<char,std::char_traits<char>,std::allocat
 or<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >
 ,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >
 ,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char
 > > > >::iterator,__rwstd::__rb_tree<std::basic_string<char,std::char_traits<char
 >,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::alloc
 ator<char> >,__rwstd::__ident<std::basic_string<char,std::char_traits<char>,std::
 allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<ch
 ar> > >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<ch
 ar> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocat
 or<char> > > >::iterator) ../../../lib/Solaris/libeps.so
 void __rwstd::__rb_tree<std::basic_string<char,std::char_traits<char>,std::alloca
 tor<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,
 __rwstd::__ident<std::basic_string<char,std::char_traits<char>,std::allocator<cha
 r> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::
 less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::
 allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > 
 >::__deallocate_buffers() ../../../lib/Solaris/libeps.so
 ld: fatal: Symbol referencing errors. No output written to ../../../bin/Solaris/e
 ps_server
 
 
 
 
  
            
             |   |   
            
        
 
            
         
           Claus Rasmussen (25-07-2002) 
         
	
            | Kommentar Fra : Claus Rasmussen | 
  Dato :  25-07-02 16:59 |  
  |  
 
            Martin Moller Pedersen wrote:
 > Det maa naesten vaere en rekort for en enkelt C++-fejlbesked.
 Jeg har set en der var tre-fire gange så lang    Jeg håber, at den
 nye standard gør et-eller-andet ved det problem.
         -Claus
            
              |   |   
            
        
 
            
         
           Jonas Meyer Rasmusse~ (25-07-2002) 
         
	
            | Kommentar Fra : Jonas Meyer Rasmusse~ | 
  Dato :  25-07-02 21:23 |  
  |   
            
"Claus Rasmussen" <clr@cc-consult.dk> wrote in message
 news:ahp78t$bat$1@sunsite.dk...
 > Jeg har set en der var tre-fire gange så lang    Jeg håber, at den
 > nye standard gør et-eller-andet ved det problem.
 Hvad skulle den gøre? Er det ikke op til implementationen hvordan
 der rapporteres om fejl?
 Der findes ihvertfald et godt værktøj til at klare den slags:
 http://www.bdsoft.com/tools/stlfilt.html
mvh Jonas
            
              |   |   
            
        
 
            
         
            Claus Rasmussen (26-07-2002) 
         
	
            | Kommentar Fra : Claus Rasmussen | 
  Dato :  26-07-02 17:05 |  
  |  
 
            Jonas Meyer Rasmussen wrote:
 > "Claus Rasmussen" <clr@cc-consult.dk> wrote in message
 >
 >> Jeg har set en der var tre-fire gange så lang    Jeg håber, at den
 >> nye standard gør et-eller-andet ved det problem.
 >
 > Hvad skulle den gøre? ...
 Jeg ved ikke... måske nogle hårdere typedef's:
         hard_typedef basic_string<en-masse-fnadder> string;
 Et andet problem er, at man efterhånden har fået malet sig op i en
 krog med hensyn til templates. 'extern' keywordet er dels usandsyn-
 ligt svært at implementere (der findes én kompiler, der accepterer
 det) og dels giver det ikke det, folk regner med.
 Det bliver ret svært at indføre noget seperat kompilering af tem-
 plates som kunne begrænse størrelsen af fejlmeddelelserne en del.
 > Er det ikke op til implementationen hvordan
 > der rapporteres om fejl?
 Jo, men når "implementationen" er en C linker har man et problem.
 En C++ linker kunne gøre noget smartere.
 > Der findes ihvertfald et godt værktøj til at klare den slags:
 >  http://www.bdsoft.com/tools/stlfilt.html
Jeg har læst om den, og den har fået gode anmeldelser. Men et
 eller andet sted er det lidt af en falliterklæring EMM.
         -Claus
            
              |   |   
            
        
 
            
         
             Bjarke Dahl Ebert (26-07-2002) 
         
	
            | Kommentar Fra : Bjarke Dahl Ebert | 
  Dato :  26-07-02 17:48 |  
  |  
 
            "Claus Rasmussen" <clr@cc-consult.dk> wrote in message
 news:ahrrv0$3ib$1@sunsite.dk...
 > Et andet problem er, at man efterhånden har fået malet sig op i en
 > krog med hensyn til templates. 'extern' keywordet er dels usandsyn-
 > ligt svært at implementere (der findes én kompiler, der accepterer
 > det) og dels giver det ikke det, folk regner med.
 Ja!
 Jeg tror aldrig man får fede templates i C++. Semantikken af templates er
 direkte imod separat kompilering. Hvis man har separat kompilering af
 templates, skal man i hvert fald have en usandsynligt smart linker - ja,
 faktisk må hele compileren (pånær parseren) hellere være indbygget i
 linkeren, for hvordan skulle man ellers instantiere templates?
 > > Der findes ihvertfald et godt værktøj til at klare den slags:
 > >  http://www.bdsoft.com/tools/stlfilt.html
>
 > Jeg har læst om den, og den har fået gode anmeldelser. Men et
 > eller andet sted er det lidt af en falliterklæring EMM.
 Yep. Det er ligesom med Boost ( www.boost.org). De gør sig vældige
 anstrengelser for at implementere nogle af de ting C++ mangler. Så de laver
 lige et "Boost-sprog" oven på C++.
 Jeg vil sgu ikke have alskens værktøjer til at reparere C++ med - jeg vil
 have et sprog der virker på forhånd.
 C++ kommer *aldrig* til at blive fedt. Det hænger så meget fast i
 bagudkompatibilitetskrav (som du siger: de har malet sig op i en krog), at
 man ikke kan rette de grundlæggende fejl.
 Mvh.
 Bjarke "Python" Ebert   
            
             |   |   
            
        
 
            
         
              Claus Rasmussen (26-07-2002) 
         
	
            | Kommentar Fra : Claus Rasmussen | 
  Dato :  26-07-02 18:09 |  
  |  
 
            Bjarke Dahl Ebert wrote:
 > Yep. Det er ligesom med Boost ( www.boost.org). De gør sig vældige
 > anstrengelser for at implementere nogle af de ting C++ mangler. Så de
 > laver lige et "Boost-sprog" oven på C++.
 Helt enig. Boost bygger mange steder på helt tilfældige sideeffekter som
 aldrig var tiltænkt den brug som Boost gør af dem (men boost er immervæk
 /fedt/ !).
 > Jeg vil sgu ikke have alskens værktøjer til at reparere C++ med - jeg vil
 > have et sprog der virker på forhånd.
 Nemlig.
 Templates /er/ fedt. C++ har et kanon-library som der ikke er noget andet
 sprog, der kan måle sig med. Men den måde, templates er implementeret på 
 i C++, giver nogle temmeligt ubehagelige sideeffekter. Samtidigt er den
 nuværende template definition i C++ langt fra tilstrækkelig - som boost
 netop demonstrer.
 > C++ kommer *aldrig* til at blive fedt. Det hænger så meget fast i
 > bagudkompatibilitetskrav (som du siger: de har malet sig op i en krog), at
 > man ikke kan rette de grundlæggende fejl.
 EMM skulle de droppe bagudkompabiliteten. Eller lave et helt nyt sprog,
 der var nogenlunde lig med C++ - C.
 > Bjarke "Python" Ebert   
          ^^^^^^
 Ja, det /har/ vi bemærket   
        -Claus
     
            
              |   |   
            
        
 
            
         
             Mogens Hansen (26-07-2002) 
         
	
            | Kommentar Fra : Mogens Hansen | 
  Dato :  26-07-02 17:53 |  
  |   
            
"Claus Rasmussen" <clr@cc-consult.dk> wrote
 []
 >  'extern' keywordet er dels usandsyn-
 > ligt svært at implementere (der findes én kompiler, der accepterer
 > det) og dels giver det ikke det, folk regner med.
 Det hedder "export" - ikke "extern".
 > Det bliver ret svært at indføre noget seperat kompilering af tem-
 > plates som kunne begrænse størrelsen af fejlmeddelelserne en del.
 Det er mit klare indtryk, at der kan gøres meget for både at minimere
 kompileringstider, forbedre fejlmeldinger, forbedre muligheden for at browse
 i koden, og optimere programmerne globalt hvis der bliver puttet
 tilstrækkelige resourcer i at implementere det.
 IBM Visual Age V4 og senere er et interessant eksempel på dette.
 Todd L. Veldhuizen beskriver i dokumentet "Five compilation models for C++
 templates" ( http://osl.iu.edu/~tveldhui/) nogle spændende tanker om hvad der
 kan gøres.
 [snip]
 > Jo, men når "implementationen" er en C linker har man et problem.
 > En C++ linker kunne gøre noget smartere.
 Som det tidligere er bemærket i denne tråd, er der jo åbenlyst tale om en
 C++ linker - eller ville fejlmeldingen være mindre læsbar.
 [snip]
 > Jeg har læst om den, og den har fået gode anmeldelser. Men et
 > eller andet sted er det lidt af en falliterklæring EMM.
 Er demangling af funktionsnavne i fejlmeddelelser så også en falliterklæring
 ?
 Enhver hjælp, der kan føre til at man finder fejlen hurtigere må da være et
 fremskridt.
 Venlig hilsen
 Mogens Hansen
            
              |   |   
            
        
 
            
         
           Bjarke Dahl Ebert (25-07-2002) 
         
	
            | Kommentar Fra : Bjarke Dahl Ebert | 
  Dato :  25-07-02 21:38 |  
  |  
 
            "Martin Moller Pedersen" <tusk@daimi.au.dk> wrote in message
 news:aho8aj$t7c$1@news.net.uni-c.dk...
 > Det maa naesten vaere en rekort for en enkelt C++-fejlbesked.
 Haha   . Det må jeg sgu nok sige.
 > Undefined                       first referenced
 >  symbol                             in file
 >
 __rwstd::__rb_tree<std::basic_string<char,std::char_traits<char>,std::alloca
 tor<c
 > har> >,std::basic_string<char,std::char_traits<char>,std::allocator<char>
 >,__rws
 [...]
 Jeg kan specielt godt lide at linkeren forsøger at stille det op i en fin
 tabel med indentering.
 NU må man da fatte, at en C-linker ikke længere er relevant som back-end
 maskineri til en C++-compiler.
 De må sgu også snart se at få fingeren ud, hvis de mener noget med det-der
 separat kompilering af template-kode. ("extern template <class T> class
 Foo;")
 Bjarke
            
              |   |   
            
        
 
            
         
           Mogens Hansen (25-07-2002) 
         
	
            | Kommentar Fra : Mogens Hansen | 
  Dato :  25-07-02 23:19 |  
  |   
            
 "Bjarke Dahl Ebert" <bebert@worldonline.dk> wrote
 
 [snip]
 > NU må man da fatte, at en C-linker ikke længere er relevant som back-end
 > maskineri til en C++-compiler.
 
 Fejlmeldingerne er et "quality of implementation" spørgsmål, og der er klart
 behov en dekryptering af fejlmeddelelsen, så man nemmere kan se at det er
   __rb_tree<string, less>::iterator __rb_tree<string,
 less>::erase(__rb_tree<string, less>::iterator,__rb_tree<string,
 less>::iterator)
 og
   void __rb_tree<string, less>::__deallocate_buffers()
 der mangler (og gerne også at det formodentlig stammer fra noget
 "std::set<std::string>" eller "std::multiset<std::string>").
 
 Der er intet til hinder for at gøre det med traditionel linker teknologi -
 noget lignende gøres allerede, som Jonas Meyer Rasmussen har påpeget.
 
 Det er dog ikke "blot" en C-linker, der typisk bruges til at linke C++
 programmer med.
 Du kan se af fejlmeldingen, at den allerede har foretaget demangling af
 navnene - hvilket er specifikt for C++.
 Linkeren vil også ofte have til opgave at eliminere duplikere template
 instantieringer.
 Men linkeren kan også langt mere avancerede opgaver. Der er f.eks. linkere
 som foretager den egentlige generering af assembler instruktioner. Linkeren
 har overblik over det samlede program, og kan dermed lave optimeringer på
 tværs af compilation units, og bl.a. inline funktioner, der ikke er erklæret
 "inline".
 
 Teknologier hvor C++ implementeringen har bedre overblik over hele projektet
 er naturligvis både spændende og nyttig, men ikke en forudsætning for at
 give bedre fejlmeldinger.
 
 > De må sgu også snart se at få fingeren ud, hvis de mener noget med det-der
 > separat kompilering af template-kode. ("extern template <class T> class
 > Foo;")
 
 Du mener formodentlig "export" - i stedet for "extern" ?
 Hvordan skulle separat kompilering i sig selv hjælpe fejlmeldingen i
 forbindelse med "undefined symbols" ?
 (Bemærk dog at jeg ikke har nævneværdig erfaring med "export"  - få
 mennesker i verden har - selv om jeg den sidste måned har haft en compiler
 der understøtter "export")
 
 Venlig hilsen
 
 Mogens Hansen
 
 
  
            
             |   |   
            
        
 
            
         
           Per Abrahamsen (26-07-2002) 
         
	
            | Kommentar Fra : Per Abrahamsen | 
  Dato :  26-07-02 13:09 |  
  |  
 
            "Bjarke Dahl Ebert" <bebert@worldonline.dk> writes:
 > NU må man da fatte, at en C-linker ikke længere er relevant som back-end
 > maskineri til en C++-compiler.
 Det er tydeligvis en C++ linker, ellers havde fejlbeskedet ikke været
 nær så læselig   .
 Det har egentlig heller ikke så meget med linkeren at gøre, compileren
 kunne have givet en lignende besked (typisk når den ikke kan finde en
 passende overloaded funktion).
            
              |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |