10:00 PM
basically it's up to the compiler to evaluate/infer it

Makes sense
I notice there are a lot of types in C#, it gets a bit confusing deciding which is best to use

I should swap over to ANTLR or jison soon, I wrote my own tokenizer but it's easily the worst code I've ever written

there's a few type aliases in C#, the types themselves are defined in the .net framework

For instance ulong vs. UInt64

ulong being a C# alias for the .net UInt64
int being a C# alias for the .net Int32
string being a C# alias for the .net String

10:02 PM
Hm, do they basically have all the same functions/methods?

the aliases compile to the .net types

Latex looks so nice

i.e. they're exactly the same thing
@N3buchadnezzar feel free to share your clothing preferences in the Nth Monitor ;-)
(kidding)

So if I can do Math.Sqrt(int) I can also do Math.Sqrt(Int32)?

@Mat'sMug Whips mat

10:04 PM
LaTex I believe :)

How is it going?

lol

\$\Latex\$
Dammit :p

aka MathJax

\$LaTeX\$
Sure looks nice for typography etc.

10:06 PM
@nethken you may be looking for codereview.stackexchange.com Code Review Stack Exchange where people will review your code, this seems to be what you're after.... — Martin 31 secs ago

@Phrancis you'd do Math.Sqrt(42) and that 42 is a System.Int32 as far as the compiled/running code is concerned.

Really like how LaTex can import .py files directly from source.

@Mat'sMug do the C# aliases have additional instance methods?

nope

Makes sense, so in reality you can just use whichever of the alias or .NET type and it makes no difference whatsoever

10:07 PM
except constantly switching between the two makes your code pretty ugly
rule of thumb, use the language aliases whenever possible, and stick to them.

@Mat'sMug I can imagine

I think I've got into an argument with every programmer at my workplace about String and string differences

@Quill You say what mate?! You wanna foight?

@Quill and who won?

One starts with a capital letter and the other doesn't?

10:09 PM
@Mat'sMug the code reviewers always win ;-)

Not always :(
Spagetthi sometimes wins

Sorry for all the questions, C# is kind of new to me and being used to Java's very strict typing syntax...

@Phrancis questions are good :)

I use string everywhere. some argue that when it stands for a type, it should be string, and when it's used as a static class for its static methods, it should be String because "it makes it more obvious that String is a reference type". I call BS. If you don't know that System.String is a reference type, you have homework to do.

goes to the homework cup of shame

10:11 PM
@Mat'sMug hahaha can you do our performance reviews here

BRB Googling "what is a reference type"

shortly put, a reference type is a class, and a value type is a struct.

Oh so value types are like the primitive types, while reference types are pointers to objects... right?

@Phrancis yup

waits for the "reference types are stored on the heap, value types are stored on the stack" comment

10:13 PM
similar to JavaScript's boxing; wrap the primitive in a pretty box with extra features

reference types are stored on the heap, value types are stored on the stack

I've used Java's int vs. Integer types so that concept is at least familiar

boxing is when you take a value type and "box" it in a reference type. the cost of this is "unboxing"
@Phrancis that's outright confusing imo

Integer have methods since they are objects, while int are just that, a number

in C# an int is a System.Int32 no matter what, and it has value type semantics no matter what, and the members and extension methods of a System.Int32 no matter what.
object foo;
foo = 42; // you've just boxed an integer
int bar;
bar = (int)foo; // you've just unboxed a boxed integer

10:19 PM
Object foo;
foo = 42;
System.out.println(foo.getClass()); // java.lang.Integer
System.out.prinln((int)foo.getClass()); //Main.java:6: error: incompatible types: Class<CAP#1> cannot be converted to int

@Phrancis wait till you get to C# generics.
@Phrancis or Integer foo; right?

@Mat'sMug I tried generics yesterday and it was.... different.....

@Mat'sMug yep, and I just added what happens if you try to cast an Integer to primitive int

@Quill C# generics don't incur boxing/unboxing penalty.

In that sense, C# does seem a lot more convenient than Java

10:24 PM
TTQW

Yeah... I really need to write more C#

@Phrancis Another nice (depending on your outlook) thing about C# is that in C# generic types are not "erased" at runtime
in Java generic types are only for the benefit of type checking which means you can't use reflection to determine what generic type was used at runtime
Which is.. cumbersome when it comes to mocking in tests
in C# generic types are preserved at runtime
The upshot of that being that there has to be more information encoded in a C# binary so it may be larger

So in C# a generic remains generic up until it's assigned/used, vs. in Java it's only generic before compiling?

a type remains generic information in C# forever
In Java that generic information is erased after compilation

@DanPantry which is only a big deal if you're distributing your app on floppies

10:33 PM
lol floppies

So in C#, a List<int> is a List<int> which isn't a List<float> at runtime.
But in Java, technically speaking, a List<Integer> and a List<Float> are both List at runtime
There are a few situations where C#'s version is more useful

That sounds nasty
Anyway gtg now - later!

Later!

Cya @Mat'sMug
OOTH, you could also argue that preserving type information at runtime breaks static typing as it allows you to create unpredictable types at runtime, and so Java does it right
¯\_(ツ)_/¯

@DanPantry unpredictable as in proxy types and mocks? Heck I'll take it!

10:45 PM
that was a fast drive

uhhh
WTF does that even mean
> CS1624 The body of 'UserQuery.ProjectEuler4.FindLargestPalindromeProduct(int, int, IEnumerable<int>)' cannot be an iterator block because 'int' is not an iterator interface type

