Sort
Profile photo for Mikael Rusin

Name: Clay

Paradigm: Functional

Syntax: Simplistic

Philosophy:

DEPENDENCY AUTO-UPDATE:
I hate middleware redundancy in terms of outdated checks, bugged assertions and what not.

Would want auto-integrated solutions to accomodated dependency injections in terms of aquiring or scraping and sourcing of external dependancies.

Think Pip or Pear or whatever - but automated upon failure of deployment.

No need for you to guess what hidden dependency is lacking.

TRANSPARENCY:

I want full transparency over thread integration, interaction, propagation of queries and akin.

Graphical implementation and simulation of

Name: Clay

Paradigm: Functional

Syntax: Simplistic

Philosophy:

DEPENDENCY AUTO-UPDATE:
I hate middleware redundancy in terms of outdated checks, bugged assertions and what not.

Would want auto-integrated solutions to accomodated dependency injections in terms of aquiring or scraping and sourcing of external dependancies.

Think Pip or Pear or whatever - but automated upon failure of deployment.

No need for you to guess what hidden dependency is lacking.

TRANSPARENCY:

I want full transparency over thread integration, interaction, propagation of queries and akin.

Graphical implementation and simulation of process to showcase process of what occurs at what points.

VARIABLE EXPANSION ASSERTION:

I hate variable expansion. Both in JS (the trick with asserting new context with assignment of this) and Python, and otherwise..

It has indeed, been bugging me for a long time.

If i could, i’d make a language, where i could assert that context and variable expansion is not a issue. That it’s predictable.

Very tiresome to have to have some 2++++++++ Levels of skills in terms of having to resolve basic issues like event listeners.

LIVE INTEGRATION OF UNDERLYING CODE:

Akin to Lisp. Don’t make me waltz through 200 different secret tunnels just to assert capacity to change how the fundamental langauge works.

If i wish, i want to be able to parse and change flow of parsing.

I wish to be able to write, live ,from code sessions, into the underlying physical file.

NO HIDDEN UNDERLYING ‘CUT OFF SECTION’:

Looking at you Java.

Direction:

Script. It would be a language, that i made for fun, and to prove a point.

Not for efficiency or to solve a real issue.

Profile photo for Chase Willden

Man I love this question because I am creating my own programming language right now. What are my motives?

1. Because it's a difficult goal that I want to achieve
2. For educational purposes, not for class, but for just learning
3. Because there are concepts in JavaScript that are actually really good, but other concepts that are annoying


Will anybody actually use it? ...

How long will your portfolio last? Learn ways to retire comfortably with our guide.
Profile photo for Quora User

Cache lines would be the primary native type, all levels of cache would be addressable, hardware resources (down to adders and vector units) would require explicit cycle-level scheduling.

It's probably more a back-end language for a compiler, but I'd like the ability to go in and see the resulting output and tweak it. Not clear that current x86 assembly can support this, so it would be a simulator language for the next few years.

We often end up trying to fake out the compiler in order to fake out the prefetcher. The above language is a daydream that would give me much finer-grained control

Cache lines would be the primary native type, all levels of cache would be addressable, hardware resources (down to adders and vector units) would require explicit cycle-level scheduling.

It's probably more a back-end language for a compiler, but I'd like the ability to go in and see the resulting output and tweak it. Not clear that current x86 assembly can support this, so it would be a simulator language for the next few years.

We often end up trying to fake out the compiler in order to fake out the prefetcher. The above language is a daydream that would give me much finer-grained control over what the hell is going on inside the processor than can be done with current ISAs.

Profile photo for Juan-Carlos Gandhi

Such a beautiful questions, and a lot of interesting answers.

Well, I did try, eventually winding up with Forth.

Here’s my take.

The name does not matter, but it better be a simple noun, usable in compound words.

The philosophy should be - easy to read and relatively easy to use for beginners, not boring for professionals, interesting for high-level professionals. Not stupid, strictly logical. Logical types, by the way, should not be necessarily “boolean”. It would be better to enable using a variety of logics. Temporal. Linear. Intuitionist. Never rely on double negation.

Be flexible with integers

Such a beautiful questions, and a lot of interesting answers.

Well, I did try, eventually winding up with Forth.

Here’s my take.

The name does not matter, but it better be a simple noun, usable in compound words.

The philosophy should be - easy to read and relatively easy to use for beginners, not boring for professionals, interesting for high-level professionals. Not stupid, strictly logical. Logical types, by the way, should not be necessarily “boolean”. It would be better to enable using a variety of logics. Temporal. Linear. Intuitionist. Never rely on double negation.

Be flexible with integers (well, Scala is). Enable higher corners of Lambda-cube, but be sure a scriptie kid can use it too. Yes, scriptable of course, not just REPL, but practical scripts.

Syntax, that’s another issue. Not many surprises, but give people the freedom to define their own constructs; who knows, something can come up later on, and we better make sure it can be added.

All that… if I could design; actually, I don’t think I’m qualified. I just ask for features. And logical flexibility is one of them.

And the last moment. A function that returns a different value on each call should be impossible to write in this language.

Profile photo for Assistant
Assistant

Designing a programming language is a fascinating endeavor! Here’s a conceptual design for a language I would create:

Language Name: Fluent

Paradigm:

  • Multi-paradigm: Fluent would support functional, object-oriented, and procedural programming styles, allowing developers to choose the best approach for their tasks.

Syntax:

  • Readable and Concise: The syntax would be designed for readability and ease of use, inspired by Python and Swift. It would use significant whitespace to improve clarity.
  • Type Inference: Fluent would support type inference, allowing developers to omit type declarations when the comp

Designing a programming language is a fascinating endeavor! Here’s a conceptual design for a language I would create:

Language Name: Fluent

Paradigm:

  • Multi-paradigm: Fluent would support functional, object-oriented, and procedural programming styles, allowing developers to choose the best approach for their tasks.

Syntax:

  • Readable and Concise: The syntax would be designed for readability and ease of use, inspired by Python and Swift. It would use significant whitespace to improve clarity.
  • Type Inference: Fluent would support type inference, allowing developers to omit type declarations when the compiler can deduce them.
  • Pattern Matching: A powerful pattern matching feature would allow for more expressive data handling, similar to languages like Elixir or Haskell.

Example Syntax:

  1. // Function definition with type inference 
  2. function add(a, b) { 
  3. return a + b 
  4. } 
  5.  
  6. // Using pattern matching 
  7. match(value) { 
  8. case 1: 
  9. print("One") 
  10. case 2: 
  11. print("Two") 
  12. default: 
  13. print("Other") 
  14. } 
  15.  
  16. // Class definition 
  17. class Animal { 
  18. constructor(name) { 
  19. this.name = name 
  20. } 
  21.  
  22. speak() { 
  23. print("${this.name} makes a sound") 
  24. } 
  25. } 
  26.  
  27. // Creating an instance 
  28. let dog = new Animal("Dog") 
  29. dog.speak() 

Philosophy:

  • Developer Experience: Fluent would prioritize developer experience with clear error messages and robust documentation. It would include features like auto-completion and intelligent code suggestions in IDEs.
  • Simplicity and Power: While the language would be simple to learn, it would also provide powerful abstractions for advanced users, allowing them to write efficient and scalable code.
  • Community-Driven: Fluent would adopt an open-source model, encouraging community contributions and feedback to evolve the language over time.

Script or Compiled:

  • Hybrid Approach: Fluent would be both a scripting language and a compiled language. It would allow for quick scripting tasks with an interpreter while also providing a compiler for performance-critical applications.

Additional Features:

  • Concurrency Support: Built-in support for asynchronous programming and concurrency (similar to JavaScript’s async/await) to handle modern application demands.
  • Interoperability: Easy integration with existing libraries and frameworks in other languages (like JavaScript, Python, and Java) to leverage existing ecosystems.

This design aims to create a language that is not only powerful and flexible but also enjoyable to use, bridging the gap between novice and experienced programmers.

Where do I start?

I’m a huge financial nerd, and have spent an embarrassing amount of time talking to people about their money habits.

Here are the biggest mistakes people are making and how to fix them:

Not having a separate high interest savings account

Having a separate account allows you to see the results of all your hard work and keep your money separate so you're less tempted to spend it.

Plus with rates above 5.00%, the interest you can earn compared to most banks really adds up.

Here is a list of the top savings accounts available today. Deposit $5 before moving on because this is one of th

Where do I start?

I’m a huge financial nerd, and have spent an embarrassing amount of time talking to people about their money habits.

Here are the biggest mistakes people are making and how to fix them:

Not having a separate high interest savings account

Having a separate account allows you to see the results of all your hard work and keep your money separate so you're less tempted to spend it.

Plus with rates above 5.00%, the interest you can earn compared to most banks really adds up.

Here is a list of the top savings accounts available today. Deposit $5 before moving on because this is one of the biggest mistakes and easiest ones to fix.

Overpaying on car insurance

You’ve heard it a million times before, but the average American family still overspends by $417/year on car insurance.

If you’ve been with the same insurer for years, chances are you are one of them.

Pull up Coverage.com, a free site that will compare prices for you, answer the questions on the page, and it will show you how much you could be saving.

