dmytrish: (qnxroot)
https://dmytrish.net/blog/en/elispjs-010

Recently my new hobby project, elisp.js, reached version 0.1.0! It is a basic Elisp environment that runs of top of Javascript and runs code through transpiling it into Javascript dynamically and evaluating the intermediate JS code.

I consider the core of the implementation reasonably self-sufficient by now: lambdas and macros work reasonably well (with proper dynamic scoping and Lisp-2 namespace separation, unlike Samsonjs’s elisp.js from 2009!), code may be evaled, the most used types are implemented (symbols, lists, strings, numbers, bools, vectors).

dmytrish: (Default)

Останнім часом потрохи курив мануали до asyncio та корутин в Python 3, і, здається, наближається момент достатнього розширення свідомості.

Другий Пітон був відносно простою (для багатьох навіть примітивною) динамічною імперативною мовою із класами, якою було класно склеювати примітиви інших мов, і за це його досі люблять. Із просунутих фіч у ньому були хіба що генератори із yield, на основі яких зробили ледачі потоки в itertools, малою кров'ю взявши багато хороших ідей із хаскелівської ледачості обчислень.

А третій Пітон мене і лякає, і захоплює одночасно: виглядає скромно, але під капотом можна знайти повноцінний event-driven programming (із event loops, asynchronous tasks: async/await, coroutines, futures та іншою нетривіальною лабудою), модуль для прикріплення анотацій типів (typing), генератори/ітератори значно глибше проникли в мову і тепер навіть простий map(function, some_list) повертає не список, а ітератор. Теперішні можливості мови дозволяють робити складні та нетривіальні системи.

Але запроваджувати concurrency в мову через корутини та машини станів (що загалом непоганий напрямок для concucrrency в імперативній мові) було і досить невдалим вибором: asyncio потребує значного вникнення порівняно із акторами і горутинами. І в цьому плані Го перепітонив Пітон: дав concurrency простішим і очевиднішим методом, додавши до того ж рудиментарні типи.

dmytrish: (qnxroot)

Пофігачив трохи коду на Расті, і дивне відчуття: з одного боку, сильна типізація, ADT, нормальний паттерн-матчінг, красота-лєпота, з другого, цикли, референси і імперативне програмування в усій красі. Цікава суміш.

Borrow checker не такий уже і страшний, після деякого освоєння теорії з ним впоратись відносно легко.

Compile-time речі дивні і незвичні, замість лексичного підмазування треба писати повноцінні макроси, що спочатку страшно, але в результаті повинно виходити менше #ifdef-каші.

І да, C++ здається потім пе́рлово-ламповим, Rust відчувається як мова із сильним інженерним дизайном. Підозрюю, що любителі красної словесності від програмування можуть його за це не полюбити (але то вже їхні проблеми).

Profile

dmytrish: (Default)dmytrish

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 11th, 2025 05:11 pm
Powered by Dreamwidth Studios