6 ms·
integer?
by dmux 11y ago
integer?
- logicallee 11y agoyes. Maybe it's more reasonable than I thought (or I gave more information than reasonable - I've now removed some.) I don't think "say 1.WHAT" is reasonable syntax in the slightest.
- labster 11y agoWell, "1.WHAT.say" is also available. But Perl 6 is designed to put code smells in capital letters. EVAL, for example. WHAT shouldn't be used in normal code, but it's useful as a teaching tool or for debugging. If you want to test if something is an integer, you'll want "1 ~~ Int" instead.
- logicallee 11y agoLet me get this straight - the first example in the tutorial is code that you shouldn't write. Got it. By the way guys, string concatenation isn't . or + or a comma or something. It's a tilde: ~ 'a' ~ 'b' to get 'ab'. Because it looks like a "piece of string" ... that ties ... strings together, apparently.
- SamReidHughes 11y agoGetting the type of a value is useful to beginners and belongs in a tutorial. The one time I tried Perl 6 was a few weeks ago, and it took a while to find out how to do this exact thing.
- tomjakubowski 11y agoBut Perl is unityped so I don't think it'd be useful there. :V
- raiph 11y agoThat's gotta be a joke but I'm missing it -- can you spare a hint?
- tomjakubowski 11y agohttps://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/ https://existentialtype.wordpress.com/2011/03/19/dynamic-lan...
- raiph 11y agoThe article you've linked is about unityped languages. Perl 6 is not unityped. To quote the conclusion of the article you linked: > Why should you care? Because, I argue, that a fully expressive language is one that supports the delicate interplay between static and dynamic techniques. Languages that force only one perspective on you ... hobble you; languages that admit both modes of reasoning enable you and liberate you from the tyranny of a single type. It would seem he ought to love Perl 6. "Getting beyond static vs dynamic" may be of interest: * HN discussion https://news.ycombinator.com/item?id=9089259 https://news.ycombinator.com/item?id=9089259 * Youtube: https://www.youtube.com/watch?v=id4pDstMu1s https://www.youtube.com/watch?v=id4pDstMu1s
- sparky_z 11y agoThat's because . is a method call, + is addition, and comma is a list separator. Which of those would you give up? So yes, the ~ is a little unique to Perl6, but at least they were thoughtful enough to pick something with more than one easy mnemonic. I guarantee you, most people new to the language would be much more put-off by keeping perl5's -> for method calls. Perl lost that battle, it's over. They're making the best of it. Also, any language with a self-reflective object system is going to show that off to beginners to help them explore, even if it wouldn't be used in production code much. That's like complaining about a language tutorial showing off the REPL to start out, even though you don't use it in production code.
- kbenson 11y ago> Let me get this straight - the first example in the tutorial is code that you shouldn't write. Got it. If you read a little farther you might have seen this: Note: .VAR and .WHAT are code smells. They’re useful to understand the language and debug, but testing against what they return is nearly always the wrong approach. > Because it looks like a "piece of string" ... that ties ... strings together, apparently. You're mistaking a mnemonic for the reasoning. The reasoning is most likely because using a period for string concatenation is likely to cause problems when it's also used for method calls and strings can have methods, and when methods can be quotes. E.g. "foo"."chars"(), which might be useful with string interpolation. As for why it's not +, that's covered as well. Perl takes the stance that operators should be different for different operation types. What does foo + bar mean in python? You need to know the types of foo and bar to know that. In Perl 5 and Perl 6, you know whether you are adding numeric types or concatenating (not adding) strings. It's easy to assume no thought went into the development[1], but it's been very well thought out and been baking for a very long time. They spent that time actually testing their ideas, and making changes when reality didn't match expectations. 1: for that matter, a lot of people think that about Perl 5, which is untrue, it just has different design goals than many languages
- singingfish 11y agoI have two trite one-liners about perl(5) in comparison and to other languages these days. 1. Python helps you think more like the computer does. Perl helps the computer think more like you. 2. Modern Perl is C# for hippies.
- raiph 11y agoHave you seen https://www.youtube.com/watch?v=JpqnNCx7wVY https://www.youtube.com/watch?v=JpqnNCx7wVY?
- enqk 11y agothe use of + for string concatenation is not exactly compelling either, since string concatenation, unlike addition, is not commutative
- Ulti 11y agoYeah because we can't possibly have languages which diverge in syntax... I mean I don't use any languages every day where the concat operator is || for example which is short circuit OR for most people. cough PgSQL cough JavaScript overloading + to mean addition and string concatenation was the worst decision ever given the use case of JS. 1 + '1' * 1 is not the same as '1' + 1 * 1 good job. That definitely wont be evil once the values are in a more complex equation with variables coming from some server side JSON string... at all. Definitely wont lead to any unusual bugs when something like the following happens 1 + '000001'. You might not notice 2 being 12 for a while but your customer will likely notice 2 suddenly becoming 1000001. At least '~' joins two different string together when writing. Makes a lot more sense than '+' to me ~ Ulti 2015
- kbenson 11y ago> I don't think "say 1.WHAT" is reasonable syntax in the slightest. 1 is an integer. In Perl 6 integers are objects and have methods. The method calls are distinguished by periods, as has become the most common way to call methods in programming languages. Is your main complaint that it just looks weird? Is there something you would expect it to be other than a method on an integer or numeric type? Personally, while yes, it does look somewhat weird, the uniformity of knowing you can call .WHAT on anything is nice. You get one guess as to what 1.23.WHAT does.
- logicallee 11y agohi - my complaint was over the choice of specifically the word WHAT (and not a different word), and in capitals.
- epidemian 11y ago> I don't think "say 1.WHAT" is reasonable syntax in the slightest. The syntax is basically the same as Ruby or Python: # Ruby: puts 1.class # Python: print 1L.__type__ The names of the methods are different, and Python needs the L suffix, or wrap the integer around parens `(1).__type__` to avoid it confusing the dot with a float literal. But, besides that, the syntax is the same.
- nosnos 11y agoWhy we also don't use Ruby or Python.
- SwellJoe 11y agoWhat do you use and how does that language do what has been demonstrated here?
- logicallee 11y agoyes, class and __type__ seem very reasonable keywords to me, a yelling WHAT does not. the syntax is the same, except the choice of WHAT. I guess I'm the only one who considers it hopelessly odd. if "object1.class == object2.class" seems like something you might think of. But "object1.WHAT == object2.WHAT" is something that wouldn't occur to me in a million years, and makes me laugh even now that I've written it. I suppose you might disagree.
- kbenson 11y ago__type__ I can understand, but .class seems likely to conflict in those cases where you want a method named class. __class__ seems more consistent to me. In Perl 6, special meta method built-ins are always all caps, specifically because it's not a very reasonable name to choose in most cases, similarly to how python surrounds a name with double underscores. They are special and different, and should appear as such. > But "object1.WHAT == object2.WHAT" is something that wouldn't occur to me in a million years Well, that's good,because you aren't really supposed to be doing that. Rather than getting upset at how Perl 6 looks weird when you map operations directly to how you would do them in another language, it might be better to see if that case actually comes up at all. Maybe the language has other features that support different, possibly better, idioms (or at least better for that language)? Just because Perl 6 and Python are both dynamic languages and have some features doesn't mean you should assume it functions or should be programmed in the same way. I doubt you would make that mistake for something that looked obviously different, like racket, so why jump to those conclusions here just because they look similar in certain aspects.