That’s it. You’ll likely be saving a bunch of money. Here’s a link to give it a try.

Consistently being in debt

If you’ve got $10K+ in debt (credit cards…medical bills…anything really) you could use a debt relief program and potentially reduce by over 20%.

Here’s how to see if you qualify:

Head over to this Debt Relief comparison website here, then simply answer the questions to see if you qualify.

It’s as simple as that. You’ll likely end up paying less than you owed before and you could be debt free in as little as 2 years.

Missing out on free money to invest

It’s no secret that millionaires love investing, but for the rest of us, it can seem out of reach.

Times have changed. There are a number of investing platforms that will give you a bonus to open an account and get started. All you have to do is open the account and invest at least $25, and you could get up to $1000 in bonus.

Pretty sweet deal right? Here is a link to some of the best options.

Having bad credit

A low credit score can come back to bite you in so many ways in the future.

From that next rental application to getting approved for any type of loan or credit card, if you have a bad history with credit, the good news is you can fix it.

Head over to BankRate.com and answer a few questions to see if you qualify. It only takes a few minutes and could save you from a major upset down the line.

How to get started

Hope this helps! Here are the links to get started:

Have a separate savings account
Stop overpaying for car insurance
Finally get out of debt
Start investing with a free bonus
Fix your credit

Profile photo for Steve Cook

New languages usually spawn from two avenues, the first is geeks playing around to try and make the better mouse trap (most fail, but it is fun to try), the second out of need, such as a language for some specific aspect (such as a scripting language for a CRM or things like Mathmatica). The later rarely goes past the range of it's design, though in some cases it does happen.


Each language must meet it's purpose and goals. Throwing out a language to do so results in a poor language as it has no meaning.

That being said there are some specific suggestions to follow in designing any language.

New languages usually spawn from two avenues, the first is geeks playing around to try and make the better mouse trap (most fail, but it is fun to try), the second out of need, such as a language for some specific aspect (such as a scripting language for a CRM or things like Mathmatica). The later rarely goes past the range of it's design, though in some cases it does happen.


Each language must meet it's purpose and goals. Throwing out a language to do so results in a poor language as it has no meaning.

That being said there are some specific suggestions to follow in designing any language.

The first is identify your target. If it is general programming you want to adopt a structure based on C++ (Java, C#, PHP, etc.) as this is the most adopted language pattern. Mathematicians should see something similar to Mathematica, and so forth.

Secondly unless you want a fleeting language, do not structure it based on current trends, target design patterns and ideas that are historically sound, with the exception of perhaps the area you are focusing. Several languages fade or become annoying once the idea they were based on is no longer popular.

The language needs to be easily adaptable to stay relevant, such as Java implementing Lambda. If an idea is good and your language does not support it, it may be the reason it gets forgotten. However, you should not force developers into patterns that are not completely accepted, or have potential to change. This is where many languages get lost, they try to be a framework as well, or in the case of Ruby so closely tied to a framework in their popularity, that they are likely doomed in the future.

Keep in mind few frameworks last, and the ones that do, last because they are more versatile and adaptable. Languages are the same way, though some are difficult to identify the points of restriction, especially from the designer's view.

Profile photo for Jonathan Lettvin

parallel programming languages are somewhat crippled by serial paradigms. I have already produced a parallel RPN language for use on gpgpu for processing images and other data for which there is time-interval framing. Set A1 is used to compute set A2 which is used to compute set A1 (etc... forever) for modeling retinal processing of dynamic images. However, I find this horribly inadequate. I wish to produce a language that enables specification of systems of autonomous units that listen to each other and talk to each other, much as neurons do. I would love to discuss the approach with lik

parallel programming languages are somewhat crippled by serial paradigms. I have already produced a parallel RPN language for use on gpgpu for processing images and other data for which there is time-interval framing. Set A1 is used to compute set A2 which is used to compute set A1 (etc... forever) for modeling retinal processing of dynamic images. However, I find this horribly inadequate. I wish to produce a language that enables specification of systems of autonomous units that listen to each other and talk to each other, much as neurons do. I would love to discuss the approach with like-minded developers and scientists. The language would essentially specify the rules by which a cell changes morphology/state and who it listens/reports to. This is being developed on serial computers for now, but it ought to trigger development of entirely new hardware.

Profile photo for Fiverr

The best way to find the right freelancer for digital marketing is on Fiverr. The platform has an entire category of professional freelancers who provide full web creation, Shopify marketing, Dropshipping, and any other digital marketing-related services you may need. Fiverr freelancers can also do customization, BigCommerce, and Magento 2. Any digital marketing help you need just go to Fiverr.com and find what you’re looking for.

Profile photo for Quora User

It would fit a special purpose. There are already so many general purpose languages out there. There is no need for another one I think. What do I like when using a language?

I like to have a simple and powerful concurrency feature. I want to write a single command and have my code running asynchronous. I want to have first order functions to ensure a powerful abstraction. I want my algorithms to be type independent. It doesn't need to be dynamically typed, but some kind of templating mechanism would be great. I don't want to write the same algorithm x times for similar data types. I want to sa

It would fit a special purpose. There are already so many general purpose languages out there. There is no need for another one I think. What do I like when using a language?

I like to have a simple and powerful concurrency feature. I want to write a single command and have my code running asynchronous. I want to have first order functions to ensure a powerful abstraction. I want my algorithms to be type independent. It doesn't need to be dynamically typed, but some kind of templating mechanism would be great. I don't want to write the same algorithm x times for similar data types. I want to say, these are my data and this is the function you need to use as callback. And immutability is a must. It there is an option for mutable state, fair enough, but immutability should be default.

I think that's it for now. The point is there are languages out there covering that. Clojure or Elixir for example.

Most languuages in common use today are mainly slight variations on the same concepts and structures. Which is why once you learn one language, it is fast to pick up many others.

Today, functional languages have become popular, but they still have the same basic concepts in relation to each other.

If I were to create a new language, I would push myself to think out of the box and try to unlearn everything I know about programming, then try to approach the problem from a new perspective with the hope of creating a new programming paradigm.

Profile photo for Quora User

Here’s the thing: I wish I had known these money secrets sooner. They’ve helped so many people save hundreds, secure their family’s future, and grow their bank accounts—myself included.

And honestly? Putting them to use was way easier than I expected. I bet you can knock out at least three or four of these right now—yes, even from your phone.

Don’t wait like I did. Go ahead and start using these money secrets today!

1. Cancel Your Car Insurance

You might not even realize it, but your car insurance company is probably overcharging you. In fact, they’re kind of counting on you not noticing. Luckily,

Here’s the thing: I wish I had known these money secrets sooner. They’ve helped so many people save hundreds, secure their family’s future, and grow their bank accounts—myself included.

And honestly? Putting them to use was way easier than I expected. I bet you can knock out at least three or four of these right now—yes, even from your phone.

Don’t wait like I did. Go ahead and start using these money secrets today!

1. Cancel Your Car Insurance

You might not even realize it, but your car insurance company is probably overcharging you. In fact, they’re kind of counting on you not noticing. Luckily, this problem is easy to fix.

Don’t waste your time browsing insurance sites for a better deal. A company called Insurify shows you all your options at once — people who do this save up to $996 per year.

If you tell them a bit about yourself and your vehicle, they’ll send you personalized quotes so you can compare them and find the best one for you.

Tired of overpaying for car insurance? It takes just five minutes to compare your options with Insurify and see how much you could save on car insurance.

2. Ask This Company to Get a Big Chunk of Your Debt Forgiven

A company called National Debt Relief could convince your lenders to simply get rid of a big chunk of what you owe. No bankruptcy, no loans — you don’t even need to have good credit.

If you owe at least $10,000 in unsecured debt (credit card debt, personal loans, medical bills, etc.), National Debt Relief’s experts will build you a monthly payment plan. As your payments add up, they negotiate with your creditors to reduce the amount you owe. You then pay off the rest in a lump sum.

On average, you could become debt-free within 24 to 48 months. It takes less than a minute to sign up and see how much debt you could get rid of.

3. You Can Become a Real Estate Investor for as Little as $10

Take a look at some of the world’s wealthiest people. What do they have in common? Many invest in large private real estate deals. And here’s the thing: There’s no reason you can’t, too — for as little as $10.

An investment called the Fundrise Flagship Fund lets you get started in the world of real estate by giving you access to a low-cost, diversified portfolio of private real estate. The best part? You don’t have to be the landlord. The Flagship Fund does all the heavy lifting.

With an initial investment as low as $10, your money will be invested in the Fund, which already owns more than $1 billion worth of real estate around the country, from apartment complexes to the thriving housing rental market to larger last-mile e-commerce logistics centers.

Want to invest more? Many investors choose to invest $1,000 or more. This is a Fund that can fit any type of investor’s needs. Once invested, you can track your performance from your phone and watch as properties are acquired, improved, and operated. As properties generate cash flow, you could earn money through quarterly dividend payments. And over time, you could earn money off the potential appreciation of the properties.

So if you want to get started in the world of real-estate investing, it takes just a few minutes to sign up and create an account with the Fundrise Flagship Fund.

This is a paid advertisement. Carefully consider the investment objectives, risks, charges and expenses of the Fundrise Real Estate Fund before investing. This and other information can be found in the Fund’s prospectus. Read them carefully before investing.

4. Earn Up to $50 this Month By Answering Survey Questions About the News — It’s Anonymous

The news is a heated subject these days. It’s hard not to have an opinion on it.

Good news: A website called YouGov will pay you up to $50 or more this month just to answer survey questions about politics, the economy, and other hot news topics.

Plus, it’s totally anonymous, so no one will judge you for that hot take.

When you take a quick survey (some are less than three minutes), you’ll earn points you can exchange for up to $50 in cash or gift cards to places like Walmart and Amazon. Plus, Penny Hoarder readers will get an extra 500 points for registering and another 1,000 points after completing their first survey.

It takes just a few minutes to sign up and take your first survey, and you’ll receive your points immediately.

5. Get Up to $300 Just for Setting Up Direct Deposit With This Account

If you bank at a traditional brick-and-mortar bank, your money probably isn’t growing much (c’mon, 0.40% is basically nothing).

But there’s good news: With SoFi Checking and Savings (member FDIC), you stand to gain up to a hefty 3.80% APY on savings when you set up a direct deposit or have $5,000 or more in Qualifying Deposits and 0.50% APY on checking balances — savings APY is 10 times more than the national average.

Right now, a direct deposit of at least $1K not only sets you up for higher returns but also brings you closer to earning up to a $300 welcome bonus (terms apply).

You can easily deposit checks via your phone’s camera, transfer funds, and get customer service via chat or phone call. There are no account fees, no monthly fees and no overdraft fees. And your money is FDIC insured (up to $3M of additional FDIC insurance through the SoFi Insured Deposit Program).

It’s quick and easy to open an account with SoFi Checking and Savings (member FDIC) and watch your money grow faster than ever.

Read Disclaimer

5. Stop Paying Your Credit Card Company

If you have credit card debt, you know. The anxiety, the interest rates, the fear you’re never going to escape… but a website called AmONE wants to help.

If you owe your credit card companies $100,000 or less, AmONE will match you with a low-interest loan you can use to pay off every single one of your balances.

The benefit? You’ll be left with one bill to pay each month. And because personal loans have lower interest rates (AmONE rates start at 6.40% APR), you’ll get out of debt that much faster.

It takes less than a minute and just 10 questions to see what loans you qualify for.

6. Lock In Affordable Term Life Insurance in Minutes.

Let’s be honest—life insurance probably isn’t on your list of fun things to research. But locking in a policy now could mean huge peace of mind for your family down the road. And getting covered is actually a lot easier than you might think.

With Best Money’s term life insurance marketplace, you can compare top-rated policies in minutes and find coverage that works for you. No long phone calls. No confusing paperwork. Just straightforward quotes, starting at just $7 a month, from trusted providers so you can make an informed decision.

The best part? You’re in control. Answer a few quick questions, see your options, get coverage up to $3 million, and choose the coverage that fits your life and budget—on your terms.

You already protect your car, your home, even your phone. Why not make sure your family’s financial future is covered, too? Compare term life insurance rates with Best Money today and find a policy that fits.

Profile photo for Vladislav Zorov

I have already created a new programming language, and I know exactly how it was - it had bad syntax and bad semantics, but it compensated by an utter lack of features.

It was still one of my proudest moments as a programmer, though :) Never mind that in Haskell with the Parsec library it was just a page of code; seeing it actually work, do loops, update variables, print results and stuff was awesome :)

