Yeah, if more than half of the miners are hostile e.g. if the big miners band together they might start to do double spend. But they likely won't do: If they try to actually introduce a double spend, they might make some money in the short term, but the moment the public finds out about it, which, due to the already quite well connected nature of the internet, can and will happen, bitcoin will lose a lot of trust, as basically its broken, and the bitcoin prices will sink rapidly. So their rigs would be worthless.
But yeah you are right, bitcoin can be considered broken.
The great thing about the blockchain concept is that it is distributed. There is no central server you can compromise. As long as a given percentage of the miners aren't hostile, everything is fine. The idea is great, but in practice its dead. A majority of the bitcoin hashing power is provided by very few people. They of course have a high interest in bitcoin still being trusted, otherwise the bitcoin price crashes and goes close to 0$, and all their expensive rigs are worthless. But its not at all a system anymore where the "small guys" control everything.
Bitcoin has been designed so that if you own the private keys for a wallet, nobody can steal your bitcoins. This is even provided if the blockchain gets compromised or controlled 99% by entities hostile to you. Your bitcoins remain yours. But the moment you use some website which knows the private key for the wallet, you fully trust them. And if the website gets hacked, they can of course get stolen. So its not a problem of bitcoin itself.
Yeah, democracies are slow in this regard, and even the chinese government criticises the slowness as problem of the democratic approach. But still, its the best proven system guaranteeing individual freedoms, so no way we should chose another one.
China has a big problem with regional party bosses playing "little god". Bejing has to keep them all under control.
Rust, is shaping up to be a massive failure, in my opinion.
Why do you think that?
They give you the utmost of power and flexibility. But contrary to what some fools think, they can be used very safely.
Yes, they can be used "safely", of course. But still there are major problems connected with C++. One is their exception system. They had to add lots of complexity in order to run destructors when the stack gets unrolled and similar. Its really a mess.
Modern C++ actually makes it trivial to write safe and secure code, yet still have it run extremely quickly with little overhead.
If you know what you are doing then C itself can be used to write safe and secure code. But if somebody writes code by copying some answer from stackexchange, they'll end up with a big mess. With C++, you can shoot yourself into the foot quite easily, or introduce bad practices. Rust has (almost?) no undefined behaviour. C++ has tons of it, and there is where the danger lurks.
In fact, the blockchain has been designed with distrust in mind. Unlike most other systems, it isn't the usual "just add a 3rd party everyone trusts, and lets call the problem solved" (like with TLS certificates, there you even have hundreds of parties everyone trusts), but it gives you a real hard number of people you can assume to act "hostile" and the system is still stable, without having a trusted third party. Its all real nice, in theory, except for the question of how to bring information about the current hashing speed of the network to the client. This is the only information you as non-hashing party have to trust.
You can achieve similar things with a gossip protocol. Blockchains are just one step in the evolution of distributed and public logs. Blockchains are in fact a very very wasteful, with all that proof-of-work. Most of bitcoin is controlled by china, and most of china's energy comes from old-fashioned coal. So, Blockchains as of now are a very very dirty technology.
But I'm really looking forward in seeing newer approaches emerge which don't need this kind of proof of work but are still safe against spam. Bitcoin has done one very important thing IMO, it has put attention to this topic. There are tons of startups everywhere. One really has to fear that "blockchain" becomes a new buzzword.
How sad that something so good for the economy is so hated by wealthy.
Its a property of the capitalist system to move money from those who have it to those who can use it to make more (In fact, that's the cool thing about it). Those who are wealthy who hate low gasoline prices either have to adapt and sell their companies, or suffer the consequences. The congress members should use those who profit from the low gasoline prices as campaign contributors, after all those get wealthy, don't they.
Its enough if the steel industry has problems, melting steel needs a lot of energy. And it really has massive problems: http://www.bloomberg.com/news/...
They aren't the workbench of the world anymore -- there are cheaper countries for these tasks. Yes, its still full of industry, but the trend is towards salary raises and therefore higher cost which means less competitiveness on the international market.
Also, china has created an artificial bubble in the aftermath of the 2007 crash, which is now, slowly, collapsing. There had been a big real estate bubble as well, which collapsed too.
The shrinking economy then leads to less emissions. Its good that they can indeed cut their emissions, but it would be greater if they could continue to do it with their economy growing.
They don't even acknowledge that processors other than Intel X86 exist. So much for that.
What do you mean by that? Rust compiles to LLVM IR, which is platform independent, so it can theoretically compile to most of the platforms LLVM has as target. There are even guides on the internet how to set it up, just google for them.
Why would you stop using normal pointers? The fact that you use smart pointers (which deal with ownership and lifetime of objects) is not related with normal pointers.
Because the moment you use pointers, you lose all the features of smart pointers, and this automatically introduces the opportunity for bugs to sneak in. The moment you have a pointer ptr, you can do ptr++, or do "delete ptr" and then dereference it and do other evil stuff. Yeah of course nobody except for some newbies would do this directly, but often bugs appear whose core is basically such behaviour.
On top of that, you don't understand what int*_t types are about. It is not about "portability", but rather ensuring a minimum/exact size, or performance.
Yeah, exactly, that's what these types are for. int/long/char etc are so that you can write "platform generic" code that works on 8 bit platforms as well as on 16 bit ones. But most people who write C code don't know this. They use these types because they think . But those types are useless the moment you store something on disk and want to read it later on a different platform, or if you send sth over the network. And most programs do this, and for counts you should only use size_t, nothing else (if you want to optimize you can use vector::size_t on some platforms its smaller than size_t, but its never larger). So int/long/char don't really deserve their short names.
Boost
I don't want to use boost, and I hope you don't want to do it either.
There was always a std::pair type in the stdlib
Well yeah, if you have generic programming then you can do tuple "types" quite easily, but rust still has more sugar for it.
That is actually the *point* of C++ (performance) compared to other languages which provide more run time type information (and reflection, introspection, etc.).
And the *point* of rust is to ensure even more reliability through the type and ownership system at compile time. The more checks the compiler does, the less checks the program has to do.
And no, you don't need "asserts" to check types in C++.
You don't need them indeed, but C++'s type system is far more limited. To give another example, you don't have parametrized enums. And, thanks to the separation of the program into header and source code, c++ has this problem with generic programming that using it is a real pain.
I just think they used the word "stable" too early.
Rust really changed heavily until May 2015 when 1.0 was released, so googling for common questions is very hard, as you get presented with largely outdated answers. So its really good they stabilized it, whatever now "stable" means. But the release 1.0 (or 1.6 or whatever) compiler only compiles stable interfaces. This way, 100% of your code can be compiled with stable rust.
And eventually C++ gains the language feature anyway, but without sacrificing efficiency for it.
Yes, C++ is a great language if its about which language contains the most features. But one thing which is very bad about c++ is that its very easy to write a bad program. In rust its very hard to write a bad program, as you first have to convince the compiler (including the borrow checker) to compile it, which requires you to think about what works how. Also, rust forbids things it considers "unsafe" by default, while with C++ you still can do very unsafe things.
C++ is great because its backwards compatible to C. You press a button and a C project is now a C++ project. So many people familiar with C could also try C++. However, as rust doesn't have to provide backwards compat, it can do many things more nice than C did. For example, you don't need to do the #if 0 trick anymore if you want to comment a block of code. So this for example would compile "code" in C++ but wouldn't compile anything in rust:/**/ comments:/*/*comment explaining code*/ code */
The second thing that rust can add which C++ can never achieve is the improved safety. C++ can't add additional requirements to C, including security. It can't prevent usage of non-smart pointers. And if you want to move a project from using normal pointers to smart pointers, you have to rewrite it anyway.
There are more things rust is better in than C++:
* most C++ projects have to deal with numbers sooner or later. But even if everybody praises c++ as portable and so on, its still a common pitfall for projects to assume that char (which is an integer number containing one byte) is 8 bits. And different platforms can have different widths for the other types too, the bounds were specified too broadly by the previous standards, and now nobody wants to touch it anymore. And yes, there is uint16_t etc introduced by c++11, but they are long, and hard to type. I prefer to edit my code without having to use an IDE.
* Rust's type system is an actual type system. You can return tuples and do more stuff. Everything that's verified compile time comes at run-time for free. So where you need to add an assert in C++, you can simply code a type which does the same thing in rust, without much boilerplate you would have needed in c++.
* If you pass a mutable reference to an object to a function, you have to prepend &mut to the object's name when calling the function. This hasn't been required by the C++ developers when they introduced references, their first failed attempt to replace pointers.
* Rust is less portable than C++, that's true, it doesn't run on all hardware platforms C++ runs on, but it runs on the most relevant ones.
And no, C doesn't really count in the comparison, because it doesn't grow - while WG14 publishes new standards, it's still mostly C89 used in the wild, with a few extensions.
C is a finished language, you can't really add anything significant to it unless you want to sacrifice its core properties.
About habits of dropping things: I still do think its very bad that mozilla dropped its XUL framework. Probably windows users won't notice as their computers are turned into tablets with a mouse, but still I would appreciate if I had some xml based way to create native-like UI, and not the usual "web" stuff.
No, except for compiler plugins, you can only compile code using stable interfaces with the official 1.6 release compiler. If you are on the nightly channel, you can use unstable things too. "unstable" is basically a playground to test features of a software before it gets "officially" included into the stable part of the language.
The move won't happen anymore, because it happened already. What you said above was an actual political issue of the early industrialisation, when humans figured out how to make light without having to kill whales, or lighting up candles or some larger fire. These methods were just bad, the versailles hall of mirrors room needed tons of candles in order to be properly lit.
In fact, if you put the mirror into Lagrange point L1, it can be used to prevent some of sun's light to reach earth, thus lowering solar input, and chilling the climate. Probably the idea sounds as insane as the one to build the hoover dam sounded to others back then*...
(* yes some (not all roads are cool) of the giant buildings trump proposes are insane as well, and I hope it won't be seen differently in the future)
Then why did they keep the Stingray surveillance secret? They should immediately release all the Stringray documents into the public domain!
Everybody knows that the information that they collect cell phone data is a secret.
The only link in TFS doesn't point to youtube. And it did appear to load very slowly when I wrote that post, my other internet was fine.
Yeah, if more than half of the miners are hostile e.g. if the big miners band together they might start to do double spend. But they likely won't do: If they try to actually introduce a double spend, they might make some money in the short term, but the moment the public finds out about it, which, due to the already quite well connected nature of the internet, can and will happen, bitcoin will lose a lot of trust, as basically its broken, and the bitcoin prices will sink rapidly. So their rigs would be worthless.
But yeah you are right, bitcoin can be considered broken.
The great thing about the blockchain concept is that it is distributed. There is no central server you can compromise. As long as a given percentage of the miners aren't hostile, everything is fine. The idea is great, but in practice its dead. A majority of the bitcoin hashing power is provided by very few people. They of course have a high interest in bitcoin still being trusted, otherwise the bitcoin price crashes and goes close to 0$, and all their expensive rigs are worthless. But its not at all a system anymore where the "small guys" control everything.
Bitcoin has been designed so that if you own the private keys for a wallet, nobody can steal your bitcoins. This is even provided if the blockchain gets compromised or controlled 99% by entities hostile to you. Your bitcoins remain yours. But the moment you use some website which knows the private key for the wallet, you fully trust them. And if the website gets hacked, they can of course get stolen. So its not a problem of bitcoin itself.
Yeah, democracies are slow in this regard, and even the chinese government criticises the slowness as problem of the democratic approach. But still, its the best proven system guaranteeing individual freedoms, so no way we should chose another one.
China has a big problem with regional party bosses playing "little god". Bejing has to keep them all under control.
Rust, is shaping up to be a massive failure, in my opinion.
Why do you think that?
They give you the utmost of power and flexibility. But contrary to what some fools think, they can be used very safely.
Yes, they can be used "safely", of course. But still there are major problems connected with C++. One is their exception system. They had to add lots of complexity in order to run destructors when the stack gets unrolled and similar. Its really a mess.
Modern C++ actually makes it trivial to write safe and secure code, yet still have it run extremely quickly with little overhead.
If you know what you are doing then C itself can be used to write safe and secure code. But if somebody writes code by copying some answer from stackexchange, they'll end up with a big mess. With C++, you can shoot yourself into the foot quite easily, or introduce bad practices. Rust has (almost?) no undefined behaviour. C++ has tons of it, and there is where the danger lurks.
In fact, the blockchain has been designed with distrust in mind. Unlike most other systems, it isn't the usual "just add a 3rd party everyone trusts, and lets call the problem solved" (like with TLS certificates, there you even have hundreds of parties everyone trusts), but it gives you a real hard number of people you can assume to act "hostile" and the system is still stable, without having a trusted third party. Its all real nice, in theory, except for the question of how to bring information about the current hashing speed of the network to the client. This is the only information you as non-hashing party have to trust.
You are doing it wrong. Its "meh." not "Meh.".
You can achieve similar things with a gossip protocol. Blockchains are just one step in the evolution of distributed and public logs. Blockchains are in fact a very very wasteful, with all that proof-of-work. Most of bitcoin is controlled by china, and most of china's energy comes from old-fashioned coal. So, Blockchains as of now are a very very dirty technology.
But I'm really looking forward in seeing newer approaches emerge which don't need this kind of proof of work but are still safe against spam. Bitcoin has done one very important thing IMO, it has put attention to this topic. There are tons of startups everywhere. One really has to fear that "blockchain" becomes a new buzzword.
Interesting that this still happens...
Have you read the second paragraph of the wikipedia page: https://en.wikipedia.org/wiki/...
How sad that something so good for the economy is so hated by wealthy.
Its a property of the capitalist system to move money from those who have it to those who can use it to make more (In fact, that's the cool thing about it). Those who are wealthy who hate low gasoline prices either have to adapt and sell their companies, or suffer the consequences. The congress members should use those who profit from the low gasoline prices as campaign contributors, after all those get wealthy, don't they.
Its enough if the steel industry has problems, melting steel needs a lot of energy. And it really has massive problems: http://www.bloomberg.com/news/...
They aren't the workbench of the world anymore -- there are cheaper countries for these tasks. Yes, its still full of industry, but the trend is towards salary raises and therefore higher cost which means less competitiveness on the international market.
Also, china has created an artificial bubble in the aftermath of the 2007 crash, which is now, slowly, collapsing. There had been a big real estate bubble as well, which collapsed too.
The shrinking economy then leads to less emissions. Its good that they can indeed cut their emissions, but it would be greater if they could continue to do it with their economy growing.
They don't even acknowledge that processors other than Intel X86 exist. So much for that.
What do you mean by that? Rust compiles to LLVM IR, which is platform independent, so it can theoretically compile to most of the platforms LLVM has as target.
There are even guides on the internet how to set it up, just google for them.
Why would you stop using normal pointers? The fact that you use smart pointers (which deal with ownership and lifetime of objects) is not related with normal pointers.
Because the moment you use pointers, you lose all the features of smart pointers, and this automatically introduces the opportunity for bugs to sneak in. The moment you have a pointer ptr, you can do ptr++, or do "delete ptr" and then dereference it and do other evil stuff. Yeah of course nobody except for some newbies would do this directly, but often bugs appear whose core is basically such behaviour.
False. "char" is and will always be of size 1.
Never disputed that. I just said that 1 byte is not guaranteed to contain 8 bits: http://stackoverflow.com/quest...
On top of that, you don't understand what int*_t types are about. It is not about "portability", but rather ensuring a minimum/exact size, or performance.
Yeah, exactly, that's what these types are for. int/long/char etc are so that you can write "platform generic" code that works on 8 bit platforms as well as on 16 bit ones. But most people who write C code don't know this. They use these types because they think . But those types are useless the moment you store something on disk and want to read it later on a different platform, or if you send sth over the network. And most programs do this, and for counts you should only use size_t, nothing else (if you want to optimize you can use vector::size_t on some platforms its smaller than size_t, but its never larger). So int/long/char don't really deserve their short names.
Boost
I don't want to use boost, and I hope you don't want to do it either.
There was always a std::pair type in the stdlib
Well yeah, if you have generic programming then you can do tuple "types" quite easily, but rust still has more sugar for it.
That is actually the *point* of C++ (performance) compared to other languages which provide more run time type information (and reflection, introspection, etc.).
And the *point* of rust is to ensure even more reliability through the type and ownership system at compile time. The more checks the compiler does, the less checks the program has to do.
And no, you don't need "asserts" to check types in C++.
You don't need them indeed, but C++'s type system is far more limited. To give another example, you don't have parametrized enums. And, thanks to the separation of the program into header and source code, c++ has this problem with generic programming that using it is a real pain.
I just think they used the word "stable" too early.
Rust really changed heavily until May 2015 when 1.0 was released, so googling for common questions is very hard, as you get presented with largely outdated answers. So its really good they stabilized it, whatever now "stable" means. But the release 1.0 (or 1.6 or whatever) compiler only compiles stable interfaces. This way, 100% of your code can be compiled with stable rust.
In fact, its okay to use unwrap() if the Err case only appears on an internal error, where you'd assert() ed in C++.
And eventually C++ gains the language feature anyway, but without sacrificing efficiency for it.
Yes, C++ is a great language if its about which language contains the most features. But one thing which is very bad about c++ is that its very easy to write a bad program. In rust its very hard to write a bad program, as you first have to convince the compiler (including the borrow checker) to compile it, which requires you to think about what works how. Also, rust forbids things it considers "unsafe" by default, while with C++ you still can do very unsafe things.
C++ is great because its backwards compatible to C. You press a button and a C project is now a C++ project. So many people familiar with C could also try C++. However, as rust doesn't have to provide backwards compat, it can do many things more nice than C did. For example, you don't need to do the #if 0 trick anymore if you want to comment a block of code. So this for example would compile "code" in C++ but wouldn't compile anything in rust: /**/ comments: /* /*comment explaining code*/ code */
The second thing that rust can add which C++ can never achieve is the improved safety. C++ can't add additional requirements to C, including security. It can't prevent usage of non-smart pointers. And if you want to move a project from using normal pointers to smart pointers, you have to rewrite it anyway.
There are more things rust is better in than C++:
* most C++ projects have to deal with numbers sooner or later. But even if everybody praises c++ as portable and so on, its still a common pitfall for projects to assume that char (which is an integer number containing one byte) is 8 bits. And different platforms can have different widths for the other types too, the bounds were specified too broadly by the previous standards, and now nobody wants to touch it anymore. And yes, there is uint16_t etc introduced by c++11, but they are long, and hard to type. I prefer to edit my code without having to use an IDE.
* Rust's type system is an actual type system. You can return tuples and do more stuff. Everything that's verified compile time comes at run-time for free. So where you need to add an assert in C++, you can simply code a type which does the same thing in rust, without much boilerplate you would have needed in c++.
* If you pass a mutable reference to an object to a function, you have to prepend &mut to the object's name when calling the function. This hasn't been required by the C++ developers when they introduced references, their first failed attempt to replace pointers.
* Rust is less portable than C++, that's true, it doesn't run on all hardware platforms C++ runs on, but it runs on the most relevant ones.
And no, C doesn't really count in the comparison, because it doesn't grow - while WG14 publishes new standards, it's still mostly C89 used in the wild, with a few extensions.
C is a finished language, you can't really add anything significant to it unless you want to sacrifice its core properties.
About habits of dropping things: I still do think its very bad that mozilla dropped its XUL framework. Probably windows users won't notice as their computers are turned into tablets with a mouse, but still I would appreciate if I had some xml based way to create native-like UI, and not the usual "web" stuff.
So I hope that rust won't meet a similar fate.
No, except for compiler plugins, you can only compile code using stable interfaces with the official 1.6 release compiler. If you are on the nightly channel, you can use unstable things too. "unstable" is basically a playground to test features of a software before it gets "officially" included into the stable part of the language.
good network security such as MAC registration
MAC addresses are quite public, static, and easily fakeable information, they are by no means a "good" way to authenticate devices.
It will shock you!
The move won't happen anymore, because it happened already. What you said above was an actual political issue of the early industrialisation, when humans figured out how to make light without having to kill whales, or lighting up candles or some larger fire. These methods were just bad, the versailles hall of mirrors room needed tons of candles in order to be properly lit.
In fact, if you put the mirror into Lagrange point L1, it can be used to prevent some of sun's light to reach earth, thus lowering solar input, and chilling the climate. Probably the idea sounds as insane as the one to build the hoover dam sounded to others back then*...
(* yes some (not all roads are cool) of the giant buildings trump proposes are insane as well, and I hope it won't be seen differently in the future)