Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
EAT THE EGGS RICOLA
May 29, 2008

Athas posted:

Is this source code really something a competitor would want to steal?

(I've never worked on/with closed source code, so I don't have much intuitive understanding as to why it's supposed to be sensitive. Most code is almost useless without its documentation or supporting environment anyway, and if it's not, you probably can't claim you wrote it without it being trivially obvious that you did not.)

The actual value of the code isn't the problem, it's that he's now actually unemployable as a developer if anyone ever identifies him based on his SA account.

Adbot
ADBOT LOVES YOU

SoundMonkey
Apr 22, 2006

I just push buttons.


EAT THE EGGS RICOLA posted:

The actual value of the code isn't the problem, it's that he's now actually unemployable as a developer if anyone ever identifies him based on his SA account.

I'm just waiting for someone to exploit it, and some rigpig in Alberta being really confused as to why one of the rigs is now called "The Yosfracker."

PleasingFungus
Oct 10, 2012
idiot asshole bitch who should fuck off

EAT THE EGGS RICOLA posted:

The actual value of the code isn't the problem, it's that he's now actually unemployable as a developer if anyone ever identifies him based on his SA account.

or his dropbox account, which he used

JawnV6
Jul 4, 2004

So hot ...
How does the anti-switch camp implement FSM's? Do you just resign yourself to a Mealy taste?

movax
Aug 30, 2008

TopShelfer posted:

I have struck gold...

My company got stuck with trying to fix numerous bugs in this software. Please kill me. This is supposed to be a simple data entry form somehow someway built onto a wordpress theme. In total it is over 100,000 lines of code. Nearly all is unintelligible.

:doh:

Kids don't do what that man did.

Beamed
Nov 26, 2010

Then you have a responsibility that no man has ever faced. You have your fear which could become reality, and you have Godzilla, which is reality.


Can someone loving edit his post and put him out of his misery?

I am not a book
Mar 9, 2013
On a related note: my consultant rates for installing and administering DLP software across an enterprise are very reasonable. Maybe throw my resume at your boss?
Ninjaedit: or host it on dropbox and send them the link.

ErIog
Jul 11, 2001

:nsacloud:

I am not a book posted:

On a related note: my consultant rates for installing and administering DLP software across an enterprise are very reasonable. Maybe throw my resume at your boss?
Ninjaedit: or host it on dropbox and send them the link.

Too late, he already checked your resume into source control along with some cat videos.

raminasi
Jan 25, 2005

a last drink with no ice

JawnV6 posted:

How does the anti-switch camp implement FSM's? Do you just resign yourself to a Mealy taste?

With tail recursion :smug:

Athas
Aug 6, 2007

fuck that joker

JawnV6 posted:

How does the anti-switch camp implement FSM's? Do you just resign yourself to a Mealy taste?

Tail recursion, coroutines or lookup tables of function pointers.

Or in languages that are not terrible: pattern matching on sum types.

Hiowf
Jun 28, 2013

We don't do .DOC in my cave.

Athas posted:

Or in languages that are not terrible: pattern matching on sum types.

I don't even know what this is.

Soricidus
Oct 21, 2010
freedom-hating statist shill

Skuto posted:

I don't even know what this is.

It's like switch statements, but better.

TheresaJayne
Jul 1, 2011
Well i have seen lots of code in my life, i even have copies of some of the bad ones but i never give out that code, - some of it is currently over 10 years old. but the horror is knowing that there is code out there like a java class that is currently running at 15000 lines with 250 lines of imports and a cyclic complexity in the hundreds.

Coffee Mugshot
Jun 26, 2010

by Lowtax

GrumpyDoctor posted:

With tail recursion :smug:

Why not both

Subjunctive
Sep 12, 2006

✨sparkle and shine✨

Athas posted:

Is this source code really something a competitor would want to steal?

(I've never worked on/with closed source code, so I don't have much intuitive understanding as to why it's supposed to be sensitive. Most code is almost useless without its documentation or supporting environment anyway, and if it's not, you probably can't claim you wrote it without it being trivially obvious that you did not.)

It's not about competitive advantage, more about things that were not written to be published. Compare to what he might have posted to "upcoming partnerships horrors ITT" or "PYF expense reports". When companies don't know that something's going to be published, there tend to be lots of little things in there that you don't want leaking.

raminasi
Jan 25, 2005

a last drink with no ice

Is there language with both goto-able switch cases and tail call elimination? I am unaware of any.

hobbesmaster
Jan 28, 2008

GrumpyDoctor posted:

Is there language with both goto-able switch cases and tail call elimination? I am unaware of any.

C++

JawnV6
Jul 4, 2004

So hot ...

GrumpyDoctor posted:

Is there language with both goto-able switch cases and tail call elimination? I am unaware of any.

Verilog.

Pollyanna
Mar 5, 2005

Milk's on them.


PleasingFungus posted:

or his dropbox account, which he used

I think his posts in TCC might beat out the leaked source code as a reason not to employ him. :stonk:

raminasi
Jan 25, 2005

a last drink with no ice

I guess I'm nervous about trusting not-required-by-standard C++ behavior that just happens to be implemented by all major compilers (which I didn't actually know, so that's cool).

QuarkJets
Sep 8, 2008

Soricidus posted:

It's like switch statements, but better.

In what sense? I've never heard of these before, so I looked up some code examples. Can you explain the advantages for us?

feedmegin
Jul 30, 2008

GrumpyDoctor posted:

I guess I'm nervous about trusting not-required-by-standard C++ behavior that just happens to be implemented by all major compilers (which I didn't actually know, so that's cool).

I imagine tail call elimination is only implemented with compiler optimisation turned on, and I'd be nervous about it always working in any case where it not working would suddenly blow up my stack. You are not guaranteed any particular optimisation that's not in the language standard after all.

raminasi
Jan 25, 2005

a last drink with no ice

feedmegin posted:

I imagine tail call elimination is only implemented with compiler optimisation turned on, and I'd be nervous about it always working in any case where it not working would suddenly blow up my stack. You are not guaranteed any particular optimisation that's not in the language standard after all.

Right. But some languages do guarantee tail-call elimination; it's not an "optimization," it's the semantics of the language.

Steamos
Jul 22, 2011
Today I found this, wonderfully complex considering the DLL that's being loaded is created by a project in the same folder as this source (and in fact is already added to some solutions depending on what product you're building)

code:
System.Reflection.Assembly myAssembly;
string me;
string filePath;
string releasePath;
Type[] mytypes;
System.Reflection.BindingFlags flags;

// Get location of executing assembly.
me = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
me = me.Replace("file:///", string.Empty);

filePath = Path.GetDirectoryName(me);
releasePath = filePath + @"\someOtherDll.dll";

if (!File.Exists(releasePath)) //Might be running as a developer, check the relevent directory
{
	string temp = filePath + @"/../../../../..\someOtherDll\bin\x86\Debug\someOtherDll.dll";
	string devPath = Path.GetFullPath(temp);
	if (!File.Exists(devPath)) // Can't find the path at all -- oops!
	{
		return;
	}
	else
	{
		filePath = devPath;
	}
}
else
{
	filePath = releasePath;
}


myAssembly = System.Reflection.Assembly.LoadFrom(filePath);
mytypes = myAssembly.GetTypes();
flags = (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public |
	System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);

foreach (Type t in mytypes)
{
	if (t.Name == "typeIWant")
	{
		System.Reflection.MethodInfo[] mi = t.GetMethods(flags);
		Object obj = Activator.CreateInstance(t);
		string methodName = "";

		methodName = "mehodIWant";

		foreach (System.Reflection.MethodInfo m in mi)
		{

			if (m.Name == methodName)
			{
				// Setup parameters.
				//Normal mode
				object[] pmsParameters = new object[5];
				pmsParameters[0] = this.FindForm().MdiParent;
				//Invoke Method
				m.Invoke(obj, pmsParameters);
				break;
			}
			//}
		}
	}
}
I think the guy who wrote this knew that it would end up somewhere like this because I had to change almost nothing to make this anonymous enough to post...

Soricidus
Oct 21, 2010
freedom-hating statist shill

QuarkJets posted:

In what sense? I've never heard of these before, so I looked up some code examples. Can you explain the advantages for us?

Strong typing and exhaustiveness guarantees. You can't easily get those if enums are just aliases for ints. Java-style enums get you part of the way, but still have annoying limitations.

Then proper sum types extend the enum concept by allowing you to associate variable data with some members, which is similar to, say, using a combination of an enum and a union in C, but again with actual type-checking. And pattern matching then lets you destructure those and use bits of their data in the matching process. It gives you a very nice natural representation for things like trees with associated data.

Hed
Mar 31, 2004

Fun Shoe

GrumpyDoctor posted:

With tail recursion :smug:

please keep the furry stuff in the brony threads

rjmccall
Sep 7, 2007

no worries friend
Fun Shoe

feedmegin posted:

I imagine tail call elimination is only implemented with compiler optimisation turned on, and I'd be nervous about it always working in any case where it not working would suddenly blow up my stack. You are not guaranteed any particular optimisation that's not in the language standard after all.

It's actually specifically difficult to do TCO in C++ because of the destructor ordering rules. You need a very carefully written function in order to trigger it.

Mogomra
Nov 5, 2005

simply having a wonderful time
So, uh, I just realized that we have a homespun web server in production at work that will crash and shut down... Instead of sending a 404 response to the browser.

I just got brought into the project today.

Our whole thing is "minimal viable product" which for whatever the gently caress reason translates to, "Write the worst poo poo you can, as long as it's done quickly."

It's Node.js, and we can't use Express or any of the other tried and true options because, "There's too much of a learning curve." So naturally we should hack together some poo poo that uses fs.readFileSync() everywhere and completely fails instead of sending 404 responses. :cripes:

Maluco Marinero
Jan 18, 2001

Damn that's a
fine elephant.
Holy lol, why even use node if you're planning on blocking for simple reads. Bleeding edge mannnnnn...

Mogomra
Nov 5, 2005

simply having a wonderful time
It's real loving bullshit. There's so much wrong with it.

We have another server somewhere else that works unless you put a '/' at the end of the URL.

Internet Janitor
May 17, 2008

"That isn't the appropriate trash receptacle."

GrumpyDoctor posted:

Is there language with both goto-able switch cases and tail call elimination? I am unaware of any.

This is really easy in Forth. In stack based languages, TCO is a trivial peephole optimization- replace any pattern of "CALL X, RETURN" with "JUMP X".

But why use a case statement when you can write a DSL and express your FSMs as tables?
code:
5 WIDE FSM: (fp#)
\ input:     |  other  |   dDeE    |   digit  | + or -  |    dp    |
\ state:     -------------------------------------------------------
   ( 0 )       NOOP >6    NOOP >6     1+  >0    NOOP >6   1+     >1
   ( 1 )       NOOP >6    1+   >2     1+  >1    #err >6   #err   >6
   ( 2 )       NOOP >6    #err >6    NOOP >4    1+   >3   #err   >6
   ( 3 )       NOOP >6    #err >6     1+  >4    #err >6   #err   >6
   ( 4 )       NOOP >6    #err >6     1+  >5    #err >6   #err   >6
   ( 5 )       NOOP >6    #err >6    #err >6    #err >6   #err   >6 ;

Paul MaudDib
May 3, 2006

TEAM NVIDIA:
FORUM POLICE
Electronic Health Record systems are the worst :negative:

The documentation is scarce, incomplete, and outright wrong in places. The EHR itself runs on a browser version that is slated to EOL soon, and has an insane list of runtime requirements (eg needs to run as the real Administrator superuser, not just an admin-privileged account). And it looks there's no EHR db-level audit records from the API and it would be almost trivially easy to dump all the PHI in the DB.

Yesterday, I found this gem in one of our classes (from memory):

code:

int getAge(personId)
{
	Date d = getDateOfBirth(personId);
	Date now = new Date();

	int age = 0;
	while(d < now)
	{
		d.addYear();
		age++;
	}

	return age;
}
:negative:

Paul MaudDib fucked around with this message at 09:00 on Nov 26, 2014

BobHoward
Feb 13, 2012

The only thing white people deserve is a bullet to their empty skull

JawnV6 posted:

How does the anti-switch camp implement FSM's? Do you just resign yourself to a Mealy taste?

Come on man, give them a break. What Moore do you want out of them?

Centripetal Horse
Nov 22, 2009

Fuck money, get GBS

This could have bought you a half a tank of gas, lmfao -
Love, gromdul

Paul MaudDib posted:

Yesterday, I found this gem in one of our classes (from memory):

code:

int getAge(personId)
{
	Date d = getDateOfBirth(personId);
	Date now = new Date();

	int age = 0;
	while(d < now)
	{
		d.addYear();
		age++;
	}

	return age;
}
:negative:

Lol, I kind of like this one. It's almost cute.

"DateSub... DateDiff... I know it's something like that. Meh, I'll just write a loop."

Does the actual function just ignore the day and month the way your version does? Anyone whose day of birth is before the current day gets another year tacked on? That's extra precious.

Hiowf
Jun 28, 2013

We don't do .DOC in my cave.

Centripetal Horse posted:

Does the actual function just ignore the day and month the way your version does? Anyone whose day of birth is before the current day gets another year tacked on? That's extra precious.

Java Date is millisecond accurate, so ignoring day/month is not the problem. It's just running the loop one time too much.

I think it's broken on your birthdays because of < instead of <=?

Edit: I guess for most ways of initializing the birth date it won't matter.

Hiowf fucked around with this message at 10:46 on Nov 26, 2014

Blotto Skorzany
Nov 7, 2008

He's a PSoC, loose and runnin'
came the whisper from each lip
And he's here to do some business with
the bad ADC on his chip
bad ADC on his chiiiiip
fcvtbuf(3) [which is non-standard but ships as part of newlib] and fcvt_r(3) both kept experiencing memory corruption issues in a recently-launched product when it ran for a while. Couldn't tell what the root cause was, and the source for both in the version of newlib that my toolchain uses was macro'd to hell to the point it confuses both me and the debugger so after a few weeks of fighting I gave up and wrote a limited re-implementation of fconvert(3), which appears to work properly. I am the coding horror.

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe
Last night I found a file on one of my old servers I was going to decommission called "gently caress-YOU-BOOST.txt". I can't paste it here because of message length, but have a taste.

code:
In file included from /usr/include/boost/proto/transform.hpp:13,
                 from /usr/include/boost/spirit/home/support/meta_grammar/basic_transforms.hpp:16,
                 from /usr/include/boost/spirit/home/qi/meta_grammar.hpp:11,
                 from /usr/include/boost/spirit/home/qi/skip.hpp:10,
                 from /usr/include/boost/spirit/home/qi/char/char_parser.hpp:11,
                 from /usr/include/boost/spirit/home/qi/char.hpp:10,
                 from /usr/include/boost/spirit/home/qi.hpp:10,
                 from /usr/include/boost/spirit/include/qi.hpp:11,
                 from /home/jstpierre/Source/lightspark/parsing/amf3_parser.h:27,
                 from /home/jstpierre/Source/lightspark/parsing/amf3_generator.cpp:20:
/usr/include/boost/proto/transform/arg.hpp: In instantiation of ‘boost::proto::_child_c<0>::impl<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int>’:
/usr/include/boost/proto/transform/make.hpp:72:   instantiated from ‘boost::proto::detail::make_if_<boost::proto::_child_c<0>, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int, true>’
/usr/include/boost/proto/transform/make.hpp:78:   instantiated from ‘boost::proto::detail::make_<boost::spirit::is_int_tag<boost::proto::_child_c<0>, boost::spirit::qi::domain>, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int, 2l>’
/usr/include/boost/proto/transform/make.hpp:72:   instantiated from ‘boost::proto::detail::make_if_<boost::spirit::is_int_tag<boost::proto::_child_c<0>, boost::spirit::qi::domain>, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int, false>’
/usr/include/boost/proto/transform/make.hpp:391:   instantiated from ‘boost::proto::make<boost::spirit::is_int_tag<boost::proto::_child_c<0>, boost::spirit::qi::domain>()>::impl<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int>’
/usr/include/boost/proto/transform/when.hpp:164:   instantiated from ‘boost::proto::when<boost::proto::wildcardns_::_, boost::spirit::is_int_tag<boost::proto::_child_c<0>, boost::spirit::qi::domain>()>::impl<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int>’
/usr/include/boost/proto/matches.hpp:304:   instantiated from ‘boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, boost::proto::control::if_<boost::spirit::is_int_tag<boost::proto::_child_c<0>, boost::spirit::qi::domain>(), boost::proto::wildcardns_::_, boost::proto::control::not_<boost::proto::wildcardns_::_> > >’
/usr/include/boost/proto/matches.hpp:304:   instantiated from ‘boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, boost::proto::control::or_<boost::spirit::qi::int_meta_grammar, boost::spirit::qi::real_meta_grammar, void, void, void, void, void, void> >’
/usr/include/boost/proto/matches.hpp:507:   instantiated from ‘boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, boost::spirit::qi::numeric_meta_grammar>’
/usr/include/boost/utility/enable_if.hpp:36:   instantiated from ‘boost::enable_if<boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, boost::spirit::qi::numeric_meta_grammar>, void>’
/usr/include/boost/mpl/aux_/has_type.hpp:20:   instantiated from ‘const bool boost::mpl::aux::has_type<boost::spirit::qi::is_valid_expr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, void>, mpl_::bool_<true> >::value’
/usr/include/boost/mpl/aux_/has_type.hpp:20:   instantiated from ‘boost::mpl::aux::has_type<boost::spirit::qi::is_valid_expr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, void>, mpl_::bool_<true> >’
/usr/include/boost/proto/transform/make.hpp:65:   instantiated from ‘boost::proto::detail::nested_type_if<boost::spirit::qi::is_valid_expr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, void>, boost::proto::detail::typelist<boost::proto::detail::make_if_<boost::proto::wildcardns_::_, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int, true>, boost::proto::detail::make_if_<void, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int, false>, void, void, void>, void>’
/usr/include/boost/proto/transform/make.hpp:78:   instantiated from ‘boost::proto::detail::make_<boost::spirit::qi::is_valid_expr<boost::proto::wildcardns_::_, void>, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int, 2l>’
/usr/include/boost/proto/transform/make.hpp:72:   instantiated from ‘boost::proto::detail::make_if_<boost::spirit::qi::is_valid_expr<boost::proto::wildcardns_::_, void>, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int, false>’
/usr/include/boost/proto/transform/make.hpp:391:   instantiated from ‘boost::proto::make<boost::spirit::qi::is_valid_expr<boost::proto::wildcardns_::_, void>()>::impl<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int>’
/usr/include/boost/proto/transform/when.hpp:164:   instantiated from ‘boost::proto::when<boost::proto::wildcardns_::_, boost::spirit::qi::is_valid_expr<boost::proto::wildcardns_::_, void>()>::impl<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, int, int>’
/usr/include/boost/proto/matches.hpp:304:   instantiated from ‘boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, boost::proto::control::if_<boost::spirit::qi::is_valid_expr<boost::proto::wildcardns_::_, void>(), boost::proto::wildcardns_::_, boost::proto::control::not_<boost::proto::wildcardns_::_> > >’
/usr/include/boost/proto/matches.hpp:507:   instantiated from ‘boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<std::vector<lightspark::amf3::ValueType, std::allocator<lightspark::amf3::ValueType> > (&)()>, 0l>, boost::spirit::qi::main_meta_grammar>’
That's the first 30 lines. It goes on for 650. Full output

FamDav
Mar 29, 2008
650 lines? call me when the error output is hundreds of megabytes. or gigabytes :getin:.

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe

FamDav posted:

650 lines? call me when the error output is hundreds of megabytes. or gigabytes :getin:.

No. I will call you when C++ isn't a trash language for idiot babies. (So never)

Adbot
ADBOT LOVES YOU

feedmegin
Jul 30, 2008

GrumpyDoctor posted:

Right. But some languages do guarantee tail-call elimination; it's not an "optimization," it's the semantics of the language.

Yes, which is why I phrased it the way I did. If you're doing Scheme, it's guaranteed by the language standard so you can rely on it. C++, not, so no.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply