99 бутылок: V
71. V — один из языков, за развитием которых я пристально наблюдаю. Искренне желаю ему развития и процветания — под влиянием «Раста», «Гоу» и чего-то вроде Пе́рла, у авторов получается довольно интересный язык, который пока, правда, находится в стадии альфы.
Сил авторам не занимать — работает (за редким исключением) почти весь заявленный синтаксис, есть компиляция, трансляция в Си и ДжаваСкрипт, а так же обратная трансляция из Си в Ви (на гитхабе есть оттранслированный в Ви «Дум»).
Сильнее всего язык, кажется, похож на Гоу — есть даже синтаксически такой же оператор go, позволяющий запускать что-нибудь в отдельном потоке (позднее обещают сделать корутины), но и уши «Раста» торчат даже в моей небольшой программе: совпадение с образцом, условные операторы-конструкции, константные переменные (если не указан mut).
Есть обобщённое программирование (которого так не хватает в Гоу), интерполяция переменных в строках (привычная ребятам, программирующим на ПХП, Перле и шеллах) и ограниченная перегрузка операторов (как в Си++).
Насколько я понял из сайта и блога, язык нацелен на безопасное программирование, скорость, как выполнения (проигрывает Си всего на три процента), так и выполнения и простоту кода. Повторюсь, выглядит очень интересно.
// 99.v by Evgeny Stepanischev Feb 2020
fn bottles(beer byte) string {
return match beer {
0 {
'no bottles'
}
1 {
'1 bottle'
}
else {
'$beer bottles'
}
}
}
fn main() {
mut b := bottles(99)
for i := 98; i >= 0; {
println('$b of beer on the wall, $b of beer.')
b = bottles(i--)
println('Take one down and pass it around, $b of beer on the wall.\n')
}
println('No more bottles of beer on the wall, no more bottles of beer.')
println('Go to the store and buy some more, 99 bottles of beer on the wall.')
}
Можно сделать 99 бутылок ещё на ассемблере, используя только mov-команды. На гитхабе есть проект xoreaxeaxeax/movfuscator, можно там подглядеть, или в конце readme проекта — ссылки.
Я про это даже писал, но это не отдельный язык же)