Profile photo for Shawn Masters

I’m not sure I will ever design a language, because I just have to many other things to do and many options to do them with. Taking the pure fantasy side of things I would like a language that has the following from the existing ones.

  • Simplicity of Lua and single thread performance of LuaJIT.
  • Handle arbitrarily large memory sizes without issues.
  • Message passing, pattern matching and OTP like functionality of Erlang.
  • Fully functional paradigm with all the bells and whistles.
  • A little smattering of OO from the data structure and interface side.
  • IPC on par with the Disruptor pattern.
  • Single static binar

I’m not sure I will ever design a language, because I just have to many other things to do and many options to do them with. Taking the pure fantasy side of things I would like a language that has the following from the existing ones.

  • Simplicity of Lua and single thread performance of LuaJIT.
  • Handle arbitrarily large memory sizes without issues.
  • Message passing, pattern matching and OTP like functionality of Erlang.
  • Fully functional paradigm with all the bells and whistles.
  • A little smattering of OO from the data structure and interface side.
  • IPC on par with the Disruptor pattern.
  • Single static binary for each build target like Go.
  • GC or reference counting that works on isolated regions like Rust.
  • The library base of Python.
  • Must have a REPL

Once this unicorn walks the land of computers I’ll be sure to switch. Until then I’ll just use the right tool for each job.

Profile photo for Bernhard H. Schmitz

All general-purpose programming languages today are Turing-complete - almost all (just a disclaimer). This means that we can use every language to program what we want. From this perspective we do not need a new programming language.

Let us neglect the support for languages by libraries and other tools of the languages' ecosystems. These could be implemented for each language if there would be the

All general-purpose programming languages today are Turing-complete - almost all (just a disclaimer). This means that we can use every language to program what we want. From this perspective we do not need a new programming language.

Let us neglect the support for languages by libraries and other tools of the languages' ecosystems. These could be implemented for each language if there would be the will and enough resources.

Depending on what we want to program there are languages which match particular problems better than others. So everything depends more or less on the problems, the structure of the problems, and the objectives for implementation (i.e. all sorts of trade-offs).

The structure of a problem determines more or less the best suitable programming language for it's solution. In regard to the features you requested, what I mean is:

The problem paradigms determine the programming paradigms.

If I would create or optimize a programming language, I would integrate more and more problem paradigms into the language while maintaining the language's conceptual clarity. This means: There should be pure subsets of the languages (e.g. functional, OO, logic, imperative, ...) which could be used solely and purely without the need to use other subsets. This would also supp...

Profile photo for Quora User

I think every programmer would like to create their own language at some point in their career...which is why there are a bazillion single-user languages all serving a very unique domain.

The Pat language would incorporate all the neat CPU features that have been introduced since C was designed, which is when most current languages stopped adopting new features from hardware functionality. It would include the ability to express conditional execution as its own type of flow control. It would support vectors primitives and vectorized functions in expressions.

It would tuned for expressing parall

I think every programmer would like to create their own language at some point in their career...which is why there are a bazillion single-user languages all serving a very unique domain.

The Pat language would incorporate all the neat CPU features that have been introduced since C was designed, which is when most current languages stopped adopting new features from hardware functionality. It would include the ability to express conditional execution as its own type of flow control. It would support vectors primitives and vectorized functions in expressions.

It would tuned for expressing parallel execution. In this regard it would be heavily influenced by Erlang, except for the VM part...the Pat language has NO VMs ever. Unlike Erlang would allow objects or memory allocation to be shared or cloned on copy. It would also be statically typed.

Executables would also include runtime scripting hooks backed up by the language, like AREXX or LUA, but support would be fundamental and at the language level.

Profile photo for Bhushan Chaudhari

Well, ideal programming language would be like any other language we speak/write.

For example, English. You should be able to communicate and get your work done with Computer just by talking/writing to it in English. If that is the case then just imagine ! Everybody who can speak/write English, will suddenly become a programmer.

What a world that would be ! But that is the ideal scenario. :)

Profile photo for Igor Nowicki

It would have only one function - "!", which would mean "Do what I want". Probably perfect programming language would be very advanced artificial language, which would learn about how I think.

Profile photo for Joey Max Gravel

I love to answer questions like this.

It would be very simple.

I tried to use a tabulator like Excel to use as a frame.

Like

First line would be Title
Then Second line, would state all the variable names
Third line would set all the variables types.
Fourth line would be BEGIN as in Pascal.

The rest is up to me… I haven’t gone further XD

Profile photo for Ken Gregg

The problem is that I work on a variety of projects, from embedded systems to large applications, and many things in between. I use different programming languages for different projects precisely because of the specific strengths of those languages for those specific types of projects and project requirements.

That’s why there are so many languages. Every language contains tradeoffs. There is no o

The problem is that I work on a variety of projects, from embedded systems to large applications, and many things in between. I use different programming languages for different projects precisely because of the specific strengths of those languages for those specific types of projects and project requirements.

That’s why there are so many languages. Every language contains tradeoffs. There is no one language that is ideal for all possible programming tasks. Attempts to create one have failed. Ada probably came closest, but it still has tradeoffs that don’t fit well into certain types of projects and requirements.

There are certain features I would add to certain existing languages, but one “ideal” programming language is not in the cards. Some tradeoff or other would cause it to be rejec...

Profile photo for Piers Hollott

I suppose it would look like a conflation of SQL and Scheme, with a bit of XPath thrown in for working with namespaces.

Profile photo for Jim Finnis

I have done this, because I was learning about modern languages at the time, and coming from a C/C++ background I didn’t trust them without knowing how the new clever stuff worked (notably garbage collection with cycle detection, and first-class functions with full lexical closure). Best way to learn something is implement it.

