8 ms·
PHP-Snow - A concise, dry and beautiful language that compiles to PHP
- rman666 15y agoYay, another language!
- hellerbarde 15y agoindeed :) Competition breeds innovation, competition breeds excellence!
- zalew 15y ago@arr pri fn [!_->empty: uhm, beautiful
- ma2rten 15y agoBeauty is in the eye of the beholder. In mine it look a little bit odd as well, but I could imagine that it's better than PHP if you are used to it.
- viraptor 15y agoDepends on the languages you're familiar with... fn is common in some areas, _ is a popular "default variable", -> I see as an interesting addition although it would be equivalent to empty(_). What I'm not sure about is @arr (why not @array?) and [] instead of {} for a map... I'm not sure if it's beautiful, but it's definitely an interesting shortcut for common operations and I could immediately see why it's useful and already remember the syntax for it. I like it and the author seems to like it too, not everyone has to agree of course ;)
- deleted 15y ago[deleted]
- andypants 15y ago[] instead of {} for a map PHP uses [] for both list and map types. I don't think there's any difference between the two types in PHP. All lists are maps.
- daeken 15y agoBut we're talking syntax, not behavior. There's no reason they couldn't use {} to indicate maps and [] to indicate lists, even if they're the same data type. The point of this language is to be a cleaner syntax on top of PHP, so syntactical sugar like that is a Good Thing (TM).
- deleted 15y ago[deleted]
- krsunny 15y agoHow long before people start writing compilers that pre-compile the pre-compiliers?
- h2s 15y agoNice idea. Still a bit rough around the edges maybe? This certainly doesn't look as pure as snow: [!_->empty: "$row cannot be empty."] Good luck anyway!
- runekaagaard 15y agoNope that is way too magic. It will go away. :)
- afsina 15y agoI think Php is concise enough. Sory for being harsh but this looks like evil twin of Perl.
- ezyang 15y agoAs something of a glorified preprocessor, there is a limit to how much it can "make the language better". However, they will probably be able to get a bit of hacker mileage out of code generation, and I can see how you could add features which would be handy (such as first-class anonymous functions; though good luck making that look like "idiomatic PHP code"). It is too bad, however, that they didn't decide to make HTML tags first-class entities in the language; although, of course, this is all vaporware at this point. Anyone who is interested in new languages specifically designed for web programming should also check out: http://www.impredicative.com/ur/ http://www.impredicative.com/ur/
- ars 15y agoPHP has native first class anonymous functions now, so there is no reason snow can't do a good job converting them.
- mcantelon 15y ago>I can see how you could add features which would be handy (such as first-class anonymous functions; though good luck making that look like "idiomatic PHP code") PHP added anonymous functions in 5.3. http://php.net/manual/en/functions.anonymous.php http://php.net/manual/en/functions.anonymous.php
- wingspan 15y agoThanks for the Ur link. But seriously, 2 clicks to get to a page (docs > tutorial intro) just to see a code sample?
- umen 15y agowhy? do php to native c do very simple language to native c
- ericfrenkiel 15y agoThis is syntactic sugar at best; other languages such as Python are cleaner and are more performant. Facebook's efforts to compile PHP to C++, HipHop, demonstrate this need, and in my opinion, this project is a step in the wrong direction. PHP was great for its time, but sometimes you have to let grandpa go.
- mcantelon 15y agoSometimes you're stuck with large PHP codebases.
- ericfrenkiel 15y agovery true, though how would this project help? A major rewrite would have to be done with PHP-Snow just as much as another language.
- mcantelon 15y agoIf you were adding to the codebase, you could write the code using Snow. You could also rewrite select portions that you regularly need to work on, as opposed to having to port the entire codebase to another language.
- ericfrenkiel 15y agoAgain, what is the advantage to be gained by simply reducing syntax? Programming efficiency? Saving a few key strokes? Your suggested approach would certainly add more drag for little gain for programming teams. Developers would be better served optimizing performance, not messing around with simplifying syntax. For that reason, HipHop a worthwhile addition to the PHP canon; this not at all.
- mcantelon 15y agoReducing syntax noise can theoretically make code easier to read and write. I personally don't go for that approach, but others swear by it and if it increases their productivity and makes them happier then that's a good thing. Optimizing performance and making writing/managing code easier are two different problems and not mutually exclusive. Code written in Snow can then be optimized with HipHop.
- eXpl0it3r 15y agoHow can anyone call this beautiful? o.O
- antihero 15y agoI personally don't like the shortening of words. Having a long word doesn't really hurt readability.
- HoLyVieR 15y agoI don't know if I'm the only one, but I hate with passion this trend to remove syntax from a language and call it an improvement. It may be easier to code, but the code you produce is often more cryptic and harder to maintain. The aspect of the maintainability of a language is often disregarded even tough it's a very important aspect. That project is a very good example of this. Sacrificing readability for a few keystroke is never a good trade-off.
- andybak 15y agoIsn't the aim here to improve readability?
- pietro 15y agoBy which measure is <- 2 easier to read than return 2 There are many more examples in the code, but I generally found the PHP code MUCH easier to read, and I don't know PHP very well. It could be that I'm biased towards C-like languages, but I doubt it; words are a lot easier to read than arbitrary symbols.
- protomyth 15y agoI wouldn't have blinked if it was: ^ 2 since that is what is used in Smalltalk, but the left arrow makes me think I am missing what it should point to.
- JonnieCache 15y agoIn ruby you could just write 2 assuming you're at the end of a function. Coffeescript is the same iirc.
- cageface 15y agoI've never written a line of php code in my life but on my current project I was asked to port some code from my client's php server api to native Obj-C running in an app. I had no trouble reading the php code and had the port working in under a day.
- agumonkey 15y agophp as a target platform huhu, btw there was already php-reboot. php reason to be is hosting + ecosystem, not linguistic qualities, too late for that.
- smsm42 15y agoI have seen many PHP improvement proposals over the years. I am really glad people are doing such things. But I would like to address something that seems a bit wrong-headed to me, that is common to many of these proposals. PHP is a verbose language, it is known. It is not a bug, it is a feature. Yes, some languages like to make their source code look like it was gzip-compressed, and have one or two-character symbols for everything. PHP is not among those, and I don't see how writing "fn" instead of "function" really helps. Are you so lazy as to type "function"? Get a decent completing editor, it'll do it for you. But code saying "protected function sayHello()" is much better for everybody that one saying "pr fn sH()". Same goes for syntax like "!_->" - it looks like cartoon "expletive deleted" sequence, not like a readable code. PHP is not APL, it should be obvious to a reasonably knowledgeable person what goes on there. The idea of space-as-syntax, the most known implementation of which is of course Python, has its advantages and disadvantages. I admire the cleanness of good python code, and and the same time I am greatly annoyed when I have my code break because there's some space instead of tab or tab instead of space or extra space somewhere where it is not obvious. But I'd be interested to see people try out "PHP with Python indentation syntax" and see how it works for them. I don't see it a big difference but would be an interesting idea to play with.
- SquareWheel 15y agoand the same time I am greatly annoyed when I have my code break because there's some space instead of tab or tab instead of space or extra space somewhere where it is not obvious. I have to say, I love this. I often do website work for clients and it's so incongruent, that switching over to Python where the indentation is perfect every time is like programming from a cloud. Or some better analogy that means "it's nice".
- user2459 15y ago"I am greatly annoyed when I have my code break because there's some space instead of tab or tab instead of space or extra space somewhere where it is not obvious." A good editor will show you that too.
- runekaagaard 15y agoWOW, I'm on hackernews, wow! I completely agree on not shortening array, object, private, public, etc. I reached a similar decision a while ago, but didn't get around to fixing the docs. I like shortening fn though, as it often makes the difference if an expression containing an anonymous function can fit on one 80 character line or not. About the "!_->" syntax in the validation part of the function definition. Recently I've decided to remove the entire validation part, because the syntax is too specific and weird. I still like the defining of arguments on top of the function because it removes duplicate argument names between docblocks and code. The idea of validation together with the argument defintion is still sound i think though.
- orblivion 15y agoCan we start talking about this trend of people referring to their own work as beautiful? It seems kindof tasteless to me, am I alone here?
- jarek 15y agoBut if you don't call your work Beautiful how will people know you have Taste? When you're Intelligent and Creative you just have to show it.
- billpg 15y agoPHP as assembly language? PHP does have a big advantage, it's unbiquity on low-cost web hosts that no other language can match. The downside is having to deal with PHP itself. I'd like a platform of PHP-done-right but compiles to a set of .php files I can deploy to any webhost. I don't think this new language is it, but I'm happy to see developments.
- pork 15y agoThis is outdated, I can find you a handful of hosts that offer Perl, Python and Ruby for under five bucks a month.
- billpg 15y agoSure, they exist, but these other languages have nowhere near the ubiquity of PHP in the economy webhosting world. PHP devs have plenty of choices. Is your webhost's DNS/email/DB service just not quite what you need? PHP devs can take their pick of a very wide selection of competing services.
- pork 15y agoPlease back up what you're saying with some proof. As I said, PHP is no longer the most ubiquitous economy hosting language.
- jonniekang 15y agonot as pretty as ruby or coffee-script :P
- caiusdurling 15y agoAs I said on twitter, someone finally managed to write a more pointless and retarded abstraction than HAML. Bravo, for all the _wrong_ reasons.
- stevebakh 15y agoStrip the comments from the PHP code and there isn't a drastic difference in size (as the snow example lacks comments), other than that, the PHP example is more readable. /shrugs
- whichdan 15y agoSnow: 33 Lines PHP: 66 Lines - w/o PHPDoc: 45 Lines -- w/ Single-line foreaches, exceptions, and ternary operators: 34 Lines So if we use the same formatting, the PHP is only one line longer, and 5 of the lines are just end-braces. Now, taking my condensed PHP, and the Snow code, and converting 4 spaces to a tab, the filesizes are: Snow: 746b PHP: 847b Using a lazy comparison: 12% less code, roughly the same number of lines. I'm with you - I don't see how using a completely different syntax & complicating your toolchain is worth it to save a handful of characters when typing. Maybe more example code (2k-3k lines) would help.
- guillermovs 15y agoHere's a side by side comparison without comments: http://cl.ly/3Z3l1w0v2I2n2y231Y09/o http://cl.ly/3Z3l1w0v2I2n2y231Y09/o That's 10 lines more. 100 times more readable.
- runekaagaard 15y agoWell actually 15, as it seems fair to remove the comments in Snow too. About it being readable, I think that has a lot to do with experience. For me the Snow version is clear as day ;)
- guillermovs 15y agoWell the comments in Snow are kinda necessary, since it's all abbreviated and hard to read. The PHP class in the other hand is a lot clearer, with informative class and function names.
- lunaru 15y agoI think the reason this is getting negative/poor feedback is because the SAT analogy does not hold - Snow:PHP::CoffeeScript:JavaScript JavaScript is a great language with debatable syntax. CoffeeScript works because it clarifies the beauty in the language. Snow doesn't do this for PHP because there isn't much beauty underlying the syntax to begin with.
- encoderer 15y agoThat could be true. But the real reasons I use Coffee script are the features it adds to the language: list comprehensions, splats, existential operator, severely concise class syntax. And I don't see this offering any features that are as useful as those. The Snow code looks uglier, I think, than the PHP code. But if it looked uglier and gave me extra features (like, for instance, splats, comprihensions, improved slicing and range syntax, etc), I'd still probably use it.
- maratd 15y ago> PHP ... there isn't much beauty underlying the syntax I disagree. To each his own, I suppose. PHP inherited it's syntax structure from C, the language it's written in. Would you say that C is ugly?
- runekaagaard 15y agoThe whole journey of trying to "fix" PHP has indeed seemed difficult. Mostly because so much information is pushed to the syntax of the language. Where in python the "." operator is used both to designate namespace, calling methods and calling "static" methods, PHP has three different operators "\", "->" and "::". Has it been worth it? Personally: A big yes, thinking about languages is fun. Practically: When it's complete, I think I will like it better than PHP, but still prefer a lot of other scripting languages like Coffescript, Lua, Python, etc.
- danielhunt 15y agoWhile I don't rail against this kind of thing instinctively, I really do have to ask, is: pri fn render_row(row) really that much better than private function render_row($row) { ?
- badboy 15y agoSpeaking of readability: Just `pri` as the constructor? When having just a quick glance at code I want to know which part does what. Function names help, even if it is __construct. And the @str title=null line above the class seems very odd.
- danielhunt 15y agoI'm not sure I understand your comment - the function name in this case is "render_row()", and "pri" refers to the visibility of the function. I don't feel that it's more readable, or even easier to write, as "pri", though.
- badboy 15y agopri is used first for the constructor (right after class SumTable) but not followed by any name. I find it quite hard to read this way.
- danielhunt 15y agoAh - I missed that entirely, thanks for pointing it out again. That line may just win the prize for least-clear line in the Snow example.
- dreyfiz 15y agopri's not a constructor in this language's terms, it's just a visibility operator. The language wants you to be able to use code in your class member assignment statements; if that means it has to generate a constructor to make it happen, it will. Or maybe it just wants you to start coding without fussing with boilerplate. And the @str title=null line above the class seems very odd. This is great because you can indent code under it that's relevant to it, that would normally end up cluttering your function's narrative up with housekeeping for variables. This is a much more pleasant way to deal with PHP. Check out the documentation, it is outstanding. http://code.google.com/p/php-snow/wiki/Class http://code.google.com/p/php-snow/wiki/Class
- coenhyde 15y agoSo much criticism... As usual the php community is resisting any change. I think what you are doing has a lot of merit. Your DSL just needs some polish. What I like: - The new return "<-" What I think should change: - The concatenating assignment operator "%=" shouldn't change. It should stay the same ".=" - Accessing instance variables/methods should be by using '@' rather than '.' as that is becoming an implied standard and php folk are already used to using '.' for string concatenation. - The setting of parameter types and defaults on methods is too heavy and not what people expect. I would put them back into method declaration. eg. @str title=null class # To become class fn constructor(str @title = null) As @ would be the way to access instance variables what this means is the instance variable of title would be assigned the value that gets passed through the constructor. # This is too much magic imo @arr row # List of integers. [!_->empty: "$row cannot be empty."] fn add_row(row) # it should be something like this: fn add_row(arr row) !"$row cannot be empty." if row->empty - This doesn't make a lot of sense: for row in .rows html %= "<table>" | .render_row(row) | "</table>" # I would prefer something like: html .= @render_row(row) for row in @rows html = "<table>{html}</table>" Good work on what you have already achieved, with a bit of extra polish I think Snow can become very desirable.
- danielhunt 15y ago> So much criticism... As usual the php community is resisting any change. This grinds my gears on a few levels - I really don't feel as though the reaction here is a resistance to change, as much as it is a resistance to completely redefining pretty much all of the core language constructs. The Snow code is, in my eyes, almost completely unreadable, due to a seemingly random collection of characters. I'm a PHP developer, and while I appreciate that (at times) PHP can be quite verbose, introducing such sweeping changes really doesn't make any sense to me. The add_row() function in particular is mind-bending for me. Auto-declaration (and initialisation, within a loop, no less) can only hurt in larger systems - which is why developing with notices enabled is such a plus.
- coenhyde 15y agoI didn't say Snow was perfect. Far from it. Didn't you see my long list of feedback? I get annoyed with the php community because this thread embodies what a typical response from them is like. Criticize anyone trying to do something new by saying the old ways are best without giving any constructive feedback. Also note. No one has to use Snow if they don't want to. These are not changes to the core of php, so it confuses me why people get so militant over the suggestion of a DSL for php.
- babuskov 15y agoThis might be a nice replacement for PHP spaghetti code you might see everywhere - see the recent HN thread where PHP is voted the most-hated language - it's because even solid coders produce spaghetti code with it. You need to be really disciplined to create something that's easily maintainable. I would not touch PHP codebase without a framework. Some nice PHP frameworks have emerged in past few years ranging from simplest CodeIgniter to pretty complete Yii I use for most projects now. I would never choose to use PHP for a project without Yii or a similar framework, so until we see a quality framework written in PHPSnow, I don't see any reason to use it.
- sciurus 15y agoWhy couldn't you use an existing PHP framework from PHPSnow?
- babuskov 15y agoTake Yii for example. Beside framework functionality, the power of rapid development comes from Gii code-generation tool and it generates PHP code (complete MVC for CRUD + admin. interface based on database tables or PHP class). You get skeleton structure that you need to fill in with your business logic (and put some design into views, but that's not really a problem here). Everything that Gii does, you would have to write manually using PHPSnow. Doing that manually is slow and error prone. Besides, using MVC framework makes the PHP code clean and maintainable, which are two real problems with PHP. Writing $this-> is a minor nuisance, but I hardly believe it warrants inventing a new language. If PHP is just ugly to you, why use it at all? There's Python, Ruby, whatever...
- codesuela 15y agothen again PHP is arguably a framework itself and when dealing with something either very simple or very complex Yii feels to verbose.
- wvenable 15y ago> it's because even solid coders produce spaghetti code with it. That's ridiculous -- PHP is pretty analogous to most languages in terms of both capability and syntax. The biggest warts in PHP revolve around the standard library and that wouldn't prevent anyone from producing solid code.
- yakko 15y agoyay let's copy ruby and python!
- LoneWolf 15y agoHonestly I fail to see a more readable thing, having experience with PHP it is really hard to me to read the snow code. A lot of the syntax just doesnt make sense to me. There is also another thing that annoys me, the significant whitespaces, that is something I do not like in python (while I like the rest of it, the indentation instead of brackets is annoying), yes I agree that indented code is more readable, and I like to read indented but I like to write my code without caring for indentation and fix it after it is doing what I want (read: tell my IDE to indent it, brackets help on that). The replacement of .= for %= is just added confusion there is really no gain, and the return for <- seems just wrong looks like just a way to avoid using characters. Dropping the semicolons doesnt make much difference to me, but being used to them it could be a problem, when writing in languages that dont require them I write them on habit leading to a long list of syntax errors. Warning personal rant: Why do people hate java like syntax and brackets WHYYYYYYYYYY? Whats wrong with brackets honestly??? Sorry just had to say that.
- orthecreedence 15y agoI've said it once and I'll say it again: if you're going to compile down to a language, support macros. CoffeeScript tries to make Javascript better, but I personally prefer Javascript's syntax. That's not to say CS doesn't have its benefits for many people, but one of the only things missing from Javascript is macros, so CS is pretty much worthless to me. After spending countless hours in lisp and javascript, php leaves a lot to be desired. One of the things I do not desire is a language of equal power with a completely different syntax. Syntax is meaningless if it doesn't allow greater power. Honestly, it's bad enough that CoffeeScript is so prevalent. I understand why it's around and why people like it, but I don't prefer it to pure JS...and I'd rather the trend not spread to other languages. One possible candidate would be Pharen, though: http://scriptor.github.com/pharen/ http://scriptor.github.com/pharen/.
- joshfraser 15y agoi value conciseness, but clarity matters more. i guess that's why the longer i code, the longer my variable names become.
- mgkimsal 15y agoWhat would be cooler is to use something like this as a basis to generate idiomatic php, python, perl or ruby. Let people sketch out their initial ideas in a common language, then compile in to a starter php project, or python project, etc.
- kleiba 15y agoI guess beauty lies in the eye of the beholder.
- user2459 15y agoHere's something constructive for all the haters. Snow is open source, seems with such a consensus it should be easy to get some people together and hack on a fork of snow that is more appealing to the masses. Or does the current PHP syntax leave nothing to be desired?
- kemo 15y agoIMHO, you're trying too hard to fix the things which aren't broken in the first place. Covering the main flaws in PHP would be sufficient, e.g. str = 'foo'.replace('#', '').substr(1).as_array(); int = 5.something(); would translate to $str = 'foo'; $str = str_replace('#', '', $str); $str = substr($str, 1); $str = (array) $str; $int = 5; $int = something($int); This would allow us to do things that aren't native to PHP but still have something much easier. Having strings, integers and other types used as objects (with a solid proxy syntax to the native functions) would be the first (and best) step forward. Class definitions as well: Foo { // constants BAR = 'fubar', BAR2 = 'foo'; // properties protected _bar, _fubar; // public properties / methods public bar() { return ._bar; }, fubar() { return ._bar + ._fubar; } }