Kisah bagaimana saya mengembangkan bahasa pemrograman

Hai Habr! Nama saya Ildar. Saya berusia 29 tahun. Saya sudah pemrograman sejak 2003. Dalam hidupnya ia menciptakan 4 kerangka kerja dan bahasa pemrograman. Dalam posting ini saya akan membagikan pengalaman saya, wawasan yang saya terima saat mengembangkan bahasa pemrograman BAYRELL Language. Saya minta maaf sebelumnya untuk kemungkinan kesalahan sintaksis dan tanda baca dalam teks dan kurangnya gambar.


Sejarah penciptaan


Saya mulai membuat Bahasa BAYRELL pada musim panas 2016. Kemudian saya mengetahui tentang sudut dan bereaksi. Mereka membuat saya terkesan dengan teknologi terobosan. Saya kemudian mengembangkan situs web dalam PHP dan menggunakan Twig sebagai mesin templat. Dan saya ingin mencoba Angular. Saya mulai mencari bagaimana Anda bisa mengikat Angular ke Twig.


Secara umum, Twig + Angular bekerja, tetapi ada efek yang berkedip. Halaman itu diberikan melalui Twig di server, diteruskan ke klien, dan Angular sudah diberikan di sana. Dan halaman itu, saat sedang dibuat oleh klien, itu berkedip. Dan kemudian saya berpikir, apakah ada mesin template klien-server, tetapi yang bekerja di PHP dan JavaScript?


Saya mencari di internet, semua orang merekomendasikan menggunakan NodeJS sebagai server, baik mesin V8 di PHP atau arsitektur layanan mikro: backend di PHP, frontend di NodeJS. Hanya di sini nasib buruk. Saya membuat situs web di WordPress, Yii2. Dan di hosting, tidak ada dukungan untuk NodeJS atau V8. Kemudian muncul ide, untuk menulis mesin templat lintas bahasa.


Saya mulai melakukannya. Menulis dalam sebulan di PHP, lalu di bulan lain, menulis dalam JS. Dan dia dengan cepat menyadari bahwa mendukung dua bahasa itu sulit pada saat bersamaan. Jika bug muncul, maka itu harus diperbaiki di sana dan di sana. Sangat cepat, versi mesin templat menjadi berbeda, dan menyimpang dalam fungsi. Saya punya keinginan untuk menambahkan Python. Saya menyadari bahwa mengembangkan mesin template secara terpisah untuk setiap bahasa sangat sulit. Kemudian ide lain muncul. Temukan penerjemah bahasa, dan konversikan kode templat ke dalam PHP dengan JS dan Python.


PHP to JS. . . PHP JS. , PHP JS . JS , PHP . JS console.log, PHP var_dump. Runtime , . , , , .


. , . TypeScript, CoffeeScript, Dart, Babel, JavaScript. , , JS, PHP, Python ..


BAYRELL Language.


, . 0.3 2018 . . , , .


, . , JS . 0.8.3.



  • BAYRELL Language PHP, NodeJS, JavaScript;
  • HTML ;
  • ;
  • api;
  • ;
  • ;
  • ;
  • (pipe);
  • async/await;
  • , memorize;
  • ;
  • ;

.


BAYRELL Language Runtime , Full Stack . , API, .



, . , .


:


npm install -g bayrell-lang-compiler

:


git clone https://github.com/bayrell-tutorials/clear-project
cd clear-project
git submodule init
git submodule update

:


bayrell-lang-nodejs make_all
bayrell-lang-nodejs make_symlinks

:


bayrell-lang-nodejs watch

, nginx document root web .


:




HTML


:


  • PHP JS.
  • .
  • Direct HTML DOM Virtual DOM.

, .


, LayoutModel, ( ). โ€“ . render, HTML . JS ( , ..) . , , , . , , RenderDriver.


RenderDriver LayoutModel, requestAnimationFrame. render , HTML DOM. render VirtualDOM, HTML.



(). , , . , , . , , Lisp, Haskell, F#, , , .


. , , , , Dependency injection, , . , . .


, , (), private , setName(), getName(). . . .


, . , . , .


, , .



BAYRELL Language. .


โ€“ , (). . , . , , . , , , , . . , .


โ€“ . , . , . , .


: , memcached .. 12 .


, . ? , . - , . . , , , , , , , , , .. , , ยซยป .


. , , , . , , , , . . . . , .


, . โ€“ , . , , .


:


  • , , . , , .
  • , , - , , . .
  • , , . . .

, . , , , , () .


, .


โ€“ :


  • , .
  • .
  • , .
  • .
  • .

, . , , . HTML , , .


โ€“ . โ€“ , . , . . .


BAYRELL Language:


/**
 * Sum a + b
 */
lambda int sum(int a) => int (int b) use (a) => a + b;

:


fn sum = int (int a) => int (int b) use (a) => a + b;

map, reduce, array_filter (php), pipe.


, pipe. , . pipe Linux .


:


ls -la | grep .txt

pipe. txt. , , , txt.


BAYRELL Language pipe. :


User user = new User()
	|> User::setName('John')
	|> User::addEmail("john@example.com")
;

:


User user = new User()
	-> setName('John') 
	-> addEmail("john@example.com")
;

, addEmail, , , email ยซjohn@example.comยป . , , . .


Pipe .


.


. FaaS โ€“ .



BAYRELL Language Frontend: JavaScript, , . Ajax Backend.


:


MessageRPC msg = await @->sendMessage
(
	new MessageRPC
	{
		"api_name": "App",
		"space_name": "ApiInterface",
		"method_name": "getDocument",
		"data":
		{
			"document": "/ru/" ~ prefix,
		},
	}
);
Document document = msg->isSuccess() ? msg.response : null;

, REST Api . REST CRUD. , , , , - , , . HTTP (GET,POST,PUT,DELETE) .


, , D-BUS . , . , .


. , CRUDInterface. , , , . API.


, : WebSocket, DBus, RabbitMQ. Ajax API.



, , ++, C#, Python, Java, PHP . , , .


, :


  • . . 4 , , .
  • , .
  • , . .
  • , ?
  • , .

, , . . .


BAYRELL Language


, , (Java, Python, C#, C++, NodeJS, JavaScript, Go, Lua). . BAYRELL Language, . , , . , . - .


, . Language Binding. dll, . , , .


, , , .


, FaaS .


. , . . , , . , . , , . . Git.


. , , 2-3 . , , , .


TODO List



, , - , .


.


, .


.


All Articles