The language is called Angort. Why? No reason at all - I couldn’t tell you. It’s a random pair of syllables which popped into my head.

I already understood how parsing and code generation worked and didn’t want to play with them, and also wanted something very interactive

I have done this, because I was learning about modern languages at the time, and coming from a C/C++ background I didn’t trust them without knowing how the new clever stuff worked (notably garbage collection with cycle detection, and first-class functions with full lexical closure). Best way to learn something is implement it.

The language is called Angort. Why? No reason at all - I couldn’t tell you. It’s a random pair of syllables which popped into my head.

I already understood how parsing and code generation worked and didn’t want to play with them, and also wanted something very interactive - so I started with a very simple base: Forth. Writing a byte-code Forth-like interpreter is trivial, you can do it in a couple of hours. To that I added local variables and parameters (just for my sanity) and then collections with garbage collection (lists and dictionaries). Then anonymous functions, then lexical closure (solving the Funarg problem). That proved … tricky!

The language ended up being absurdly powerful. For example, the syntax for a list is [item,item,item…] except that’s not syntax. It’s just that the syntax is a side-effect of how the stack functions “[“ (called OP_NEWLIST internally ) and “]/,” (called OP_APPEND) work. Imagine you’ve got the code [1,2,3] - what it does is

  • [ pushes a new list onto the stack
  • 1 pushes 1 onto the stack
  • , pops 1 off the stack and appends it to the list now on top of the stack (leaving the list there)
  • 2 pushes 2 onto the stack
  • , pops 2 and appends to the list
  • 3 pushes 3 onto the stack
  • ] does the same as “,”

We now have the list [1,2,3] on the stack. There’s a bit of syntactic sugar in the parser for dealing with the empty list syntax [] but that’s all.

This means I also get Python-style comprehensions for free. If I want to make a list of the first 30 squares, I do this:

  1. [] 0 30 range each {i dup*,} 

Because I have first-class functions I could also do this:

  1. 0 30 range (dup *) map 

And the first class functions really do have closure:

  1. :mkcounter |:a| 0!a (?a dup 1+ !a); 

will return a function with no arguments whose value increments every time you call it:

  1. Angort version (c) Jim Finnis 2012-2017 4.5.0 
  2. Use '??word' to get help on a word. 
  3. 2|0 > :mkcounter |:a| 0!a (?a dup 1+ !a); 
  4. 2|0 > mkcounter !F 
  5. 4|0 > ?F@. 
  6. 0 
  7. 4|0 > ?F@. 
  8. 1 
  9. 4|0 > ?F@. 
  10. 2 

There’s map/reduce too. Sum of the first thirty squares:

  1. Angort version (c) Jim Finnis 2012-2017 4.5.0 
  2. Use '??word' to get help on a word. 
  3. 2|0 > 0 0 30 range (dup *) map (+) reduce 
  4. 2|1 > . 
  5. 8555 

So I wrote it, played with it a bit and forgot about it - until I was working on my final year undergraduate dissertation and had to implement a Brooks subsumption system for a robot: Subsumption architecture - Wikipedia

This turned out to be really messy in most languages, because it involves processing data flows in a fairly complex way. So I tried it in Angort and it just flowed off my fingers. It was a beautiful experience.

So a language which started out as an exploratory exercise actually turned out to be quite powerful, and very useful. It’s got a very easy mechanism for writing C++ plugins, and I have a lot of native C++ libraries now. I’ve used it a lot in my PhD work for data analysis and visualisation. It’s probably my favourite language.

It probably shouldn’t be. It’s still got a few bugs, it’s deeply unsafe, and is very old-fashioned. But I love it. It’s mine and fits how my broken, slightly elderly brain works.

Profile photo for Philip Newton

I read the CONLANG-L mailing list (for fans of constructed languages) for several years — and picked up a fair bit of what I know about linguistics from there.

So I’ve occasionally toyed with the idea of creating a language of my own.

There have been a couple of attempts of taking an existing language and pushing it through some sounds changes to look different, but nothing serious — I lack the creativity to make a “nice” language.

But two things that have always been on my wishlist for if I ever did sit down to make a language of my own are that it would have a vocative case and a dual number. I

I read the CONLANG-L mailing list (for fans of constructed languages) for several years — and picked up a fair bit of what I know about linguistics from there.

So I’ve occasionally toyed with the idea of creating a language of my own.

There have been a couple of attempts of taking an existing language and pushing it through some sounds changes to look different, but nothing serious — I lack the creativity to make a “nice” language.

But two things that have always been on my wishlist for if I ever did sit down to make a language of my own are that it would have a vocative case and a dual number. I’ve always had a soft spot for those two language features.

In other words, nouns (especially names) would have a special form used when you are speaking directly to a person (like how in Slovak, “God” is Boh but when you’re speaking directly to him, “God!” is Bože!).

And nouns would have distinct forms not only for singular (exactly one thing) and plural (many things) but also for dual (exactly two things) — like how in Maltese, you have sena “(one) year”, sentejn “(two) years”, snin “(more than two) years”.

Profile photo for Anshul Raman

First, the alphabet would be an alphabet like the Latin one we use in English and not a syllabary or characters.

The spelling of the word and the sound of the word should be consistent and intuitive like Japanese and not at all like English.

All plurals would just be an extra sound added to the end of the base.

The sentence order would be SVO because that is just more intuitive in my mind.

Then, verbs would all have consistent rules with no exceptions. There would be no conjugations based on who the subject is, only based on past, present, and future. For example, I eat, you eat, he/she eat, we ea

First, the alphabet would be an alphabet like the Latin one we use in English and not a syllabary or characters.

The spelling of the word and the sound of the word should be consistent and intuitive like Japanese and not at all like English.

All plurals would just be an extra sound added to the end of the base.

The sentence order would be SVO because that is just more intuitive in my mind.

Then, verbs would all have consistent rules with no exceptions. There would be no conjugations based on who the subject is, only based on past, present, and future. For example, I eat, you eat, he/she eat, we eat, you all eat, they eat for present. And past might only add Ed at the end and that would be the case for all verbs. I eated, you eated, etc. And future could be the same as English with the 'will' modifier in front of a present tense verb, I will eat, you will eat. Then, continuous tense would use the verbs to be to indicate tense and would only modify the continuous verbs just like in English except to be would follow the rules above. For example, I is eating, you is eating, etc. for present continuous, I ised eating and you ised eating, and I will is eating, you will is eating, etc. for future. Same case with present perfect. I would have commands just all use the present tense verb with an added o on the end like in Hindi. Eato, runo, etc

These are just a few things I would have. My list could go on and on, but here's a short example of what this might look like.

I'm using Japanese words since their spelling and sounds make sense. Boku = I, Kimi = you, Kare = he, boku tachi = We, Kimi tachi = you all, and Kare tachi = they. Taberu = present form of to eat. Ringo = apple. Su at the end of a word makes it plural ( not actual Japanese, just my perfect language). With before a present verb makes it future. De at the end of a present verb makes it past. Gu at the end of a verb makes it continuous. Iru= to be.

Boku taberu Ringo - I eat the apple

Kimi taberu Ringo - You eat the apple

Kare taberu Ringo - He eats the apple etc

Boku taberude ringosu - I ate the apples

Boku wiru taberu Ringo - I will eat the apple

Boku irude taberugu Ringo - I was eating the apple

Boku wiru iru taberugu Ringo - I will be eating the apple

Taberuo ringo - Eat the apple

This was just a short example of what my ideal, most intuitive form of language would look like. This may seem confusing since it really is different from any real language out there, but in my mind, these things would make a language much easier to learn with more consistency, efficiency, and intuitiveness.

Profile photo for Callum Sutherland

Okay, so I’m taking the question as creating both a language and a writing system. I’ll start with the language…

I reckon that (plurals aside - they’re relatively logical but a pain in the ass), Swedish is the most simple language I know in terms of structure. The definite article as a suffix is something I would start with, however the common Romance nouns would be easier to learn. German pronunciations and compound nouns would be another practical addition - with limits, of course! No genders, of course - nothing is more annoying in a language. No accents or umlauts or anything, just simpler

Okay, so I’m taking the question as creating both a language and a writing system. I’ll start with the language…

I reckon that (plurals aside - they’re relatively logical but a pain in the ass), Swedish is the most simple language I know in terms of structure. The definite article as a suffix is something I would start with, however the common Romance nouns would be easier to learn. German pronunciations and compound nouns would be another practical addition - with limits, of course! No genders, of course - nothing is more annoying in a language. No accents or umlauts or anything, just simpler that way. Possessives can be added as an extra suffix, in this case ‘a’, unless the word ends in a vowel, in which case it will be a ‘s’. Tenses would simply be a different sound - all present tense words have ‘ah’ sounds (‘hat’ = has) and past has ‘eh’ sounds (‘het’ = had). Future will utilise an ‘ooh’ sound as the equivalent of ‘will’ - (‘u hot’ = will have - despite the unfortunate connotations in English) and the perfect tense. Perfect tense can vary depending on noun, probably based upon the Romance or Germanic perfect tense. To negate something, ‘not’ would be used much like Swedish ‘inte’ or French ‘pas’. Mostly English pronunciations will be used, except for ‘u’ as ‘ooh’ and ‘j’ as ‘yuh’. There will be no passive voice, thus cutting down on pesky verb conjugations. Plurals will be, and I repeat, standard! No bloody irregularities! Again, a suffix: ‘en’ or ‘men’ if the word ends in a vowel.

