That is, suppose the code is total shit [I know, big stretch for MSFT].
Its not that big a stretch. Sure, they usually make utterly and horribly unusable piles of crap that they call code, but sometimes they manage to get to the level of "total shit" too. Hell, sometimes their code just "sucks", which is a relatively high level of quality in the software industry.
Its not the FSF's goal to be popular, its their goal to promote freedom.
"You should be free to restrict the freedoms of your users" is not a trivial fact that the FSF and Free Software people should or do agree with.
People should not be free to create closed source software, simply because its not a freedom. Its a power over the users' freedoms. The net effect is the reduction of freedom.
The real problem, I think, is that RMS (via the FSF) is trying to force it down our throats as usual. He's a strange bird in that he really gets the freedom issue at one level while it flies totally over his head at another.
Yeah. People should be free to run and distribute closed-source apps.
Just like North Korea should be free to torture its people and restrict the rights of their citizens.
There is one problem with the government of the United States. Well, there are many, but they are all peanuts compared to the one large problem. The US government is constantly and overtly bribed by many lobbies and corporations.
Since direct bribes are illegal, they simply pay both parties a large bribe unless the parties act against their interests.
It is crucial that all financial "donations" to the government, the parties or their people, by anyone or any organization, are banned or severely limited.
I would say the whole user-based security model, attaching a user/group ID to every object, and "permission lists" is a design flaw as well. It is inefficient, complex, and impossible to implement correctly and securely. Though this design flaw is shared by both Linux and Windows (And all mainstream OS's), until Capability-based security models become mainstream.
Though the Win9x complete lack of any security model is a more severe one, ofcourse.
Its pretty easy to configure the keys you want in emacs.
Not sure how easy it is in vim.
There's some weird vim language to extend it no? Emacs has ELisp which is a nasty Lisp (yech) but still usable for actual extension work...
Emacs has very powerful macro recording that can contain invocations of your elisp routines, and any of the vast amounts of emacs's commands. It is the power of a computer program, but programming by example - which is so much more productive than writing the program as abstract text.
Are you sure you've understood Lisp or is the post a joke?
Maybe I haven't, but then you should correct me.
I can only speak of my productivity with Lisp not yours.
That's why I didn't go to subjective measures (which are true for me) such as "I was 5 times more productive in Python than any Lisp variant I ever tried, and that was in the first day of using Python".
I'm not able to judge Lisp implmentations, I tend just to use them but I've just added an item on my futures list to study some implementations.
Which implementation do you usually use?
I've never compiled Lisp it's an interactive language to me. Macros run when invoked and not before.
I didn't mention anything different from this. I think you missed my point here.
Never hit namespace issues enough to see if there were alternatives.
You don't "hit" namespace issues. You are just slightly-to-a-lot less productive when you are badly exposed to the possible operations at your fingertips. A lot of the time, a user only recognizes how bad something he uses is, when he is enlightened and becomes aware of an alternate way to do it. "OOP" has been used for a lot of meaningless buzz and lost a lot of its meaning, but one thing it got "right", is proper namespacing that associates operations with the data they can operate on. When I have a data type in my hands in Python (i.e CONS pair), Python can tell me: "Hey, here are a set of basic methods to work with CONS pairs, to get you started". With Lisp, having a CONS pair in my hands, I have no reference of what is possible to do with it.
car/cdr are not descriptive unless you are working on an IBM-704. But they've been around for 40+ years so it might be a little late to change them.
Too late in what way? Why do you want to be backwards compatible with existing Lisp? The codebase is small even compared to few-year-old popular languages, as well as the programmer base.
I've always been able to override the default macros, never wanted to thou.
Overriding builtins is not really an option, ever. You are trying to help your readers understand the program, not impede their understanding.
What basic data structure can you not make with a list of pairs.
What program can you not write with a Turing Machine? And yet most of us use different means to write programs. You have fallen into the "Turing trap" where you believe just because something is powerful enough to represent things, it is the right way to do it. CONS pairs are a cumbersome and much richer datatypes make the programmer's experience much better. Python's lists and dicts are much more useful and offer other advantages. Also, you missed the point about abstracting away interfaces. Lisp uses type-specific functions that are not polymorphic to other types, for example when iterating sequences. Even C++ is higher-level than Lisp in this aspect, because it allows and encourages generic iteration that will work on any sequence, and not just a specific type (CONS list).
The original syntax was an idea by original designer, not sure wether it was ever published, 'nother item for the list.
Its the #1 repellant of Lisp.
I think our differences are down to what we mean by peak. I want power, I want the ability to futz with code/ideas how I want. You seem to value ease of use more than power.
Explain the difference between "ease of use" and "power". Where "use" here means programming the computer to do what I want, doing that easily is power.
You could just show some examples of Lisp code and macros that you think represent the best of Lisp.
Then I could show you how the Python equivalent is good enough while using less complicated means, or even better.
Then I could show you various examples where Python succeeds, and you can try to show me the Lisp equivalent.
I found it funny that even the Python introduction to Lisp'ers, while making some errorenous claims about Python (like claiming it lacks lexical closures) used examples which were shorter, more readable and more concise when expressed as Python.
I'll state up front I'm more happy with Ruby than I ever was with Python, so yes I'm biased. White space kills me, it should not be part of langugage syntax.
Blah. Everyone says that before they use Python. On the other hand, virtually all programmers use whitespace to indent their programs anyhow, and yet somehow they believe use of that same information by the compiler breaks some sacred code.
So is everything in Python an object? No, it's like Java where they went 90% of the way but then fell off the cart.
Really? What isn't an object in Python?
Is introspection easy within Python, the meta-object protocol nice and organized? In my experience it was a pita. Now don't get me wrong it's not like it's crap but it's far from elegant.
Python has a decent meta-object protocol, but I agree the mixin way of Ruby is more elegant. Though the various __protocol__ vs. interface methods are a decent methodology that works well in Python.
I agree that the Lisp concept has something very powerful and right about it.
All existing implementations of Lisp, though, fail to achieve anywhere near the productivity of other languages, such as Python.
I believe the failings of Lisp are in its implementations. It seems as though the Lisp implementors were blinded by the power of macros, and used them when appropariate, and when not so appropriate.
A macro is very similar to a function, except it runs at compile-time, and its arguments are unevaluated. For most practical purposes, if it runs at compile-time or run-time only has an effect on performance. The power of unevaluated code can be achieved via enclosed (closure) code.
For example (with-file...) is implemented as a macro. In Python, for example, it can be implemented as a normal function that takes a function argument (a decorator).
Most Lisp implementations also choose Lisp-2 rather than Lisp-1 for namespacing. A horrible choice that doubles/add a lot of namespace-functions (let -> flet, boundp -> fboundp, funcall,...). This confuses me a bit every time I try to write Lisp.
Lisp also has quite a mess for a namespace. car/cdr are not descriptive function names, and what's worse, their name signifies nothing about their correlation to cons pairs. In Python, for example, it is easy to find code that operates on a given type because code is associated with that type.
In Lisp, if you have a CONS pair, there is nothing to hint you that "car" and "cdr" are available operations. Not to mention their horrible name. Actually, the whole dual-cell cons pair as a basic data type seems weird, arbitrary and arcane as a choice. This extends to all Lisp functions: There is no logical grouping of functions, and no association of functions with their commonly applied data types. The basic datatypes have undescriptive names.
Lisp also makes many of its functions (i.e car/cdr again) "statically-bound", and non-overridable. This means that you cannot create, for example, a transparent distributed library that proxies car/cdr and other operations to a remote server. Also, a lot of code seems to use car/cdr to iterate sequences, forcing the user code to use LISPish lists as the only sequence type. If I have an array or some other concrete Lisp type, its incompatible!
Lisp also has, in theory, a facility to create a readable syntax on top of its raw AST. But its not being used "because Lisp users found it unnecessary". I believe that's rubbish, and that it is very necessary. The reason its not being used is because no good implementation was offered yet. One possible implementation would be a graphical editor of the AST - not even exposing that it is an AST. No need to stick with the textual roots of the past. The parenthesis mockery of Lisp is not superficial criticism, it is a real learning curve slowdown and an annoying difficulty to anyone approaching Lisp. Infix is objectively better at visually spacing the arguments and making it clear which argument applies to which function.
The syntatic problems also extend to the various macro and compile-time code describing facilities, using things like @, ` ' and other various symbols that I have to reread about every time I want to use them. Contrast this with Python's syntax, which is so simple and consistent that I practically knew all of it on day 3 of using Python. Don't try to reply "But Lisp has no syntax", because defmacro, defun, quote, backquote, @, and the other various weird stuff are all a "syntax" you have to know to use Lisp effectively.
To say I strongly disagree that Lisp is some peak of programming languages, is a mild understatement.
The main issue here is that programming isn't necessary anymore for kids - whatever any kid wants to do they can rush out and buy a bit of software for, or find a utility online. All the functionality they'd want is at their fingertips already, so programming is left to the tinkerers.
There are a lot of instances where kids might need to program:
Web site scripts
Boring homework
Games, games, games. Even silly games are fun! A kid can write a game like Pune in a few months
Copy on Write saves you real memory, cache memory, and CPU time by pretending that each forked process has a true copy of a memory segment when it in fact is looking at the original. That is, right up until a fork tries to write to that memory location, in which case an exception is handled by making an actual copy to a new location and allowing the write. Linus believes that the exception will occur enough in real world usage that it will be slower than just doing the copy in the first place. Linus wants to push the manual use of zero-copy memory sharing through the vmsplice() routine. He believes that the programmer will always know better than the system when to share memory. Linus doesn't like "VM Games" despite the fact that Virtual Memory, Memory Mapped Files, Disk I/O, Write Caching, etc, etc, etc, are all already "Memory Games" and "VM Games"
Do I have that right?
I do not know the context of the current debate, but after reading some of it, it seems it doesn't have anything to do with fork at all. I believe everyone agrees COW for fork() is good.
The disagreement is about a specific optimized implementation of data transfer. Linus says that a simple non-optimized and portable interface already exists. The debate is on the optimized, less portable, high-performance implementation. Linus says it is pointless to use COW in the high-performance implementation, and that makes sense. For this specific issue, it is faster to just explicitly disallow the user from modifying his buffer after "sending" it. If the user wants a more friendly interface, and give up some performance (as COW would), he can just use the friendly low-performance interface.
If so, I'm not really seeing his issue. Or at least not as hard-line as he sees it. The issue of memory copy performance is a tricky one, especially since CPU cycles are not the be-all to end-all of performance. Does the exception generated really cost that much more than he believes, or is it often eclipsed by the cost of the extra memory read/writes and CPU waits that are normally generated by a copy? Is it really feasible to expect program developers to do manual memory management in a day in age when programs easily weigh in at hundreds of megs?
Explicitly disallowing "touching" of the buffer you "sent" until you have some ACK that means it completed sending, has little to do with the size of the program (given that it is sanely modular) and is the only way to extract the best performance of the machine. Again, you can always revert to using the simple low-performance send calls that allow you to touch the buffer after sending.
I'm just not sure that Torvalds is really looking at all sides of this. He may be right, but I'd like to hear more discussion between the *BSD guys and Torvalds before we put this matter to rest. And preferrably without the insults this time.:-/
Slashdot obviously brings the short words without any context.
Linus is not saying COW is bad, he says COW for this specific purpose in this specific context is bad. I don't know the context, and I only read the article itself and put only a little thought into it, but so far it makes sense.
Before, I used to think copyright infringement is not "theft". Now after more careful study of the word "theft", I know copyright infringement is, by the book, a type of "theft".
It is the good kind of theft though, and people calling it "theft" imply that it is bad theft. So people, please stop and use a more specific word!
If the word "rape" is overloaded to also mean "eating cupcakes" would it become morally wrong to eat cupcakes? A lot of posters here sure would think so. I would say it would be stupid to use the word "rape" in a discussion about the morality of eating cupcakes in such a case.
I applaud TPB for their continuing support of good moral "data theft" for information freedom for the masses! Good work!
Interesting, but not quite correct. Dictionary.com provides a whole series of definitions, and the common theme is that theft involves an acquisition of goods or services without the consent of the owner.
For the sake of moral discussion of copyright (whether infringement is right or wrong) you should not clump in the two meanings of the word theft at the same time. Or ofcourse you can, but I can simply reply with "data theft" is not morally wrong while "tangible property theft" is morally wrong, because the two are distinct. By using the same word, however, you do make the discussion more difficult and imply the wrong ideas to people not in the know about the subject (that there is conceptual moral equivalence between copying against copyright law and taking someone's tangible property against property law - which is wrong even if you believe that such actual moral equivalence exists).
You should note that none of the definitions explicitly provided the concept that the rightful owner is denied access to the goods or services which have been wrongfully acquired. Your definition depends on that concept.
The original definition of the word theft (before being overloaded with the copyright infringement meanings, before the term "intellectual property" was coined) spoke of only physical tangible things which are implicitly unavailable to their owner if taken without permission by someone else. This is the picture people have in their mind when they hear the word "theft". This is what it communicates.
Intellectual property is, by use of the term property, easily categorized as goods. The fact that these goods are ephemeral is a non-starter, since the same can be said of many items which qualify as services.
Intellectual property has a clearly identified owner. When copyright law is applied, yes. But whether it should or should not be applied is what the discussion is about.
Acquiring intellectual property without the consent of the owner would, therefore, be theft.
According to one of the definitions of theft, yes. But to use this definition in a discussion of this nature is confusing, so please don't.
Trying to justify to yourself that you are not a thief does not mean you are correct.
If copyright infringement makes someone a "thief" or not is a matter of interest to language philosophers. Ask a random person you know what he would think if he was told person X was a thief - and you will see that he gets the wrong idea. He would not say: "Person X is probably a Kazaa downloader" but would more likely say "I better watch out for my purse".
By calling infringement theft and infringers thieves, you are being academically correct while communicating everyone the wrong ideas. I believe language is more about communicating ideas than about being correct academically, but maybe that's just me.
If someone stole* a term paper you spent 6 months working on to turn it in before you, would it be wrong? According SlashLogic, it wouldn't be. It would just be copyright infringement.
*Stole in this case would mean "Grabbed a copy off of your hard drive, while not removing the original." I know, I know, "Not theft, I'm stupid, blah blah blah."
So you know that the distinction is important (you bothered to make it) but you still used the word "stole" in order to equate the two. You are being dishonest already, and then you complain that people don't even argue with you on the merit of your arguments. If the argument IS whether copyright infringement is wrong or not, by calling it theft during the same argument even though you know there is a distinction, you are simply invalidating your whole argument.
In your example, by the way, the wrongdoing is neither copyright infringement nor theft: It is breaking & entering, or a computer violation. Its wrong, but it doesn't make copyright infringement wrong because it has little to do with it.
Do you believe it is possible to hold the following two opinions at the same time:
Tangible property theft is morally wrong.
Copying data from a friend in his home to your home for your private use is not morally wrong.
What you say means that one cannot concurrently hold these two opinions, but you are wrong. In order to be able to speak a common language and debate the matter you must separate the two because they are different!
The brainwash work the copyright folks managed to pull off on an entire population is impressive.
Even people making a quarter of million dollars spend only a small proportion of it. The rest gets hoarded. And that causes the economy to grind to a halt and the poor to suffer.
Not that I love capitalism so much, but I would guess that Bill Gates puts his money in the bank and not in his sock drawer. That means that his money is being re-invested in the economy which means it does not grind to a halt.
if there was no copyright, I would still release my software closed-source. Then what would you say the reason for people copying it? to learn from the binary code?
To use it, ofcourse. But what would YOUR incentive to release it closed-source be?
You cannot gain any money from people using and copying it. You cannot create lock-in, nor would you benefit much from one. So why? People are also free to reverse-engineer it and distribute the reverse-engineered source, so you can't really use it to hide anything you are very dependent on.
we don't need to fund the development, people enjoy releasing software for free, remember? isn't that one of the major ideals of the OSS community?
There is no ideal of releasing software for free. There is an ideal of releasing it as free software. A lot of free software development is done for pay, and will not be done otherwise. It is not inconceivable that in a world without copyright, some artificial incentive to replace copyright would be needed. For example, software that aids patients in hospitals by applying existing scanning hardware as a treatment platform. This kind of software might require subsidy to develop. Then again, some rich patient might fund it, but he might not (As for him, it might be cheaper to buy the right hardware instead).
true, but at that time, only universities and a very small percentage of the population had access to a computer. It took big businesses and money to bring the desktop to the average user and the Internet as we know it. It's filled with a lot of shit, but it's also a very powerful tool.
I don't understand the point you try to make. The world today is better and optimized for the user, but that is true of software not protected by copyright too. The overall quality of software has definitely not improved, and a lot of the lower quality is a direct result of copyright (Copyright is a direct incentive to create lower-quality software in order to milk your lock-ins for their entire worth of money, and in order to create lock-in in the first place). My point here is that without copyright, there would be software for the average user too, and the corporations are not to thank for this.
hammers and knives are used to kill people every day. They shouldn't be banned either.
So? I am not saying that it should be banned because of it. I am saying that this problem is another problem that will go away along with copyright, if copyright is abolished.
Nothing is solved with open source. Most people will never look at the source. If a worm can spread by merely telling someone to open an attachemnt, how is open source going to help the situation at all?
Worms and viruses will not be solved. Malware hidden inside programs will be solved. It doesn't matter if you or your neighbors check out the software you use, as long as someone does. This is how opensource helps. Just like government transparency helps you even though you don't give a damn about it or look into the government's actions personally.
Adaware and spyware can be prevented with education (a lot of things in life are like this). I use firefox as my main browser and haven't had an issue with spyware/adaware for at least two years. You cannot install a closed-source app without worrying that it may contain malware. If you think firefox encompasses the entire computing experience, then ofcourse you don't have malware problems.
Linux doesn't have spyware because it is not in the best interest of a business to create it (less than 20% of the desktops on the internet). If linux had just as much market share as windows, it would have just as much spyware (it's very easy to trick a user into installing something).
Linux would have just as much spyware as it has closed-source apps. Linux is not immune to spyware, open-source programs are.
At this point in time, you have the freedom to release software as ope
So sometimes, another "wrong" is the "right" solution.
well, it's taking away freedoms away from the programmer.
Really? What freedoms would those be?
Using the government to enforce limitations over users' freedoms to copy and alter the work?
Because that's not a freedom at all, its a power! There's a difference between freedom and power, but you are confusing the two.
That is, suppose the code is total shit [I know, big stretch for MSFT].
Its not that big a stretch.
Sure, they usually make utterly and horribly unusable piles of crap that they call code, but sometimes they manage to get to the level of "total shit" too. Hell, sometimes their code just "sucks", which is a relatively high level of quality in the software industry.
Popularity does too.
Or doesn't it?
Its not the FSF's goal to be popular, its their goal to promote freedom.
"You should be free to restrict the freedoms of your users" is not a trivial fact that the FSF and Free Software people should or do agree with.
People should not be free to create closed source software, simply because its not a freedom. Its a power over the users' freedoms.
The net effect is the reduction of freedom.
The real problem, I think, is that RMS (via the FSF) is trying to force it down our throats as usual. He's a strange bird in that he really gets the freedom issue at one level while it flies totally over his head at another.
Yeah. People should be free to run and distribute closed-source apps.
Just like North Korea should be free to torture its people and restrict the rights of their citizens.
It is a sovereign nation, after all.
Ah, so its those that think of the greater good and net freedom for users who are narrow minded.
Those who think of how to get that damned program working already -- they are the real thinkers!
I am sure you love the argument of whether the GPL or the BSD is more free.
:-)
That argument is stupid.
That said, the GPL guarantees more net freedom for the users, so its more "free".
There is one problem with the government of the United States.
Well, there are many, but they are all peanuts compared to the one large problem.
The US government is constantly and overtly bribed by many lobbies and corporations.
Since direct bribes are illegal, they simply pay both parties a large bribe unless the parties act against their interests.
It is crucial that all financial "donations" to the government, the parties or their people, by anyone or any organization, are banned or severely limited.
I would say the whole user-based security model, attaching a user/group ID to every object, and "permission lists" is a design flaw as well. It is inefficient, complex, and impossible to implement correctly and securely.
Though this design flaw is shared by both Linux and Windows (And all mainstream OS's), until Capability-based security models become mainstream.
Though the Win9x complete lack of any security model is a more severe one, ofcourse.
Hmm.
To choose between freedom and "Lost".
I choose freedom, what do you choose?
Its pretty easy to configure the keys you want in emacs.
Not sure how easy it is in vim.
There's some weird vim language to extend it no? Emacs has ELisp which is a nasty Lisp (yech) but still usable for actual extension work...
Emacs has very powerful macro recording that can contain invocations of your elisp routines, and any of the vast amounts of emacs's commands. It is the power of a computer program, but programming by example - which is so much more productive than writing the program as abstract text.
Yeah. Esc-char-esc is much better than Ctrl-char :-)
Are you sure you've understood Lisp or is the post a joke?
Maybe I haven't, but then you should correct me.
I can only speak of my productivity with Lisp not yours.
That's why I didn't go to subjective measures (which are true for me) such as "I was 5 times more productive in Python than any Lisp variant I ever tried, and that was in the first day of using Python".
I'm not able to judge Lisp implmentations, I tend just to use them but I've just added an item on my futures list to study some implementations.
Which implementation do you usually use?
I've never compiled Lisp it's an interactive language to me. Macros run when invoked and not before.
I didn't mention anything different from this. I think you missed my point here.
Never hit namespace issues enough to see if there were alternatives.
You don't "hit" namespace issues. You are just slightly-to-a-lot less productive when you are badly exposed to the possible operations at your fingertips. A lot of the time, a user only recognizes how bad something he uses is, when he is enlightened and becomes aware of an alternate way to do it. "OOP" has been used for a lot of meaningless buzz and lost a lot of its meaning, but one thing it got "right", is proper namespacing that associates operations with the data they can operate on. When I have a data type in my hands in Python (i.e CONS pair), Python can tell me: "Hey, here are a set of basic methods to work with CONS pairs, to get you started". With Lisp, having a CONS pair in my hands, I have no reference of what is possible to do with it.
car/cdr are not descriptive unless you are working on an IBM-704. But they've been around for 40+ years so it might be a little late to change them.
Too late in what way? Why do you want to be backwards compatible with existing Lisp? The codebase is small even compared to few-year-old popular languages, as well as the programmer base.
I've always been able to override the default macros, never wanted to thou.
Overriding builtins is not really an option, ever. You are trying to help your readers understand the program, not impede their understanding.
What basic data structure can you not make with a list of pairs.
What program can you not write with a Turing Machine? And yet most of us use different means to write programs. You have fallen into the "Turing trap" where you believe just because something is powerful enough to represent things, it is the right way to do it. CONS pairs are a cumbersome and much richer datatypes make the programmer's experience much better. Python's lists and dicts are much more useful and offer other advantages. Also, you missed the point about abstracting away interfaces. Lisp uses type-specific functions that are not polymorphic to other types, for example when iterating sequences. Even C++ is higher-level than Lisp in this aspect, because it allows and encourages generic iteration that will work on any sequence, and not just a specific type (CONS list).
The original syntax was an idea by original designer, not sure wether it was ever published, 'nother item for the list.
Its the #1 repellant of Lisp.
I think our differences are down to what we mean by peak. I want power, I want the ability to futz with code/ideas how I want. You seem to value ease of use more than power.
Explain the difference between "ease of use" and "power". Where "use" here means programming the computer to do what I want, doing that easily is power.
You could just show some examples of Lisp code and macros that you think represent the best of Lisp.
Then I could show you how the Python equivalent is good enough while using less complicated means, or even better.
Then I could show you various examples where Python succeeds, and you can try to show me the Lisp equivalent.
I found it funny that even the Python introduction to Lisp'ers, while making some errorenous claims about Python (like claiming it lacks lexical closures) used examples which were shorter, more readable and more concise when expressed as Python.
Its not being taught and exposed enough, but its exactly as easy as you wrote. In fact, its the exact same textual representation in Python :-)
I'll state up front I'm more happy with Ruby than I ever was with Python, so yes I'm biased. White space kills me, it should not be part of langugage syntax.
Blah. Everyone says that before they use Python. On the other hand, virtually all programmers use whitespace to indent their programs anyhow, and yet somehow they believe use of that same information by the compiler breaks some sacred code.
So is everything in Python an object? No, it's like Java where they went 90% of the way but then fell off the cart.
Really? What isn't an object in Python?
Is introspection easy within Python, the meta-object protocol nice and organized? In my experience it was a pita. Now don't get me wrong it's not like it's crap but it's far from elegant.
Python has a decent meta-object protocol, but I agree the mixin way of Ruby is more elegant. Though the various __protocol__ vs. interface methods are a decent methodology that works well in Python.
I agree that the Lisp concept has something very powerful and right about it.
...) is implemented as a macro. In Python, for example, it can be implemented as a normal function that takes a function argument (a decorator).
...). This confuses me a bit every time I try to write Lisp.
All existing implementations of Lisp, though, fail to achieve anywhere near the productivity of other languages, such as Python.
I believe the failings of Lisp are in its implementations. It seems as though the Lisp implementors were blinded by the power of macros, and used them when appropariate, and when not so appropriate.
A macro is very similar to a function, except it runs at compile-time, and its arguments are unevaluated. For most practical purposes, if it runs at compile-time or run-time only has an effect on performance. The power of unevaluated code can be achieved via enclosed (closure) code.
For example (with-file
Most Lisp implementations also choose Lisp-2 rather than Lisp-1 for namespacing. A horrible choice that doubles/add a lot of namespace-functions (let -> flet, boundp -> fboundp, funcall,
Lisp also has quite a mess for a namespace. car/cdr are not descriptive function names, and what's worse, their name signifies nothing about their correlation to cons pairs. In Python, for example, it is easy to find code that operates on a given type because code is associated with that type.
In Lisp, if you have a CONS pair, there is nothing to hint you that "car" and "cdr" are available operations. Not to mention their horrible name. Actually, the whole dual-cell cons pair as a basic data type seems weird, arbitrary and arcane as a choice. This extends to all Lisp functions: There is no logical grouping of functions, and no association of functions with their commonly applied data types. The basic datatypes have undescriptive names.
Lisp also makes many of its functions (i.e car/cdr again) "statically-bound", and non-overridable. This means that you cannot create, for example, a transparent distributed library that proxies car/cdr and other operations to a remote server. Also, a lot of code seems to use car/cdr to iterate sequences, forcing the user code to use LISPish lists as the only sequence type. If I have an array or some other concrete Lisp type, its incompatible!
Lisp also has, in theory, a facility to create a readable syntax on top of its raw AST. But its not being used "because Lisp users found it unnecessary". I believe that's rubbish, and that it is very necessary. The reason its not being used is because no good implementation was offered yet. One possible implementation would be a graphical editor of the AST - not even exposing that it is an AST. No need to stick with the textual roots of the past. The parenthesis mockery of Lisp is not superficial criticism, it is a real learning curve slowdown and an annoying difficulty to anyone approaching Lisp. Infix is objectively better at visually spacing the arguments and making it clear which argument applies to which function.
The syntatic problems also extend to the various macro and compile-time code describing facilities, using things like @, ` ' and other various symbols that I have to reread about every time I want to use them. Contrast this with Python's syntax, which is so simple and consistent that I practically knew all of it on day 3 of using Python. Don't try to reply "But Lisp has no syntax", because defmacro, defun, quote, backquote, @, and the other various weird stuff are all a "syntax" you have to know to use Lisp effectively.
To say I strongly disagree that Lisp is some peak of programming languages, is a mild understatement.
There are a lot of instances where kids might need to program:
Ok, let me see if I've got this straight:
:-/
Copy on Write saves you real memory, cache memory, and CPU time by pretending that each forked process has a true copy of a memory segment when it in fact is looking at the original. That is, right up until a fork tries to write to that memory location, in which case an exception is handled by making an actual copy to a new location and allowing the write.
Linus believes that the exception will occur enough in real world usage that it will be slower than just doing the copy in the first place.
Linus wants to push the manual use of zero-copy memory sharing through the vmsplice() routine. He believes that the programmer will always know better than the system when to share memory.
Linus doesn't like "VM Games" despite the fact that Virtual Memory, Memory Mapped Files, Disk I/O, Write Caching, etc, etc, etc, are all already "Memory Games" and "VM Games"
Do I have that right?
I do not know the context of the current debate, but after reading some of it, it seems it doesn't have anything to do with fork at all. I believe everyone agrees COW for fork() is good.
The disagreement is about a specific optimized implementation of data transfer. Linus says that a simple non-optimized and portable interface already exists. The debate is on the optimized, less portable, high-performance implementation. Linus says it is pointless to use COW in the high-performance implementation, and that makes sense. For this specific issue, it is faster to just explicitly disallow the user from modifying his buffer after "sending" it. If the user wants a more friendly interface, and give up some performance (as COW would), he can just use the friendly low-performance interface.
If so, I'm not really seeing his issue. Or at least not as hard-line as he sees it. The issue of memory copy performance is a tricky one, especially since CPU cycles are not the be-all to end-all of performance. Does the exception generated really cost that much more than he believes, or is it often eclipsed by the cost of the extra memory read/writes and CPU waits that are normally generated by a copy? Is it really feasible to expect program developers to do manual memory management in a day in age when programs easily weigh in at hundreds of megs?
Explicitly disallowing "touching" of the buffer you "sent" until you have some ACK that means it completed sending, has little to do with the size of the program (given that it is sanely modular) and is the only way to extract the best performance of the machine. Again, you can always revert to using the simple low-performance send calls that allow you to touch the buffer after sending.
I'm just not sure that Torvalds is really looking at all sides of this. He may be right, but I'd like to hear more discussion between the *BSD guys and Torvalds before we put this matter to rest. And preferrably without the insults this time.
Slashdot obviously brings the short words without any context.
Linus is not saying COW is bad, he says COW for this specific purpose in this specific context is bad. I don't know the context, and I only read the article itself and put only a little thought into it, but so far it makes sense.
Before, I used to think copyright infringement is not "theft".
Now after more careful study of the word "theft", I know copyright infringement is, by the book, a type of "theft".
It is the good kind of theft though, and people calling it "theft" imply that it is bad theft. So people, please stop and use a more specific word!
If the word "rape" is overloaded to also mean "eating cupcakes" would it become morally wrong to eat cupcakes? A lot of posters here sure would think so. I would say it would be stupid to use the word "rape" in a discussion about the morality of eating cupcakes in such a case.
I applaud TPB for their continuing support of good moral "data theft" for information freedom for the masses! Good work!
Interesting, but not quite correct. Dictionary.com provides a whole series of definitions, and the common theme is that theft involves an acquisition of goods or services without the consent of the owner.
For the sake of moral discussion of copyright (whether infringement is right or wrong) you should not clump in the two meanings of the word theft at the same time. Or ofcourse you can, but I can simply reply with "data theft" is not morally wrong while "tangible property theft" is morally wrong, because the two are distinct.
By using the same word, however, you do make the discussion more difficult and imply the wrong ideas to people not in the know about the subject (that there is conceptual moral equivalence between copying against copyright law and taking someone's tangible property against property law - which is wrong even if you believe that such actual moral equivalence exists).
You should note that none of the definitions explicitly provided the concept that the rightful owner is denied access to the goods or services which have been wrongfully acquired. Your definition depends on that concept.
The original definition of the word theft (before being overloaded with the copyright infringement meanings, before the term "intellectual property" was coined) spoke of only physical tangible things which are implicitly unavailable to their owner if taken without permission by someone else. This is the picture people have in their mind when they hear the word "theft". This is what it communicates.
Intellectual property is, by use of the term property, easily categorized as goods. The fact that these goods are ephemeral is a non-starter, since the same can be said of many items which qualify as services.
That is, ofcourse, if you don't reject the whole notion of "intellectual property" like the framers of the US constitution did.
Intellectual property has a clearly identified owner.
When copyright law is applied, yes. But whether it should or should not be applied is what the discussion is about.
Acquiring intellectual property without the consent of the owner would, therefore, be theft.
According to one of the definitions of theft, yes. But to use this definition in a discussion of this nature is confusing, so please don't.
Trying to justify to yourself that you are not a thief does not mean you are correct.
If copyright infringement makes someone a "thief" or not is a matter of interest to language philosophers. Ask a random person you know what he would think if he was told person X was a thief - and you will see that he gets the wrong idea. He would not say: "Person X is probably a Kazaa downloader" but would more likely say "I better watch out for my purse".
By calling infringement theft and infringers thieves, you are being academically correct while communicating everyone the wrong ideas. I believe language is more about communicating ideas than about being correct academically, but maybe that's just me.
If someone stole* a term paper you spent 6 months working on to turn it in before you, would it be wrong? According SlashLogic, it wouldn't be. It would just be copyright infringement.
*Stole in this case would mean "Grabbed a copy off of your hard drive, while not removing the original." I know, I know, "Not theft, I'm stupid, blah blah blah."
So you know that the distinction is important (you bothered to make it) but you still used the word "stole" in order to equate the two. You are being dishonest already, and then you complain that people don't even argue with you on the merit of your arguments. If the argument IS whether copyright infringement is wrong or not, by calling it theft during the same argument even though you know there is a distinction, you are simply invalidating your whole argument.
In your example, by the way, the wrongdoing is neither copyright infringement nor theft: It is breaking & entering, or a computer violation. Its wrong, but it doesn't make copyright infringement wrong because it has little to do with it.
What you say means that one cannot concurrently hold these two opinions, but you are wrong. In order to be able to speak a common language and debate the matter you must separate the two because they are different!
The brainwash work the copyright folks managed to pull off on an entire population is impressive.
Even people making a quarter of million dollars spend only a small proportion of it. The rest gets hoarded. And that causes the economy to grind to a halt and the poor to suffer.
Not that I love capitalism so much, but I would guess that Bill Gates puts his money in the bank and not in his sock drawer.
That means that his money is being re-invested in the economy which means it does not grind to a halt.
if there was no copyright, I would still release my software closed-source. Then what would you say the reason for people copying it? to learn from the binary code?
To use it, ofcourse.
But what would YOUR incentive to release it closed-source be?
You cannot gain any money from people using and copying it.
You cannot create lock-in, nor would you benefit much from one. So why?
People are also free to reverse-engineer it and distribute the reverse-engineered source, so you can't really use it to hide anything you are very dependent on.
we don't need to fund the development, people enjoy releasing software for free, remember? isn't that one of the major ideals of the OSS community?
There is no ideal of releasing software for free. There is an ideal of releasing it as free software. A lot of free software development is done for pay, and will not be done otherwise.
It is not inconceivable that in a world without copyright, some artificial incentive to replace copyright would be needed. For example, software that aids patients in hospitals by applying existing scanning hardware as a treatment platform. This kind of software might require subsidy to develop. Then again, some rich patient might fund it, but he might not (As for him, it might be cheaper to buy the right hardware instead).
true, but at that time, only universities and a very small percentage of the population had access to a computer. It took big businesses and money to bring the desktop to the average user and the Internet as we know it. It's filled with a lot of shit, but it's also a very powerful tool.
I don't understand the point you try to make. The world today is better and optimized for the user, but that is true of software not protected by copyright too. The overall quality of software has definitely not improved, and a lot of the lower quality is a direct result of copyright (Copyright is a direct incentive to create lower-quality software in order to milk your lock-ins for their entire worth of money, and in order to create lock-in in the first place).
My point here is that without copyright, there would be software for the average user too, and the corporations are not to thank for this.
hammers and knives are used to kill people every day. They shouldn't be banned either.
So? I am not saying that it should be banned because of it. I am saying that this problem is another problem that will go away along with copyright, if copyright is abolished.
Nothing is solved with open source. Most people will never look at the source. If a worm can spread by merely telling someone to open an attachemnt, how is open source going to help the situation at all?
Worms and viruses will not be solved. Malware hidden inside programs will be solved. It doesn't matter if you or your neighbors check out the software you use, as long as someone does. This is how opensource helps.
Just like government transparency helps you even though you don't give a damn about it or look into the government's actions personally.
Adaware and spyware can be prevented with education (a lot of things in life are like this). I use firefox as my main browser and haven't had an issue with spyware/adaware for at least two years.
You cannot install a closed-source app without worrying that it may contain malware. If you think firefox encompasses the entire computing experience, then ofcourse you don't have malware problems.
Linux doesn't have spyware because it is not in the best interest of a business to create it (less than 20% of the desktops on the internet). If linux had just as much market share as windows, it would have just as much spyware (it's very easy to trick a user into installing something).
Linux would have just as much spyware as it has closed-source apps. Linux is not immune to spyware, open-source programs are.
At this point in time, you have the freedom to release software as ope