It seems the order of the parent structure is still following the Anglo-saxon grammar even though lines and pharisees are Turkish , I would like to see something:
Fibonacci-Dizisi (n):
n 0'a eşitse:
dur.
değilse:
bu-sayıyı yazdır.
şu-sayıyı, (bu-sayı + şu-sayı), (n - 1) ile Fibonacci-Dizisi'ne devam et.
Ana-Akış: "Bir sayı girin: " yazdır.
Girdiyi oku -> girdi.
girdi'nin tam-sayı-hali:
Yokluksa: "Geçersiz sayı" yazdır.
Varlıksa (n): 0, 1, n ile Fibonacci-Dizisi'ni başlat.
Başlat: Ana-Akış.nevertheless, that is a good start, congratulations.
Hi all, Kip's developer here! I was going to wait until we had finished the playground and landing page before posting about the project more, but here's the browser-based playground we have so far (thanks to Alperen Keles) for anyone who wants to play with the language: https://alpaylan.github.io/kip/
(The work on JavaScript transpilation just started today and currently doesn't work, but running the language should mostly work, though it probably has bugs, which I'd love to hear about in the repo's issues!)
I studied Turkish for a few years and remember thinking it could make an interesting programming language (due to the grammatical/agglutinative features). I was gonna call it Ç, but I was never seriously going to make it. Happy to see someone went for it!
Ç is a brilliant name
"Kip (meaning "grammatical mood" in Turkish)"
I'm not sure what a grammatical mood is, so I tried a couple of well known translation services and got: kip == "mode". However big G did also manage "modal", "paradigm", "tense" and "module".
For my money: "tense". Just to confuse the issue, tense has several meanings in english! Here I think we are talking about a verbal tense:
https://www.bbc.co.uk/bitesize/articles/zh4thbk#zyh2s82
Tense can also be synonymous with emotion: dangerous/exciting and also as a measure: tension/tight.
In linguistics, tense is a verb conjugation to indicate temporal information, while mood is a conjugation to indicate various kinds of metainformation about the speaker's relationship to the information in the sentence. It's not as common a term as ‘tense’ when discussing English, because English doesn't conjugate for mood, but it is the standard word for describing some features of Turkish morphology such as evidentiality.
Automatic translators, while an impressive and convenient piece of technology, usually focus on providing a plausible gloss in the target language, so typically lose a lot of nuance. For looking up words a dictionary is usually a better bet; for example, Wiktionary has https://en.wiktionary.org/wiki/kip#Turkish with a link to the explanation of the English word as well.
Mood and evidentuality are two somewhat distinct concepts.
Mood denotes the informations factuality, if something is, could be, would be, certainly is so, or there may be moods for direct or indirect commands (tell him to come) and so on.
Evidentiality denotes how the speaker knows - you use different evidentiality if you have directly seen something, if somebody told you, or if you deduced it.
Then there is mirativity, which denotes how expected or unexpecred the information was.
I believe that turkish has all tree.
Oh you're right! I always thought evidentiality was a dedicated Turkish mood — but it's actually a particular use of a tense. TIL :)
> because English doesn't conjugate for mood
It does, but like some other English inflectional patterns the syntax is mostly vestigial.
All I ask is that the two of you be polite to each other has be in subjunctive mood; if it were indicative, it would be are instead.
Something that I find interesting is that, while conjugating verbs for mood is largely vestigial in English, the more general phenomenon of paying close attention to the relationship between the sentence and reality, the focus that mood expresses, is very much alive. It's just that it's mostly moved out of the inflectional system.
> It has constructs for a few different moods/modes[1], but no conjugation: the morphology used to form moods is borrowed from other verb forms (in your example, the bare infinitive) that were never (as far as I know!) dedicated mood conjugations.
Well, this is mixing an argument about the facts with an argument about the history.
On the facts this is a mood expressed by conjugating the verb. It obviously isn't an infinitive form because it's a finite verb. It is identical with the infinitive form, and this is a general rule of English (only observable with this one verb), but there's nothing stopping different forms from being identical, even identical by rule. In Latin the nominative and accusative case of a neuter noun are always identical.
languagejones has a good overview in this video
A grammatical mood indicates the modality of the verb, and some languages possess rich inventories of the grammatical moods. They are called differently in different languages, but mood is an established term in English.
English has indicative («go», «is going» etc), subjunctive / conjunctive / conditional («went» in «as if they went»), imperative («go!»).
German has two conditional moods – Konjunktiv I and II, for example.
Finno-Ugric languages have many more.
> English has ... subjunctive / conjunctive / conditional («went» in «as if they went»)
That isn't the English subjunctive.
You're correct that this construction expresses the same thing that another language might express by marking a non-indicative mood on the verb, but it would not conventionally be said to use a non-indicative mood. That went is a normal past-tense indicative verb and the modality is expressed by the whole structure of the clause, not just by the inflection of the verb.
In linguistics there's a whole set of parallel vocabulary where one set is for grammatical forms and the mirror set is for the semantics usually expressed by those forms. So you have grammatical "tense" and semantic "time" or grammatical "mood" and semantic "modality". You got the modality right, but not the mood.
Compare the conventional analysis that he will be there tomorrow expresses future time, but is not in future tense because there is no English future tense.
> That isn't the English subjunctive.
No, it is not a proper English subjunctive (a correct example would have been «as if they were» – past subjunctive) or «[we suggested] that they go».
I deliberately lumped subjunctive, conjunctive, and conditional together for brevity. Part of the problem is that many English speakers do not differentiate between subjunctive and conjunctive (conditional) and incorrectly label the latter as subjunctive, but that happens because English does not have a conjunctive (conditional) mood.
English subjunctive is translated into other Indo-European languages either as the conjunctive or indicative mood, as there is no 1:1 mapping in existence.
Question on some of the syntax. It's neat, and think the idea's cool. Would definitely be something if nothing else for security through obscurity. Is it even code?
However, for some of the number stuff, if you write something like:
(5'le 3'ün farkını) yaz.
(3'ün 5'le farkını) yaz.
How does it tell whether it is: 5 - 3 = 2, or
3 - 5 = -2 ?
Does it always just return 2 because of the meaning of "farkını" and the placement of 'le and 'ün? Like: (5 first, 3 second, difference) write, vs
(3 second, 5 first, difference) write ?
Google just gave back: Write (the difference between 5 and 3).
Write (the difference between 3 and 5).
Not especially familiar with Turkish, and mostly had to use translation, yet it looks like a language for defining math theorems? Number following "zero" shall be called "one", number following "one" shall be called "two". Or is that more just a feature of using natural language for the writing syntax?"fark" here takes two arguments, the first (the minuend) is in instrumental case (-le), the second (the subtrahend) is in genitive case (-in). Now, because of the suffixes of the cases, regardless of the order in which you give the arguments, the type system can figure out which one is supposed to be the minuend and which the subtrahend.
If it helps, you can think of it like named arguments where the name is inferred from the case.
Essentially you could write equivalent code as (vähennä 5:ttä 3:lla) in Finnish
How do you express |a - b| ?
(bu tam-sayının) mutlak-değeri, (bunun 0'dan büyüklüğü) doğruysa, bu, değilse, bunun -1'le çarpımıdır.
(5'in mutlak-değerini) yaz.
(-5'in mutlak-değerini) yaz.
You can try it in the playground.
Disclaimer: I grew up speaking Turkish, but never studied it. I think I can give a common-sense explanation, but can’t give a rigorous “proof” appealing to grammatical rules.
I read “(5’le 3’ün farkını) yaz” as “having 5, 3’s difference write” (of course this is not natural in English). Ie, you’re given 5, you want to take 3, and write the result. Likewise, “(3’ün 5’le farkını) yaz” would be “3’s difference, having 5, write”. Again we are given 5, and want 3’s difference. Because we’re starting with 5, i think there is no ambiguity in the operation to be done — start with 5, subtract 3.
Idk if that actually helps clarify it at all, maybe it gives some intuition
The Turkish sentence's expansion would be pretty much like the mathematical expansion of the expression order.
Okay there is an updated web page and playground now: https://kip-dili.github.io/
Fantastic work, an area I’ve always wanted to explore.
Sorry! It was too beautiful not to share it. But I'm sure you can do a show HN once you think is ready.
That's okay, thanks for sharing!
Woah this is AWESOME! I am going to have to take a look! Love the thoughts, doing something similar at https://logicaffeine.com/studio
Check out Logos lang, would love to chat sometime. love that you chose Haskell!
Those of a certain vintage might remember Lingua::Romana::Perligata: https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/L...
Got especially excited, since I also experimented on a similar idea a few years ago:
https://github.com/celaleddin/sembolik-fikir
Will check this out further in the following days. Thanks for sharing!
That's pretty cool! From what I can tell, it does a morphological guess based on the suffix. If you didn't have the apostrophe, it'd have issues with ambiguity (say "aşı", does it mean vaccine or does it mean "aş" in accusative case?) but the apostrophe solves that problem too.
My solution for this problem in Kip was to go all the way with the morphological analysis using TRmorph (https://github.com/coltekin/TRmorph) for it, and then resolve the ambiguities in type checking / elaboration. (Therefore Kip almost never needs apostrophes.) Whether it was worth it, I don't know, but it was a fun problem to solve. :)
I have been learning the language because my girlfriend is Turkish.
Now I can use my programming brain to fast forward the learning.
Amazing
Yep, this was a skillset combination I never envisioned. (am married to a Turk). Maybe a good reason to push past the intermediate plateau.
Not relevant to the language itself but to the grammar: https://languagelog.ldc.upenn.edu/nll/?p=73
Haha I can read some casual Turkish and this made my day!
Funny how the case system of Turkish is both strong and standardized enough for this to work well. I don't know any other language where flexible argument order would work so well.
> I don't know any other language where flexible argument order would work so well.
Any highly inflected language has such a property. Slavic languages, Sanskrit (or, more broadly, Indo-Aryan languages) are prime examples.
Speakers of Finnish and Hungarian will likely chime in and state something similar.
Finnish case markers vary a lot from word to word, because of not only vowel harmony but other features of the word stem, and consonant gradation which is a weird feature of Uralic languages.
For the subtraction example, some numbers would be 50:tä 5:llä and others 6:tta 3:lla. Of course you could encode for all those possibilities and successfully parse them, but it would feel weird for a compiler to reject an expression because it's ungrammatical Finnish.
Also it would feel weird if you first write (vähennä muuttujaa 256:lla) but then realise you made an off-by-1 and have to change it to (vähennä muuttujaa 255:lla) but that doesn't compile because it should be 255:llä, so you have to remember to change two things.
But on the other hand, that's just how it is to write in Finnish, so in prose we don't really think about it. In natural language, it's normal to have to change other stuff in a sentence for it to continue making sense when you change one thing.
> I don't know any other language where flexible argument order would work so well.
What kind of sample size is that? A case system and flexible argument order are largely the same thing.
Note also that flexible argument order is a robust phenomenon in English:
1. Colonel Mustard killed him in the study at 5:00 with his own knife.
2. Colonel Mustard killed him at 5:00 in the study with his own knife.
3. Colonel Mustard killed him in the study with his own knife at 5:00.
4. Colonel Mustard killed him with his own knife at 5:00 in the study.
5. Colonel Mustard killed him at 5:00 with his own knife in the study.
6. Colonel Mustard killed him with his own knife in the study at 5:00.
But if you insist on looking in other languages, there's a famous Latin poem beginning Quis multa gracilis te puer in rosa perfusus liquidis urget odoribus grato, Pyrrha, sub antro?
Translating this as closely as possible to a one-word-for-one-word standard, it says What slender boy soaked [in] liquid odors presses you among many rose[s], Pyrrha, beneath [a] pleasant cave?
(Notes: rosa is singular for unclear reasons. There is nothing corresponding to the in of "in liquid odors"; the relationship between the odors and the soaking is expressed purely by case. There is also nothing corresponding to the article in "a pleasant cave"; Latin does not mark definiteness in this way. Location inside a cave is expressed with "beneath"; compare English underwater.)
Anyway, the actual word ordering, using this translation, is: What many slender you boy among rose[s] soaked liquid presses [in-]odors pleasant, Pyrrha, beneath [a-]cave?
I've heard that Russian poetry is given to similarly intricate word orderings.
Yeah sure there are other languages where the cases allow flexible argument ordering. I should have written "another language" not "any other language" because I meant the languages I know. I can see how it'd work in Latin. Though poetry takes a lot of license with language, so by quoting from poetry, we're at the extreme end of what a language can do. From what little I remember in Latin there would be examples where one couldn't distinguish the cases.
The only variation in your English examples is with the prepositions. English is a language where you just do not get that kind of flexibility. Unless, again, you do poetry. Can't even put the inflected pronoun first even though it would be unambiguous:
Him Colonel Mustard killed.
Let's look at this contrived example: The policeman bites the dog.
Notice how in English I can't reverse them easily. Have to get creative: The dog the policeman bites.
Stilted and prone to get misunderstood isn't it? In German, this is possible: Den Hund beisst der Polizist.
Though if you do that, people think you made a mistake and will misunderstand you. The cases are rather weak in German. No comparison to Turkish: Köpeği ısırıyor polis.
They do it for emphasis as part of everyday speech. You can put the subject first or last or in the middle and there is no confusion. Though admittedly that example is stretching it :-)Clicking the link with a prejudice in my mind, I found the definitions cleverly clean and easy to understand. I would be pleased to see a German version of it, just to have a good laugh.
Yep. I was expecting to see an existing language (usually Rust) with keywords swapped with Turkish translations, but no, this is actually really nice.
with AI every country can migrate development to a programming language that reflects the diction of their unique ethnolinguistic traditions, it's very empowering
Reminds me a bit of Lingua::Romana::Perligata.
Yes, that's one of my inspirations! I'm writing a short paper about Kip and I'm citing Perligata there for sure. The closest modern non-English programming language I know that also uses grammar features is Tampio, for Finnish. https://github.com/fergusq/tampio
I love when the ‘language’ part of programming languages doesn't get left behind :) Very neat!
Better call it "Kanak".
----
I love this kind of stuff - non-English programming languages, particularly when they utilise language features in unexpected ways like this.
My Turkish is pretty rusty - and was never any good anyway, but really cool stuff.
A language an LLM can choke on!
It would be really helpful if this page showed side-by-side comparisons of the same program written in Kip and some other language, like say Haskell.
I'm having a hard time seeing how this is much different from record types, except that you're limited to only eight fixed record field names (one for each grammatical case).
Cases essentially act like named arguments, except the names are inferred from the case of an argument, which is inferred through morphological analysis. And that analysis can be ambiguous, so the ambiguities are solved by the type checker / elaborator. It's different from record types in the sense that you can provide the arguments in any order to a function, and the system will figure it out because of the cases.
Cases essentially act like named arguments
... and there are only eight argument names. Which seems... limiting.
It's different from record types in the sense that you can provide the arguments in any order to a function
You can provide the fields of a record in any order, and call a function with it!
f { foo=3, bar=5 }
g { bar=5, foo=3 }
I still think the page needs a Rosetta Stone.> ... and there are only eight argument names. Which seems... limiting.
I would be fine with a programming language that limited functions to 8 arguments. Not because I never have a use for more, but it's a cost I'd be willing to pay in return for my colleagues never needing more.
Pylint and ruff [0] have a check for this that is set to warn over 5 arguments, but I don't think this is enabled by default and I haven't worked anywhere where this would cause the build to fail.
You're right about the records providing flexible order, I overlooked that.
But Kip lets you repeat cases in arguments, so you're not limited to 8 arguments for a function. In cases where a function takes multiple arguments of the same case, the order in which those arguments are applied matters, otherwise it doesn't. So if you say "any number of arguments but only 8 are named, that seems bad", I'd understand, but that is a relatively uncommon problem to run into, especially in a toy language like this that is not meant for any serious work.
Of course, missing
https://www.euronews.com/my-europe/2024/10/25/what-is-turkis...
It would actually be a good fit for event handlers...
Gossip tense has been discussed here:
(276 points and 255 comments) https://news.ycombinator.com/item?id=41793485
[flagged]
The Maryland one (that would be me, although I haven’t really done anything except the WASM bindings, this is really all Joomy’s work, kudos to him) is vacationing in Izmir right now, why would that even be important though?
I don't even live in England but still write in English, heck of a thing if you think about it.
Both developers are Turkish