Basic words:

And = et (prounounced as ‘ehtt’)

To have = hot, Has = hat, Had - het

To do = ton (pronounced as ‘tawn’), Doing = tan, Did = ten.

I = Je (pronounced as ‘Yeh’ - a schwa.)

You = Du (pronounced as ‘doo’)

We = Ve (pronounced as ‘veh’)

They = De (pronounced as ‘deh’)

My = Me (pronounced ‘meh’)

Good = Br

(1 = En), (2 = Do), (3 = Tre), (4 = Ver), (5 = Sin), (6 = Sex), (7 = Set), (8 = At), (9 = Nef), (10 = Zen)

I’ll cover the conjugation of ‘to be’:

Infinitive: Be = vor (pronounced ‘vawr’)

Present tense: (Is = var), (Am = varo), (Are = varen).

Past tense: (Was = ver), (Were = veren).

There are no past or present participles as there is no passive voice and enough workarounds to make it okay. I’m not a linguist, so this could be a mistake!

Say we take a common term like ‘Man’ - in our Swederomantic lingo, ‘Hom’. The man = Homman. Men = Hommen. The men = Hommanen. A man = En hom.

Sentence structure would be much like German/Swedish: ‘En hom hat en per grand.’ A man has a tall father.

Compound nouns are a simple, logical way to create new words from a relatively small vocabulary. Whilst reminiscent of Newspeak, the language will develop and loanwords will increase the vocabulary. ‘Hommena per grand hat en tradrotta.’ The man’s tall father has a squirrel - ‘tree rat’. (Trad = tree), (rotta = rat).

Using verbs: “Je varo en hom.”-I am a man. “Je ver en hom.”-I was a man. “Je u vor en hom.”-I will be a man. “Je hot en tradrotta.”-I have a squirrel. “Je hot tradrottamen.”-I have squirrels. “Je ver tan dansan.”-I was doing the dance.

WRITING SYSTEM

I reckon the easiest writing system to learn would be syllabary or alphabetic, but the practicality of the Hangul syllabary impressed me enough that I can use it as a model: the characters are made up of overlaid symbols/shapes which each represent a sound - a square represents a sound made with the lips, for instance, while a bar above it indicates a plosive - indicating a ‘p’ sound. However, the aesthetic of Hangul characters doesn’t appeal to me, so I’ll create a similar system using rune-like symbols.

Taking the word ‘Homman’:

A vertical post will be the base, an horizontal line a consonant and a downwards diagonal a fricative, with variations for each, plus other shapes for vowels. The first syllable, ‘hom’, starts with a sound from the back of the mouth which is a fricative - a /h/. Because it is at the back of the mouth, the downwards diagonal begins from the left side of the post, at the very top as it is the first sound in the syllable. Below that, a circle is positioned in the centre of the post - the circle representing lip shape for an ‘aw’ sound and the central position signalling the central mouth sound. Below that, a horizontal line protrudes from the right of the post, with a small dot attached to the end. The horizontal line indicates a consonant, the right hand side position shows a sound forward in the mouth, and the small dot indicates closed lips - an /m/ sound. The next post: a triangle is on the right side at the the top. This indicates an ‘ah’ sound - forward in the mouth and slightly upward, almost nasal. Below that is a horizontal line from the right side, ending with a upward line then a circle - indicating a forward sound with tongue on the roof of the mouth and circled lips.

I may add pictures but it is otherwise as described.

The disclaimer: I am not a linguist, I just have an interest. If any linguists have any suggested ideas or edits, I’m open to expert suggestions and help! :)

Profile photo for James R. Twine

What would be your ideal programming language look like if you could design one from scratch? What would be different/better about it compared to existing languages (C/C++, Python etc.)?

It would have a syntax like C# and memory handling like Rust.

The language’s objects would have support for built-in, thread-safe, message passing (queing) so that objects could pass messages to each another without knowing too much about each other (i.e. no explicit shared/base class or interface required).

Both dynamic and fixed (block/atomic) string types would be included as standard types. Both ANSI and Unic

What would be your ideal programming language look like if you could design one from scratch? What would be different/better about it compared to existing languages (C/C++, Python etc.)?

It would have a syntax like C# and memory handling like Rust.

The language’s objects would have support for built-in, thread-safe, message passing (queing) so that objects could pass messages to each another without knowing too much about each other (i.e. no explicit shared/base class or interface required).

Both dynamic and fixed (block/atomic) string types would be included as standard types. Both ANSI and Unicode would be natively supported.

Type information would be built-in, so that you would get C#’s is and as operators. On the fence about rich reflection-type capabilities, although I think a simple (runtime) metadata system would be a good idea (read: a was to add metadata to classes and libraries/packages and examine this metadata at runtime).

Library/package support built into the language and platform (think cargo).

Documentation features built into the language and could be built into libraries/packages.

Single-file support - no separate code and header files.

A rich standard library that is on par with .NET or at the very least C++ 23, allowing for code to more easily go multi-platform and have consistent and predictable behavior on those platforms.

Container types would have built-in support for degrading into or evolving from standard C-style binary/wire formats.

Misc other built-in features: extension methods, simplified (automatic and manual) parallelism and acceleration (GPU/CUDA), native XML and JSON types with serialization support, simple remoting of messages and interfaces (RPC),

Lastly, code would be compiled, not interpreted, and would NOT use whitespace for scoping (Goddess forbid! 😁).

Profile photo for Andrew Bromage

“Fashion is a form of ugliness so intolerable that we have to alter it every six months.” - Oscar Wilde

If I were to design a programming language, it would be to scratch an itch, to solve the kinds of problems that I need to solve and that I would want to use.

I tend to work in the high-performance computing space, being largely tasked with solving problems where conventional wisdom says that current hardware isn’t up to the job. I try to make it work. This means I have to think about all levels of the complexity stack, from individual bits to large-scale structures.

It would also have to be the

“Fashion is a form of ugliness so intolerable that we have to alter it every six months.” - Oscar Wilde

If I were to design a programming language, it would be to scratch an itch, to solve the kinds of problems that I need to solve and that I would want to use.

I tend to work in the high-performance computing space, being largely tasked with solving problems where conventional wisdom says that current hardware isn’t up to the job. I try to make it work. This means I have to think about all levels of the complexity stack, from individual bits to large-scale structures.

It would also have to be the kind of programming language that I could design, and that’s a very important consideration. I doubt that I could design a good dynamically-typed language, for example, because that’s not something that I generally value. If I think I need dynamic typing, such as for a high-level scripting layer, good dynamically-typed languages already exist (e.g. Erlang, Scheme, Smalltalk) that are better than anything I could come up with.

Basic principles

The core principles of this hypothetical language are:

  • The programmer and compiler need to work as partners. The programmer’s main job is to express intent, and their secondary job is to tell the compiler what it can’t work out for itself with as little verbosity as possible. The compiler’s main job, beyond generating good code, is to give good feedback about what it understands in a way that helps resolve misunderstandings.
  • The language should be designed for programming in the real world, not a fantasy world. For example, the platform that our programs run on is actual hardware, not software. And it is especially true that programs don’t run on a specific language implementation. If a program needs to be coupled to a language’s implementation details, something has gone deeply wrong.
  • You also must be able to work at the abstraction level appropriate for the problem that you’re trying to solve at this moment.
  • The language must give you guarantees: safety guarantees, performance guarantees, and so on. Ideally, the programmer should be able to define their own guarantees and the compiler will check them. But common guarantees must be available without boilerplate; I want rapid development sometimes and anal-retentive software engineering safety sometimes.
  • Easy things should be easy, common hard things should be straightforward, uncommon hard things should be possible.
  • A programming language cannot afford to be fundamentalist about anything. One-size-fits-some is no way to build complex systems. It’s fine to force a programmer to think in new ways to use a new programming language, but you must never force them to think in only one way.

That last point is extremely important, and can be illustrated with a few examples:

  • “Everything is an X” (where X could mean object, function, whatever). Sorry, no. I can guarantee you that in the real world many (if not most) interesting things aren’t X. And if everything is an X, then nothing is.
  • Automatic garbage collection. When it’s a good fit, or even an okay fit, it’s wonderful. When it’s a bad fit, it’s beyond horrible. In the real world, there is no single “right way” to manage memory.
  • Bytecode VMs, JIT, dynamic heroic optimisation. It might save you a little development time, at the cost of an opaque performance model, or even worse, an inherently unpredictable performance model. Saving a little bit of the programmer’s time to waste a little bit of the customer’s time isn’t necessarily a good tradeoff.

So as you can see from these examples, a lot of current trends in programming language, while they have advantages, do cause problems in real programs. And the way these things typically work out is that often (even most of the time) the disadvantages don’t matter, but when the disadvantages do matter, they are not a mild inconvenience, they are a severe showstopper bug.

