PDA

View Full Version : Кириллица в языках современных программирования



crazy-mike
04-26-2024, 12:21 PM
С 1960 года ведь прошло довольно много времени ? :) 64 года вообще-то со времени появления русской версии языка Алгол-60 , например. Правда традиционно с фортрана и PL/1 кругом "рулил" английский язык. Чудом почти подпольно существовал "русский КОБОЛ".
Но через 64 года после начала англосаксонского террора против славянского мира в информатике ситуация стала изменяться к лучшему. В основных современных языках программирования ( не в Python ) идентификаторы можно писать кирилицей. На иврите , наверное , тоже. И на фарси можно.

crazy-mike
04-26-2024, 12:34 PM
И так - GNU ассемблер :)



.global main
.text
main:
lea привет(%rip),%rdi
push %rdi
call printf
pop %rdi
ret
.data
привет:
.asciz "прощай , безумный мир!\n"
# old glory !!!


замечу - что main пока ещё обязательно. Правда на уровне компоновщика это досадное недоразумение можно обойти.

crazy-mike
04-26-2024, 12:37 PM
gcc и clang :)



#include <stdio.h>

int main(int argc,char** argv) {
int вася = 0;
вася += 2;
printf("\n%d\n", вася);
return 0;
}


всё по-настоящему - и даже без использования препроцессора. :111:

crazy-mike
04-26-2024, 12:39 PM
julia: :101:




function привет()
вася = 13
println("Прощайте!")
return вася + 666
end

петя = привет()
println("петя = ", петя )

crazy-mike
04-26-2024, 12:41 PM
милашка-красафчег go :111:



package main

func идиотизм() {
print("\nпривет!\n")
}

func main() {
var вася = 6
идиотизм()
print("\n",вася,"\n")
}

crazy-mike
04-26-2024, 12:43 PM
суровый адски серьёзный ячзык rust :101:



fn main() {
let вася = 1;
println!("вася = {}",вася);
}

crazy-mike
04-26-2024, 12:44 PM
кругом кирилица в кодировке UTF-8 под Linux :)
Антиглобализм в языках программированя не коснулся python и mojo , но с учётом существующих альтернатив не слишком трудно написать кросс-компилятор с исконно славянского языка программирования в какой-нибудь "антиглобальный" - хоть в rust хоть даже в gnu as :)

Мы вот попробовали на mojo что-то такое сделать. Поскольку Python суть есмь "змий" , а змий - это как бы гад ползучий , то компилятор тоже можно назвать gad. ( или даже гад кирилицей ). На входе файлы на русском диалекте этого языка , а на выходе файлы для rust c расширением rs.
Прототип компилятора на языке mojo может выглядеть примерно так:


from sys import argv
@value
struct MyRuntime:
var ok :Int
var status :String
var fname :String
var xmain :String
fn __init__(inout self):
self.status = "init"
self.fname = "?"
self.xmain = "?"
self.ok = 1
pass
fn setStatus(inout self,z :String):
self.status = z
fn setFname(inout self,z :String):
self.fname = z
pass
fn about(inout self) -> String:
return self.status
fn main():
print("гад , версия 1.0")
var bb = argv()
var rt = MyRuntime()
var need = False
for t in bb:
if need:
print("послушание (",t,")")
try:
servant(rt,t)
except:
print("ересь",rt.about())
need = True
print("аминь!")
fn servant(inout rt :MyRuntime,z :String) raises:
var qn = z.__add__(".гад")
var qp = z.__add__(".rs")
print(" готовим ",qn)
rt.setStatus("servant.open")
var f = open(qn,"r")
rt.setStatus("servant.read")
var bf = f.read()
rt.setStatus("servant.close")
f.close()
rt.setStatus("buildCode")
buildCode(rt,bf,qp)
fn buildCode(inout rt :MyRuntime,bf :String,outf :String) raises:
var f = open(outf,"w")
var dd = bf.split("\n")
var n = dd.__len__()
var i = 0
while i < n :
var s = dd.__getitem__(i)
var z = s.strip()
print("-->",z)
rt.ok = 0
var ix = z.find("пора ",0)
if ix == 0:
goPora(rt,z,f)
if rt.ok == 0:
ix = z.find("аминь",0)
if ix == 0:
goAmen(rt,z,f)
if rt.ok == 0:
ix = z.find("скрижаль ")
if ix == 0:
goPrint(rt,z,f)
i = i + 1
epilogue(rt,f)
f.close()
fn goPrint(inout rt :MyRuntime,bf :String,inout f :FileHandle) raises :
var k = bf.find(" ")
var qq = bf[k+1:-1]
rt.ok = 1
f.write("println!(\"")
f.write(qq)
f.write("\")\n")
fn goAmen(inout rt :MyRuntime,bf :String,inout f :FileHandle) raises :
rt.ok = 1
f.write("}\n")
pass
fn goPora(inout rt :MyRuntime,bf :String,inout f :FileHandle) raises :
rt.setStatus("genPora")
rt.ok = 1
f.write("fn ")
var z = bf.split(" ")
var p = z.__getitem__(1)
rt.setFname(p)
f.write(p)
f.write("() {\n")
var g = z.__getitem__(2)
if g.__eq__("поехали"):
rt.xmain = p
pass
fn epilogue(inout rt :MyRuntime,inout f :FileHandle) raises :
if rt.xmain.__ne__("?"):
f.write("\n")
f.write("fn main() {\n")
f.write(rt.xmain)
f.write("()\n")
f.write("}\n")
pass


входная программа на языке gad как-то так:


пора привет поехали
скрижаль бог в помощь!
аминь


ну а после обработки компилятором gad на выходе получаем файл для rust:


fn привет() {
println!("бог в помощь")
}

fn main() {
привет()
}

crazy-mike
05-05-2024, 08:33 PM
Правда я переписал этот компилятор почти на "современном C++". И поддерживает он довольно много интересных "фишек".
Ну а python 3.11 поддерживает кирилицу для идентификаторов тоже.

crazy-mike
05-09-2024, 05:22 PM
(*
приклад програми на мові гад
*)

справа парад по вася це число по факел це свічка докладно
хай вова це текст йому "гречка"
вистава по вова по "\n"
вистава по вася по " рік дали васі\n"
чи факел є
ноаина "давайте вместе подуем на свечу"
нема
новина "свеча горела на столе свеча горела"
погляд
все

час воронєж топити
новина "христос воскоес!"
хай вася це число йому 1
хай кремль це свічка та запалити
начать парад по вася по кремль
хай воно це цисло буде 1
коли воно < 10 повтор
вистава по воно по "\n"
вже воно = воно + 1
далі
новина "Кінець має бути красивим, а якщо ні - навіщо нам цей Кінець ?"
все


а вот как оно на украинском выглядит - программирование на языке Гад :)

crazy-mike
05-10-2024, 04:30 PM
настоящий имперский язык программирования ведь !



пора киллер поехали
пусть педро пока цел убить 2 раза
скрижаль педро
аминь