Size: a a a

CODE BLOG / Чат

2021 August 02

P

Phantom in CODE BLOG / Чат
Челик выше
источник

D

Den in CODE BLOG / Чат
джаваскрипт сам по себе синхронный, блокирующий, однопоточный язык
источник

D

Den in CODE BLOG / Чат
вся эта хрень с асинками и эвэйтами явление недавнее и ненужное, тем более ещё есть аякс
источник

AE

Andrey Ermak in CODE BLOG / Чат
по этому Browser api и libuv позаботились о том что бы предоставить ему асинхронность. Это основная фишка япа.
источник

D

Den in CODE BLOG / Чат
при es3 такой хуеты не было
источник

AE

Andrey Ermak in CODE BLOG / Чат
нууу... наверное по этому у нас и есть ес6+ )))
источник

D

Den in CODE BLOG / Чат
так и штука не для вас
источник

D

Den in CODE BLOG / Чат
вот и отсеялись
источник

SS

Steel Sword in CODE BLOG / Чат
Я просто набрал информации о том, как примерно работают языки программирования и запилил. Лисп довольно простой ЯП, там много ума не надо.

Юзал только стандартную библиотеку Rust'а.
Правильный способ - это заюзать генератор парсера, специальная штука, в которую загоняешь схему синтаксиса, а эта штука генерирует код парсера. Парсер этот читает текст и отдает код в виде дерева. Потом с деревом сам уже решаешь, что делать. Можно скормить самописному интерпретатору (как я), можно отдать какому-нибудь GCC или LLVM, который скомпилирует под любую архитектуру (@ImJmik так делал).

Но мне было лень возиться с парсером, и я просто написал чтение текста и превращение его в дерево. Просто циклом ходил по буквам, делил на лексемы, потом ходил циклом по лексемам и собирал в дерево. Где-то 200 строк. Но это из-за простоты синтаксиса лиспа. В лиспе всё - односвязный список. Если бы я так пытался повторить синтаксис питона или хотя-бы Си, то без генератора парсеров сдох бы примерно на 1000-ой строке парсинга текста.

Потом лично у меня односвязные списки (главная парадигма лиспа - всё есть односвязный список, даже if-else), и я их перебираю, первый элемент считаю либо названием конструкции, либо ссылкой на функцию, а все остальные элементы односвязного списка - параметрами. Если конструкция, то надо все в исходном виде отдать исполнителю конструкции, а он сам разберётся, если ссылка на функцию, то сперва вычислить параметры, которые тоже могут быть односвязными списками и потом вызвать функцию.

Вот примерно весь лисп.

Есть учебник по языкам программирования, его мне все рекомендовали. В народе "книга дракона" называется из-за дракона на обложке (вроде гуглится с таким названием). Она подробнейше описывает, как с нуля сделать самый настоящий ЯП, но я не осилил. Остановился в примерно в начале, на главе, в которой рассказывалось, как сделать парсер регулярных выражений.

Моей целью было просто закрепление основ раста, и я решил остаться в рамках стандартной библиотеки, это вторая причина, почему я никакие парсеры не юзал
источник

SS

Steel Sword in CODE BLOG / Чат
Ага, ненужное, давайте ждать по 10 секунд после нажатия любой кнопки
источник

D

Den in CODE BLOG / Чат
загнул
источник

D

Den in CODE BLOG / Чат
хотя бы по одной
источник

SS

Steel Sword in CODE BLOG / Чат
Даже 1 - дофига
источник

D

Den in CODE BLOG / Чат
ну-ка возьми кнопку с alert("hello") и секундомер
источник

D

Den in CODE BLOG / Чат
и засеки
источник

SS

Steel Sword in CODE BLOG / Чат
Не, встань в переулке где ловит 3G, возьми кнопку с fetch("/get_table_data?q=all") и секундомер
источник

SS

Steel Sword in CODE BLOG / Чат
И засеки
источник

D

Den in CODE BLOG / Чат
не было фетча тогда
источник

D

Den in CODE BLOG / Чат
делай как говорю
источник

SS

Steel Sword in CODE BLOG / Чат
Мне было лень вспоминать сигнатуру XMLHTTPRequest или как его там
источник