One of the worst mistakes you can make in any kind of technology design is to say “this is a good thing, so let’s turn it up to 11 and make people do it all the time”.

There are almost no programming language features which are bad to have, but conversely, there are almost none that are good to require.

Ergonomics

I would try to avoid Wadler's Law. Syntax matters, but syntax should ideally be designed last. The good parts of the syntax should not get used by features that turn out to be less important. (This is, incidentally, both the main strength and main weakness of C++. C++ wouldn’t work without C compatibility, but it does mean that all the good syntax is taken by C.)

The language’s type system has to be based on mathematics as far as possible: theorems-as-types, data-structures-as-algebras, proper-classes-are-not-types, and so on. Why mathematics? Because it’s understood, and you already know that you can reason formally about it. In particular, we need to be able to capture relationships between types in the form of many-sorted algebras. I don’t know precisely what this would look like, but I know it’s important because I often miss having it.

There must be strong compile-time safety guarantees by default, such as type safety. But more importantly, it should be easy and quick for programmers to define their own compile-time guarantees (e.g. never mixing a “row coordinate” with a “column coordinate”). It should be especially easy to make “small” abstractions (e.g. wrapping an integer into something type safe) which are essentially free at run-time.

I would pay close attention to namespaces and flexibly porting names across different namespaces, which is something I’ve talked about elsewhere.

It would be nice to have seamless support for working with scripting layers: reflection, marshalling/demarshalling, that sort of thing.

Scale

The language has to work at all scales.

I should be able to write straight-line low-level code where I can more or less see the assembly language that would be generated. I must be able to “feel” the bits underneath. Ideally, there would be intrinsics for instructions which most common platforms have but can still be emulated on platforms which don’t (e.g. bit-hacking instructions, SIMD arithmetic).

I should also be able to think in terms of data structures and algorithms, and the properties that they satisfy.

I should also be able to think in terms of the problem domain. Unless you’re talking about simulation, most things are not “objects” in the Simula/Grady Booch sense, and any programming language that thinks everything is an object is deluding itself. So this is not something that the language would encourage. Nonetheless, I would like to think in terms of domain-level concepts where appropriate. The ability to embed a DSL without additional tools would be nice.

I should also be able to think in terms of components and subsystems. So the language will have abstract interfaces with inheritance, native support for dynamic shared objects, and so on.

The actor model is increasingly important these days, because computers are looking more and more like networked CPUs, even within in one device. So I’d be looking hard at Erlang, Smalltalk, and people who are using this programming model in other languages.

Performance

A language which doesn’t have support for raw performance is a scripting language. There’s nothing wrong with that, but that’s not the space that I work in.

A compiler or interpreter should not have to be installed or shipped to run a program. It’s fine if this is an option, but it should not be a requirement.

The language must provide some performance and optimisation guarantees. Something that consistently bugs me about C and C++ is that there is a lot of “undefined behaviour” in the standard, put there so that you don’t prevent certain optimisations from happening. Where’s the guarantee that the optimisation will happen? It’s the worst of both worlds. (And before you ask, consider the guarantee in Scheme that tail calls are always optimised…)

On the other hand, as noted above, a program should never be coupled with the implementation’s internals (be it the compiler internals, a virtual machine internals, or what have you), and especially not for performance reasons. If you can’t express a guarantee mathematically, don’t give it as a guarantee at all.

Conclusion

The language I want only vaguely resembles languages that currently exist. It seems a bit modern. And yet, I kind of want to step backwards to a time when people didn’t think they knew how to design programming languages. As an industry, we could all do with a bit more humility.

Profile photo for Tikhon Jelvis

I actually designed a little language for fun at one point, and it was influenced by JavaScript and Lua and Scheme and Haskell and, well, that was a mistake. It's all too complicated! I ended up having weird corner cases and shortcomings, even though my intentions were good.

The real issue? The design was arbitrary, and parts ended up not fitting together well. It felt like I started building up a circle in two directions and then the ends didn't quite meet up. There were bugs not in interpreter but in the actual language semantics. And what do I do now?

I also sometimes have this problem when

I actually designed a little language for fun at one point, and it was influenced by JavaScript and Lua and Scheme and Haskell and, well, that was a mistake. It's all too complicated! I ended up having weird corner cases and shortcomings, even though my intentions were good.

The real issue? The design was arbitrary, and parts ended up not fitting together well. It felt like I started building up a circle in two directions and then the ends didn't quite meet up. There were bugs not in interpreter but in the actual language semantics. And what do I do now?

I also sometimes have this problem when cutting bagels.

After that exercise, I see the same issues in other languages. Even popular ones! The whole Python scoping malarkey? It must have seemed like a reasonable idea at first—after all, why do we need to declare variables explicitly?—but it just didn't quite get there. And the same with automatic coercions in JavaScript or PHP: it starts out seeming reasonable, but in the end there is no way to make it consistent.

This last one is a particularly appropriate illustration. We can come up with a good scheme for just going between strings and numbers but, as far as I could see when playing with the same design space, there's no natural or consistent way to extend it to other types. The web of conversions gets too large and becomes either unintuitive or inconsistent. We might want to convert 0 to False and False to "False", but probably not 0 to "False". All of a sudden, whenever we use this "implicit" feature, we have to really carefully keep track of what the underlying type really is at any given moment—which completely defeats the point of making these conversions automatic! I ended up completely giving up on the whole idea. It's just not workable.

All these languages—mine included—are designed in a haphazard, arbitrary fashion. They end up as collections of features that their creators liked. Maybe some, or even all, of these ideas are neat, but then they don't quite work together, or have weird corner cases, or are less expressive than they could be. The language as a whole suffers.

If I were to design another language, I wouldn't want to start from a foundation like that.

Instead, I would want a base that's small, simple and consistent from the getgo. I would start either from a rare handful of minimal, carefully designed languages (Scheme and SML spring to mind) or, more likely, build directly on top of an existing formalism like some variant of the λ-calculus.

The λ-calculus was not designed as a practical programming language, so it can sacrifice accessibility and readability in favor of simplicity and consistency. It would let me build up the core of my language in a direct, natural way with well-defined semantics. Then I could layer on a friendly syntax and higher-level features in a superficial way, without affecting the underlying semantics.

One particularly nice thing about the λ-calculus is that it allows me to look at language features in isolation. If I have an idea, I can first test it out on a very bare-bones λ-calculus, without needing to worry about the rest of my language. Isolating features like this makes it easier to consider all their possible permutations and to find ways to simplify them. It's also a great way of prototyping designs and getting the initial kinks out. After that, I would just fold them back into the language as a whole, looking at how they interact with everything else. This part, naturally, is quite tricky, but having it in a separate stage of the design process means that at least the initial draft of the feature is easier to do. Trying to work on features as part of the whole language the whole time makes them this difficult all of the time.

So I wouldn't start with an existing language but rather something as simple as possible. But this doesn't mean I won't take ideas and inspiration from other languages! Features from other languages would be approached the same way, by starting with a simplified model based on the λ-calculus. Moreover, a bunch of other useful features might end up as just syntax sugar or completely orthogonal to the rest of the language, which makes adding them in much easier. The nice thing about syntax sugar specifically is that as long as I'm content that the base features it desugars to are sane and consistent, I know the sugar is as well. No need to think about it separately—it's essentially a feature for free, at least from a language design point of view.

I'd still draw on the ideas of other languages I've used—or even just read about. I just wouldn't start from any of them.

Finally, I should note that some variation of the λ-calculus is not the only option for a simple underlying model. Rather, I would be happy with anything sufficiently simple and elegant. The reason λ-calculus is attractive is because even more complex typed variants contain very few actual constructs and come with a very straightforward evaluation rule; it also has close ties to mathematical logic and other mathematical structures that pop up all over the place, lending it a Platonic air of legitimacy. But it's not the only mathematical system with these properties, and seeing a language evolve from something else like a different strand of logic or something more algebraic in nature would be interesting.

Profile photo for Quora User

I cannot honestly say I’ve got far in creating languages, but I’ve started a few and made plans for many more.

Most of my conlang ideas are for experimental languages, intended to stretch what is possible in language beyond what is familiar from the world’s natlangs, or even most of its conlangs. Either I’d like to demonstrate that something is possible when most people would think it’s not, or I’d just like to see how something turns out if it follows a certain principle or design. Many such ideas involve taking some language feature to an extreme or attempting a design that’s challenging or d

I cannot honestly say I’ve got far in creating languages, but I’ve started a few and made plans for many more.

Most of my conlang ideas are for experimental languages, intended to stretch what is possible in language beyond what is familiar from the world’s natlangs, or even most of its conlangs. Either I’d like to demonstrate that something is possible when most people would think it’s not, or I’d just like to see how something turns out if it follows a certain principle or design. Many such ideas involve taking some language feature to an extreme or attempting a design that’s challenging or difficult.