yield return methods ("iterator blocks") must have a return type of IEnumerable<T>
because you are, literally, returning a collection of elements but rather than creating the entire collection and returning it after it's created, you hand back elements one-by-one
Maybe you just meant to use return without yield?

Maybe that's the case, let me try. I just want the loop to break as soon as it finds one value that matches the conditions

that would be return

10:57 PM
Getting a different error this time
> Cannot return a value from an iterator. Use the yield return statement to return a value, or yield break to end the iteration.

@Pimgd shackles fist angrily

15 answers, 29 upvotes, 4 accepts - that'll get you some rep

remove all yield return statements
and just use return

0

I'm writing a program which modelises the behaviour of a chain of springs when subjected to user-inputted force impulsions. Note : I've not included the real code as it is long and cluttered, and I only want advice on a specific part of the implementation for now. So I have an object Chain,...

10:58 PM
aaaand bold text died, GG chrome

@Pimgd 395 this week

@JeroenVannevel Ohhhh, very nice, works like a charm now :)

you can see a detailed log if you're interested

Aweosme!

So in this method, yield return works because the method returns an IEnumerable, right?
private static IEnumerable<int> GetAllPalindromes(int min, int max)
{
for(var i = (max * max); i >= (min * min); i--)
{
if (IntUtils.IsPalindrome(i))
{
yield return i;
}
}
}

11:02 PM
yes

aaand I officially killed the biggest part of the project I'm working to improve
Thankfully, #sourcecontrol (fixed)

you can't use tags

@JeroenVannevel Is working with IEnumerable<T> usually faster than working with List<T>?
(I realize they are not quite the same thing, just asking in general)

There's so different, you can't really compare it
it depends on the situation

11:04 PM
IEnumerables can be lazy which can be faster

the thing you have to realize is that an IEnumerable sometimes represents something.. unmaterialized

Lists are eager, which can be faster for other cases

Like a LINQ query. Depending on the query, it basically acts as a blueprint that doesn't do anything by itself
like collection.Where(x => x.Age > 5)
That won't do shit
it's a blueprint that tells you to get all people over the age of 5
collection.Where(x => x.Age > 5).ToArray(), however, will use that blueprint and create an array out of it
these are materializing queries

@JeroenVannevel actually... it will

Makes sense I suppose

11:07 PM
There are several of them: ToList() and ToArray() but also Select(), FirstOrDefault() OrderBy() and Take() for example
they all perform some sort of materialization
@Vogel612 how so?

yield has many implications compiler-wise @Phrancis. What's running is so much more than what you write ;-)

it's a filter. just because it's not eager, that doesn't mean there is no result
54

Where returns a new sequence of items matching the predicate. Any returns a Boolean value; there's a version with a predicate (in which case it returns whether or not any items match) and a version without (in which case it returns whether the query-so-far contains any items). I'm not sure abou...

@Mat'sMug Sounds like I got some reading to do

> Where returns a new sequence of items matching the predicate.

0

I've created a web page for display a list of products that I get from a JSON string through an AJAX call. On this page I have several javascript functions in the head of the html file. I'd like to know what the best way would be for organising my code. In the head of my html code I have pretty ...

11:09 PM
@Phrancis C# in Depth by Jon Skeet covers it very nicely
@Vogel612 but it doesn't iterate the results

'course not.
that still doesn't mean it has no effect

> This method is implemented by using deferred execution. The immediate return value is an object that stores all the information that is required to perform the action. The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Those are called promises in JS

no they aint

11:10 PM
It has no immediate effect then ;-)

Wow, refactoring my code based on the answers I got made by biggest test case go from 27s to 0.184s

promises are async stuff

@Quill nope those are different

kinda sorta maybe

@Quill that would be a Task<T> I think

11:10 PM
sorta maybe nope

Totally another thing
Or just a Task. Whatever.

Po-ta-to, Po-tah-to ... ;)

@Phrancis promises, pro misses

If this works, but you want it to be better, why not use the Code Review Stack Exchange instead? — zero298 54 secs ago

11:29 PM
@SonuMishra: That's where eyes come in! I see why people use this, but I believe that it lulls people into a false sense of security, AND I believe that if you're not paying enough attention to spot a = vs ==, then what else are you missing? Pay more attention. Simply read your code. :) And get your colleagues to code review. tl;dr If you're missing this, you're almost certainly missing other things that yoda conditionals do not solve for you.Lightness Races in Orbit 49 secs ago

> 0==i is called a "yoda conditional". It is most certainly a personal preference, but it does have an advantage.

It was used in the dark ages by mystical knights of the realm who lacked the modern technology to tell them when they'd written 0=i by mistake.
lmao

11:43 PM
# I love Latex again
Latex can even make the title of the colorboxes automatically link to the Project Euler problem on the internet.

0

I wrote a Matrix struct and a neural net that uses it. Why is this slow? Gprof blames Matrix::operator()(int, int) which I suppose is my constructor, and Matrix::operator*(Matrix) and vector<float>::operator[]. #include <iostream> //#include <C:/Users/David/Google Drive/Coding/neural_c/Launcher.h>...

@N3buchadnezzar Just curious, do you have any license concerns putting together a document like this?
(I'm not sure what license terms the PE website/content has)
Ah, looks like you're OK projecteuler.net/copyright
As long as not used commercially

@Phrancis They have a policy of saying please do not. However the solutions are already just a google search away.
@Phrancis Yeah.

Just need to make sure your document is also CC BY-NC-SA 2.0 UK

Darn it I was thinking of selling it on the streets to addicted programers =(

11:56 PM
LOL

However my idea with the document is not solutions. But overly optimized and generalized solutions . Not quite sure how to make that as clear as possible