Do you have an interest in C/C++ macros ? or LLVM ? or Parser/Lexer stuff?
If you do have or had any interest in one of the above terms / subjects, you might would like to know what actually 'homoiconicity' is. Since the term is not the one that has many concerned developers arguing on it, here is a definition from Wikipedia;
"In computer programming, homoiconicity is a property of some programming languages in which the program structure is similar to its syntax, and therefore the program's internal representation can be inferred by reading the text's layout"
I picked this subject mostly because of it's importance on my research area. I always believed the power of (spoken, programming.. any!) language and the way it helps to develop the ideas, dreams, and the future. During my masters studies, once we were arguing about the English Language and how it re-shapes all over in time. Imagine a blog writer is trying to put an article on quantum entanglement with a language frozen hundreds of years ago. No way right ?
Homoiconicity, Lazyness and First-Class Macros
http://ww2.cs.mu.oz.au/~todavies/lookup.pdf
Homoiconicity - Wikipedia
http://en.wikipedia.org/wiki/Homoiconicity
IO language
http://iolanguage.org/
My questions are;
What is your 'favorite' programming language and why? (not the one that your company wants you to use)
How that programming language allows you to reshape?
What is your opinion on homoiconic approach?
My favorite programming language is java.
ReplyDeleteFirst, simplify the Java development process, regardless of the machine on which code, the compiler provides the same code.
Then, regardless of the system used this unique code is directly operational.
Major advantages of java
- excellent portability
- powerful language
- Object-oriented language
- High-level language
- Rich JDK
- Many third-party libraries
- High productivity
- More secure and stable applications
- Many implementations, JVM and compilers, free or not
- IDE very good and free Eclipse and Netbeans for example
- Supported by many companies such as Sun or IBM and projects like Apache
Indeed Java is one of the most mature/complete programming language. Are you happy with the direction that Java evolves?
DeleteAbout my opinion on homoiconic approach.
ReplyDeleteI think it's a very good language of programming, in homoiconic language, you can easily:
-write a language interpreter (the evaluation part is free).
-delegate an arbitrary process to another process.
-write instrumentation tools (instrumenting, profiling) as functions of language and no external tools.
-write debugging tools as functions of language and no external tools.
For the latter, it means that you can partially automate the debugging of the program. For example your production system can send you an email with a (part of the code that generated an unhandled error parameres) very detailed error report, without using a debugger.
If you would in charge of picking a syntax for the next homoiconic language, what would you prefer?
DeleteWhat is your 'favorite' programming language and why? (not the one that your company wants you to use)
ReplyDeleteI prefer those programming languages that are as human readable as possible even if they require more lines of code to accomplish something that can be done in a single line in another language. But that may be because I'm used to Java the most. Monem listed the major advantages of Java in a comment above.
How that programming language allows you to reshape?
For Java, obviously, the syntax doesn't change much at all, so the difference is what libraries you're using, or what code generators built on top of Java you're using. Making changes to existing code is always a challenge, that's why documentation is important. I don't think there can be a perfect language that can withstand the test of time long-term, even if it can be easily extended with new syntax. What we can learn from the history of natural languages is that it's also important that a language is universally understood and easy to learn.
What is your opinion on homoiconic approach?
The main features can be very useful in specific situations, for example: the ability to generate programs during runtime and the meta-programming possibilities. But as a general purpose programming language there are better alternatives (with more support from existing technology).
"But as a general purpose programming language there are better alternatives (with more support from existing technology)."
DeleteMy question is that how long we can rely on them?
As long as there are programmers who know them :)
DeleteIn any case, textual programming languages may increasingly give way to editors that generate the code for you.
This comment has been removed by the author.
ReplyDelete1.What is your 'favorite' programming language and why? (not the one that your company wants you to use)
ReplyDeleteMy favorite programming language is Java because it is one of the most mature languages what is more thanks to the virtual machine Java programs can be run on any computer, no matter on the operating system and also because I was programming in that language for over 10 years
2.How that programming language allows you to reshape?
I agree with Wiktor that for Java syntax doesn't change much at all, so the difference is what libraries we are using. About Making changes in the code I think it is a big challenge to work on code that someone else wrote. In my work I often come across a situation when I had to develop or improve a system that was written by someone else that is why I agree with Wictor that in such a situation documentation is the most important thing.
3.What is your opinion on homoiconic approach?
To be honest I don't have opinion on that subject I think that this approach can be useful in one situation and in other not so it depend on situation :)
"In my work I often come across a situation when I had to develop or improve a system that was written by someone"
DeleteIMHO well designed, and structured source code with relevant comments is every 'second' developer's dream.
What is your 'favorite' programming language and why? (not the one that your company wants you to use)
ReplyDeleteI would like to be original and say that my favourite language is not the one that everyone mentioned so far, but it would be a lie. So yeah... it's Java. :)
Probably because it is the one that I feel most comfortable with. Most major projects I have been working on were coded in Java.
How that programming language allows you to reshape?
Unfortunately reshaping existing code can be a challenge at times. Especially if you haven't written it and there is no good documentation supplementing it. It depends on the stage and complexity. It's much easier to reshape early than later. A major factor is the author himself and whether he follows the coding conventions of the language.
What is your opinion on homoiconic approach?
It seems to me that homo-iconic languages tend to be too simple and can't cope that well with the development of complex programs. Although it's property to reprogram itself on the fly is a very nice feature which could come in handy at times.
" So yeah... it's Java. :)"
DeleteGod! So many Java developers around. :)
1. What is your 'favorite' programming language and why? (not the one that your company wants you to use)
ReplyDeleteI choose Java for making money but while I was studying Data Structures and Algorithms I've felt in love with Ada. It was well developed and very formal language. I admire how difficult is write almost any type of error. In addition it was the first language which helps me to learn parallel coding. Everything is so simple and readable in Ada. I heard that contract development is supported by this language and maybe in future i check this technique.
2. How that programming language allows you to reshape?
I haven’t program in that language for many years but I remember that it is the most readable language I ever met. It support well Object Oriented Paradigm. Ada is similar in some ways to Pascal so changing code is not as difficult like in functional languages.
3. What is your opinion on homoiconic approach?
Frankly speaking I don't understand well homoiconic approach and I don't want to comment if I don't follow subject well.
Good old friend 'Ada'.. Learning 'Ada' wasn't a big problem but making compiler happy with the source codes was an enormous deal.
DeleteIt could be unthinkable for you but I have nothing in common with programming. I completed engineer and master level but not involved with IT. I had something in common wit computing after completing post graduate study and Phd program. I have never programmed so far, except a short test I did in C++, but nevertheless, my problem is located in computing - dwelling fire hazard rules based modeling.
ReplyDeleteSo, if I could select programming language I would choose Java. I am not a specialist but I can feel that Java programmer can easily find a job. There are plenty of advertisement. Java is all around of us.
To sum it up, I agree wit Piotr. I don't understand well programming and homo-iconic approach, so I don't want to comment it.
Thanks for the comments anyway ;)
DeleteWhat is your 'favorite' programming language and why?
ReplyDeleteMy ‘first’ and favorite language in programming is C# which is the competition for Java (pointed in many answers). I perceive it as what Java could be if it was recreated from scratch, which couldn’t be done due to the legacy reasons. Microsoft has taken a more radical approach and each version of C# changes many core concepts of the language, although the general compatibility is maintained.
How that programming language allows you to reshape?
Reshaping in C# is greatly supported by Visual Studio (main IDE for C# and other .NET languages). The challenges in reshaping include personal style of coding and documentation. For C# there is also a factor of the language version (mentioned in the answer above). Putting these factors aside, C# provides really mature solutions for reshaping.
What is your opinion on homoiconic approach?
I have personally used only Lisp from homoiconic languages and I found it to be a painful experience :) In my opinion homoiconic languages are well-suited for specific applications. However, in mainstream usage it loses with Java or C# which represent a different widely spread paradigm.
"I perceive it as what Java could be if it was recreated from scratch, which couldn’t be done due to the legacy reasons."
DeleteSo you wouldn't surprise to hear that some guys at the core of '.NET Framework' team were transferred from Java.
"Reshaping in C# is greatly supported by Visual Studio"
AFAIK, C# / CLR doesn't provide tools for reshaping the language core but indeed there are amazing things to do. (i.e LINQ)
"I have personally used only Lisp from homoiconic languages and I found it to be a painful experience"
100% Agree!
My favourite programming language is C++ and I love absolutely everything about it. It’s probably because I spent most of my programming days in Visual Studio and it feels very natural to me. I am familiar with other languages, but it just doesn’t feel right when something can be written with only few lines of code or when I don’t have to worry about memory :)
ReplyDeleteI don’t really have an opinion on homoiconic approach as I have no experience in any homoiconic language. It looks interesting though.
"it just doesn’t feel right when something can be written with only few lines of code or when I don’t have to worry about memory :)"
DeleteI do totally understand you :) C/C++ may turn a developer into a resource control freak though.
What is your 'favorite' programming language and why? (not the one that your company wants you to use)
ReplyDeleteJava, mainly because it's my main programming language that I'm fluent in (senior java developer). I really like and admire Wolfraalpha language as it seems to be focused on effect and allows to quickly develop amazing concepts.
How that programming language allows you to reshape?
Using Java with TDD makes it pretty self documenting (try using Spock testing framework). As you read the unit tests or code samples you can easily figure out what does what.
What is your opinion on homoiconic approach?
I have no knowledge about it and seems to me it's a complicated concept. Knowing program structure that is driven by the syntax is pleasing and could be benefitial. Although as I saw the code samples - it seems that those languages have some not nice learning curve behind it.
"it seems that those languages have some not nice learning curve behind it."
DeleteYou are right. Interestingly, simplicity wasn't part of the languages with somehow homoiconic features.