Such ideas include:

  • The ‘opposite’ grammar to English
  • A whole suite of languages with a common phonology and vocabulary for purposes of experimenting with different grammars, e.g.:
    • All verbs are transitive
    • All conjunction content is affixed to verbs
    • All dependents and particles are incorporated within heads and content morphemes
    • Verbs become nouns and nouns become verbs
  • Combining all lexical information in one syllable/morpheme, and all grammatical in a second syllable/morpheme, in each word
  • Combining the simplest popular conlang, Toki Pona, with the most complex, Ithkuil
  • European auxlang style combined with polysynthetic grammar, inspired by Poliespo but made really functional and attractive
  • The most awkward a language can be in irregularity, inconsistency, redundancy, perversity, complication, impracticality and confusion
  • Reducing all meaning distinctions down to a series of binary choices represented by only two possible syllables/morphemes
  • Combining subject, verb and object in one morpheme with no separation of the elements
  • A language purely for static situations, with no verbs but with lots of adpositions
  • Trivocalic roots, like Semitic triconsonantal ones but with vowels rather than consonants, and consonants forming the inflections
  • Expressing inner experience rather than supposed objective reality
  • A philosophical language that doesn’t use a priori vocabulary
  • Attempting to enable all known forms of grammar in the world’s natlangs
  • A pasigraphy that similarly expresses all different grammatical patterns and represents any language’s meaning
  • A pasigraphy that uses pretend phonographic symbols which are actually unpronounced and combined to create words

Besides these I have had some ideas for other kinds of conlang besides experimental ones. There are at least a few alternate/geofictional artlang ideas, such as:

  • An Austronesian language set on a fictional island in the South China Sea
  • A language isolate in central Europe, similar to Hungarian, having arrived by migration from Asia and in an unknown family (hence lexified a priori yet with realistic influence from other European languages)
  • A language descended from an imaginary sister of a little known ancient non-Indo-European language such as Etruscan, Iberian, Minoan or Proto-Basque
Profile photo for Andrei Manu

The "market" in programming languages is very tough. There are literally hundreds of languages, out of which only tens are used. Of course, one might think of little things to change in some of the languages to suit them better, but as languages are Turing Complete, they can do almost any computation.
The differences between languages are mainly in how and how fast they do said computations.
Usually when one wants to enhance a part of a language, one creates a library.
So, to answer your question, I don't think we need a new programming language.

Profile photo for Valdis Klētnieks

If you were to tasked to create your ideal programming language from scratch with all the features, syntax, and design philosophies of your liking; which current programming language(s) would it resemble the most?

*One* ideal language?

Isn’t going to happen. That’s because languages are trade-offs. And the trade-offs often conflict.

I use C for a lot of things specifically because it’s a low-level strongly-typed compiled language, which leads to its strong points - easily optimized and fast code.

I use Perl for a lot of things because of features only possible because it’s a dynamically-typed inte

If you were to tasked to create your ideal programming language from scratch with all the features, syntax, and design philosophies of your liking; which current programming language(s) would it resemble the most?

*One* ideal language?

Isn’t going to happen. That’s because languages are trade-offs. And the trade-offs often conflict.

I use C for a lot of things specifically because it’s a low-level strongly-typed compiled language, which leads to its strong points - easily optimized and fast code.

I use Perl for a lot of things because of features only possible because it’s a dynamically-typed interpreted language.

You try to mash them together, and having to support dynamic typing so it will be able to do Perl-like things will trash the reasons for having C-type stuff, and having the C-type stuff puts a big crimp its ability to do Perl-like stuff.

If you look at previous attempts to design “one language for everything”, you notice that neither PL/I or Ada is in widespread use - and neither one tried to implement functional programming, or Lisp-style paradigms, or things from the Smalltalk or Forth world. Try to cram all of *that* in as well as what PL/I and Ada *did* try to cram in, and you get this:

Profile photo for Dem Nisbet

I would make it structurally like Arabic, with the three letter root system, but less guttural, so it would sound like Persian. That would be hard to achieve, but that is what I would be after. I didn’t say I was actually going to do this.

Profile photo for Jim Grossmann

All the languages I design are for my own amusement. Their features vary so I don't get bored. One was made of a bunch of trivia about Germanic languages glued together with some rules of my own. Another had mood and grammatical relationships conveyed by clause-initial particles. Another had seventeen cases, most of which I invented independently, the choice of which is determined by which one of the twenty classes that verbs fall into. Another was inspired by my friend's remarks about Russian verb prefixes and features from other languages. Another, which I'm working on now, was de

All the languages I design are for my own amusement. Their features vary so I don't get bored. One was made of a bunch of trivia about Germanic languages glued together with some rules of my own. Another had mood and grammatical relationships conveyed by clause-initial particles. Another had seventeen cases, most of which I invented independently, the choice of which is determined by which one of the twenty classes that verbs fall into. Another was inspired by my friend's remarks about Russian verb prefixes and features from other languages. Another, which I'm working on now, was designed to be stranger than the rest.

In the latter language, verbs aren't marked for tense but for subject status (i.e. extant at the time of the utterance, inextant at the time of the utterance, perennial, imaginary, and unknown at the time of the utterance).

Noun phrases (or adjective phrases in copula complements or verbs in clauses without noun phrases) are marked for clause-type. For reasons that I don't have time to explain, this makes it easy to delete constituents without losing information.

Nouns and pronouns are marked for three grammatical numbers: unal (YOO-nul, i.e. singular/singulative), plural, and confundive (kun-FOON-div, i.e. non-count, collective, plural for aggregates of identical objects, plural for things/beings that typically occur in groups, and neutral).

Lone and subordinate clauses in a sentences have the same grammatical forms.
Relationships among the clauses are marked by specially inflected intermediate verbs.

Many adpositions have converse meanings depending on whether they are used as prepositions or postpositions. So "in the box" would be literally be "in the box," but "that the box is in" would literally be "the box in."

Generally speaking, I spend most of my time playing with clause structure and morphology.

Thanks for the A2A.

Profile photo for Quora User

Ipsnick dooplment agurdicly obsnard ormenal ops. Dow slpischen aarmont oplle ops. gRicdmount ozmarqle, ornomanate ops. Grok?

Profile photo for Murphy Barrett

I don’t think I’d create a language from scratch, because everything I know about language comes from real languages. Frankly I’d just use English as a base and make some modifications. So, how would I change English?

  • Clusivity: English only has one word for “We”. Languages with clusivity have two words for “we”, one that include the person being spoken to, and one that excludes that person. So if I were to say to you “We(I) are going to the store”, then you know that you, John, and I are going to the store. But if I say “We(E) are going to the store”, then you know that only John and I are go

Footnotes

I don’t think I’d create a language from scratch, because everything I know about language comes from real languages. Frankly I’d just use English as a base and make some modifications. So, how would I change English?

  • Clusivity: English only has one word for “We”. Languages with clusivity have two words for “we”, one that include the person being spoken to, and one that excludes that person. So if I were to say to you “We(I) are going to the store”, then you know that you, John, and I are going to the store. But if I say “We(E) are going to the store”, then you know that only John and I are going.
  • Agglutination: Some languages like Russian and German allow you to form words by simply combining roots, where English uses multiple words or hyphens. English already sort of allows for this, but it’s not exactly proper. However, I think it’s useful when describing things with a sort of permanency, while more temporary ideas or things can retain the hyphen structure. For example, submachinegun ought to be one word, rather than sub-machine gun. In German you find words such as beerhaus or “beer house”. While we call it a bar, it makes sense to me that beerhouse ought to be one word.

Original question-If you were to design a language from scratch, what features would it have?

Footnotes

Profile photo for Quora User

C is lovely, but I’d like to make it less portable.

So imagine a version of C with a set of global cache arrays corresponding to the physical caches on your processor, and the ability to assign values to individual cache lines. Most of the time you’d want to let your processor firmware manage your cache, but when necessary you could lock down some subset of cache lines and manage them explicitly.

