|
11/26 |
2006/1/17-20 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:41399 Activity:low |
1/17 Java compiler help please. I have some code like this: import com.foocorp.foolibrary; class myClass { private static final boolean useFooLib=false; { if(useFooLib) foolibrary.FooClass.doStuff(); } } And the problem is that if I turn off useFooLib and try to compile with out foolibrary.jar the compile fails. Is there any way I can make this work without distributing foolibrary.jar with every build? \_ I haven't had to think about this for a while, but maybe you can use a custom class loader? What about reflection? \_ Yeah, I went with that, starting with Class.forName() as suggested below. Between reflection and commenting out multiple blocks it seemed like the lesser of two evils. Thanks. -OP \_ Interesting I was not aware that javac allows you to delay type checking, to see whether method doStuff() exists or not. Thanks for pointing this out. Motd is great! \_ Um, that's not what I said. I used Class.forName() to dynamically load the class, then I used reflection to get the methods I want, then invoke those methods on the class object (thet are static methods). \_ I think the cleaner way to do this is to create an interface -- FooClassInterface. Include that in your normal code path, but you don't need to provide an implementation. Make FooClass implement that interface then you can do: if (useFooLib) FooClassInterface foo = (FooClassInterface) Class.forName(...).newInstance(); foo.doStuff(); I think that's preferable. - guy who made below suggestion. \_ Won't work. FooClass is a partially-obfuscated JAR licensed from another company. \_ Java is not C. If this were C, the statement "if ..." would be seen as dead code due to constant propagation. However javac does flow analysis before optimizations so requires method/var resolution first and you can't possibly compile with safety without foolibrary. If you must include such a dead code, manually comment out the dead code or just include the foolibrary.class|java with the distro. Go compilers!!! \_ Don't import foolibrary. Do this: if (useFooLib) Class.forName("com.foocorp.foolibrary.FooClass").doStuff(); |
2005/12/21-23 [Computer/SW/Compilers, Computer/SW/Languages/C_Cplusplus] UID:41104 Activity:nil |
12/21 I have a complex chuck of C code, and somewhere it in, I'm freeing a bad pointer. However, this doesn't happen if I run it under gdb. Does anyone know how I can figure out where it's crashing? \_ Valgrind is usually pretty good at finding this stuff. It's slow, though. If the program runs under FreeBSD, you can try running it with MALLOC_OPTIONS=AJX. \_ Is it running in gdb that causes the crash or is it running a debug build that causes the crash? Debug builds null all memory at allocation, I believe there is a way you can tell gcc to set all the memory to some other value than null instead. If all memory is nulled then freeing that null value will do nothing, but in the non debug mode you will free a random int and boom, your code will crash. \_ No, running in gdb DOESN'T crash. Running it normally does. \_ It's obviously freeing an uninitialized pointer. In a a debug build all allocated memory is nulled so you are going to free null, which is valid and doesn't cause a crash. There is a way to make debug builds (or maybe gdb) not null out memory. It has been a while since I debugged c, but I know for a fact that is your issue. \_ try attaching to the pid after it starts? \_ gdb the core dump \_ I don't seem to have a core dump. It just seg faults. (on linux) Is there a way to force a core dump when it frees a bad pointer? (Sometimes it gives an error: free(): invalid pointer 0x9091420!) \_ Don't segfaults dump core? Do you have ulimit set to 0? \_ ulimit in unlimited. Apprently they don't always dump. \_ Is it setuid? -tom \_ no. \_ Above suggestion, and this sort of failure-to-reproduce could mean the bug is in something time-dependant, either using a clock, net IO or bad synchronization between threads. Heisenbugs suck. \_ I think it's because I have lots of if(x) {free(x);} stuff. I could see this happening if I didn't initialize all my pointers to NULL. (I understand gdb helpfully automatically initilizes pointers to NULL for you.) However, I can't find any uninitialized variables. \_ if (x) { free(x); } is pointless if you're using the standard C library. free(NULL) is a no-op. Also, if it's a Heisenbug, check that you're not overflowing stack frames. If you're worried about uninitialized variables, make sure you compile with all compiler warnings on. \_ Good point. \_ How about doing some good old-fashioned trace logging to pinpoint the crash? Unless trace logging prevents the crash from happening as well! |
2005/7/15-18 [Computer/SW/Compilers] UID:38645 Activity:nil |
7/15 I am curious how various employers rate job performance for SAs, S/W engineers, and similar. Lines of code, bugs fixed, bugs introduced, speed, optimization, and so on all have various problems. Is it mostly by a gut feeling or are there good metrics that can be applied? Similarly, how does one determine how many SAs, S/W engineers, and such it might take to complete a given project? I've always relied on a combination of observation (for performance) and analogies to past projects but management would like something more formalized. I'm curious how you and your company do it. Projects could be large or small. If I need Widget X in one year how would you determine how many people I'd need to start as a rough estimate? --dim |
2005/5/27-6/2 [Computer/SW/Compilers] UID:37861 Activity:nil |
5/27 GDB quetion. On Linux, When I use gdb to attach to a process that has many modules, does gdb automatically load all the symbol files for all the modules? I'm trying to figure out why gdb itself is using so much memory (100MB+) on my system. Thanks. \_ why shouldn't it? 100MB sounds pretty standard for projects these days. \_ why shouldn't it? 100MB sounds pretty standard for projects these days. days. -- OP \_ Well, it's an embedded system with only 128MB of RAM. \_ Well, it's an embedded system with only 128MB of RAM. -- OP \_ thank god for virtual memory then \_ The problem is that it swaps too much which slows down my threads and screws up the timing. So it's hard to debug problems that occurs only under certain timing condition. --- OP \_ You might want to look into remote debugging using gdb. See the gdbserver and gdbreplay tools. -gm \_ Will do. Thanks! |
2005/4/13-15 [Computer/SW/Compilers, Computer/SW/Editors/Vi] UID:37175 Activity:kinda low |
4/13 80 column is such a 70ish idea! It's year 2005, 3 whole decades later. Come on guys! It's time to move on! Let's move to 110 columns. As our resolutions get higher and screens get bigger, we can easily afford the 1 column per year trend. Let the 110 column revolution begin! -Revolutionist \_ 80 columns isn't just about vt100; it is hard to visually scan longer lines. -tom \_ You know what's even harder to read? Code that spans multiple lines. One statement = one line, them's the rules! It produces better, more holistically aesthetic code. \_ With Java long method and class names and all those objects and fields calling().here().and().calling.there it's kind of hard to avoid it sometimes. Sad. \_ Heathen. Submit to 80 columns or the Fortan IV compiler shall smite thee! \_ Yeah, yeah get in the fuckin truck. Time for you to go where all all the revolutionists go. \_ 110 columns? I thought the next supported size is 132 columns. \- what is the max width for "standard vi"? \_ I've used traditional vi on fairly wide terminals (at least 140 columns); it seems to work fine as long as the terminal width is a multiple of the tab size. --mconst |
11/26 |
2005/3/30-31 [Computer/SW/RevisionControl, Computer/SW/Compilers] UID:36979 Activity:high |
3/30 Is it Kosher to write a closed-source program which calles a GPL program on the command line but does not link to it? \_ Very likely yes, but people will disagree with you. For instance, I'm sure there are many apps which call gcc, or cvs/svn (not sure about the license on the latter 2, but for gcc, I think it's GPL-not-LGPL. \_ I think it depends whether you are bundling the GPL utility with your program. If you just call "mv" or whatever, GPL has nothing to say about that, but if you include a binary in your closed-source distribution, I think that's a violation. -tom \_ What about a closed-source distribution which includes the binary of the GPL as well as the source for only the GPL component. The closed-source project would just call "$GPLPROG $ARGS" through a shell. \_ I believe one of the complaints a lot of people have about the GPL is that it requires you to open-source your entire project if you use any GPL code in your distribution. So, I don't think you can use it the way you describe. -tom \_ This is a complicated issue. One point of view is that it is not only the code that is GPL'ed but also the calling interface, provided that the calling interface does not conform to an external "standard" (a non-gpl program that implements the same cli opts, might be a "standard" for this purpose). Perhaps the more mainstream point of view is that the gpl only applies to incorporation, ie you have one big binary in which some src files are gpl'ed. As long as you don't distrubte the gpl'ed pgm in binary only you are probably okay. \_ Related question: Can a function from a GPL project be included into a LGPL project, since the LGPL is *more* free? |
2005/3/21-24 [Computer/SW/Compilers] UID:36795 Activity:nil |
3/21 Is there a "skip" command in GDB? I want to see what happens when I don't execute a certain command in a certain case. \_ I don't know of any, but you could do this: if (variable==1) { your command; }; then use the set command to change the variable at your whim. --PM \_ If by "command" you mean "instruction in the program being debugged", you can use the "jump" command -- it sets the PC to a value you specify. -gm \_ I think it is clear he means a gdb command that will allow him to skip certain lines in the program, i.e. a pretend step. \_ There are hairy ways to do this ... if to break copy protection ... but there is no simple "skip" instruction in gdb. \_ jump? |
2005/3/15 [Computer/SW/OS/Linux, Computer/SW/Compilers] UID:36700 Activity:high |
3/15 Anyone know what I'm doing wrong? "In file included from fusd/test/zero.c:39: /usr/include/linux/config.h:5:2: #error Incorrectly using glibc headers for a kernel module" Which correct -I path should I include in the compiler? -ok thx \_ <kernel src dir>/include --jwm \_ so actually I'm using /home/user/linux-2.6.10/include which I downloaded from the web. \_ use -nostdinc |
2005/3/14-16 [Computer/SW/Compilers] UID:36678 Activity:nil |
3/14 We have this licenced proprietary C++ library but no source, just a dynamicaly-linked library and the .h file. We have some C++ code that calls the library. I'd like to be able to call this closed-source library from within Java. Since I already know how to call its functions, can I just use System.loadLibrary("Proprietry"); to access this library, or do I have to make a seperate C++->Java wrapper using say JNI? \_ You have to write some JNI wrappers. There's special code on both the Java side and the C side to make JNI work. (Unless, of course, they have some JNI wrappers included. Look for .java or .class files.) -jrleek \_ They have no Java wrappers and are out of business. I guess I know my next project... \_ Well, first, make sure their libraries were compiled with the same compiler as your JVM. If it's Sun's JVM on linux, it's gcc. In order to work with Sun's JVM, the library needs to have been compiled with gcc, or icc 8.1 or later. Another possibility for an earlier version of icc is Jrocket. -jrleek \_ Presuming their libraries are compiled with some old wierd obsolete compiler, if I make a JNI wrapper (in C++) for their code and compile it with the right compiler, will I be able to call my wrapper from Java? Or are we screwed? \_ You are very likely screwed. Wierd stuff can happen if your C++ compilers are not binary compatiable. Although you may get lucky. In my experience linking gcc compiled JNI with an icc 8.0 library, everything was cool as long as the library didn't throw an exception. If an exception was thrown, everything always crashed. No matter who threw the exception or from where or who was supposed to catch it. Java can be touchy. -jrleek \_ It's even worse. If it's not the same compiler /with the same options when you compile/ you're probably out of luck. -emarkp \_ We have in-house C++ code that calls this old library just fine when compiled with (I think) the MSFT compiler. If I compile my JNI wrapper with the same compiler, shouldn't that also work? This funky library just sits there processing input data and never throws exceptions. \_ If I may make an architectural suggestion, I believe that you shouldn't be utilizing JNI to call this library. Instead, I believe that you should utilize CORBA and write a wrapper around your library in that fashion. This is especially relevant if you plan on utilizing this library in the future. I realize that this may be a performance hit. Again, use best judgement given time/performance/etc. Just a suggestion. \_ It might work out for you then. I'm pretty sure the JNI on windows is compiled with the MSFT compiler. I can't really say though. I'm niether a C++ or windows guru. -jrleek \_ If that works, then, in the worst case, you should be able to write a pure C wrapper on the C++ code, compile the wrapper with VC++, call the C wrapper in your JNI layer and compile the JNI stuff using another compiler. |
2005/2/18-20 [Computer/SW/Compilers] UID:36229 Activity:nil |
2/18 When you need to parse something simple do you usually use (f)lex/yacc or just write a recursive-descent parser? I've done both in the past, but I can't seem to justify using one approach over the other. \_ the point of yacc is so that you can write a grammar for it so that when things change you don't have to spend a lot of time rewriting your hand-written C/Java recursive-descent parser. For something really small then it may not be worthwhile to use the parser, but for something that's big (parsing a real language) it's best to write the grammar. You get the added advantage of the compiler-compiler giving you grammar ambiguity messages. The other thing is that flex/yacc use SLR(1) whereas recursive descent is LL(1). SLR(x) is more powerful than LL(x) as it can handle a bigger set of grammar so that's something to consider as well. |
2005/2/17 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:36210 Activity:high |
2/17 I need to write some code using sockets that will work on both Windows and LINUX. Ideally, I'd like to just use the standard POSIX sockets and have the code work on both platforms. Based on info from MSDN, it looks like this is possible but I'd like to ask people on the MOTD if they've encountered any inconsistencies or other issues doing things this way. Thanks. -emin \_ It mostly works, except for a few little things (WSAStartup, closesocket, ioctlsocket, etc.). As long as you're not doing anything complicated, a few #defines are all you need. --mconst \_ What language? (I assume C or C++.) Which compiler on Windows? Which on Linux? What are your library options? \_ Sorry, language=either C or C++ is fine, compilers=Visual C/C++ on Windows and gcc on LINUX, library options=whatever I need to get it to work, but preferably standard stuff. Thanks. -emin \_ I recommend wxWidgets (formerly wxWindows). It's got sockets and should compile on both platforms without source code changes. \_ Someone else recommended sdl_net a while ago, but beware: it's LGPL. |
2005/2/15-16 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:36174 Activity:moderate |
2/15 Technical question: we have a memory leak in our C code, we think, but it's not the sort of memory leak where the memory's unreferenced. What we'd like to do is sort of a poor-man's profile, we want to know who calls our memory allocator "New"... Sorta like a stack trace. Using an actual profiler is sort of difficult 'cause it's a parallel application. Thanks, --peterm \_ Not sure about parallel application, but how about looking into ccured? It reads in code, analyzes it, then generates another C code with annotation that could be useful. Never used it myself though. \_ I've heard very good things about Purify but it is not free. Also take a look at other tools used for Mozilla development: http://www.mozilla.org/projects/xpcom/MemoryTools.html Please tell us which tools you ended up using and what you thought about it, thanks! \_ seconded. it's been years, but I recall purify being able to summarize how much memory was allocated by what code very much like op is asking, e.g. counts of how many times a particular calling context was used to hit malloc. don't recall whether there were limits to how many levels of caller it tracked. \_ What is your platform (OS, version, etc.)? What is your compiler (vendor, version, etc.)? \_ It's definitely a problem with our code. Three compilers, 3 platforms: gcc 3.2 linux, HP cc on 21264, xlc on AIX. \_ The Boehm Collector is free, and can be used to detect leaks. http://www.hpl.hp.com/personal/Hans_Boehm/gc \_ valgrind is free, Linux only \_ I thought you said Viagra |
2005/2/7-8 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers, Computer/SW/WWW/Browsers] UID:36090 Activity:moderate |
2/7 http://www.cs.ucla.edu/~kohler/pubs Read the first paper. Not too technical and quite readable. I hope it gets accepted into the prestigious WMCS, C&I conference. \_ That rules. \_ i guess it's nice to know that it's not just me. \_ Heh, ditto that. Maybe Phillip should write up a more in-depth study on the subject? \_ Cute. \_ The log graph on page 10 rocks. \- Did you actually submit that? \_ PROFESSOR Kohler doesn't have a csua account. |
2004/12/20-21 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:35368 Activity:kinda low |
12/20 Has anyone used the parser generator JavaCC? Is it just me, or is it completely awful? \_ what do you need it for? If you need to use the visitor and traverse the syntax tree, I recommend JTB, available here http://compilers.cs.ucla.edu/jtb It is built on top of javacc and generates visitors that you can extend functionalities on. There are tutorials you can use, here: http://compilers.cs.ucla.edu/jtb/jtb-2003 -kchang \_ I'm using it at work, I don't really have a choice about it. A parser was written in it long ago by a guy who didn't know anything about parsers, and now I have to update it. \_ well, what's awful about it? What does it not have that yacc and bison have? |
2004/12/14-15 [Computer/SW/Compilers] UID:35291 Activity:moderate |
12/14 If I have a C function like this void foo(void) { static const char unused1[] = "one"; const char * const unused2 = "two"; ...... some code ...... return; } Is a compiler allowed to optimize away both unused1 and unused2? When I do this in M$ C/C++ v13, it only optimizes away unused2 but not unused1. I can't find any compiler switch to tell it to throw away unused1. Any idea? TIA. \_ I'm not certain of this, but I think the static declaration is preventing the compiler from optimizing away unused1. If memory serves, internal static variables, external static variables, and global variables are all stored in the same region of memory (though I could see how alternate implementations are possible). Thus, at a certain point in the compilation process, static variables become indistinguishable from global variables. Local variables are much easier to optimize away than global variables. I'm guessing that the optimizer either lacks the context needed or simply isn't smart enough to make the distinction so it doesn't even bother trying to optimize unused1 away. -dans \_ A compiler can optimize away any code if it doesn't affect the program. You describe a common implementation but one that isn't required by the standard. This is really a QoI question (Quality of Implementation). \_ v13? What is that? \_ I meant Version 13. \_ And what is "Version 13" of an MS compiler? Is that the version of cl.exe for Visual Studio .Net? \_ It's the version of cl.exe that comes with my DDK. "Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9176 for 80x86" \_ Okay, that's from Visual Studio .Net (7.0), not the latest from http://VS.Net2003 (7.1). Just checking. |
2004/12/9-10 [Computer/SW/Compilers] UID:35230 Activity:high |
12/9 c++ question: is this supposed to trigger a catch? Or do I have to explicitly throw an exception for there to be something to be catch'ed? My own testing shows that it doesn't throw any exception on its own, not sure if I'm doing something wrong. try { .... char*c = new char[1000000000]; strcpy(c,"blahblahblah....."); ... } catch (...) { cout << "Out of memory or null ptr exception?" << endl; } \_ g++-compiled programs will automatically throw an exception; VC6, no. \_ VC6 was released before the C++ standard was ratified. In the standard, when new fails, it throws an exception. \_ Ah, I'm using Watcom C, which probably isn't up-to-date on the recent standard changes. Thanks! -op \_ Uh, the standard was ratified in 1998 IIRC. Not exactly recent. However, many compilers allow 'nothrow' by default for backwards compatibility. \_ By compiler standards 1998 is probably still "the future". \_ Actually, are there ANY C++ compilers that are fully compliant with the standard? I remember there weren't when I checked a year ago. \_ You were wrong then. Comeau C++ has been compliant for at least a year (using the EDG frontend). MS C++ 7.1 (.Net 2003) is very compliant, missing only export and exception specs. |
2004/11/11-12 [Computer/SW/Compilers] UID:34830 Activity:nil |
11/11 On a *nix machine with both cc and gcc, is there a generic way to find out which include directories they use? (I think cc uses .h files in /usr/include and gcc uses those somewhere else.) Thanks. |
2004/10/21 [Computer/SW/Compilers] UID:34258 Activity:nil |
10/20 When I compile gcc with the -g option, my binary becomes bigger because I have extra debugging information for the debugger. Let's say I'm writing my own primitive debugging tracker that looks at offsets of variables (both global and local), how do I read those debugging info? In another word, how do I fetch those debugging information in a text readable format without running or using the debugger? Thanks. |
2004/10/3-4 [Computer/SW/Compilers] UID:33894 Activity:nil |
10/2 Is there a way to disable specific warnings in gcc? \_ Use the source, Luke! \_ Even easier than source, use the manual, info gcc. \_ I did. It doesn't help. It describes command-line options to disable a few specific warnings, but it doesn't describe any general mechanism. I guess what I'm looking for is something like MSVC's #pragma warning(disable:xxxx) \_ from the man page, -w Inhibit all warning messages. \_ Read the whole thread. It's not that long. I'm looking for a general mechanism to disable *specific* warnings (and preferably in a specific file, or better yet, in a specific section of code). I don't want to disable all warnings. That'd be retarded. \_ It's more retarded to just ignore some warnings in a single file. If it's a single file, FIX it. Apologies if this sounds harsh; I'm actually yelling at most of my coworkers. Btw, which warning? Why is it unfixable? \_ gcc foo.c |& grep -v unwanted_warnings |
2004/9/16-17 [Computer/SW/OS/Windows, Computer/SW/Compilers] UID:33574 Activity:kinda low |
9/16 I want to compile a simple Windows console app, are there any gnu/free compilers for windows that would do it? I'd rather not install visual studio and all its crap... my app is in C and calls windows APIs.. thanks. \_ I'd say Cygwin but it probably doesn't support your Windows calls. Just out of curiosity, what sort of console app could you write that uses the Windows (as opposed to POSIX or something) API? \_ I have calls that access the windows registry... \_ Cygwin supports all standard Win32 calls. --sky \_ MS's C++ compiler is free now. If you want free as in speech, you can look into mingw (which is better than cygwin in that the produced binaries don't require the cygwin DLL). --jameslin \_ LPTSTR, LPCTSTR is not defined?? geez, I have to define them manually? Seems like a lot of windows constants are not defined ie, windows.h, etc... \_ In my SDK installation both are defined in WinNT.h. \_ borland has free older compilers, but I'm not sure if they support the window api's. |
2004/8/10-11 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:32805 Activity:high |
8/10 C question. Is there anything wrong with the following? const my_struct_t **pp; pp = malloc(sizeof(my_struct_t *)); pp = realloc(pp, sizeof (my_struct_t *) * 2); "gcc -Wall" doesn't complain. But the M$ compiler (cl.exe) complains about the realloc line: t3.c(12) : warning C4090: 'function' : different 'const' qualifiers t3.c(12) : warning C4022: 'realloc' : pointer mismatch for actual parameter 1 Thanks in advance. \_ Your code is correct. The warnings above are both wrong, and in fact the same compiler recognizes the code as safe in C++ mode (which is stricter about const). --mconst \_ I'd ask why GCC isn't complaining. Consts shouldn't change. It might be that because there's nothing between the malloc and the realloc, GCC is noticing that the value of pp does not actually changem while MS sees you are writing to a const and bitches. \_ But what I'm trying to realloc is an array of variable pointers to constant structures. The array elements (pointers to constant structures, const my_struct_t *) are not consts and do change. It's just that the structrues that the array elements point to (const my_struct_t) don't change. I think it's just stupidity on M$'s part, but I just want to make sure. \_ YMWTS http://www.parashift.com/c++-faq-lite/const-correctness.html \_ You sure you're not compiling in MS as a cpp file? \_ It works as a CPP file -- see above. --mconst \_ My file is a .c, and I compile like "cl t.c" with no options. I tried both version 12 and version 13 and they gave the same warning. \_ Where is the 'function' name declared? \_ BTW, pp = realloc(pp, ...) is a bad idea. If realloc fails, you've just clobbered your old copy of pp and no longer can free it. --jameslin \_ Yeah I know. The above was just to illustrate the type checking warning. But thanks. \_ Does it still complain if you do something like: typedef const struct foo *pfoo; ... pfoo *p; ... |
2004/8/6 [Computer/SW/Compilers] UID:32738 Activity:high |
8/6 I'm trying to find the true dependencies that a particular shared object has on other shared objects. Are there existing tools that can do this automatically? Otherwise I was thinking of just using nm and grepping out the undefined references and then correlating that to the defined symbols in the other object files. Thanks for any tips. \_ like ldd, or are you trying to find out exactly which functions? \_ yeah, sorry. i mean actual symbols. if you ask the compiler to link in spurious shared libraries (that your other library doesn't really depend on), i think it will. so ldd won't give an accurate answer in that case. \_ nm + perl is your best bet \_ nm -u |
2004/6/22 [Computer/SW/Compilers] UID:30957 Activity:nil |
6/22 GCC macro question: If I create a macro that contains, say, __LINE__, will __LINE__ be set to the line at which my macro is used or the line at which it is #defined? \_ I think it'll be the line at which it is #defined. Oops, I just tried it out and it's actually the line it's used. Maybe the K&R book says something about this. I don't have one here. |
2004/6/6 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:30635 Activity:nil |
6/5 How does typedef get compiled into machine code? \_ what the hell are you talking about? C? It doesn't. It's merely a type alias. C compilers don't even do strict type-checking against typedefs; what makes you think it gets to the machine code level? \_ It doesn't get that far. The answer to your question is closer to "How do ints, floats, structs, etc. get compiled into machine code?" |
2004/5/28-29 [Computer/SW/Compilers] UID:30481 Activity:nil |
5/28 I just found out that bison inserts these lines of code #ifndef __cplusplus #ifndef __STDC__ #define const #endif #endif between the function declaration line and the actual definition lines. That's causing compiler warnings about "const" not matching for my function which has a parameter of type "const char*". Why would bison want to define "const" to nothing? I'm writing C code. Thanks. \_ I think "const" was introduced in C89. Non-ANSI compilers (i.e. ones that don't define __STDC__) may not support it. \_ I'm using at the command line "Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x06" which is pretty recent. \_ I'm not sure why it doesn't define __STDC__. Maybe you have some non-compliant compiler extensions enabled or something. If you want, you could try defining it yourself as a compiler argument. |
2004/5/21-22 [Computer/SW/Compilers] UID:30345 Activity:very high |
5/21 I was not a CS major and never took the compiler class. What is a good book to help me write a compiler? And what about interpreter? Do they basically involve the same issues except code generation and optimization? \_ Use the book by Robert Mak, called "Writing Interpreters and Compilers in C++." It's a practical, hands-on "lab" type book which doesn't get bogged down in too much theory. It's a lot of book to go through, but if you pace yourself and follow the examples you'll have a good, practical knowledge about writing interpreters and compilers. I would avoid theory books such as the Dragon book since from what you've indicated you probably want practice over theory, (I doubt you're planning to write the next ocaml or haskel or some other junk language that will never see the light of day...) Also, compilers and interpreters are no longer written in the sense that you think of. Nowadays people use metainterpreters/compilers to build stuff like this (i.e. lex and yacc). \_ Oh God!!! Here we go with everyone responding about how great the dragon book and CLR are. \_ Let me be the first to say what a piece of crap the dragon book was (is). It's written so badly it often took me 5-6 reads to understand a paragraph, often requiring me to diagram what the author was writing. The book seems to go to great lengths to avoid clear examples too, which makes it more fun. \_ agree, this book uses the most cryptic English ever. \_ You should take basic CS classes before reading the compiler book. Otherwise it'll be easy to get lost. Do you know regular/push-down and other Chomsky-hierarchy shit? If not you better get to know them before you get into compilers. \_ agree on basic CS courses, I dunno what chom-whatever was, and I still got thru this course. you basically need to know data structures and be reasonably decent at programming. \_ I took CS164 (w/ Hilfinger, no less) but by the time I graduated, I totally forgot most of the stuff I learned. What are some actual applications of writing a lexer/parser as opposed to taking something off the shelf or just putting together a very simple language that is easily parsed by Perl? \_ None whatsoever, since it's already been proven that current languages (C, Pascal, scheme, lisp, forth or any fully functional ALGOG type language) are as powerful as langauges can get. In other words all modern computer programming languages are essentially equivalent and it is impossible to write a more functional language than what is already out there. The people who are trying to invent new languages are merely wasting time and are essentially arguing about style rather than substance. --williamc \_ Not exactly. Though programming languages that are Turing Complete are equally powerful, some are more expressive than others -- this is something you can quantify using a model like Denotational Semantics. \- if you think the dragon book is confusing, have you tried reading anything by Christopher Strachey? --psb \_ That's true, certain languages are definitely more apt at doing certain things than others (i.e. you can do things in Perl much more quickly than in C or Java and vice versa). However, the point is that there isn't anything that really requires another language that isn't already out there. We've been at OOP for what, the past 20-30 years? Pattern programming has never really taken off except in very fundemental class design. So what's really left to "invent" in a new language? If you argue for better parralleism for MPAs I'd say we had languages like that with Modula 2/3. --wllliamc \_ One idea I was toying with was separating 'object' from 'data structure' in the language. The language library provides mathematical objects for you to use: (graphs, sets, trees, etc), and changes the implementation (at compile time) depending on how they are used, in the same way that databases do query optimization. I don't think this has been done yet. I think the field of 'improving tools' for programmers and people representing knowledge is wide open. -- ilyas \_ The Self virtual machine will change the machine code implementation of your data structure depending on how it is used. And in a prototype-based language, like Self, it's pretty easy to define interfaces that change behavior as you use them. \_ I think what I want is for the compiler to do this, not the programmer. Say if you use a set but only iterate over it, an array will do, but if you do random access, you want a hashtable. A compiler can figure these things out, and substitute the right data structure, while a programmer can think about properties of sets themselves. It's cool that self does this, but I wonder if it does 'complexity analysis' to figure out what data struct to use like "this set is accessed randomly a linear number of times, so we want a data struct which supports random access in constant time", and so on. These are the kinds of decisions a programmer makes, and it would neat if occasionally the compiler could take over this job. -- ilyas Actually, looking back, I think part of the reason I don't remember anything is that I took it with Hilfnger and was too busy deciphering his project specs and doing the projects and not busy enough learning the theory and applications... but at least I can still pick up something like the Java or JVM spec and understand it. \_ Manycompiler/interpreters are for some very specialized language. \_ Many compiler/interpreters are for some very specialized language. It only has one application, and you might not even recognize it as a programming language. |
2004/5/18 [Computer/SW/Security, Computer/SW/Compilers] UID:30276 Activity:nil |
5/18 http://anitaborg.org/events/careers_in_cs.htm Women in Computer Science, sponsored by Google. |
2004/5/12-13 [Computer/SW/Editors/Emacs, Computer/SW/Compilers] UID:30198 Activity:kinda low |
5/12 Are there any emacs modes for .l files (lex) and .y files (yacc)? I'm running emacs20. Thanks. \_ just use c-mode or c++-mode. |
2004/5/11-12 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:30151 Activity:low |
5/10 On a 32 bit architecture, if I declare something boolean or byte, does it still use 32 bits, or is it possible to have a different offset for the alignment to pack it more efficiently? ok thx. \_ For boolean, it's all up to your compiler. For byte, most likely it's 8 bits, but it's still up to your compiler. \_ I heard that if the alignment isn't 32, either the arch would raise an off-alignment exception, or that there is a tremendous run-time penalty for the memory access. Is this true, and which architectures would this apply to? \_ memory alignment has nothing to do with this, since you're presumably not trying to load a 32 bit word from an arbitrary offset. if bool is implemented as a char, then typically it's 8 bits and alignment doesn't matter. x86 allows loading words from arbitrary offsets, but there can be a significant performance hit, whereas many mips style chips just do not allow it. \_ To clarify this: the 32-bit alignment the previous poster was worried about is only for 32-bit data values. If you have an 8-bit piece of data, it only needs 8-bit alignment. \_ The OpenBSD guys were saying that Sparc64 was their preferred dev/testing arch b/c it has strict memory alignment requirements; i386 less so. \_ On i386 or above, if you use 32-bits and it's not 32-bit aligned, there is a performance penalty but no exception. If you use 8 bits, I think for some instructions there is a performance penalty just from using 8 bits instead of 32 bits (excpet on the SX-variant processors.) However, I think there is no additional performance penalty if the 8-bit datum is not 32-bit aligned. \_ Do you mean 'bool' and 'char' in C++? Or some other language? |
2004/5/9-10 [Computer/SW/Compilers] UID:30117 Activity:nil |
5/9 In gcc how do you force a binary to be build even though there are undefined references, which you know will never be called during runtime? ok thx \_ That's normally a linker setting - for instance on Solaris, using native ld (not gnu ld), you'ld want the -z nodefs flag passed to the linker during the link phase (and probably -z lazyload so it doesn't complain when you try to run it). I don't know the GNU ld flag. -alan- \_ from the archive: What's the flag to gcc that will ignore "undefined reference"? \_ isn't this an error and not a warning? how can you ignore it? \_ well if you know a symbol is never referenced then you can get away with it. I did the same thing with ctwm. I forgot which flag you use for linking and ignore symbol not found, I just rtfm but I can't seem to find it anymore. \_ you can fake an empty definition \_ This is standard behavior on VM. I didn't know you can do this on Unix. |
2004/5/6 [Computer/SW/Compilers] UID:30060 Activity:high |
5/6 I've been out of school for too long. If I want to write a simple compiler, what tools do I need besides yacc and what do they do? Thanks a bunch! \_ well there's also lex (flex) for the lexical analyzer (tokenizing). \_ java or c? if c, lex/flex=good tokenizer. yacc/bison are great for grammar. both are LALR so they're pretty powerful. \_ I'm not actually writing a compiler. What I really want is to generate some C code that can read simple script files and perform some actions. For example, if the C code reads this file: REPEAT 10 DELAY 3 FOO END it'll perform a for-loop 10 times calling sleep(3) and foo(). So I thought what I need is pretty much the front part of a compiler. Thanks for any help. \_ I've been going through this with guys at work who always want to add scripting capabilities to their apps. Check out SWIG; it lets you call scripts from C code and vice versa, and your scripts can be python, perl, ruby, java, lisp, scheme, whatever you want to allow. |
2004/5/6 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:30054 Activity:moderate |
5/6 I'm trying to use "#define errno WSAGetLastError()" in a winsock file, but the compiler says errno is already #def'ed. I can't just run cpp on the file--it's a crappy ide-based compiler--so I'd like to do something like printf("errno"), but of course that just prints "errno" instead of the preprocessor's notion of what errno is #def'ed to. What should I do instead? \_ errno is already defined because it's part of the c-library. Do One of the following: call perror() : This will print an error description to stderr use strerror(errno) to get the error string and print it however you want use strerror_r(errno, mybuffer, mybuffer_length) to put the error string into your buffer mybuffer \_ Sorry, should have explained myself a bit more-- this is a socket protocol wrapper file that's compiled into windows, unix, cygwin, and vxworks objects. I'm doing a lot of rc = select(...); if (rc && EWOULDBLOCK == errno) { /* handle blocking error */ so I really need the #def to work correctly. I could just undef errno for winsock and then re-#define it, but I'd like to know what it evaluates to first. \_ Many compilers allow you to compile only the preprocessor step. For instance, with Visual C++ 6 you can add "/E" to the compile options and you'll get the preprocessor output in the build window (and .plg file). \_ May I ask why you need to alias WSAGetLastError() to the preexisting #define errno? Why not use a different label? \_ Every library except winsock uses errno to report the error, so it seemed relatively natural to keep it consistent. I guess I could use MY_FOO_ERROR instead, but that would require a #else to the #ifdef _WINSOCK_H. Also, I'm kinda curious how to print the evaluated macro at runtime. \_ if you really wanted, you could #undef errno first. I don't see what using a crappy IDE-based compiler has to do with anything; it doesn't stop you from running cpp. Anyhow, if you want to see what errno is #define'd to, see this: http://www.eskimo.com/~scs/C-faq/q11.17.html --jameslin \_ Thanks, this is exactly it. Errno was #def'ed to *_GetErrno() and I didn't want to #undef it if it was already "magically" set to WSAGetLastError by <winsock.h>. Also, running cpp on the file says that errno was #def'ed to *__errno(). |
2004/4/30-5/1 [Computer/SW/Compilers, Computer/SW/Languages/C_Cplusplus] UID:13508 Activity:moderate |
4/30 Quick C++ question. In Meyer's More Effective C++, Item 22, he has a snippet of code like this: template<class T> const T operator+(const T& lhs, const T& rhs) { return T(lhs) += rhs; } My question is, why is it legal to do 'T(lhs) += rhs;'? T(lhs) yields a temporary, which is AFAIK, an rvalue, so since operator+= is not a const member function, the compiler shouldn't allow that line. My reading of the C++ standard seems to support my line of thought. But OTOH, g++ 3.4.0 happily accepts code similar to the above. So am I missing something here? Thanks. \_ T(lhs) is calling the copy constructor, which returns an object; I don't think it counts as a temporary. Not sure though. \_ No, T(lhs) is the functional cast expression, which may call a constructor (but not the copy constructor). Section 5.2.3/1 of the standard says that T(lhs) (that is, a type followed by parens and a single argument) is equivalent to (T)lhs. 5.4/1 then says that (T)lhs for a REFERENCE type is an lvalue, but for a non-reference type it's an rvalue. -emarkp \_ I agree with what you say, except for the part where you say a copy constructor can't be called. That's illogical, and I don't see where the standard says anything about that anyway. \_ Well, that's the only part that isn't clearly in the standard, so I'm glad you agree with the rest. :) Anyway, the standard says that: T(x) is equivalent to (T)x, which any compiler will turn into a noop if the type of x is T. I guess one exception for this would be if the type of x is T const. In which case I guess it would call the copy constructor if T is not a reference type. T *is* a reference type in the example though. -emarkp \_ Oops, my bad. Yeah, this would call the copy constructor (what was I thinking?) because of course lhs can't be modified, but since lhs is a reference type the copied object is an lvalue. I'm sure this is one of the screwy type rules that was made precisely for operator overloading. Sorry for the screwup. -emarkp \_ Hmm, I don't think so. lhs may be of reference type, but T(lhs), which is the same as (T)lhs, is of type T, which is not necessarily a ref type. -op \_ Okay, section 3.10/10: An lvalue for an object is necessary in order to modify the object except that an rvalue of class type can also be used to modify its referent under certain circumstances. [Example: a member function called for an object (9.3) can modify the object.] So it *is* being copied, and it *is* an rvalue, but non-const member functions can modify an rvalue of class type. -emarkp \_ That's nasty, but thanks! -op \_ Ob: And this is why C++ sucks. \_ I agree it is often way too complex, but it has its moments. -op \_ Ironically, the reason this is so complex is so that it will work like you expect, or in a way that a compiler can optimize well. \_ Disagree. At a certain point of complexity it's no longer economical to expect anything. All of this would be irrelevant with T.add(lhs, rhs). \_ Are you arguing against overloaded operators? In your expression, where does the sum go? \_ It's returned as an instance of of T. I'm not being a smartass here, I'm just wondering about cases where operator overloading saves anything more than a few characters of function name. What's the real win? \_ Operator overloading is essential to having user-defined types that don't feel like second-class citizens. "Smart pointers" would be syntactically ugly and cumbersome to use if you couldn't overload pointer-ish operations, for example. I'm sure there are lots more examples when you start using c++ as more than just "a better C". \_ To whoever asked why ocaml syntax is so warty -- in part because ocaml has no operator overloading. I sometimes wish it was there, but I am not holding my breath. The ocaml way \_ Perl. is that the operator can only be the same if the underlying algorithm is the same (so for instance they have +. for floats and + for ints, but < for both floats and ints). So they have 'polymorphism' instead of 'overloading'. -- ilyas |
2004/4/20-21 [Computer/SW/Compilers] UID:13293 Activity:nil |
4/20 What is __attribute__ used for in gcc? \_ do 'info gcc' and search for it, duh. \_ Encyclopedia Galactica (aka google) found this for you: http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Function-Attributes.html |
2004/4/9-10 [Computer/SW/Compilers, Computer/SW/Unix] UID:13121 Activity:nil |
4/9 Anybody using Eclipse's CDT package? Is it possible to sync the gdb view with the current code that is being executed? |
2004/4/7 [Computer/SW/Compilers, Computer/SW] UID:13052 Activity:nil |
4/6 Has anyone been able to get the "certificates" auth stuff working for localhost connections to the admin web ui of CUPS? I would appreciate a pointer to sample config with this working (or instr. on how to do it). tia. |
2004/2/16-17 [Computer/SW/Compilers] UID:12274 Activity:kinda low |
2/16 How do I figure out which macro defines my compiler is automatically using? I need to do some conditional compilation based on platform or compiler (g++ on Cygwin on W2k) and I'm looking for something that that compiler defines that other compilers do not. Is there command to g++ that will list all of this for me? \_ g++ -dM -E - </dev/null \_ yes. |
2004/1/21 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:11861 Activity:nil |
1/20 Any candidates for the best way to prevent developers from #includeing a header file accidentally. Aside from very loud comments to that effect, what is a good way to make the compiler complain? I was thinking something like #ifndef MYLIB_I_REALLY_WANT_TO_USE_THE_PRIVATE_INTERFACE // best way to cause compiler pain goes here #endif at the top of the private header file. This has to be straight C for various reasons (I do prefer C++ and Java). \_ #include Your_error_message_here \_ Cannot find file Your_error_message_here \_ If you want to raise a preprocessor error, there's a mechanism for that: it's called #error. #error Don't include this file. Anyhow, if you want to restrict access to, say, structure internals, you can do: #ifdef MYLIB_I_REALLY_WANT_TO_USE_THE_PRIVATE_INTERFACE struct st { int field; }; #else struct st { }; #endif \_ Document your code and fire any developers who ignore specs. If they're ignoring something this major, they will hose your source even worse somewhere else. |
2003/12/15 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:11455 Activity:low |
12/14 Sorry about this, but about alternative to the Dragon Book in the subject of Compiler. What is the name of the author for that Programming Language book again? \_ the Tiger Book by appel- a much better read. \_ Michael Scott. Here's the Amazon link if you want to read some reviews: http://tinyurl.com/z9rx \_ thanks some reviews. |
2003/12/12-13 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:11427 Activity:nil |
12/11 Is there something like __FILE__ or __LINE__ macro that will give me the class / method name in C++? \_ it can't be a macro, because the preprocessor doesn't know anything about classes or functions. \_ __FUNCTION__, __PRETTY_FUNCTION__ in gcc, __func__ in C99 \_ gcc 2.95.4 on soda accepts __func__ too. |
2003/12/11-12 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:11404 Activity:moderate |
12/10 I am not a programmer so this question may be stupid. What does @"A string (might be empty)" mean in a gcc? \_ The '@' character has no meaning other than '@' in standard C. Look at the documentation for your nonstandard compiler. \_ What's the meaning of '@' in standard C? I have no C book near me and I can't find it in the documentation either. \_ It isn't standard C syntax. If you post a code snippet with a usage example maybe we can guess what it is. \_ Sorry I wasn't clear. The '@' is not an operator, token, etc. It's just another character, like '1' or '8' or '\' and has no special meaning at all. However, it *does* have a special meaning in C#. Specifically it means a verbatim string literal. See: http://www.softsteel.co.uk/tutorials/cSharp/lesson4.html#3 \_ Please give more context. Otherwise it looks like the program may be run through a custom pre-processor (@ is expanded to something else) before being passed to gcc. \_ What's the source language? Objective-C? \_ I think @ means something in Objective-C... unicode string maybe? \_ Apparently an "NSString" object: http://csua.org/u/58b \_ It means several things in ObjC. @"..." is a way to create an NSString literal, but it's used in other places, e.g., @class to predeclare a class name, @interface ... @end is how you declare a class, etc. \_ Thanks. Now I realize that the version of documentation stored on my computer is outdated. It does not define the @"string" directive even though it is is already in use by then. Actually it is still not in the grammar section of the current documentation as far as I see. http://tinyurl.com/ytlp (developer.apple.com) \_ What variant of C are you using exactly? \_ I am reading some Objective C codes for Mac. As there is no standard whatsoever for Objective C, I should really say codes for the gcc compiler that comes with OS X. I am confused why this compiler can be called gcc: NSString is part of Cocoa, which is not GPL or open source. \_ NSString is part of GNUStep which is open src: http://tinyurl.com/ytlw (gnustep.us) Also there are some "standards" docs for the language: http://pages.cpsc.ucalgary.ca/~burrellm/objc/objc.pdf \_ It probably should be listed in the grammar, but you will find it here: http://csua.org/u/58h This static string syntax, I believe, is an ObjC thing, and not an Apple extension (GNUStep as far as I see. docs refer to it too), but I couldn't test it it out on soda, as I couldn't find the Foundation header files. http://csua.org/u/58i |
2003/12/11-12 [Computer/SW/Compilers] UID:11403 Activity:nil |
12/10 I never took a compiler class. I would like to at least start to get some light reading on my own to get started. Are there any "Compilers for Dummies" books out there? The Dragon Book is too much for me. \_ The Dragon Book is too much for most people. It seems to intentionally avoid clear explanation. \_ May want to check out Programming Language Pragmatics by Michael Scott. My gf used it for her compiler class. I haven't read it, just browsed through it, and it seems well organized, the writing clear, with things explained and motivated in a straight forward manner. It's still a thick book but I think you can just read and read and get enlightened without getting stuck. I wish I had it when I took cs164. \_ thanks. I will do that. I have read other Programming Language book before, so it shouldn't be that bad. --kngharv |
2003/12/8-9 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:11359 Activity:low |
12/7 Is there any reason to use bzero over memset(foo, 0, sizeof(foo))? \_ ANSI! ANSI! is the STANDARD! C runtime library. (use memset instead) \_ Is ANSI the standard or is K&R (in the K&R C book) the standard? I've always been using the K&R book as reference when I want to write portable code. \_ K&R 2nd edition has a big "ANSI C" label on the cover. I think "K&R C" refers to K&R 1st edition. \_ On some systems bzero used to have an optimized assembler implementation. If you are not concerned with speed, stick to memset() since it is part of C89. \_ Wouldn't those systems also have a quick compiler check to call the assembly when the second arg was 0? |
2003/10/31 [Computer/SW/Compilers] UID:10875 Activity:nil |
10/30 What is __P()? I've seen the DragonFlyBSD guys crowing about finally getting rid of it. What does it do? \_ Hackery for allowing old K&R non-prototype compilers to work with ANSI/ISO C89 prototypes in headers. \_ How does it work? Links? It's hard to get anything in google. \_ look at sys/cdefs.h, and then look at how it is used. Like was said before it is there to allow old non-prototype compilers to work with prototype code. |
2003/10/24-25 [Computer/SW/Mail, Computer/SW/Compilers] UID:10768 Activity:nil |
10/24 Are there any pitfalls involved in using sendmsg/recvmsg over send/recv? I finally got my problems solved with basic sockets, and I'm looking for a good way to say "these bytes are msg1, these are msg2" etc. Thanks \_ These are two separate issues. (1) man sendmsg. (2) Since TCP is byte-stream oriented, you will need to introduce some message delimiting mechanism. Common ways are LF (like SMTP, POP3, BGP) and having predictable message lengths (e.g., constant for all messages, having an early size field which indicates the size of the message, having an early type field which you associate with a given size, etc.). http://tangentsoft.net/wskfaq/articles/effective-tcp.html \_ Thanks for the link. I've been using a length-header so far, but I was thinking that perhaps MSG_EOR would be a better solution. I can't use the delimiter option b/c the module must also handle binary data, and I have no guarantees on length either. I guess I'll stick w/ what works. \_ You can come up with a prefix code for your messages. This can be a good idea for reasons other than getting rid of delimiters (since a good prefix code will compress what you send over the wire). -- ilyas \_ I thought you had to have a known alphabet to do that. And the binary data is totally unknown. \_ If it's binary data, the alphabet is {0, 1}, by definition. -- ilyas \_ kinda hard to compress 1 & 0, isn't it? \_ I think you are unclear on the concept. Files you compress with gzip are 1s and 0s, and they compress just fine. -- ilyas \_ I understand the concept, but if you can't predict the expected distribution of your data (even at the byte level) you probably won't achieve much compression-- yes, I'll probably get some compression just by using a standard english distribution, but not enough to make it worthwhile. You are correct in the technical sense, but it's not enough to break what works right now. \_ Sure you will. It's what universal source coding is all about. Why do you think it works on files, where we can't predict the distribution either? At any rate, the original point of using a prefix code in your case was to get rid of delimiters. The compression (which will occur to entropy in the limit, trust me) is just a pleasant side effect. -- ilyas |
2003/9/19-20 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:10257 Activity:nil |
9/19 I have something like this: unsigned char a; char b; unsigned short c; short d; if (a < 9999999) {} if (b < 9999999) {} if (c < 9999999) {} if (d < 9999999) {} When I compile this with gcc 2.8.1 on SunOS 5, it only complains "comparison is always 1" for b and d, but not a or c. Why? Thanks. \_ Perhaps in converting 99999999 to a signed char or signed short the compiler wraps the number around the max (i.e. takes it mod the max value) whereas for unsigned data types it saturates. Another possibility might have something to do with the fact that 99999999 is negative for signed char and signed short. -emin \_ I see. I just tried 65537 and I got the same result. Same for gcc 2.95.4 on soda also. \_ Try 65535. \_ Same result. But in this case, not complaining about the 'c' line makes sense because the comparison is not always 1. \_ from gcc 2.95.2 on sparc: % gcc -o foo foo.c foo.c: In function `main': foo.c:7: warning: comparison is always true due to limited range of data type foo.c:9: warning: comparison is always true due to limited range of data type try b < 127 and d < 32677 --jon \_ Arrr! \_ Avast! |
2003/9/17-18 [Computer/SW/Compilers] UID:10234 Activity:nil |
9/17 For this snipet of code: for (i = 0; i < 3; i++) { printf("\n\n0x%x %d", ptr++, *ptr); } Is there anything machine dependent about the evaluation of ptr++? I tried this on sparc/solaris and *ptr prints out the value AFTER the ++ increment. But on a MIPS CPU, *ptr evaluates to before the ++. WTF? \_ wtf is that you should learn c better. the order of evaluation of arguments is implementation-dependent, so a compiler is free to do whatever. \_ And this is the winner. The comma operator evaluates left to right (as in: (a=b, ++b) works just fine). However functions can evaluate their arguments in any order. I don't understand the need for people to do this anyway. Add the '++ptr' on its own line. \_ |>|_||>3!! 7|-|475 4|\| 3><7R4 |_i|\|3 0F <0|>3!!!!1!! R34|_ |-|4X0R5 |/\|R173 5|\/|4|_|_ <0|>3!!!!1!| \_ to match their 5|\/|4|_|_ heads (both of em)? \_ http://www.embedded.com/story/OEG20020429S0037 \_ From the C9x Standard (section 5.1.2.3): "The grouping of an expression does not completely determine its evaluation ... the actual increment ... can occur at any time between the previous sequence point and the next sequence point" In your case, this means that ptr++ could occur either before or after printf(); and both would be completely valid (even in the same program). \_ this C or C++ code? \_ :-) \_ I won't apply for your job unless you tell us which one! |
2003/9/4-5 [Computer/SW/Compilers] UID:10081 Activity:nil |
9/4 I have a legacy make system that needs to work on several platforms w/ different compilers. To build for platform X, you type "make -f X_make" at the top level. I'm trying to get to a modicum of sanity about this by actually using dependencies correctly. The problem: I need to have dependencies in subdirectories, and those dependencies also need to be built using the X_make makefile, not Makefile or Y_make. Is there a way to specify this without actually setting up a target for each subdirectory that does "cd subdir; make -f X_make; cd .." ? Thanks in advance. \_ make depend? or "makedepend"? |
2003/8/28-29 [Computer/SW/Compilers] UID:29504 Activity:nil |
8/28 IBM has released a beta C/C++ compiler for MacOS X: http://www-3.ibm.com/software/awdtools/ccompilers http://www14.software.ibm.com/webapp/download/search.jsp?go=y&rs=vacpp3 |
2003/8/16 [Computer/SW/Compilers] UID:29368 Activity:high |
8/15 Are there significant C compilers out there that really don't support C++ style "//" comments? \_ No. So whomemever is requiring the use of /* */ only in whatever code \_ No. So whoever is requiring the use of /* */ only in whatever code can be safely ignored. The only time you'd limit this is if you are stuck on a stove-pipe system. \_ C99 added '//' comments. The only compilers I know of that might have trouble are legacy/embedded compilers. |
2003/8/6 [Computer/SW/Compilers] UID:29251 Activity:moderate |
8/5 I'm contemplating on getting a set of Cleveland or Ping Irons. What are the pros and cons of using graphite vs. steel? And should I get flex/regular/stiff? Thanks motd god. \_ get steel shafts, and the flex depends on your swing speed which is typically measured with your driver and 5-iron. you can get this done at any shop. and i've used ping irons and cleveland wedges, and they're both fine, it's just what you're more comfortable with. \_ what is your handicap? \_ if you have to ask you don't know |
2003/7/15 [Computer/SW/Compilers, Computer/Rants] UID:29042 Activity:nil |
7/14 http://www.cnn.com/2003/TECH/biztech/07/14/moves.offshore.ap/index.html |
2003/6/30-7/1 [Computer/SW/Compilers] UID:28870 Activity:moderate |
6/30 Follow-up question to the Academy of Arts thread last week. Someone posted this answer: \_ If you want to make $$$ then learn Inferno/Flame. My gf worked for a large FX house and the Flame artists all cleared $200K+. Maya is good to know, but less specialized. Any info on why Flame is in demand, and what are some FX houses that use Flame? -thx \_ There are fewer artists who know it, therefore they make more $$$. Part of it is that it is expensive to buy. Any kid can sit down and fool with Maya. Flame is UNIX-based, which throws a lot of people off, too. My gf's company was Digital Domain, the company that did Titanic, A Beautiful Mind, Apollo 13, Backdraft, and others. --dim \_ I also want to mention #1 talent needed is artistic. People take classes to learn all the software and want to be digital artists. That's only enough to get you grunt work. You have to have the artistic talent. They would hire people who submitted drawings who had hardly TOUCHED a computer and turn away people who knew all of the software but still no talent. Imagine someone going to ITT and then wanting to be a software engineer. They know how to use the compiler, right? all of the software but had no talent. Imagine someone going to ITT and then wanting to be a software engineer. He knows how to use a compiler, right? |
2003/6/26-27 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:28847 Activity:moderate |
6/26 What's a "constant function" in C? I ran across this term in the gcc man page. Thanks. \_ look at the info page. const functions are a gcc extension. gcc assumes the function has no side effects and subjects it to common subexpression elimination, for example when you call it in a loop. -ali |
2003/6/25-26 [Computer/SW/Compilers] UID:28839 Activity:high |
6/25 When yacc man page refers to "LR(1) parser", is LR(1) a reference to some other man page or does LR(1) have some other special meaning? -clueless \_ some other special meaning, LR(1) is a style of parse tree generation that has certain limitatations. Sort of like how reg exps can't search for all the things you want to search for because they can only do context free searches (at least I think that is the limitation of regexps, it has been a while.) Take 172 or 164 to learn more. \_ LR(1) -> Left to right (scans input left to right) and builds a Rightmost derivation in reverse by looking at one (1) input token at a time. (yacc is actually a LALR(1)- Look Ahead, Left to right, Rightmost deviation, One input token beastie. See also Bison.) \_ oooooo! \_ Take 164. |
2003/6/13-14 [Computer/SW/Compilers] UID:28728 Activity:nil |
6/12 What are compiler intrinsics? \_ obgoogle, etc. |
2003/5/30-31 [Computer/SW/Compilers] UID:28580 Activity:high |
5/29 There's a MIPS assembly file foo.s. It's unoptimized. The makefile compiles it into foo.o and then links with the rest of the program. I know there's a way to dump the actual assembly listings that is produced by gcc -c foo.s. And this assembly is not the same as what's in foo.s because compiler optimizes it and adds in a lot more stuff to make it runnable. Anybody remember how to get the assembly listings from a foo.o object file? I tried playing with GDB but can't seem to find the options to do this. Thanks. \_ no disassemble #5! \_ Reference to "Short Circuit" duly noted. \_ gcc -S, but I think you're barking up the wrong tree. gcc is not optimizing your code, it is just calling the assemble and then the linker. \_ objdump -d \_ YES! Thank you very much. I love the motd. :-) \_ And we luv yermom. It's all good. \_ When everyone starts to love yermom that's when it becomes a tragedy of the commons. \_ this sounds like a violation of the DMCA. \_ how is reverse engineering his own assembly code a violation of anything? i think you should be violated for being stupid. \_ it's not his code. he's reverse engineering the compiled output from someone else's program. DMCA violation. you can think anything you want, you'd still be a criminal. \_ he has foo.s, he has foo.o which he generates using gcc and foo.s. he can disassemble foo.o and take a look at what gcc did with his foo.s without violating the DMCA. |
2003/5/12 [Computer/SW/Compilers, Computer/SW/Languages] UID:28412 Activity:kinda low |
5/11 What is "software pipelining"? Is that like multithreaded stuff doing the same task on different processors? I understand hardware pipelining completely (took cs152), but don't understand what software pipelining is. ok thx. \_ It's a way of reducing loop overhead (much like loop-unrolling). SW pipelining works by taking replicating the loop body several times and staggering them in such a way that the instructions appear in reverse order in the loop body but none of the instructions have any dependencies within the same iteration. This helps place distance between dependent instructions. The major problem with SW pipelining is that you need a really smart compiler to realize this and there's some startup and cleanup code you need to tag on. Original Code ------------- L1: lw $1 <- MEM add $2, $1, $1 sw MEM <- $2 bc L1 SW Pipelined Code ----------------- lw $1 <- MEM add $2, $1, $1 lw $1 <- MEM L1: sw MEM <- $2 add $2, $1, $1 lw $1 <- MEM bc L1 sw MEM <- $2 add $2, $1, $1 sw MEM <- $2 \_ so does this require VLIW (issueing 3 cmds in 1 cycle?) \_ I wrote it in column format to illustrate how to convert the original code into SW pipelined code. It has nothing to do with multi-issue. \_ Multi-issue helps. There's two big reasons to SWP. One is to take advantage of more instruction-level parallelism (ILP), because you're running more instructions concurrently. But even if you don't have multi-issue, you can still get better latency tolerance by interleaving instructions from other iterations while waiting for a long-latency instruction to complete (in the example above, the load [lw] might take a long time to return). \_ one way people use the term is in threaded programming models, where you have a thread (or pool of threads) to handle a specific task which then passes work on to another thread/threads. \_ comment on my reply, the above poster has the more common usage. |
2003/4/10 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:28060 Activity:high |
4/9 Right now I have tons of snippets like sprintf(errmsg, "Error %d: invalid type %d at %d\n", 1, myType, time); QueueError(errmsg); Is it possible to define a macro to take an arbitrary # of arguments-- #define ERROR(x) sprintf(globErrMsg, x); QueueError(globErrMsg); Or will the x in the macro just take everything up to the first comma? \_ #define ERR(args...) {sprintf(g_errMsg, args);QueueError(g_errMsg);} \_ Yes, if you use recent gcc or other C99-ish compilers, no for older ones. \_ A reliable method for doing this is to write a function that uses a va_list and vsnprintf: #include <stdarg.h> void Error (char *err, size_t sz, const char *fmt, ...) { va_list vl; if (err == null || sz <= 0) return; memset(err,'\0',sz); va_start(vl,fmt); vsnprintf(err,sz,fmt,vl); va_end(vl); QueueError(err); } BTW, You should really avoid sprintf since it doesn't have a good way to check thesize of the input buffer. \_ thanks for the code, I'll give that a try today. One question-- this is a real-time application, so there are a few common stdio calls I use regularly and the rest are viewed warily. Are there any non-constant performance implications for using vsnprintf? I can handle a +foo hit, but foo*strlen(err) might be pushing it. thanks. \_ that only matters if the content of your variables comes from input. \_ thanks for the code, I'll give that a try today. One question-- this is a real-time application, so there are a few common stdio calls I use regularly and the rest are viewed warily. Are there any non-constant performance implications for using vsnprintf? I can handle a +foo hit, but foo*strlen(err) might be pushing it. thanks. \_ vsnprintf calls vfprintf internally. In most cases sprintf also calls vfprintf internally. The same non-constant performance issues you may have with your implementation of sprintf will most likely apply to your implementation of vsnprintf. \_ that only matters if the content of your variables comes from input. \_ Program defensively. |
2003/2/21 [Computer/SW/Compilers] UID:27474 Activity:nil |
2/20 I'm gonna install spim on my Linux box. How do I generate MIPS code when I don't have access to any old DEC/MIPS based machines? \_ Build a cross compiler. Check out the cs 162 web page, they may have a gcc binary that is capable of cross-compiling to mips |
2003/2/14-19 [Computer/SW/Compilers, Computer/SW/Languages/C_Cplusplus] UID:27419 Activity:low |
2/14 Is there any way other than using "_asm" to access x86 registers as variables in C code compiled with MS C++ Compiler version 12 or 13? (In the BC++ for DOS, for example, I can use "_AX".) I tried http://msdn.microsoft.com but couldn't find anything. Thanks. -- yuen \_ What is wrong with _asm, is it bad? \_ No, but I just want to do something like "if (_AX = 3) {...}". If I use "_asm" blocks I need multiple lines and a label. -- yuen \_Something seems fundamentally wrong with this kind of statement. Specifically, mixing C and assembly that way just doesn't work. I really think you must load the AX register into a short variable, then test the contents of that variable. Otherwise you may not get what you intend. \_ Okay, I'll do that. Thanks. -- yuen |
2003/2/2 [Computer/SW/Compilers, Computer/SW] UID:27281 Activity:high |
2/2 i'm getting a "cc1: warnings being treated as errors" as I try to compile this thing. But i don't WANT warnings treated as errors. How do i make it stop? (specifically i'm getting a "warning: implicit declaration of function `exit'" message but that's not the point.) \_ how are you compiling it? this is gcc? \_yes. From the make file : "gcc -O2 -Wall -Werror" hey, i bet if i take out that With error flag, it might do the trick eh? I bet if had just looked at the damn make file in the first place i could have figured it out. O.k. if i had a clue stick i'd beat myself with it, but i seem to have misplaced mine. |
2003/1/26-27 [Computer/SW/Compilers] UID:27202 Activity:nil |
1/24 Speaking of C++, I was working on refreshing my memory on it using Soda, and I had a problem with the cin.getline() function. It gcc claims not to have a function that inputs into a sting object only one that uses a char buffer. But even then it doesn't work completely correctly. We have Gcc 2.95 here, is that too old? |
2003/1/14-17 [Computer/SW/Compilers, Computer/SW] UID:27094 Activity:high |
1/15 Back to Mirzaian's strongly polytime LP claim. The link to the announcement has vanished from his webpage (although the file itself is still there, http://www.cs.yorku.ca/~andy/pubs/Announce.doc). Would the original poster (or anyone in the know) care to comment? \_ Apparently not. \_ Looking into it, stay tuned. - OP \_ We ll find out by February. - OP \_ Which we, why February, and what will we find out? Or did you mean by January 28th? If so, then that still wouldn't explain the disappearance of the original announcement. |
2002/12/3 [Computer/SW/Compilers] UID:26695 Activity:high |
12/2 What does the following struct mean? struct { instr_t :18, _i:1, :13; } u_i; #define i_i u_i._i #define getI(x) (((((uint32)(x)) << 18)) >> 31) #define putI(x) ((((uint32)(x)) << 31) >> 18) \_ it means you should read up on bit fields. \_ Hi paolo! \_ Ok, I give up. Why is this funny? \_ Especially because paolo doesn't log in to soda. \_ Well, not in the past week perhaps, but: pst ttyEm 63.73.217.160 Fri Nov 22 12:32 - 12:33 (00:01) pst ttyEH 63.73.217.160 Wed Nov 20 14:22 - 14:27 (00:05) pst ttyCi 63.73.217.160 Tue Nov 19 20:04 - 21:35 (01:31) pst ttyBS 63.73.217.160 Mon Nov 18 10:42 - 10:46 (00:03) \_ yes yes that's nice. Why is this funny? \_ The struct is composed of three members, one of type instr_t that is 18 bits, one of type _i that is 1 bit, and I think a signed int of 13 bits. This might help: http://www.cs.cf.ac.uk/Dave/C/node13.html \_ they're commas, not semicolons. _i is the field identifier, not the type. All three fields are of type instr_t, with the first 18 and the last 13 bits being unnamed. \_ As far as the macros are concerned, does the first one return the value of the last 14 bits * 62? I have no idea what the second one does since it seems to deal with only the last bit. \_ I think even the order of the bits in bitfields is up to the compiler. So getI() only works for some compilers. Why does he need getI() anyway? "foo = u_i._i;" will do. --- yuen \_ I would guess that it's for cases where that 32-bit value got read as an integer rather than as the struct. of course, this could have been easily solved with a union. \_ wha--? It's not that hard to understand. you've got a 32-bit value where you're only concerned with is the 19th bit from the left. getI gets that bit. It shifts left 18 bits then shifts right by 31 bits (hint: there's only one bit left). putI does the opposite; it takes a value for that bit and places it in the right spot in the returned value. \_ But the problem is that you don't know whether _i is the 19th bit from the left or from the right. You don't know whether the 18-bits or the 13-bits are the more significant bits. It's up to the compiler. -- yuen \_ http://www.cs.cf.ac.uk/Dave/C/node13.html Read Portability. They prefer shifting for portability. \_ shifting is preferable to the bitfields, but I think masks would have been better than the extra shifts and would be just as portable (if not more so, since they wouldn't necessarily be dependent on operating on 32-bit values.) \_ yes. sorry, I didn't mean to imply that it wasn't compiler-dependent. there's also the assumption that there's an appropriate underlying type for the uint32 typedef. my assumption is that the code is for some specified compiler and architecture. |
2002/11/27-28 [Computer/SW/Compilers] UID:26653 Activity:nil |
11/27 jal function_foo; add a, b, c; The add instruction is always excuted. I did some tests using gcc -S on some simple routines. Sometimes I see stuff like this in the output: jal function_a; jal function_b; The compiler doesn't seem to explicitly insert a noop. But there must be a noop after it. My question is: is an noop executed by the CPU without the actual noop code? Or does the assembly insert it automatically and I just don't see it with "gcc -S"? Thanks. \_ Most ISAs do not have this branch delay slot. Of the major ISAs, only MIPS (and maybe SPARC?) does. In any case, there are directives that tell the assembler whether or not to introduce its own delay slots as needed, or to interpret the code as given. I believe it is .set noreorder and .set reorder. |
2002/9/13-15 [Computer/SW/Compilers] UID:25883 Activity:high |
9/13 Any plans to install gcc-3.2? \_ Is there any reason to other than it's kewl and gn00? \_ Support for partial template specialization. New binary format. Etc. \_ So it has kewl new features. Is there any reason to install? \_ so you can wank off to the binary's new features. duh. \_ so ill guess we'll be stuck with a known-good version of gcc that works just fine and does everything required of a compiler until a version comes out that someone actually _needs_ installed. wank at home. \_ But gcc 3.2 is binary incompatible with C++ binaries from previous versions! Don't you want to recompile everything written in C++? \_ and what about C99? |
2002/8/22-23 [Computer/SW/Compilers] UID:25645 Activity:high |
8/22 In C, Is there any advantage for writing "if (5 == i) {...}" instead of "if (i == 5) {...}"? All the sample code in a book I'm reading uses the former style. \_ just code both versions, and have gcc dump the assembly out and compare. \- this is kind of interesting exercise if you really care about perf in some opart of your code. we noticed and older gcc generated diff asm for i++ and ++i in one instance where it really shouldnt have mattered much and there was a measureable perf diff. ok tnx. \_ It depends on the compiler but this is such a simple bit of code that any compiler should do the right thing no matter which way you do it. Your book is a bit screwy. Does the author say why they chose that style? It's definitely non-STANDARD. \_ It's the "Developing Windows NT Device Drivers" book. The preface explains the reasons behind other styles used in the example but doesn't explain the "if" style. \_ the former style causes a syntax error if you mistakenly use the assignment operator '=' instead of compare '=='. the same mistake in the latter style is harder to detect, although some compilers (gnu) can generate a warning in certain cases. \_ Yeah but who reads warnings anyway? 95% of gpl stuff compiles with screen fulls and still works and never gets fixed. \_ Good point! That must be it. Thx. \_ Yeah, that used to be the advice. However, in around 10 years of programming, I've only been nailed by that a few times. And I prefer my code to be easy to read. \_ I second that. (5 == i) is annoying. |
2002/8/8 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:25522 Activity:high |
8/8 Why do people declare functions as "static" all the time in C? \_ one of the reasons is that static makes the function local to the file. to the file. Similar to a private method in C++ or java. \_ So that's just a linker issue? Preventing namespace collision? \_ that's one of the reasons. There are probably more, but that's why I like to use static in C. \_ Another is because some lame compilers barf if you declare a function that doesn't have a prototype unless it is static. |
2002/4/4-5 [Computer/SW/Compilers, Computer/SW/OS/Windows, Computer/SW/Unix] UID:24320 Activity:kinda low |
4/3 Has anyone tried Cygwin? How is it? \_ If you're willing to put in the effort to get it configured and running you'll get a decent system. A friend of mine compiled and ran apache on cygwin/nt with numerous mods for a production server. It 'worked' but I would not do this in any place I cared about. I provide this only as an example of what can be done, not what should be done. Think of the children! \_ If you're willing to put in the effort to get it configured and running you'll get a decent system. A friend of mine compiled and ran apache on cygwin/nt with numerous mods for a production server. It 'worked' but I would not do this in any place I cared about. I provide this only as an example of what can be done, not what should be done. Think of the Lorelai, is that you? _/ children! \_ My laptop dual boots to Linux/Win2K. I got sick of rebooting to do development, so installed cygwin and use it to this end. I'm doing my whole 162 project using it this semester and haven't encountered any problems. I even got the mips cross- compiler to work using cygwin gcc (thanks to this guy: http://upe.cs.berkeley.edu/~jeffpang/cs162 ) - rory \_ If you want a half broken UNIX environment on your Windows system, Cygwin is the way to go. If you are just interested in a half broken UNIX environment, just install '1337 GN00 L1NUX instead. |
2001/11/9-10 [Computer/SW/Compilers] UID:22990 Activity:high |
11/9 Do the 386 and 486 versions of SETI@home work on 386 or 486SX PCs without a 387 or 487SX? \_ "Back in the day", you had to either get a math co-proc or the software had to be written to use software emulation which meant it would run at 1/10th the speed or so for things that normally required a math co-proc. What's the point of grinding out a unit per 2 months anyway? By the time you get your unit in, they'll have already given up on your client/unit pair. As far as seti goes, it depends totally on how they wrote it. Try it. \_ I know it depends on how they wrote it, or more likely, what compiler switches they passed to the compiler. But since I don't have a 386/486SX PC, I can't try it out myself. \_ Then why do you care? \_ Okay, I'm just curious. \_ Surely you've got better things to do than provide horribly energy-inefficient computing power to SETI with negligible results. \_ Hey, at least it's not a 8088 or a Z80. \_ It was either inefficient cycles going to SETI or wasted idle cycles. Which one is worse? \_ It was either inefficient cycles going to SETI, or wasted cycles running idle loop or drawing flying toasters. Which one is worse? \_ Turn the fucking thing off, duh. Just because it still works doesn't mean it should be on. \_ Dude, chill. It seems unlikely that the wasted power from an old machine is going to matter all that much in the grand scheme of things. Try decaf next time.... \_ What about the wasted idle cycles when you're typing in your source code, or your compiler is reading a file from the hard disk or over the network, or you're downloading something from the web, or your debugger is waiting for the target machine to hit a breakpoint? I power on my PC at work 8 or 9 hours a day, and at the end of the day I usually find that only 10% of the CPU cycles went to the ocmpilers/browser/OS etc, whereas the other 90% is idle cycles which I use to run SETI@home. |
2001/10/17-18 [Computer/SW/Compilers, Computer/SW/Languages/C_Cplusplus] UID:22763 Activity:high |
10/17 Is "const volatile" or "volatile const" a valid type qualifier in plain C? I want to define something for some read-only hardware registers. I'm wondering if something like typedef struct { const volatile int reg1, reg2, ......; } myRegs, *myRegsPtr; will do the trick. I want the fields to be read-only but I don't want the compiler to optimize away any read operations. I tried compiling the above and there's no error, but I don't know if it'll always compile to the right thing. Thanks. \_ If the HW registers are read-only then you shouldn't need to do anything like const. Just do volatile reg1, reg2, etc. This stuff is memory mapped right? So when you write to hardware locations that are read only, nothing will happen. When you read it back it will still get the read-only value. (If the HW is designed correctly). Things get trickier if you're using this struct to keep a shadow copy of the registers due to some ASIC bug. But generally, read-only means exactly that. Read-only. \_ Does "const volatile" actually mean anything then? \_ Yes it's memory mapped. I realize I don't need to use "const", but I just want to use it so that the compile will generate an error when someone accidentally writes code to assign a value to that location. to that location, just like what it does for an ordinary const variable. \_ Yes, it's defined in standard C, and it does exactly what you want: you're not allowed to assign to the variable (const), but the compiler will read the value from memory every time you access it (volatile). --mconst \_ You need volatile mconst. -John |
2001/10/8-10 [Recreation/Computer/Games, Computer/SW/Compilers] UID:22669 Activity:moderate |
10/8 How can one obtain a console development machine and compiler? Can you simply pay Sony/Nintendo for a the hardware/software? \_ traditionally, you need to submit your game proposal first, and if approved, then you sign an NDA and then pay for the development hardware and software. for hobbists, Sony had development hardware and software. for hobbyists, Sony had the NetYaroze (PSOne) program and now PS2Linux in Japan. these two would allow you to program technology demos on \_ you also need to spend thousands of dollars the hardware, but not full-fledged bootable games. --jwang \_ what is the difference in the developing a tech demo and a bootable game? Is the Playstation development tool the same? \_ licensed PlayStation 2 developers use different hardware and costs of entry to reflect commercial vs hobbist interests. software tools than PS2Linux users -- the two have different costs of entry to reflect commercial vs hobbyist interests. \_ the word is "hobbyist." A Hobbist is a follower of Hobbes. a PS2Linux demo only runs out of PS2Linux -- you can't burn the executable to a CD-R and boot another PS2 with it. --jwang |
2001/8/15-16 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:22133 Activity:moderate |
8/15 Is there a way in C to specify that I want a particular enum type to be one byte or something small instead of the size of an int? typedef enum {ME_FOO, ME_BAR} my_enum_t; my_enum_t myVar; myVar = ME_FOO; I saw that gcc has an option "-fshort-enums", but I'm looking for a compiler-independent way, preferably in the source code itself. Another possible way is to do this instead unsigned char myVar; /* It's really my_enum_t. */ myVar = (unsigned char) ME_FOO; But that's ugly, plus "sizeof(my_enum_t)" is still the size of an int. Thanks in advance. -- yuen \_ if you read your K&R you see that this is left implementation dependent. You have to use a compile pragma, or just use the constants and not the enum type. BTW I saw witort today. -- pld \_ Hi Paul! I never noticed pld was you until you mentioned witort! -- yuen \_ There's no portable way to do this in ANSI C (C++ doesn't force a particular size either -- just a minimum size, AFAIK). The following hack might be your best option: enum my_enum_t_literals { ME_FOO, ME_BAR }; typedef unsigned char my_enum_t; my_enum_t x; x = ME_FOO; /* Works, no warnings */ sizeof (my_enum_t) is 1 in this case. And the intent is clear from the naming convention. -- misha. \_ i don't see anywhere in the standard that an enum CAN be converted to char. only int and larger (including float). i believe that implies that the compiler is free to issue a warning. but it would have to be a pretty stupid compiler. \_ Enum constants are the same as int constants (K&R2 A8.4), and you can assign int to char in C. Compilers might give warnings if the value doesn't fit, which shouldn't happen here. C is liberal about primitive conversions, which has some upsides (see Kahan's page about Java) -- misha. |
2001/8/8 [Computer/SW/Compilers, Computer/SW/Languages/C_Cplusplus] UID:22046 Activity:high |
8/7 Is there a way to assign values to a structure in one statement? e.g. my_struct_t m1, m2; m2 = m1; /* compiles*/ m2 = {1,2,3}; /* doesn't compile */ Thanks. \_ give my_struct_t a constructor. pass 1,2,3 as arguments. m2 = my_struct_t(1,2,3); --pld \_ if he's using C++, another way to do it is to define operator<< and/or operator, then you can do intuitive looking things like: Array ar; ar << 1,3,4,5,6; i don't remember the precedence of operator= but if it's lower than that of operator, you could also do ar = 1,2,3,4,5; \_ oh shit, you're asking for hell from the language lawyers. you can't do that at runtime but you can use that syntax as an initializer. that's why it's called "initializer" syntax. \_ Yes, you can say my_struct_t m2 = {1, 2, 3}; \_ I need to assign different values multiple times, hence I can't do it as initialization. Oh well, I'll just have to do it field by field then. \_ yeah, quit being such a lazy ass and do it by field. \_ have you read up on these things called "classes" by the way? \_ Been out of school for too long. I can't even find my K&R book anymore. \_ I have a copy, but it's in Russian :(. As for your question -- yeah, you can't use struct initialization as assignment in C. If you need it a lot, you can write a macro. -- misha. \_ this isn't terribly efficient, but can't you declare and initialize a temporary structure, and then assign that to the one you really want? e.g.: { my_struct temp = { x, y, z }; whatever = temp; } ...? yeah, it's not a single line answer, but it's simple. and if you're lucky, maybe your compiler will do the right thing and ditch that temporary structure entirely. -jameslin \_ i think c99 allows this. you are using c99, right? -ali |
2001/6/28-29 [Computer/SW/Compilers] UID:21669 Activity:very high |
6/28 Is there an equivalent for Perl's '-c' option in javac? \_ JLint at http://www.ispras.ru/~knizhnik jikes -nowrite +B \_ jikes is the superior Java compiler \_ jikes is the STANDARD SUPERIOR JAVA COMPILER! \_ JIKES! JIKES! JIKES is the STANDARD! Superior Java Compiler. \_ jikes is as useful as Essence of Emerile while eating a shit sandwich. |
2001/6/18-19 [Computer/SW/Compilers, Computer/HW/CPU] UID:21569 Activity:nil |
6/18 So GCC 3.0 is released. Anyone know where I can find detailed info on the contents? \_ it doesn't build for mips-elf \_ I'm more interested in the detailed changes of the release (improved std C++ etc.). And if I were to build it, it would be on win32. \_ http://gnu.org ? http://www.gnu.org/software/gcc/gcc-3.0/features.html \_ EVIL COMMIE LIBERALS. USE VISUAL C++. |
2001/5/16-17 [Computer/SW/Compilers] UID:21286 Activity:low |
5/15 anyone know how to produce a linker map file in vj++? \_ What exactly are you trying to do? |
2001/5/12 [Computer/SW/Compilers, Computer/SW/Languages/Perl, Computer/SW/Editors/Vi] UID:21252 Activity:nil |
5/11 http://www.grrl.com/hackerboy.html |
2001/4/18 [Computer/SW/Compilers] UID:21014 Activity:nil |
4/17 What is ld.config? What is it used for? \_ It's a file used by some unix boxes to tell binaries and compilers where to look for object library files (.so and .a). Man ldconfig. Considered by evil communists to be a bad thing. -John |
2001/4/16-17 [Computer/SW/Compilers] UID:20990 Activity:high |
4/16 In a C statement like "if (foo > bar)" where foo is a int8 and bar is in32, how does the compiler translate that? Does it turn it into a int32 to int32 comparison? Or does it chop off bar and turn it into int8 to int8 comparison? If it does turn foo into an int32, where does it get the memory? Compiler assign it a new register? If so, is there a possibility that you run out of registers if you have lot of comparisons of different sizes? Thanks. \_ 1. How a person writes a program has no bearing on how it will look like in the procedure stack. If a function is a leaf function and uses less registers than is actually available then there's no need for a new procedure stack. Where does it get the memory? The compiler figures this out. 2. Yes, you can run out of registers. What's the solution? It's called register allocation. There exists a myriad of algorithms to deal with this issue. Take 164 and you'll learn all about them. Not everything in a function fits in the register ints means "store in register and allow the automatic sign extension to happen". don't let the above comment make you think that int8<>int32 comparisons are somehow less efficient. file. \_ Uh, 164 with Savage Sue barely touched on register allocation. \_ C does type promotion. In this case, foo will end up being a 32-bit value that is the same, numerically, as the original 8-bit value. \_ It creates a temporary int32 for the comparison. The temporary value is normally stored in a register, but it will end up in memory instead if you run out of registers. \_ note that this doesn't mean shit in a modern architecture. your registers are 32 bits wide at least already, so that additional 24 bits are already wasted. type promotion of ints is actually a noop in a modern architecture: it's already stored as a sign extended 32 bit value. don't let the above comment make you think that int8<>int32 comparisons are somehow less efficient. \_ They are less efficient. ALU operations don't automatically sign extend 8-bit values in a register. You need to do that separately. For example, on a Sun: foo.c ----- int foo(char c, int i) { return c + i; } int bar(int i1, int i2) { return i1 + i2; } when you compile this with the -S option the two functions are almost the same except: stb %o0, [%fp-17] ldub [%fp-17], %o0 sll %o0, 24, %o1 sra %o1, 24, %o0 ld [%fp+72], %o1 used to perform the sign extension \_ can you turn on -O and rerun this, please? \_ Similar results, though much shorter. For both Sun cc and gcc, foo produces a sll and sra by 24 but not for bar. So yes, C promotion does incur overhead. foo: sll %o0, 24, %o0 sra %o0, 24, %o0 retl add %o0, %o1, %o0 bar: retl add %o0, %o1, %o0 \_ i based my initial assertion on the fact that many architectures provide a load byte instruction which does sign extension on load to register. |
2001/4/13 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:20960 Activity:very high |
4/13 What's up with forward declarations and member function pointers in C++? I've got a bunch of classes that need to include each other, but when I try using a pointer to a member function (fooclass::bar) I get some bullshit about "incomplete type fooclass has no member named bar". Even though it does. So I can't get this bitch to compile. Am I just screwed? Happy Friday the 13th btw. \_ platform? compiler? a smaller sample that doesn't work? From here is sounds like you're screwed. I've done that web of class dependencies before with no problems. -meyers \_ Yes, post your code in /tmp or something for others to view. \_ hmm. well i'm juggling other things right now so I'll try doing that later. this is g++ on linux by the way. i believe it would work if i change from calling class A's constructor in class B's constructor to setting it up manually, but that's not very elegant, and this is stuff other ppl will use. \_ Hand coding kludged solutions are known as "job security". \_ yeah, especially if you're stupid and your coding-fu is weak. \_ leave him alone, he's probably only taken cs61b. \_ Right, sorry. I forgot about the "no-beating- up-on-retarded-kids" rule on the motd. mea culpa. \_ When you're laid off and during the exit interview your manager thanks you for writing such clear and easy to modify code, you'll think back on this. \_ Talking from experience, huh? Poor guy. Have you ever considered a job in a less technical field? \_ You'll see. It's easy to be 23 and think you're hot shit and the world is your oyster. \_ not likely. People that do this sort of feeble "job-security" crap get fired where I work. Grow up and get a real job, kid. \_ And the name of your New Age Enlightened company is...? |
2001/3/15-16 [Computer/SW/Compilers] UID:20797 Activity:nil |
3/14 Which of the following is better? #define intptr (int*) typedef int * intptr; I think the latter is better, but why? \_ first, does #define intptr (int*) do what you want? afaik, (int*) x is not a legal declaration. if you get rid of the parentheses, consider the difference in the following if you use typedef or #define : intptr x, y; \_ Correct answer moved to the top. \_ The latter is better because the preprocessor will sometimes \_ what's wrong with just using int* ? \_ because it's not hungarian. \_ because CIVILIZED people don't succumb to those primal pointer urges, you sick monkey \_ Use void *, it is used but never used up. \_ first, does #define intptr (int*) do what you want? afaik, (int*) x is not a legal declaration. if you get rid of the parentheses, consider the difference in the following if you use typedef or #define : intptr x, y; substitute (int*) for intptr in bad places. For example if you hook up two components that both define intptr with #define the preprocessor will silently choose one, whereas the compiler will complain about conflicting typedefs. \_ if you #define something twice, the preprocessor often will give you a warning. \_ #define's okay for smaller project. However, imagine you have constants (#define CONST1 12345) compiled into your objects and later on you change the semantics of your code. The compiler is certainly not going to catch your mistakes. Preprocessing sucks, save it for porting issues. \_ preprocessing when used properly can be quite useful. Macros can sometimes do things that inline functions cannot. \_ The typedef is prefarable for the following reasons: (1) This is EXACTLY what typedef is defined to do. Using #define is being unconventional. Since there is no good reason to buck the convention you might as well follow it to make everyone's life easier. For example, somebody reading your code who sees intptr will probably assume it is a typedef (since that is the convention) and do things that might break if it was a #define. (2) Debuggers can figure out what intptr means if it is a typedef but not if it is a define. For example, "p (intptr) x" should work properly in gdb with typedef not with #define. (3) Typedef is more likely to work properly in cases you haven't considered since the compiler has more information about what it's doing. Consequently, it is more likely that compilers will generate proper warnings and error messages using typedef than with define. Similiarly chaining typedefs will work, can you guarantee the same with defines? |
2001/3/12-14 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:20753 Activity:high 71%like:20751 |
3/11 (define foo "there is a compiler that will take in java and ouput x86 machine") \_ (what-is-it-called foo) \_ (url? foo) \_ (url-p foo), HEATHEN! \_ "define" is a Scheme special form, not Lisp. \_ defun. Lisp. Kids these days. \_ my other car is a cdr. |\_gcc does this. -ali | \_ you mean gjc right? The code that is generated is quite poor | and dumps core often. | If you really want this M$ had a tool to do it in VJ++ and \_ Yeah, gcj, I have having a dislexic moment. | it worked pretty well. For non-M$ OSes SOL. \_____\_ i believe he means gcj: http://gcc.gnu.org/java/index.html but gcj seems to be broken (can't even build helloworld.java) - paolo \_ Yeah, gcj, I was having a dislexic moment. dyslexic, you dysfunctionate _/ \_ Yeah, gcj, I was having a dyslexic moment. I don't know about the current version, but at least two versions last years *seemed* to be able to compile basic stuff and run it. (At least that's what the guy in the cube next to me said, I never tried it. Jikes + class file obfusication worked well enough for me) \_ obfuscation, you obsequious abstruse obstretrician \_ Doesn't TowerJ claim to do this? \_ We tried it about a year ago at work and it didn't work all that well. In most cases, the speed up was less than 1.5x, and the fastest the code ever ran was 2.2x. This was on x86 Linux though. It might be better on M$ Lose*. But still, its not worth the money and time to retrofit everything to use towerj. You can get better speedups by avoiding exceptions and using java obfusication along with doing core pieces in native code. - not the original poster \_ This is not surprising, since well-coded java has regularly run at very close to "regular" compiled C/C++. The trick is in writing regular java in the first place. But I want it for saving memory, in an ideal world. \_ IBM has a compiler that does this. I believe it comes with VAJava. I can find out references if you want. \_ sure FIRST! \_ Your strategerie confounds me. \_ my what now? |
2001/3/12 [Computer/SW/Compilers] UID:20751 Activity:nil 71%like:20753 |
3/11 there is a compiler that will take in java and ouput x86 machine code - nameP \_ t |
2001/2/27 [Computer/SW/Compilers] UID:20711 Activity:high |
2/26 I assume GDB will allow me to do a trace on any core dump. correct? Is there a better way? (pedants: if so what?) \_ I use gdb all the time to analyze core dumps. The problem is that gdb gives this facad of a horribly complicated debugger which scares people away. You just need to start off with the basics. Compile and link everything with the -g option. That's all you need. you can invoke gdb from the shell or emacs by calling gdb a.out core (substitute a.out with your program). bt is you best friend for finding where a program crashes. You're on your own from there. It's sad, I'm not even a software engineer and I use debuggers more often than most of them do. \_ I use Java. I don't need to debug. My programs are guaranteed bug-free by Sun. \_ i can't think of anything better than what gdb+emacs does. what feature do you need? -ali |
2001/2/7-9 [Computer/SW/Compilers, Computer/SW/RevisionControl, Computer/SW/OS/Windows] UID:20531 Activity:high |
2/7 Any recommendations for Windoze NT/2000 backup software, where each user keeps their files on local disk? \_ Windoze is not recommended. \_ Yech.... Legato I guess but why would you let users keep local files? Your issue isn't backup software. It's the way you run your system. \_ What strategory would you suggest? \_ What strategory would you suggest? Obviously I can force everyone to compile files on a shared file system, but this would make our programmers feel corporate and they wouldn't like that. \_ They can compile anything on anything they like but I suggest either: store source on remote disk and set up compiler to write all objects, etc, locally or much better would be to use a revision control system like perforce or others that have been discussed previously on the motd and just backup the perforce server. Anyone stupid enough to never checkin their code deserves to get fucked. \_ Wrong. source control systems are meant to store revisions, not to be used as primary backup systems. \_ Duh, I didn't say it was a backup system. I said you're backing up your revision control system instead of dozens, hundreds, or however many desk tops. Try reading before posting. Thank you for playing "sysadmin for a day". Come back next year. I wouldn't want to be the guy to answer to the VP of Engineering when he asks why half his code base went poof and you can't restore it. "It's a revision control system, not a backup system, so I didn't back it up". That makes no sense. \_ Read my post again, hacker. I said they should not be the PRIMARY backup. They are secondary to having a PRIMARY backup of people's local files. What you suggest is the easy way out. \_ What I suggest makes it more likely the files will get backed up even when people turn off their machines at night. |
2001/1/25-27 [Uncategorized/Profanity, Computer/SW/Compilers] UID:20435 Activity:very high |
1/25 Which is a more efficient strcpy()? Is it copying each character until you reach \0; or is it calling strlen() to get the length of the string and executing a memcpy of that length? \_ That probably depends on the CPU architecture, e.g. whether or not it has string instructions and how efficient they are. \_ Assume Pentium 3 with a Linux 2.x kernel and using gcc 2.95.2. \_ with strlen() counting each character until \0 is found. :-) \_ why? \_ Relax, son, it's a joke. Move along. \_ wc `locate strcpy.c bcopy.c` 50 337 2163 /usr/src/lib/libc/string/strcpy.c 47 328 2085 /usr/src/sys/libkern/strcpy.c 35 112 711 /usr/src/contrib/binutils/libiberty/bcopy.c 139 685 4175 /usr/src/lib/libc/string/bcopy.c 271 1462 9134 total #include <string.h> char * strcpy(to, from) register char *to; register const char *from; { char *save = to; for (; (*to = *from) != 0; ++from, ++to); \_ != 0 not needed return(save); } \_ Now do it in 6052, 80286, perl 4.036 (1 line or less), and 3 other languages/scripts of your choice. \_ by "6052" do you mean 6502? fucking hoszer. \_ Holy shit! A typo! And you caught it! Wow! You are *soooo* smart! Did you tell yermom? I'd bag on _your_ typo but I'm not as smart as you. \_ I'd bag on your misspelling too fag. \_ Uhm, there wasn't one, son.... Either way, if the best you can do is toss around "fag" one liners, maybe you're better off just not bothering. Maybe you should try again in a few years when you're passed your 6th grade tests. \_ Suck my dick, cocksucker. \_ gcc has a built-in implementation of strcpy, but i can't get it to emit on linux, gcc 2.95.2. anyone have better results? -ali \_ Try compiling with -Dstrcpy=__builtin_strcpy. The -fhosted or -fbuiltin options sound like they should work, but they don't. -asaddi |
2001/1/19-21 [Computer/SW/Compilers] UID:20380 Activity:nil |
1/19 First C compiler uncovered: http://www.theregister.co.uk/content/4/16227.html |
2001/1/15-16 [Computer/SW/Compilers] UID:20327 Activity:high |
1/15 Stanfurd offers "Programming Language CS242" in conjunction with CS243, their version of Berkeley's Advanced Compiler 264. How come Berkeley doesn't have a Stanfurd equivalent of CS242? \_ Look up the actual curricula for 263 and 264. Also look up "proper use of plurals in Ennglish" use of plurals in English" \_ you must be some queen's english throwback. \_ But there is only the *one* programming language, and there is only the *one* advanced compiler. -troll |
2001/1/12-15 [Computer/SW/Compilers] UID:20307 Activity:insanely high |
1/12 Is it a property of the new compiler that it creates a local name __func__ in every frame, at least when debug info is generated, where the value of that local is the function name? I just noticed that this is the case, but I'm not sure when it started happening. \_ [moved idiot who stuck comment in the middle] \_ What new compiler? "the new compiler" doesn't make any sense without context. \_ [ it has context. the context is right fucking there on the screen. maybe you're from the post-mtv generation that can't recall the point of a paragraph 2 sentences later. stop sticking comments in the middle or get purged again. the rest of us aren't as dumb as you] \_ I see no where that it says what the "new compiler" is. It could be gcc 2.96, javac 1.3, MSVC whatever, or someone who just discovered a compiler the rest of the world has been using for years. Pull your head out of your ass nimrod. \_ Dumbshit, try basic English. Your comment was fine. You put your comment in the wrong fucking place. \_ Lay off the drugs. \_ Remember to take your drugs. \_ My dosage level is just fine. Saw my therapist only two days ago. \_ I believe this is a requirement of the new ISO standard C99. --Galen \_ c99 describes how to produce debugging symbols??? \_ <DEAD>web.onetelnet.ch/~twolf/tw/c/c9x_changes.html<DEAD> \_ freaky things on that web page: 11. [introduction of] _Complex, _Imaginary, _Bool. 14. Array declarations may have a '*' between the square brackets (used for variable arrays in parameter lists). 16. compound literals: create and init anonymous structs and arrays. 23. the above mentioned __func__: it can actually be used as a variable in your code to get the name of your function 33. There are variable-length arrays, whose size depends not up\ on a constant expression but on a computed value. Variable-length arrays must no\ t be global or members of a struct or union. Multi-dimensional variable-length a\ rrays are allowed. (this rules because people were weary of using this feature in gcc. now it's standard) |
2001/1/11 [Computer/SW/Compilers] UID:20293 Activity:nil |
1/9 Why can't somebody make a java compiler that generates machine code? Screw the cross platform bytecode, then it'd be just as fast as C/C++ and would still be the more cleanly-designed language. \_ They have. It's called gcj, and it's part of the Gnu Compiler Collection, normally referred to as gcc. -mogul \_ TowerJ is much better. |
2000/12/26-28 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:20177 Activity:high |
12/26 Does any one have any suggestions for debugging programs? \_ try /csua/bin/clue \_ printf is your friend! \_ are you looking for debugging strategies or debuggers? \_ If you are looking for debugging strategies, I would recommend sprinkling assertion checks throughout your program. For example, if you have a data structure, write a function to check that the internals of the data structure are consistent. Then use the assert macro (man assert for details) to verify that the data structure is consistent when you modify it. You can also use assertions to check that the inputs and outputs of your functions satisfy your assumptions about what they should be. Assertion checks are one of the best tools for finding bugs. \_ aka: printf. \_ Yes. Because we want to run helper debugging functions for every little data structure we use. That's much easier than using the gdb print command. \_ print(3) doesn't call sigabrt for you. \_ if your data structures are weird, try DDD (gui wrapper on GDB) \_ on a somewhat related topic: whenever I try to use lint, it complains that it can't find llib-lc.ln. How do I fix this? \_ Install the lint libraries package(s) for your OS. \_ you don't use lint. you use gcc -Wall -O3 (turn on optimization for data flow) |
2000/12/17 [Computer/SW/Compilers, Computer/Theory] UID:20114 Activity:high |
12/14 I totally don't see any relevance in teaching Lambda calculus in an undergrad course to describe stupid semantic rules. Fuck Aiken and his stupid ambiguous exams!!! researcher) \_ usually to emphasize its distinction from an algebra. keep in mind that "the calculus" taught in high school is really "the calculus of infinitesimals." \_ this is a simple question but: why do they call Lambda calculus "calculus"? \_ It's a way of calculating stuff. and it sounds cool (to a researcher) \_ usually to emphasize its distinction from an algebra. keep in mind that "the calculus" taught in high school is really "the calculus of infinitesimals." \_ I actually wish Hilfinger covered some of that stuff. \_ Hellfinger just asked you completely unrelated questions pertaining to English lit or what happened on a certain date in France that never existed. Often times those answers were as simple as zero or nothing. Nevertheless, I enjoyed pushing the very limits of my parasympathetic nervous system. \_ About dates that never existed? Then the answer is pretty obvious: nothing. \_ Has a Hellfinger exam question list been compiled? I know two: one about some british poem and another about some Spanish/Mexican revolutionary figure. And i think it was french lit and english date. \_ "someone" should definately do this... I remember two: what was the HMS Java? I don't remember the answer but can look it up. The other was a line from "Ode on a Grecian Ern". If more people post them, I can compile the list. \_ this is a good idea. A question from one of my exams was "Where do the poppies blow, between the crosses, row on row?" (A: In Flanders Field) \_ If you're going to teach language semantics, at all, there are two ways to do it. (a) Operational semantics, in which your language description is written in something that works like Tcl. This is icky and went out of vogue in the 70s. (b) Denotational semantics, in which your language description is written in something that works like Scheme (the Lambda calculus). Thank God that your undergrad compiler class is not about stupid shit like how to write a lexical analyzer, like mine was. Also, http://m-w.com's definition of "calculus": 1 a : a method of computation or calculation in a special notation (as of logic or symbolic logic) If semantic rules are stupid, then what exactly is a programming language? -blojo \_ Programming languages are hard. Let's go shopping! \_ lexical analyzers are not "stupid shit". especially the practical applications of 172 stuff. and neither are lambda calculus or type systems. how can you justify asserting that they are? this whole thread is just bizarre. \_ well, they're kind of over-kill in general when all you really need is an s-expr reader. \_ How quaint; how '50s. Dude, humans were not made to read s-expressions. \_ I wasn't made. I was born. -human \_ A lexical analyzer is a necessary component of a compiler and it's worth maybe spending a week talking about them. It is NOT worth spending 1/3 to 1/2 a semester talking about them and doing major projects regarding them. Any programmer with a clue can write a lexical analyzer. It just takes general programming knowledge. The important knowledge in compilers, the domain-specific stuff that the class should be spent teaching, is all about semantic analysis, code motion, and maybe provability. -blojo \_ Um. I can write a lexer very quickly with automated tools like Lex. Very quickly == hours, not days. \_ Yeah, that's like my point, see. -blojo \_ lexical analysers are good for building language -> machine translators, but the underlying theory is useful as a basic model of computation. knowing all the DFA, NFA, REGEXP equivalence shit is really useful if you do CS. also, there is a lot of theory that goes behind building YACC. you could either use YACC as a customer (as in the way compiler writers do) or you could delve into the theory, like the way language people do. i think you're a lazy bitch if you think this shit is bunk. -ali \_ Bunk! Bunk! |
2000/12/12-14 [Computer/SW/Compilers, Industry/Startup] UID:20082 Activity:moderate |
12/12 This may sound wierd but is there a way for a program compiled with the -g debugging option to examine its own stack frame? I once ran a program that, whenever it crashed, did an automatic backtrace on itself and dumped it to stderr. \_ ~mconst/src/gdbcall will let your program run gdb commands (like "backtrace") on itself. --mconst \_ another toy, that helped destroy, the elder race of man. \_ You can do this in assembly, catch an exception and simply check your stack register and walk all the way up \_ How about catching SIGBUS, dumping core and then running gdb backtrace on the resulting core file. |
2000/12/9 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:20050 Activity:nil |
12/7 Eh, why are some virtuals set to 0 (pure virtual) and some are not? \_ defining as virtual = 0 to create an interface definition or abstract class \_ Yes. In particular, pure virtual functions are a signal to both the compiler and client code that this class is not expected to be instantiated, only inherited from. It also requires any child classes to provide the method, but doesn't provide a default implementation. There are many situations where this is exactly what you want. You may not really get this until you're trying to make a framework of code that other people are expected to use, but not modify... -mogul |
2000/12/4-5 [Computer/SW/Compilers] UID:19992 Activity:low |
12/3 Are there production C++ compilers that'll analyze the control flow on pure virtual functions to optimize the overhead of polymorphism calls? \_ Yes. \_ ugh, flow? pure virtual? Poly what? !??!??!? \_ Poly want a cracker! |
2000/11/28-30 [Computer/SW/Compilers] UID:19936 Activity:moderate |
11/28 On an HP-UX system, how do I make a shared library? I tried the procedure I normally use with other systems, but it fails. Here's what happens: gcc -c -fPIC a.c [no errors] gcc -shared -o a.so a.o And I get this error message: /usr/ccs/bin/ld: DP relative code in file /var/tmp/ccmAcwPp.o - shared library must be position independent. Use +z or +Z to recompile. collect2: ld returned 1 exit status Neither +z nor +Z appear to be options for gcc though. \_ gcc has always had broken so support for hpux. you may either need to upgrade or give up (read the release notes for gcc to find out which). you might have better luck with -fpic instead of -fPIC. -ali \_ Check how your gcc was built. The *.a files there (libg2c.a, libstdc++.a, libgcc.a etc.) probably have position dependent code in them. --dim \_ libc has nothingto do with making a .so. there is no check for libc inthis step. \_ Not sure if this is what you're asking for, but try: ar -q library.a objectfile.o \_ (S)he said shared \_ * \_ On a platform I don't know, I usually snag some random library (say gnu readline) and run ./configure on it, then read the Makefile (or just run make and see what the shlib link line looks like) \_ * \_ those branded with * are morons \_ * \_ * |
2000/11/28-29 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:19928 Activity:high |
11/27 Fuck Aiken, COOL, and semantic analysis!!! \_ Don't you mean "Fuck'ken COOL, semantic analysis!!!"? \_ Sorry to say but its your fault for taking it with him and not with Hilfinger and Java... that's what I did and the class ruled. \_ Frankly, "wrote a java compiler" looks infinitely better on a resume than "wrote a COOL compiler". \_ And you're only doing this major because it looks good on the resume right? \_ And you're not? You bought in BH's whole thing about the \_ And you're not? You bought into BH's whole thing about the intrinsic value of education for it's own sake and blah, blah, blah? The rest of us have bills to pay. \_ If you're hiring java engineers, would you rather hire someone who implemented a "java" compiler or a "COOL" compiler? Gotta take this class anyway, might as well get the best buck for it. \_ Yeah, there were so many cases to cover with semantic analysis. Ridiculous for a class project. \_ It was 10x worse with Hilfinger, so shut the fuck up. \_ But think about how much more you learned! You don't need a high GPA, just a sense of personal satisfaction! \_ I did. And I got an A in the class. I wasn't complaining, it wasn't that bad if you put in your 100 hours... I was just noting that it was way more work than Aiken's lame projects. Now Graham, that's a killer. \_ Life would be a lot easier if you figured out HOW to deal with all of the cases and ambiguity BEFORE writing any code. \_ Try Graham. \_ was I the only person who liked Graham? -aspo \_ yes. \_ In a biblical sense? |
2000/10/26-27 [Computer/SW/Unix, Computer/SW/Compilers] UID:19572 Activity:nil |
10/25 I'm looking at some source code (bootp.c) and I see reference to MACPY (...). I can't find the define anywhere in /usr/include/* Anyone know what this does, where a definition exists? \_ use grep -R \_ man MACPY \_ No manual entry for MACPY \_ gcc -E \_ (exuberant-)ctags -R --Galen |
2000/10/12-13 [Computer/SW/Compilers] UID:19465 Activity:insanely high |
10/12 OK, quick poll to see how many motd-readin' CSUAers were warez kiddies at one point (Ever call a ware 0-day? Ever ask for elyt xs? Or ever use leech zmodem? Don't be embarassed, you were 12!): Yes .... No . \_ Does using your Apple][ to dial numbers to get free long distance count? If so, count me in. \_ Back when I was a kid, software was free or we had to write it ourselves. \_ Using ThinkC/TurboPascal on a MacSE. \_ For me, using (floating-point) BASIC and machine code on Apple ][+. -- yuen \_ Actually my first computer was a TI 99/4A. I wrote programs on it in basic and saved them to audio tape. I used to be able to skip to exact programs on a 45 min tape by listening to the sound made when fast forwarding (it changes pitch as it gets closer to the end of the tap). Those were the days. The first computer that I had with a compiler was the Mac SE. Damn it was a nice machine. Ran word, pagemaker, photoshop and compilers with a 68000 and 1 MB Ram (eventually upgrade to a whopping 4). \_ goddamn it, thats when programming was programming. programs on modern computers may do more, but there was a satisfaction in entering a whole program in hex and having the thing work that can never be matched with a compiler. -apple ][e haX0r \_ Toggling in the entire OS on the front panel of the computer a la Seymour Cray is *satisfaction*. \_ yup, used zmodem. \_ hmodem with simultaneous up/download with 4k chunks on my 14.4 when everyone else is crawling at 2400... \_ Used zmodem too, but not for warez. \_ super zmodem with simultaneous tetris and hot/gay chat \_ Using softICE to crack your momma's pussy. \_ don't you mean yermom \_ or yo mama \_ dewd, you must be the 700th person to get in there \_ I'm sure that lots of us were warez h0zers. I was, back in HS. Still, that was a long time ago... the whole scene is very different now. |
2000/10/10 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:19454 Activity:nil |
10/9 from: http://www.OCF.Berkeley.EDU/~summerm/keepOut/resume.html CS 188: Creating Intelligent Agents That Could Get a Better Grade in this Class Than You Will CS 174: How to Win at Blackjack Even if You Left Your Towel in Your Motel Room CS 170: How to Do Just About Anything if You Have a Computer the Size of a Small Planet (or the Most Advanced Graphics Calculator on the Market) CS 164: Writing Compilers That Can Change Your Grade for You (note: everyone who finished the project got an A in the class) Math 241: Derivating W.R.T. Inspector Gadget, If You Please Math 55: You. Me. Gauss. The connection. Math 54: The Cauchy-Schwarz Inequality Applied to Non-Euclidean Vectorspaces. Peace and Conflict Studies 222: The Lighter Side of Overpopulation, Famine, Ecological Disaster, Ethnic Hatred, Plague, and Poverty Political Science 2: Political Diary, An Episode by Episode Account |
2000/10/6 [Computer/SW/Compilers] UID:19425 Activity:nil |
10/5 phale the compiler god, are you REALLY that good w/164? Did you take 264? What do you think about 264? \_ First off, I'm not a god (although perhaps a minor diety). I took 264, and I'd say that 264 wasn't very useful for the most part. Although it probably depends on who teaches it. Lately, I am finding compilers really boring. But then again, in my current work I am forced to use the piece of shit VC++. |
2000/10/5-6 [Computer/SW/Compilers] UID:19421 Activity:very high |
10/5 How do you know whether you're going to ace CS164 or barely going to pass it? I kick ass in flex and regular expression, but I'm having a little problem with this LL LR LALR theory. Help. \_ I hate compilers and I didn't understand half of the material, but for some reason the prof gave me an A+. So being good/bad at the subject doesn't always mean you'll get a good/bad grade. \_ regular expressions is just a small part. But I wouldn't worry about LL, LR, LALR too much as you should have plenty of time to digest it. And afterwards, the course takes a completely different direction and becomes annoying anyway. direction and becomes annoying anyway. -phale \_ hey bitch, I liked cs164. Back off you little shit. -aspo \_ hey slut, I liked 164 as well. Even TA'd for it. But just because I liked it doesn't mean I'm going to sugar-coat my answer. -phale \_ bitch, after the LL, LR, LALR stuff is when it got interesting \_ Yeah! bitch! |
2000/10/3-4 [Computer/SW/Compilers] UID:19397 Activity:high |
10/02 What's a good supplemental reading for the oh-so-boring Compilers, Principles, Techniques, and Tools, by Aho? I'm looking for a Compilers for Dummies equivalence. \_ "Compiling With Continuations", Andrew Appel. -blojo \_ Compilers aren't for dummies. \_ Computers are for dummies, duh. That's thhe whole point of the web, ebusiness, etc. \_ My girlfriend is using Programming Language Pragmatics by Michael L. Scott. I flipped through it. It seems much better than Aho. It's not for dummies though. Good reviews on Amazon too, if that means anything. \_ Thanks! Now I'm going to ace CS164!!!!! BTW What's your gf's name? \_ She is not in Berkeley, unfortunately. Otherwise, I would be more than happy to introduce her to you. \_ If you want to ace CS164, just date your TA. \_ Cool, a whole new series concept: "programming for girlfriends". \_ Instead of buying a Dummies book you could buy a Girlfriends book. Wow! \_ Don't laugh. I regretted the day when I robbed the cradle and got myself a pretty but nerdy cs student girlfriend. Don't do it if you don't want to go through the whole darn CS curriculum all over again, starting from implementing a string class. Feels like going through hell a second time. Luckily, I have finally reached the stage of helping her revise her resume and graduate school statement. \_ I'm not sure whether to laugh or cry. \_ I'm sure. I wnt to cry. How can *I* pick up a cute female CS student that is smart enough to actually graduate? \_ WTF, I had to help my boyfriend through his undergrad career, and when I TA'ed 164, the guys were just as clueless as the girls. In fact, due to the overall M/F ratio, there are a lot more morons than moronettes. Sounds to me like your girlfriend is trying hard to feed your large ego to compensate for your small penis. Sign your posts you idiots, I'm going to teach your girlfriend the secret 164 death grip. -- alice \_ Use motd for serious + helpful info please. Humor is not allowed. -tom \_ Hahaha! \_ tom doesn't use that many spaces. I also don't think he uses '+' like that. |
2000/9/27 [Computer/SW/Compilers] UID:19345 Activity:nil |
9/26 What's a good alternative, Cliff Notes like substitute to Aho, Sethi, and Ullman's dry and *yawn* boring Compilers: Principles, Techniques, and Tools? -desperate failing junior |
2000/8/18-21 [Computer/SW/Compilers] UID:19030 Activity:low |
8/17 Book review of the week: Linkers & Loaders, by John R. Levine. The beauty of Levine's writing is the carefully crafted gorgeous run on sentences (amazing in their delicacy of technical word choices) contrasted with the gcc that spurts from his finely developed compilers. After the first chapter I was hooked and wanted to read more. Levine, without a doubt, is one of the best technical writers of any technical genre. \_ Levine seems pretty smart. (He also moderates http://comp.compilers.) -brg \_ Did Miss May 2000 give him oral sex, however? -yerpal-tjb \_ does he make more money than hot shot developers & sys adms? |
2000/8/9-10 [Computer/SW/Compilers] UID:18930 Activity:high |
8/8 When I compile C++ with dynamic dispatch, will the actual generated code (assembly) contain a lot of if-else check for each method call? How about Java? Is the compiler smart enough to do flow analysis and do type checking to narrow down types, thus speeding up the method call? \_ This sounds like one of the weenies 6-8 years ago who always loathed the use of "virtual" in C++, afraid of what the cost of a couple of table lookups would do to their overhead. \_ It uses a function dispatch table. Very efficient. \_ If you are smart enough to worry about whether your compiler does flow analysis, you should be smart enough to research your vague assumptions. Check out _The C++ Object Model_, Stroustrup \_ Yes, Java and C++ use runtime dispatching, which adds around 1-5 cycles of overhead per function call (for commonly executed routines, where the function table is in cache) and 10+ cycles (for infrequently executed ones, or where you're just executing lots of functions or somehow else thrashing cache). If you're invoking lots of small methods (which is how these languages are typically used), that can be a huge loss of performance. THere has been recent work on, e.g. dynamic compilation to specialize away the function table lookup. Can't recall the authors off the top of my head. -nick \_ Sun HotSpot (and presumbly IBM/Tower equivalents) easily inline and compile virtual calls at runtime. At least with Sun's, you are back to very small methods because the compilation of a method is triggered simply after several thousands iterations are counted - if you inline everything into one flat main() or run(), it'll never get compiled but you'll pay dearly for all the profiling. You won't hear this from Sun. -muchandr |
2000/8/4-6 [Computer/SW/Languages, Computer/SW/Compilers] UID:18887 Activity:moderate |
8/5-1 Why is unstructured code (e.g. goto, jump, etc) hard to optimize? Isn't control flow implicit anyway? Also, is it difficult to make a transformation from unstructured code to a structured code? For example, from byte code or a binary back to a structured intermediate representation? \_ GOTO LOOP_START: \_ gotos aren't evil if they are just a low-level analog to structured control flow (e.g. gotos can be used to implement a FOR loop). Gotos are evil when they are used to create what is known as "irreducible control flow", which essentially means that there is no 1-1 correspondence between gotos and FOR loops. E.g. a goto can enter a loop in the middle! It ends up that early exit loops aren't as bad as entering in the middle. Irreducible control flow makes many syntactic analysis algorithms barf, cause those algorithms assume reducibility. -nick \_ which nick are you? Mitchell? Kevin Mitchell's brother? \_ concretely, compilers will reorder instructions and make lots assumptions about what register contains what at what point. if there are many points of entry to some piece of code, there will exist many possible initial states for that piece of code, and you end up with ltos of dependencies. -ali. \_ Don't loop then. Write everything data-directed. -muchandr \_ go APL!!!!!!!! -nick (yes, mitchell) \_ nick mitchell, you a phd candidate? what's your area? \_ yes, nick mitchell is a phd candidate, compilers \_ data directed is much more difficult to optimize \_ APL kicked ass. It depends what you are trying to optimize I suppose. Data directed code is much easier to parallelize for instance and in specific case of vector languages like APL you easily do allocate lots of memory statically for some of those cases they are making fancy garbage collectors that never work as advertised today. -muchandr |
2000/8/4-5 [Industry/Jobs, Computer/SW/Compilers] UID:18878 Activity:moderate |
8/5-1 When people talk about flex dollars (for insurance and stuff) they always say to use it or lose it. What does this mean? I thought you could always elect to have the leftover money go towards your salary or 401(k) contributions. \_ Then you weren't paying attention, were you? \_ I get leftover monies in a lump-sum around mid-year. You can look at this as them "secretly" giving you a higher salary, and having to pay for your own benefits. (tax- advantaged, and at group rates) \_ Most places if you don't use the leftover money it goes to the company doing the flex plan. However, most places also let you spend money you haven't put in yet (at least for medical) so it's possible to spend money you haven't put in, leave the company, and not have to pay it. |
2000/7/19 [Computer/SW/Compilers, Computer/SW/Unix] UID:18722 Activity:high |
7/19 I wrote a parser that outputs C source code. If I run the parser on windoze I get CRLFs. If I run it on UNIX I get LFs. How can I get the parser, running in windoze, to just output LFs with a minimum of headache? The parser is itself written in C. \_ man gcc \_ Replace \n with \012 in string/char literals; most C compilers will leave \012 alone even on a CRLF platform, but I can't vouch for M$. If you have CRLF's being output without being in a literal, your best bet is probably tr'ing the output \_ Duh. Thanks. |
2000/7/11-12 [Computer/SW/Compilers] UID:18641 Activity:very high |
7/11 What's a good formal measure of how well a distribution is approximated by a normal of the same mean and variance? \_ least squares? \_ Uh, the third moment, for starters. \_ How valid is this as a statistical measurement? I.e. if distr. A's skew is higher than distr. B's skew, is A expected to deviate from normal more than B on other parameters as well? \_ to see how bad this measure is, consider the distribution delta(x) (which is infinity at 0 and 0 everywhere else) and N(0,100) which is a zero mean gaussian with variance 100. the former is the narrowest distribution you'll find, the former is very wide. yet their third moments are both 0. a very bad measure indeed. in fact, all 0 mean even functions have the same odd moments. -ali \_ Life was much more pleasurable back in the old days, when all I needed to go smack Rahimi's pompous ass is going upstairs :) -muchandr \_ This isn't applicable since I'm fixing the variance as well. Of course the n+1'th moment is relatively useless if the n'th moments are way off. \_ the point is that if you have an even symmetric zero mean distribution, the third moment will be 0, even if your second moments matches. You really need to look at all moments to test for equality. You should really look at mutual information (what emin suggests) if don't have an application in mind and just want a similarity measure with nice properties. \_ noted, thx \_ You could also look at the Kullback-Leibler distance which is also known as relative entropy. This has some nice properties. For example, if you build a Huffman code for distribution p and use it to compress a source with distribution q, the expected overhead for using the wrong distribution is D(p||q) where D(p||q) is relative entropy. I don't remember the details but I think that D(p||q) also comes up if you are doing hypothesis testing where the true distribution is p but you think the distribution is q. If you tell us what application you want a difference measure, we might be able to give better suggestions. P.S., you could also using p-norms where p = 1,2, or infinity. -emin \_ I'm trying to do an approximate analysis of a hideously intractable numeric process, and this distribution, which is (graphically) "somewhat" normal looking is about half-way inside the bigger picture; since it's a sum over a bunch of binomial coefficients, I was advised to assume normality asymptotically to simplify things, but I want some way of getting a feel for how off I am. Yes, generic and not well-defined, but you really don't want to hear the gnarly details. \_ I'm not sure what you mean when you say "it's a sum over a bunch of binomial coeffcients". However, if you are interested in the random variable S_n = (1/n)*sum(1,n) X_i then the cdf of S_n will converge to a normal distribution with a convergance rate roughly 1/sqrt(n) provided that the random variables X_i are reasonably well behaved. Lookup Central Limit Theorems for the details. -emin \_ Noted; although I have some doubts about the "reasonably well-behaved" part \_ one way to do stats is to always optimize the expected value of some cost function, and depending on what that cost function is, you pick the correct prbabilistic entity to be extremised (for example, likelihood or entropy, or some other function). i think the sensible way to answer your question is "what is the cost you incur from using the wrong distribution" in terms of the cost function you're trying to maximize. i would say mutual information is a nice hint, but you really need to watch out for what you use the distribution for. -ali \_ see above; what i'm looking for to start with is the cost function, and it's painfully intractable, both mathematically and computationally \_ it seems to be that you're saying you can't even SAMPLE from p(x) where p is the correct distrib? if you can sample from the dist, you can do what i'm suggesting. \_ Dude. If you can sample independently from the distribution, the distribution is your bitch. You need about twelve samples to approximate it to the degree that is generally needed (source: McKay). \_ The problem is that I'm looking for asymptotic behaviour, and while I can sample at my test sizes at the rate of 5-20 hours per sample, sampling at any decent size can take years per sample \_ Aren't you in compilers ali? Stop studying AI! \_ The Kolmogorov-Smirnov test might be useful as well -- used for testing if two data sets come from the same parent distribution, or whether a data set is consistent with a predicted distribution. \_ noted, thx |
2000/6/30-7/1 [Computer/SW/Compilers] UID:18572 Activity:nil |
6/30 anybody know where I can find documentation on linker scripts? I have a .link file with stuff like: .sbss . : { __bss_start = .; _fbss = .; *(.sbss) *(.scommon) . = ALIGN(32); I have no idea what these things do. The manpages for ld doesn't tell me anything either. Thanks. \_ <DEAD>sourceware.cygnus.com/binutils/docs-2.10/ld_3.html<DEAD> You should be able to find the same information by running "info ld", but the info pages are harder to read than HTML and aren't installed properly on many systems anyway. |
2000/6/2 [Computer/SW/Compilers] UID:18389 Activity:moderate |
6/1 Is g++ (gcc) installed anywhere other than /usr/bin/g++? Any newer version than 2.7.2.1? (locate didn't help) \_ So, get yourself added to the contrib group and install gcc-2.95.2 (or whatever is the lastest version). \_ They weren't whining that it wasn't installed. They were asking if it was installed. \_ It might help if you actually read the question, fuckwit. |
2000/5/22-23 [Computer/SW/Compilers] UID:18316 Activity:high |
5/22 Rephrased question: suppose you have new system header files. How do you change how the system searches for the default header files if you do not have root permission? \_ Rephrase it again, it's still not clear. Header files for what? \_ ; "system" searches for the default header files? Do you mean how to change your compiler search order? If you have new system header files, whoever installed them should've put them in the right place. -oj \_ #include <iostream.h> for example. You have a new compiler you are trying out with a different iostream.h. You want to make sure you are picking up the right iostream.h. What do you do? \_ Take out the hostage. \_ what movie did that come from again? \_ The Netrix \_ Your new compiler should be using the new iostream.h if it has one. Otherwise read the man pages on how to set your search path. Since we're correcting, it's "shoot the hostage" and it's from _Speed_. -oj \_ Usual suspects had a very similar situation |
2000/5/12 [Computer/SW/Compilers] UID:18245 Activity:high |
5/11 What happens if you increment past MAXINT? Is this compiler dependent or is this standard behavior? \_ Short answer: overflow Roundabout answer: take 61C (shame on you if you've taken it and don't know. Hands-on answer: What would the bit pattern be for MAXINT? It would be a single zero followed by n-1 ones on an n-bit machine. On a four-bit machine, this would be: 0111 (7 base 10) What happens when you add 1 to said bit-pattern? You get a single one followed by n-1 zeros; Once again, on a four-bit machine, 1000 (-8 base 10) Note that C does not generate an error, cause an exception, etc. when overflow occurs. This is a feature. -dans \_ are you saying that overflow (as you've specified) is standard behavior, that it's specified that this is the way it should happen when you increment past MAXINT? \_ C's specified behavior on integer overflow is undefined (3.4.3 paragraph 3, 6.2.6.2 footnote 45, 6.5 paragraph 5, ISO 9899). but on many modern machines with gcc and two's-complement arithmetic you can expect that what dans has described will happen. -brg |
2000/4/5 [Computer/SW/Unix, Computer/SW/Compilers] UID:17925 Activity:nil |
4/4 Is there a unix tool that will go through annoying text files recently edited by an MSDOS based editor and eliminate all those extraneous ^M characters? The compiler I'm using seems to hate them. \_ /usr/local/bin/fromdos \_ tr -d '\015' \_ Do the Ctrl-M's say "Controlled by Microsoft?" \_ My favorite is: perl -pi -e 's/\r\n?/\n/g' filename as this will convert both DOS and Mac linefeed formats to UNIX --dbushong |
2000/3/22-23 [Computer/SW/Compilers, Computer/SW/Languages/Misc] UID:17822 Activity:nil |
3/21 Is there a gcc option to force labels to be outputed and to be included in the ELF symbol table. I'm trying to profile this code: beginloop: for (i = 0; i < n; i++) { y[i] = a*x[i] + y[i]; } endloop: and so I want gcc -S to produce those labels in the .s file and for the assembler/linker to add those to the symbol table. I'm trying to profile this code using a machine simulator that looks at ELF symbol table code markers for performance simulations. -jefe \_ I suggest using gcc's extended asm. Say __asm__("beginloop:\n"); instead of beginloop: and then the assembler will add these labels to the symbol table. If you need them to be global symbols, it's easy enough to do: __asm__(".globl beginloop\n"); -brg |
2000/3/8 [Computer/SW/Compilers] UID:17711 Activity:kinda low |
3/7 Aside from code aesthetics, is there a reason (e.g. optimization, code-generation, etc) why switch/case is better than if/else? \_ ooh ooh! finally a question about compilers! switch/case is a subset of if/else: the special case (hehe) when the thing being compared is a small fixed-point number. Analogy: switch/case is to arrays as if/else is to lists. -nick \_ Any tricks the compiler can do on switch it can probably do on chained elses. So aethetics is the only good reason. \_ "can probably do" means "does not" -- clauses are general expressions, whereas case are constants known at compile-time. \_ Maybe if the code does switch() on a char or something small instead of an int, and there are many case statements, the compiler can possibly optimize it into a jump table using the variable as the search key or index. -- yuen \_ I'm not saying you should, but if you want you can do something like switch (foo) { case 1: if (bar) { case 2: baz(); } break; } of course if you code like that you will be taken out and shot. -aspo \_ You can also use switches to unroll loops. \_ Most compilers take "switch (foo)" as a pretty strong hint that you're about to make many comparisons against foo and it would be a good candidate to keep in a register. |
2000/3/6-7 [Computer/SW/Languages/C_Cplusplus, Computer/HW/Memory, Computer/SW/Compilers] UID:17696 Activity:nil |
3/4 What does a Segmentation fault mean? I have a program with and gdb reveals that the program segfaults at while (x == 0) { It seems to segfault on one machine each time but never on another. \_ what's "x"? \_ did you malloc enuf space? \_ IOW, did you allocate memory for x? Is x defined, or just declared as a variable? What type is x? \_ Illegal reference to memory not owned by the process |
1999/12/31-2000/1/1 [Computer/SW/Languages/Java, Computer/SW/Compilers, Computer/SW/Editors/IDE] UID:17127 Activity:nil |
12/30 Is there an editor out there that will analyze my code (C++, Java) and tell me if I have a dead variable (dead code elimination), visually optimize code, etc? I know that this happens in the compiler, but I'd like to have some kind of editor that can give me advice. \_ ED, ED, ED is the STANDARD!!! Peephole/control-flow optimizer. |
1999/12/22-23 [Computer/SW/Compilers, Computer/SW/OS/Solaris] UID:17086 Activity:moderate |
12/21 Need solaris sparc 2.4 gcc binary. url/ftpP \_ Get the source tarball from http://ftp.gnu.org and compile it on a solaris machine that already has a C compiler. I am still wondering though, _why_ would you want such an old gcc version? Heck, may be you should try something even older, gcc 1.x maybe? \_ he's asking for a version for solaris 2.4, not gcc version 2.4 you twink. -tom \_ftp://sunsite.unc.edu/pub/packages/solaris/sparc/GNUgcc.2.8.1.SPARC.Solaris.2.4.pkg.tgz bu Tom's answer is funnier. -ax thanks - paolo (the app I'm looking at was designed for 2.4, hasn't been ported to anything later than that. |
1999/11/23-25 [Computer/SW/Compilers] UID:16943 Activity:low |
11/23 Is there a cross-compiler installed on soda? What do I have to do or install to compile a standard ANSI C program on soda and have it run under MS-DOS? Just a very simple C program that manipulates files, nothing graphical and nothing windows or unix specific. \_ _why_ bother with setting up a cross compiler on soda when you can download a precompiled for dos, working version of gcc from http://www.delorie.com/djgpp ? \_ thank you! that will work too. I thought there was a simple way to do this on soda. But gcc on dos will work. \_ In case there's no better answer, http://www.metaware.com used to sell a cross compiler called High C. I've used its Sparc/SunOS4.1 --> x86/DOS version. -- yuen |
1999/11/19-22 [Computer/SW/Compilers] UID:16916 Activity:nil |
11/18 So what's up with needing a compiler to install gcc? If i had one i wouldn't need gcc. Also, anyone know where i can download Korn or Bash for a Sun Ultra 5 running SunOS 5.7 (without a compiler!) -new to this stuff. \_ you need a compiler to bootstrap the compiler you want to make from source. e.g. the gnu binaries cd will have one. you can also download binaries from http://www.sunfreeware.com \_ man pkgadd helps too \_ Korn is already on Solaris - /bin/ksh \_ Hand coded assembly. Wimp. |
1999/9/19-21 [Computer/SW/Compilers, Computer/SW/Languages/C_Cplusplus] UID:16550 Activity:very high |
9/18 what does the term "co-ed" mean? \_ Co-Education. It is a old term used to differentiate those who studied in single-sex (boys only or girls only) classes and those whose classes had both sexes. In the vernacular a co-ed means "a sexy little sorority slut". 1: a sexy little sorority slut 2: a sexy little sorority slut 3: a sexy little sorority slut 4: a sexy little sorority slut \- dude, you got it all wrong. there are some fucking ugly bitches in a sorority who are getting no dick whatsoever. for example, i remember some fat chicks shaking their groove thing at a fashion show, and all was not well. \_ Not all sorority girls are there to get dicks. It's only the few \_ that's why the term does not apply to them. \_ BOOL Chick::isSexy() { return !this->isUglyBitch(); } \_ Back in the old country, people would be grateful for any pointers they could find. \_ Get with the program. "bool" is now a fully qualified type. You don't need to use "BOOL." \_ Since when? \_ Since November 1997. Of course, windows still depends on it.... \_ true/false (all lowercase) \_ This is ANSI C/C++ right? What are the values ANSI C++ compiler - which last I checked no for bool (true/false of TRUE/FALSE or 1/0)? \_ ANSI C++ only. And only if you have a true to work in egcs-2.91.66 19990314 (egcs-1.1.2). I think that I'll stick to BOOL or int until I can confirm that the SunPRO compilers handle it C++ compiler had been certified as 100% compliant \_ Only on the csua motd would a rant about ugly sorority chicks which started as a simple semantic query turn into a lesson on the latest aspects of coding. \_ Which, of course, is why I started it. \_ heehee, this garbage is too funny. 9/ 16 How do I pipe to an rsh? Say I want to do sort file | rsh machine -l user cat > file.sort \_ Assuming you have rsh set up properly do something like sort file | rsh machine -l user "cat > file.sort" or sort file | rsh machine -l user dd of=file.sort -ERic \_ I just tried a simple program and it seems correctly. |
1999/8/23-24 [Computer/SW/Compilers] UID:16373 Activity:low |
8/22 Anyone know of free ansi cobol compiler for unix? Beta is ok. \_ Y2K problems? |
1999/8/19-23 [Computer/SW/Compilers, Computer/SW/WWW/Server] UID:16344 Activity:moderate |
8/19 Anyone have any experience setting up name based virtual hosts using Apache? This is fake but I have one IP, 128.56.139.5, and two name entries http://foo.com and http://bar.com. In my httpd.conf file I have <VirtualHost 128.56.139.5> ServerName http://bar.com DocumentRoot /~jondoe <VirtualHost> but now when I type http://foo.com or http://bar.com into the browser it gives me the message "Not Found The requested URL / was not found on this server." Anyone know what's wrong with this. \_ Apache doesn't grok "~"; use a full path. -tom \_ grok? y00 R s0 ]<-00|_ !!!111 \_ D00de! Warez y0r dikshunary? Wutz 'gr0k' meen? U R K00l!11 \_ grok /grok/, var. /grohk/ /vt./ [from the novel "Stranger in a Strange Land", by Robert A. Heinlein, where it is a Martian word meaning literally `to drink' and metaphorically `to be one with'] The emphatic form is `grok in fullness'. 1. To understand, usually in a global sense. Connotes intimate and exhaustive knowledge. Contrast {zen}, which is similar supernal understanding experienced as a single brief flash. See also {glark}. 2. Used of programs, may connote merely sufficient understanding. "Almost all C compilers grok the `void' type these days." \_ d00de, t0m iz ay MARSHUN??? thatz r/-\d!!!11 \_ gr0k!!111 tom iz s0 k00l h3 kan gr0k!@111!11 d00ewde!!!@ \_ Y d0 yu kepe rem00vein mye k-rad c0mmetz 2 t0M? eye leik t0m, hez s0 k00l cuz hez D gr0k mast0r!11 t0m iz rad!11 t0m iz rad!1 t0m iz rad!1 t0m iz raf!!1 yeh d00dez r0k 0n!1111 \_ Not only that, but grab the latest (1.3.9) for better virtual hosting features. |
1999/8/18-20 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:16336 Activity:nil |
8/19 C question: I rarely, if ever, remember to include stdlib.h, which includes malloc, atoi, etc. But I use these functions on a regular basis. I haven't encountered a problem until I tried using atof(...) also in stdlib.h. Once I included stdlib.h, my problems went away. So why didn't I have problems with the other functions? \_ your compiler was assuming that undefined functions returned an int. \_ I think you misspelled "may have been" that was not a valid assumption in the case of atof. you should pay attention to those warnings from your compiler instead of ignoring them. |
1999/8/9 [Computer/SW/Compilers] UID:16272 Activity:high |
08/08 After a release this crappy, how can I bring myself to ever trust cygnus to maintain gcc? They release a combination of gcc + "libgjc" especially for that release..., where gcc 2.95 does not compile libgjc (intel, solaris) Not to mention their build dependancies are so crappy, they insist on rebuilding .o files I have just carefully built by hand. Gaaaah!! You see no motd. > go north |
1999/7/31 [Computer/SW/Compilers] UID:16218 Activity:high |
7/31 See the source code of one of the first C compilers by the creators of BSD. It's surprisingly small: http://www.cs.bell-labs.com/~dmr/primevalC.html \_ try inventor of UNIX. BSD came around 10 years later. -dpetrou |
1999/7/11-14 [Computer/SW/Compilers] UID:16105 Activity:high |
7/11 Since bison/yacc/(f)lex all act like state machines is there any way to implement a program with multiple context parsers (eg. a multithreaded network deamon that needs to parse an input)? \_ This problem is even worse in OpenGL that employ specialized rendering hardware since the GL libraries act on the state of the video card. In other words, there's only one rendering pipeline and you can't have multiple GL renderers (except on SGIs). \_ that's just sorry-ass driver design. 2D drivers also act directly on hardware but have been abstracted to share between clients efficiently. \_ flex & bison both allow you to specify names for your parser/scanner \_ Fuck bison and yak and all that shit! LINUX RULEZ! Use Linux instead! so you can have multiple per program - read the docs. \_ name changing wouldn't work if you want to have multiple instances of the same parser. too bad there's no OOP parser. \_ There is. Search for PCCTS and ANTLR. Current development is in java, but the C++ version still exists. \_ search on bison++ and flex++ for generators to get C++ encapsulated parser and scanner objects. these may be simple option flags to standard bison and flex these days... \_ -+ for flex |
1999/7/10-12 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:16101 Activity:low |
7/9 Know of any C++ compilers for Linux/x86? Please add to the list: (--PeterM) \_ egcs \_ Kai C++ (KCC) \_ Fujitsu C++ (FCC) \_ Portland Group C++ (pgCC) \_ Yermom C++ (ymCC) \_ This one sucks. \_ I thought it blows. |
1999/4/27-28 [Computer/SW/Compilers, Academia/Berkeley/CSUA/Motd] UID:15704 Activity:nil |
4/26 Have a friend recruiting for a company looking for a DRAM core designer with a couple years experience. mail jed \_ LJBF! LJBF! ( Subtle, desparate long-term torture plan ) \_ This is the WRONG place for a question like this. Do what you think is right. Make sure you have no regrets, and make sure you're proud of yourself after whatever you do in the name of love. I'd call her and ask her why. It is not a question of whether she is testing you, or if this is a game, it is about communication -- if she still turns you down, then you know it's the real thing. --female@soda \_ Why is it wrong to ask for advice in relationship matters on the motd? After all if you were having trouble in your relationship with your compiler or your computer, asking for help on the motd generates useful feedback. Anyway, since most of my friends read and post on the motd, asking here or in person would be the same. (Actually the motd is better since its anonymous). In this particular case I'm betting that the post was made on the motd, so that the female in question would read it and reconsider her decision. \_ You know, I bet a lot of these relationship questions that show up on the motd are purely hypothetical, posed for the entertainment value of the responses. \_ "Go to her. Don't sleep on it. It's not always good to let things calm down...The best thing you have going for yourself is your willingness to embarass yourself." - Simon advising Melvin from As Good As it Gets \_ I say go for it. Who cares about experience? Just be yourself and "go for the gold!" |
1999/4/4 [Computer/SW/Compilers] UID:15692 Activity:nil |
4/2 A while ago someone said that the difference between .so files and .a files is that .so files are used for dynamic linking while .a files are for static linking. Then what is the difference between .a files and .o files? \_ The .a file is a bunch of .o files, packed together with ar(1). Most compiler tools understand .a files and let you use them just like .o files. |
1998/12/19-20 [Computer/SW/Compilers] UID:15128 Activity:nil |
12/18 for you entertainment and amusement, the TenDRA c/c++ compilers have been installed. man tcc for a brief intro. |
1998/11/10-11 [Computer/SW/Compilers] UID:14939 Activity:moderate |
11/10 I'd like to implement a simple C compiler for a theoretical architecture (a simple one) to have test code for a simulator. Ideally, I'd just like to modify the backend of (say) gcc. What is the simplest way to do this? I know that gcc can output assembler, but can it output pseudo-code? \_ I would check out the book "a retargetable c compiler" and download lcc. \_ don't forget that you also have to modify the backend of binutils. I'm trying to do that myself for another architecture and it's not easy. \_ Actually, I'm not looking for a full implementation--don't care about the linker etc. At least not to start with. |
1998/9/25-26 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:14671 Activity:moderate |
9/24 http://seanreilly.com/java/moneydance.html Quicken down, 1 less reason to use non-UNIX OSes...how many more to go? \_ Linux is pretty good for java apps because it has native processor support (kaffe) that no othe os's have. \_ what are you talking about, "native processor support"? That would normally mean "the processor natively supports java", which is obviously false. Do you mean "JIT compilation"? kaffe does that on lots of platforms. Do you mean "compiles to actual executables"? The kaffe web pages don't say it can do that, and I don't think it can. \_ there are java->native cpu compilers for other OS'es though linux loses \_ yah. What kaffe wins on will be its new awt implementation. That is, when it actually works. (it will run on DOS, though. wow. http://www.kaffe.org Do you mean "you can type the name of a java class, and it runs"? So WHAT? \_ From the RH linux package description on kaffe: "This is Kaffe, a virtula machine design to execute Java bytecode. This machine can be configured in two modes. In one it operates as a pure bytecode interpreter (not unlike Javasoft's machine); in the second mode it performs "just-in-time" code conversion from the abstract code to the host machine's native code. This will ultimately allow execution of Java code at the same spped as standard compiled code but while maintaining the advantages and flexibility of code independence." -RH linux installation guide \_ Note#1: linux was one of the LAST packages to get a JIT compiler, compared to other major platforms Note #2: THIS DOES NOT "allow execution ... at same speed" because real C code gets better optimization from the compiler. And incidentaly, kaffe supports JIT on linux, solaris, and a few other platforms. This is NOT linux-specific in any way, shape or form. \_short summary: the above linux bigot is an idiot who wouldn't know a java compiler from a hole in his head \_ this looks kinda neat :) |
1998/8/19-20 [Computer/SW/Compilers] UID:14482 Activity:nil |
8/19 http://www.trimaran.org |
1998/7/24 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:14379 Activity:nil |
7/23 What C/C++ compilers are being used in the workplace for Windows software development? \_ VC++ is probably the most widely used \_ Borland C/C++ or C++ Builder. |
1998/5/6-8 [Computer/SW/OS/Misc, Computer/SW/Compilers] UID:14057 Activity:kinda low |
5/6 Can I use gdb on one host to debug a process running on a remote host via the network (not serial line)? \_ telnet to the host and start gdb. no, of course not, what is the point? you do this over serial for kernel debugging because it's necessary. why do you want to do this? why can't you log into the host? how would this work? i mean something has to sit on the host and interpret your commands and apply them to the harnessed process -- why can't that be a shell and gdb? i'm completely boggled by your POV. --aaron \_.. yes. (Now we wait in suspense for you to ask how) --daveh \_ i still think this is a "let me give you some artificial constraints without telling you enough about the problem to make useful suggestions" type of post. maybe if you gave us more info. --aaron \_ Nobody said the remote host was running telnetd or even unix. Debugging via tcp/netbios/ipx is very useful. To answer the original question, no. Cygnus might have some custom shme but all the gdb tethering I've seen so far is serial. --pld \_ That is standard procedure in most Real Time OS like PSoS or VxWorks/Tornado. You run the debugger on one host and connected it via network or serial line to a target processor. What OS is running on the target? And if this is work-related, shouldn't you be asking your project leader? \_ Fear. Maybe he *is* the project leader?! \_ He did say "process", not "OS"... |
1998/4/10 [Computer/SW/Languages/Java, Computer/SW/Compilers] UID:13930 Activity:nil 60%like:14178 |
4/9 What's the difference between a programmer and a software engineer? \_ programming is a specialization of engineering. A programmer, like any engineer, CREATE things (programs) that IMPROVE the mankind. However, an engineer doesn't necessarily know how to program. \_ programmers write code, software engineers design it \_ so software engineer never code, and programmers never design? take a rhetoric class! \_ software engineers can make their code run even in hostile environments (crappy hardware, limited memory, buggy compilers, tethered debuggers that make gdb look high-tech, and so on) \_ Hiearchy is this: -software engineer -programmer -hacker |
1998/4/8 [Computer/SW/Compilers, Health/Sleeping] UID:13921 Activity:very high 66%like:13922 |
4/8 So how much sleep does the average CS student get around here? \_ depends on class and date. When I took 152 and 184 the same time I average anywhere between 0-24 hours of sleep. Mean was like 5-6 hours at best. It wasn't pleasant \_ depends on professor too. FUCK YOU AIKEN!!!!!!!!!!!!!!!!! \_ I had plenty of sleep when I took 164 under Aiken. You must suck. \_ If I get laid, maybe two hours a night. So I sleep about an average of twenty hours a week. \_ I spent some sleepless nights during the final phases of writing my Cool compiler for 164, but I'm sure that I did much better in Aiken's class, sleep-wise (and grade- wise), than if I'd waited a semester to be part of Hilfinger's first experimental "hey, let's write a Java compiler" 164 class. Aiken was _hardly_ that bad. \_ I've graduated. I get around 5 hours of sleep on average during the week. Sometimes as much as 7 but thats pretty rare. 3 happens too. |
1998/3/31-4/1 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:13877 Activity:kinda low |
3/30 Anyone using Stroustrup's The C++ Programming Language, 3rd ed? I can't get the example code to compile, p61, the one about iteraters. gcc doesn't even recognize #include <iostream> and I was able to get the code to almost compile under VC++ 5.0 with one final error, cannot convert parameter... for the vector line. any hints? Thanks a lot. \_ a) gcc doesn't even really support a lot of Stroustrup 2nd ed features. Come to think of it, most C++ compilers are broken in one way or another. b) Try #include <iostream.h> \_ C++ is dying. Anyone know of a hugely successful commercial app written entirely in C++? Netscape is written in C. IE is written in C. All of Windows API are in C. So are the X windows API. C++ zealots, drop dead and die. \_ iostream.h doesn't provide namespace, etc. \_ troll deleted \_ gcc does not support STL. iostream.h != iostream, the latter is an STL thing - android \_ so which compiler did Stroustrup use??#@$ \_ I'm not sure if one exists. C++ is in such a B0rKen state semantically, and I'm not sure if the ANSIfication won't make the problem worse. I doubt you will see compilers properly supporting the whole standard for at least a year after the "standard" is formalized. |
1998/3/13-14 [Computer/SW/Compilers] UID:13803 Activity:very high |
3/13 Anyone know of a better compiler for Linux than gcc/g++? We're willing to pay for a compiler if we get a significant perf. increase. --PeterM \_ I heard that MSLinux for Windows will allow you to run MS C++ v5.5 \_ Hand code optimization (algorithm, method, etc) will do much more improvement than small incremental compiler optimization. At any rate, if you require performance on Linux and PeeCee, then perhaps you should be looking at different platforms. \-is the person actually trying to be helpful? \_ Compiler is a lot cheaper, usually, than a new machine. I want more performance without having to shell out for a whole new machine. --PeterM \_ I bet this guy is trying to run brute root crack. \_ Why bother? There are plenty of exploits available on the net. I doubt most systems are patched for all of them. \_ I've always depended on the idiocy of motd entries. -- Bland DuBois |
1998/3/9-10 [Computer/SW/Compilers] UID:13775 Activity:moderate |
3/8 I'm looking for help with gcc/gdb for HP-UX 10.30. I've got gcc compiled, but gdb refuses to compile. If anyone knows of a site with pre-compiled binaries, or has compiled these on HP-UX 10.X before, please let me know. -davidf \_ Also, if you have any ideas for other reliable compilers/ debuggers for HP-UX, I'd be interested in those. -davidf \_ Buy HP-SUX's langtools package. Other than gcc you're out of luck. |
1998/3/6-12 [Computer/SW/Compilers] UID:13766 Activity:nil |
3/6 gcc-2.8.1 & libstdc++-2.8.1 are in /csua/tmp/gcc for your bandwidth preserving pleasure. There is no libg++-2.8.1. |
1998/1/21 [Computer/SW/Compilers, Academia/Berkeley/CSUA] UID:13534 Activity:nil |
1/14 gcc 2.8.0 & libstdc++2.8.0 are in /csua/tmp, courtesy of alanc & peterm \_ what are the main improvements? Isit stable? \_ /csua/tmp/gcc-2.8.0.changes |
1996/1/8 [Computer/SW/Compilers] UID:31791 Activity:nil |
12/30 gcc 2.5.8 is now installed and apparently working. gcc 2.7.2 is installed as /usr/local/bin/gcc; it does NOT work with the -g option, use gcc-2.5.8 or cc if you need -g. gnu ld does not work properly yet. PUBLIC MESSAGES BELOW THIS LINE |
1994/1/28 [Computer/SW/Compilers, Computer/SW/Unix] UID:31468 Activity:nil |
1/27 gnu as (gas) updated to version 2.2. It's not a perfect port, but it works. gcc updated to 2.5.8, supposedly the 'last' of the 2.5 line. (sheayah, right!) lemme know if it breaks anything. -ERic gmu make is now updated to 3.70. its /usr/local/bin/gmake. -ERic |
1993/5/12-13 [Computer/SW/Compilers] UID:31314 Activity:high |
5/11 g++ (GNU's C++ compiler) installed. Many thanks to mehlhaff for finally getting gas working. \_ Does this mean we can play xlords of Conquest on soda now? - norby |
11/26 |