Why would such a thing be useful? In high performance computing we often end up having to fake out the compiler in order to fake out the hardware prefetcher. Language support for cache management (and t

C is lovely, but I’d like to make it less portable.

So imagine a version of C with a set of global cache arrays corresponding to the physical caches on your processor, and the ability to assign values to individual cache lines. Most of the time you’d want to let your processor firmware manage your cache, but when necessary you could lock down some subset of cache lines and manage them explicitly.

Why would such a thing be useful? In high performance computing we often end up having to fake out the compiler in order to fake out the hardware prefetcher. Language support for cache management (and the assembly and firmware support to make that happen) would remove two black boxes that we currently have to program around.

Profile photo for Tom Graves

Original question:

Should languages be conceived with the expectation of being succeeded by a language better supporting paradigms added during the language's lifetime?

This question does not make sense. Languages are not conceived. We really do not know how human languages originally came to be, but they are now a natural part of human existence. Languages are culturally transmitted from one generation to the next. It is a subconscious process. People in nature have no “expectation” of their language nor even that the paradigms (I take you means structure) exist, it is just part of what is in t

Original question:

Should languages be conceived with the expectation of being succeeded by a language better supporting paradigms added during the language's lifetime?

This question does not make sense. Languages are not conceived. We really do not know how human languages originally came to be, but they are now a natural part of human existence. Languages are culturally transmitted from one generation to the next. It is a subconscious process. People in nature have no “expectation” of their language nor even that the paradigms (I take you means structure) exist, it is just part of what is in their reality. As civilizations advanced and writing arose, then there was an awareness of grammar, but languages continued to evolve naturally beyond the control of human consciousness. Even the attempts of many major languages to control how people use the language (like with French) fail miserably in actual practice. And you really cannot actively add grammatical structures beyond the structures that are already used, or evolving out of them. Try to talk English like an SOV language and then get your friends to do it and then get the rest of the world’s English speaker to do it. It is not going to happen. I language English speak order SVO with, because natural that is, and engineering language control consciousness beyond is! So the simple answer is “no”.

Profile photo for Noel Leong

Something like what shown in Arrival

Profile photo for Greg Saylor

For me these would be on the short-list:

  1. No “exceptions”. If baffles me as to why these exist in most languages, especially duck typed ones, when they exist in Java for such an obvious reason that is specific to it and maybe a couple of other specs.
  2. It would need to have robust and easy to reason concurrency.
  3. Error handling would need to very explicit and convenient to interact with.
  4. Depending on the type of app I’m building it might be nice to have a garbage collected mode that can be turned off and utilize a different type of memory management. Though this may be too difficult to do in a single

For me these would be on the short-list:

  1. No “exceptions”. If baffles me as to why these exist in most languages, especially duck typed ones, when they exist in Java for such an obvious reason that is specific to it and maybe a couple of other specs.
  2. It would need to have robust and easy to reason concurrency.
  3. Error handling would need to very explicit and convenient to interact with.
  4. Depending on the type of app I’m building it might be nice to have a garbage collected mode that can be turned off and utilize a different type of memory management. Though this may be too difficult to do in a single language spec?
  5. Functions (presuming the spec has them) would be first order types
  6. It would be statically typed
  7. It would be easy to deploy a service and not have to deal a bunch of dependencies during deployment.
  8. The language spec would be very simple and concise.
  9. It would enable easy refactoring. <rant>Some may find this controversial but I believe we frequently have the optimal way of designing code and systems backwards. We paralyze ourselves trying to get the design right, figure out all the ways our code might be used. Put another way: we try to recognize patterns before we see them. It seems like if we don’t fret over that and instead have a language that lets us recognize patterns after we’ve seen them a few times, we’d be better off. A language that is easy to refactor helps with that. Although this may not apply in the future (??) I’d argue that dynamic languages fall flat on their face with this one and become magnets for technical debt.</rant>

For what it’s worth, based on my work with Rust and Go they come closest to this. I’m sure there are others I’m unfamiliar with. For example, just thinking about Haskell makes me ponder if I’m missing a whole lot of things that should have been listed.

Greg

Profile photo for David Hartill

Italian, but with much simpler verb conjugation (all verbs suffix on a stem for tenses only), and spelling more in line with other languages ch as loch &c.

And more Germanic words.

Profile photo for Courtney Nunn

I attempted one at one point called Emerald.

It was made to be like crystal. and follow rubys syntax. But it used the mono framework.

So in short a ducttyped language with a ruby like syntax without the need for DRM. or ironruby made by sane people

Profile photo for Joseph Foster

I won’t. Real languages that have naturally developed are plenty interesting without my wasting time on making one up.

Profile photo for David Kra

Python:

  1. Colonectomy. Get rid of the colon. I cannot figure out, once indentation is required, why is a colon also required at the end of the previous line?
  2. Slice = Scalar. somearray[start:end:step]= True. This syntax is fine if somearray is a numpy list, but not if it is a regular python list.
    • I submitted a formal request for this. In response it was explained why this is fundamentally not feasible.

Microsoft QuickBasic and successors:

  • Ambiguity whether a statement A: B is:
    • A call to already declared subroutine A and then a call to already-declared subroutine B or
    • A statement label A fo

Python:

  1. Colonectomy. Get rid of the colon. I cannot figure out, once indentation is required, why is a colon also required at the end of the previous line?
  2. Slice = Scalar. somearray[start:end:step]= True. This syntax is fine if somearray is a numpy list, but not if it is a regular python list.
    • I submitted a formal request for this. In response it was explained why this is fundamentally not feasible.

Microsoft QuickBasic and successors:

  • Ambiguity whether a statement A: B is:
    • A call to already declared subroutine A and then a call to already-declared subroutine B or
    • A statement label A followed by a call to already-declared subroutine B
  • Prohibited duplication of a statement label in different functions or subroutines within a compiland, even though it is prohibited to GOSUB to that label from a different subroutine.
    • It is prohibited to GOSUB DOONEB in subroutine B from within subroutine A. Yet it is also prohibited to have a label DOONEB in subroutine A.
    • I would rather have a label DOONE in each subroutine, and within that subroutine, the code can GOSUB DOONE.

APL and successors:

  • Allow syntax that provides lazy deferred evaluation. APL’s adoption was mostly stopped by Lotus 1–2–3. Its VisiCalc-like automatic recalculation (aka lazy or deferred evaluation) was a major desirable factor.
    • Provide a way for an APL array element to hold a formula and its current value.
    • Provide a way, e.g. ⎕RE←1 to switch to manual recalculation and back to automatic ⎕RE←0
    • Provide a way to recalculate as needed. ⎕RE

Thank you for asking and letting me vent.

Profile photo for Hanno Behrens

A hex editor or any way to get numbers into memory. With that I would write a little Assembler. That’s not hard to do. Primitive Assembly, that costs two to three hundred bytes. One can do that. It’s terrible work, writing that stuff on paper and doing all the calculations by hand, but I have been there. I have been at datalines to type in. Like 30 pages A4 tightly printed rows of numbers that we have been reading into memory on the C64, when we bootstrapped our tools. I mean we had nothing. We were kids with no money and we could not buy that stuff. So we invented it.

Then Assembly. Just Assem

A hex editor or any way to get numbers into memory. With that I would write a little Assembler. That’s not hard to do. Primitive Assembly, that costs two to three hundred bytes. One can do that. It’s terrible work, writing that stuff on paper and doing all the calculations by hand, but I have been there. I have been at datalines to type in. Like 30 pages A4 tightly printed rows of numbers that we have been reading into memory on the C64, when we bootstrapped our tools. I mean we had nothing. We were kids with no money and we could not buy that stuff. So we invented it.

Then Assembly. Just Assembly. I would do a lot of stuff with that, until I have a minimal working environment and put a bit of macro functionality into my Assembler and that. If you think you can bootstrap anything without Assembly, you have not been there. It’s a must. You need that.

And with that, I would build me all the other languages. The first thing would be C, I guess. I could press a C compiler maybe in, hm, 30k lines of Assembly? Absolutely possible, maybe even 15k lines, just to get that started. The original TCC from the IOCCC competition had 2.7k lines of C, the latest version was at 32k lines, that’s really not much. We have managed to put an Assembler in the C64 into less than 200 bytes, so, I guess, absolutely possible. I mean we had a C compiler on that thing in 8192 bytes of machine code or something.

It would take me half a year and I would have a working ANSI C environment. Then I would write Lua, 20k lines C or something like that. And more I don’t really need to create big projects. Half a year hard bootstrapping, I say. Possible. I have been there in the 80’s on our trusty breadbox.

Our little monitor, with a part of the Assembler decoder visual and a little test-program that I assembled for you.

So, if you want a new better, cleaner world with just one programming language, I’m not your guy. I would start the whole thing all over. I just would trash all the roads to nowhere and focus on the good ones.

Profile photo for Torben Ægidius Mogensen

Sure. That is more or less how it always happens.

But let me clarify: Invention is a process that involves several phases:

  1. Getting an idea.
  2. Exploring the idea without having a concrete design.
  3. Making a prototype design based on the experiences obtained during the exploration.
  4. Using the prototype for further exploration.
  5. Repeating step 3 and 4 until you have a more finished design.
  6. Re-implementing the design in a more robust and well-documented way.
  7. Send it out to the world.

Note that only steps 3 and 6 involve programming on a large scale. Step 4 also involves programming (in the new language), but typ

Sure. That is more or less how it always happens.

But let me clarify: Invention is a process that involves several phases:

  1. Getting an idea.
  2. Exploring the idea without having a concrete design.
  3. Making a prototype design based on the experiences obtained during the exploration.
  4. Using the prototype for further exploration.
  5. Repeating step 3 and 4 until you have a more finished design.
  6. Re-implementing the design in a more robust and well-documented way.
  7. Send it out to the world.

Note that only steps 3 and 6 involve programming on a large scale. Step 4 also involves programming (in the new language), but typically on a modest scale. Step 3 is typically done using an existing language, often one that allows easy prototyping of compilers or interpreters. Step 6 may involve either the same language used in step 3, but it could use the new language (so you bootstrap it using the prototype), or it could be a third language altogether, for example one that is available on many different platforms, as this allows the new language to be deployed on all these platforms at once.

But most of the actual invention is done inside your head.

About · Careers · Privacy · Terms · Contact · Languages · Your Ad Choices · Press ·
© Quora, Inc. 2025