LINUX.ORG.RU

яролит - реализация на javascript

 , транслитерация,


0

1

Думаю, кто-то помнит тему Новая версия Яролита (форк ГОСТ 16876-71, табл 2)

На страничке http://программирование-по-русски.рф/яролит.яргт/ можно попробовать ещё более новую версию реализации яролита. Наконец-то я сделал обратное, а не только прямое преобразование.

Кодировка на данный момент такова:

Русский алфавит:

a b v g d e jo zh z i jj k l m n o p r s t u f kh c ch sh shh jq y q eh ju ja

(Соответствует ГОСТ 16876-71, таблица 2, кроме Ь = Q и Ъ = JQ - в госте эти значки превращаются в небуквенные литеры)

Английские буквы:

xe - переключение в английский режим. В частности, «xeRussia» раскодируется как «Russia», а не как «Руссиа».

В английском режиме «x» кодируется как «xx», а «w» - как «ww»

xr - переключение обратно на русский

Суммарно, JAxeRxrJA == ЯRЯ

Не ASCII, не кириллица = xuNNNNNNx, где NNNNNN - 16-ричный код символа.

Исходники функций прямого и обратного преобразования - https://bitbucket.org/budden/ppr/src/master/static/jarolit/

Буду благодарен за код ревью. Пока речь не идёт об упаковке в тот или иной «пакет». Наиболее интересно на данный момент, как сделать код более быстрым. Например, имеет ли смысл делать case по коду символа, а не по строковым значениями? С точки зрения правильности код выглядит правильным, но если увидите баги - пишите.

★★★★★

Последнее исправление: den73 (всего исправлений: 1)

Ответ на: комментарий от crutch_master

Короче, берешь делать split(" ") и у тебя получается массив слов

В задаче транслита скорость вряд ли нужна, у него довольно узкая область применения - имена пользователей, e-mail-ы и прочее подобное.

Я думаю, замедление происходит в момент добавления буквы ко всё удлинняющейся строке.

Нет. Суммирование строки в js не настолько конченое.
У меня ~150 мс по одному символу. ~5мс по 10 символов.

Чтобы твой тест был содержательным, нужно сравнить миллион букв, 10000 букв и 500 букв. Удобно делать это в этой вот фигне, на которую я раньше давал ссылку.

var DveH = (следующаяБуква == 'H');

Очень фигово, когда в пределах одного слова смешаны кириллица и латиница, и при этом ещё они визуально неотличимы. Пробую разные варианты, что с этим делать. Решение не окончательное.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

В Си это была бы запись в поток

На ноде есть потоки, когда-нибудь из засунут в стандарт.

т.к. когда строка разрастается, добавление становится главным тормозом.

Я бы не сказал, что она прям сильно тормозная. У тебя тут дело не в этом. Ты преобразуешь одни и те же слова много раз. Тормоза строк по сравнению с этим ничего не значат. Миллион букв собирается за 150 мс на среднем процессоре. Но даже столько собирать вряд ли когда-то будут.

crutch_master ★★★★★
()
Ответ на: комментарий от den73

В задаче транслита скорость вряд ли нужна

Ну так сделай всё на объектах, будет красиво и тормозно.

crutch_master ★★★★★
()
Ответ на: комментарий от den73

Очень фигово, когда в пределах одного слова смешаны кириллица и латиница, и при этом ещё они визуально неотличимы. Пробую разные варианты, что с этим делать. Решение не окончательное.

Если ты решился на кириллические имена делай их везде кириллические, а еще лучше сделать js кириллическим. Replace по ключевым словам пишется за два часа на коленке, там самое сложное - это определение границ кавычек.

crutch_master ★★★★★
()
Ответ на: комментарий от rebforce

Я вообще не знаю, как 1сники живут. Код в голове звучит невыносимо.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

странные результаты получились. У тебя скорость растёт пропорционально. Почему же у меня скорость резко упала при росте длины строки?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

На каком размере? У меня она тоже растёт. Миллион по-моему 150мс, 2 миллиона - 400мс, или около того. Но связанно это с выделением памяти у ос, т.к. повторный запуск даст 300мс на этой вм.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

К dbf претензий нет ...
У меня имеется подборка чудных xml, ..., ... для проверки «качества алгоритмов».

anonymous
()
Ответ на: комментарий от crutch_master

Если ты решился на кириллические имена делай их везде кириллические, а еще лучше сделать js кириллическим.

Для этого нужна полностью русскоязычная среда, начиная с русского bash и vim. на самом деле очень сложно выработать культуру именования кириллических идентификаторов, и чтобы не было противно, как в 1С. Делать кириллический js - это создать проблемы при эксплуатации, т.к. лишний транспилятор, кривые sourcemaps, услжнение развёртывания и прочее. А пока я просто тренируюсь в тех условиях, в которых есть. У меня для этого есть яро-раскладка, проблема переключения клавиатуры меня не мучает. Решение по визуальной отличимости в принципе тоже есть, но его нужно отдельно воплощать для каждого инструмента.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

В vim делаются биндинги на русскую раскладку.

Делать кириллический js

Не «кириллический js», а интерпретатор кириллического js в обычный. Где ты его пускать будешь.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

У того кто «умеет» и с xml все будет быстро работать, а кто «так себе» у того и результат всегда будет «так себе».
Дело вовсе не в языке программирования, ... - это все «отмазки» тех кто «так себе» /вообщем вспомним танцора, которому всегда мешали что?/.

anonymous
()
Ответ на: комментарий от crutch_master

xml заливается в ту базу, ... с которой работаю - и все /от него нужны только данные и только один раз/.

anonymous
()
Ответ на: комментарий от tz4678

нужно полноценный парсер писать, но это несложно, можно просто на регулярках

Я представил эту регулярку, стало плохо. Замена всех ключевых слов (по одному?) которые не в кавычках. Хотя если по одному - то нормально, но не быстро.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Миллион по-моему 150мс, 2 миллиона - 400мс, или около того

Ладно, этот вопрос останется, видимо, нерешённым, т.к. область применения транслита - это короткие тексты.

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Не «кириллический js», а интерпретатор кириллического js в обычный.

У данного проекта цель состоит не в продвижении русскоязычного программирования, а в продвижении транслита. Русскоязычность исходников тут вообще мало относится к делу. Для продвижения транслита нужно, чтобы его было легко нагуглить и подключить к своему проекту, а создание интерпретатора js явно это затруднит.

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Вот я и говорю, что это неважно. Я бы и switch не трогал. Потому что обычно реализации транслита выглядят примерно так:

https://master.virmandy.net/dvustoronniy-translit-na-js/


<script type='text/javascript'>
	var arrru = new Array ('Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ','Ж','ж','А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ы','ы','Ь','ь','Ъ','ъ','Э','э');
 
    var arren = new Array ('Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh','Zh','zh','A','a','B','b','V','v','G','g','D','d','E','e','E','e','Z','z','I','i','J','j','K','k','L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Y','y','`','`','\'','\'','E', 'e');
function cyrill_to_latin(text){
	for(var i=0; i<arrru.length; i++){
		var reg = new RegExp(arrru[i], "g");
		text = text.replace(reg, arren[i]);
    }
	return text;
}
 
function latin_to_cyrill(id){
	var text = $("#"+id).html();
	for(var i=0; i<arren.length; i++){
		var reg = new RegExp(arren[i], "g");
		text = text.replace(reg, arrru[i]);
    }
	$("#"+id).html(text);
}
 
 
function translit(){
	$("[name=result]").val(cyrill_to_latin($("[name=translit]").val()));
}
</script>
Мне кажется, что так будет намного медленнее, чем switch, хотя на самом деле надо, опять же, проверять.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от crutch_master

мне казалось, я на всё ответил чуть выше:

  • локальные переменные типа (б) переименую
  • с ош всё в порядке, см. внутрь функции ош
  • переделывать switch на массивы в принципе надо, но лень. Скорость тут некритична, разве только чтобы избежать фраз «мало того, что у него плохо с головой, так ещё и программировать не умеет. В принципе, можно просто забить на эти мнения, тогда switch вполне подходит. Плохо то, что в Си это будет if..elseif...elseif, а это уже совсем уродливо. Именно это является основным аргументом за переделку switch в массивы.
  • DveH оставлю, это поиски стиля и нормального решения тут всё равно пока неизвестно мне
  • транслятор делать не буду
  • Функция Зб нужна с учётом портативности (в других языках будет вариант писать в строку или в поток, поэтому это получается некая абстракция потока вывода).

Ничего не упустил?

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

Естественно, у него это шутка. Там ведь всё написано. А у тебя всё всерьёз, поэтому тебя здесь все и троллят. (Ну может не все, но достаточно людей.)

anonymous
()
Ответ на: комментарий от anonymous

У него написано, что смысл состоит в отсутствии необходимости переключения раскладок. И вырвиглазность возникает из-за того, что набиваются английские слова в русской раскладке, например <ащте> = <font>

Учитывая, что Лебедев выпускал даже свою клавиатуру, непохоже, что это совсем уж шутка. Набивать html с кириллицей в стандартном наборе раскладок, где нет даже угловых скобок и где нужно через букву переключаться - нужно быть или идиотом, или мазохистом. Нормальный человек быстро задумается, как улучшить этот процесс.

Также студия Лебедева является автором всяких игр с карточками типа Ерундопель и прочая. Из этого можно заключить, что Лебедев в целом заинтересован в русском языке.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

YoptaScript позволит «чётким пацанам» быстро влиться в ряды программистов и процесс разработки.

ЧОТО Я НЕ ПОНЯЛ, ПОЧЕМУ КАВЫЧКИ

anonymous
()
Ответ на: комментарий от anonymous

На самом деле, там не очень получилось. Суть в том, что в обычном хулиганском языке слов, нужных для кодинга, недостаточно. Поэтому они позаимстововали из уголовного. Это уже не YoptaSpace, а совсем другое.

anonymous
()
Ответ на: комментарий от den73

99% людей не способны понять, в чём тут связь.

В том же реакте (который конкурент vue на котором у тебя сайт) одни из самых часто вызываемых методов названы render, componentDidMount, componentWillUnmount и так далее.

Если это для тебя не показатель то в «трушных» плюсах include тоже не назвали «i», while не «w», for не «f» и так далее.

Я кажется понял, 99% которых не способны понять, это хорошие кодеры? Оставшийся 1% которых может это альтернативно одаренные?

abs ★★★
()
Ответ на: комментарий от den73

с ош всё в порядке, см. внутрь функции ош
" в позиции " + i

Не говорит вообще не о чём. Будешь ты позицию 578 искать в 6 кб тексте.

переделывать switch на массивы в принципе надо, но лень.

Оно нечитаемо. Код нереюзабелен.

Ничего не упустил?

Что насчёт программирования копипастой? Ну стыдно же ну!

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Ну стыдно же ну!

И приятно! Стыдно и приятно!

anonymous
()
Ответ на: комментарий от crutch_master

Не говорит вообще не о чём. Будешь ты позицию 578 искать в 6 кб тексте.

Предлагаешь сделать строку и колонку? Предполагаются короткие тексты, кроме того, в месте ошибки вставляется ^ (а надо, наверное, вставлять значок, не имеющий смысла в типичных ЯП, на случай вставки в исходный текст). Неужто этого мало? Я вообще не планировал вставлять эти ошибки в production, это скорее для отладки.

Оно нечитаемо.

Не соглашусь. Почитай любой рукописный парсер - он так и выглядит.

Код нереюзабелен.

А как его можно было бы реюзабилить? У меня задача, чтобы его можно было легко перевести на другие языки. Чем проще код, тем проще перевести. Например, если я сделаю типа интерпретатора «байткода» из массивов, то будут заморочки, потому что в js есть typeof, а в других языках может и не быть.

Что насчёт программирования копипастой? Ну стыдно же ну!

Да не очень. Если это maintainable. Иногда копипаста легче в поддержке, чем перепараметризованная архитектура. Я, кстати, не придумал, как поддерживать многоязычность. Нужен какой-то haxe, или просто генератор кода на разных языках.

den73 ★★★★★
() автор топика
Ответ на: комментарий от abs

ты как хочешь, но для меня так: если какая-то сущность является локальной и часто встречается (больше 10 раз на странице), её называю коротко. Если сущность глобальная и часто встречается (10 раз на каждой странице), то тоже. В сях косяк состоит в том, что деление не должно обозначаться одиночным значком. Умножение тоже под вопросом. #include в целом встречается довольно редко.

Язык оптимизируется, исходя из следующих факторов

  • плотность (должен быть достаточно плотным)
  • простота (7-этажные сокращения трудно понять, большое кол-во сокращений трудно запомнить)
  • ясность (редко встречающиеся понятия расписываются целиком)
  • традиция (должен соответствовать культуре)
  • количество доступных значков данной длины
  • локализация (какова частота встречания термина в компактных кусках текста или глобально)

Но ведь ты меня уже записал в альтернативно одарённые, зачем я трачу на тебя время?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Ну во-первых, ещё раз сходил по ссылке. Слово «глобальный» там фигурирует один раз, в начале. А в той фразе, которую я цитировал, его нет. Это может показаться придиркой, но вот для человека, который этот текст читает, совершенно не очевидно, что вы хотя бы к какому-то опенсорсу относитесь положительно.

Во вторых, насчёт собственно «контролируется Россией». Как эту фразу понимать? То, что этот код должен быть целиком написан в России? Так и текущий код «ключевых компонентов» написан не целиком в США. Или не целиком, а большей частью?

И ещё вы считаете реалистичным переписывать с нуля опенсорсные операционные системы, драйвера, СУБД и ещё дофига всего? Тут куча человеко-лет получается.

Далее. В «глобальном» проприетарном ПО закладки найти ещё сложнее, чем в любом опенсорсе. Но проприетарное ПО вы в своём манифесте не критикуете ни единым словом. Хотя и в госорганах, и ключевых компаниях России дофига и Windows, и Oracle, и прикладных программ, которые к этим самым Windows и Oracle прибиты ржавыми гвоздями. Но почему-то не они, а именно open source ассоциируются у вас с «небывалым разгулом шпионажа». Так уж и небывалым?

То есть получается, что первый абзац вашего манифеста — он не в защиту российского ПО, он именно против открытых исходников, хотя вы, возможно, и хотели написать что-то другое.

А реалистичный способ того самого контроля — это наличие людей, способных в этом коде разбираться и при необходимости его править. В этом смысле «контроль» вполне возможен и над глобальным Open Source.

Нет, я был бы совершенно не против, если бы в России было разработано что-то конкурентоспособное с нуля. Должны же новые системы время от времени появляться, Google тот же Фуксию пилит, чем страна Россия хуже Гугла. Беда в том, что пилить с нуля «чисто своё» на энтузиазме — ресурсов не хватит. А брать деньги у государства — государство вас, скорее всего, заставит своё детище огородить со всех сторон. История с Эльбрусом (которому я в общем и целом симпатизирую, а если появятся вменяемые спеки, буду симпатизировать без оговорок) тому печальный пример.

Поэтому я бы стремился не к перепиливанию всего и вся с нуля, а к тому, чтобы увеличить долю российских разработчиков в тех же Linux, PostgreSQL и других международных проектах. Это путь реалистичный. И вот тут государству хорошо бы вложиться.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Это может показаться придиркой, но вот для человека, который этот текст читает, совершенно не очевидно

Согласен, что можно улучшить формулировку, постараюсь это сделать. Мне казалось, что лучше избежать повторений, но, вероятно, это неправильно.

Во вторых, насчёт собственно «контролируется Россией». Как эту фразу понимать?

Однозначно это контроль над обновлениями. Касаемо остального, я не вижу вариантов, при которых импортированный код был бы действительно проверен на закладки. Начиная с того, что проверить на закладки - это технические неосуществимо, продолжая тем, что качество этой работы непонятно, как контролировать и завершая тем, что у нас многовато не очень добросовестных людей. Даже переписать и даже на русском языке - и то недостаточная защита. Но при такой постановке задачи будут достаточно серьёзные преграды против халтуры.

а к тому, чтобы увеличить долю российских разработчиков в тех же Linux, PostgreSQL и других международных проектах. Это путь реалистичный. И вот тут государству хорошо бы вложиться.

Без контроля над репозиторием это не имеет никакого смысла. На римских галерах гребцы могли составлять большинство команды по численности, но рулили не они. Кроме того, кодовая база линукс огромна, что делать с теми закладками, которые уже есть?

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от crutch_master
var TOKENIZER = /(?<whitespace>\s+)|(?<identifier>[a-z_]\w*)|(?<number>\d+(?:\.\d+)?)|(?<operator>[-+/*=])|(?<unexpected>.)/iy
var source = 'x = 2 * 2'
var match
while (match = TOKENIZER.exec(source)) {
  console.log(match)
}

tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 1)
Ответ на: комментарий от den73

Без контроля над репозиторием это не имеет никакого смысла.

Репозиториев может (и в ряде случаев должно) быть сильно больше одного, все распределённые VCS это позволяют. И да, национальные репозитории должны быть и скорее всего, при государственной поддержке — на тот случай, если голландский Яндекс внезапно захочет вывести активы из страны. Вот новые коммиты как раз можно принимать не автоматически, а после серьёзной проверки.

И когда я говорил об увеличении вклада в разработку ядра, я имел в виду не роль гребцов на галерах, хотя начать придётся с этого. Можно играть роль в архитектуре, предлагать какие-то сложные решения.

Начиная с того, что проверить на закладки - это технические неосуществимо

А как-то тем не менее проверяют, и не только «у нас». Более того, по-другому не получится.

Да и вообще, если уж включать паранойю на таком уровне, то контролировать надо не только ОС, но и железо. И где оно? Я бы, может, пописал бы что-то специфичное под тот же Эльбрус, но где в открытом доступе его система команд? Где системники с Эльбрусом по доступной для энтузиастов цене? Или вы хотите писать новую суперзащищённую ОС под зонд от интела, в котором уже целый неконтролируемый Миникс внутри? Так себе занятие, по-моему.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

И когда я говорил об увеличении вклада в разработку ядра, я имел в виду не роль гребцов на галерах, хотя начать придётся с этого.

А потом что - восстание рабов?

А как-то тем не менее проверяют, и не только «у нас».

Как же тогда heartbleed и bashdoor? Факт налицо: недопроверили. И таких фактов многовато, чтобы спокойно спать.

Да и вообще, если уж включать паранойю на таком уровне, то контролировать надо не только ОС, но и железо

Надо, конечно. Но мне кажется, что трудоёмкость софта выше.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от andalevor

А где она, а где мы сейчас на шкале времени?

Deleted
()
Ответ на: комментарий от den73

Смысловая ловушка open source состоит в том, что люди путают «можно проверить» и «действительно проверено». В США сидят вовсе не дураки, и они считают нас в состоянии кибервойны. Об этом достаточно давно говорят достаточно высокопоставленные политики в США. Кроме того, у них уже есть концепция использования доминирования в компьютерной сфере в военных целях. Понятно, что если они видят, что мы клюнули и скачали себе весь этот напичканный закладками код, они будут этим пользоваться. Практика показывает, что простейшие переполнения буфера до сих пор встречаются в массе программ, хотя от них есть простые лекарства.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

Дело вовсе не в «переполнениях», ...
Архитектура x86 - «решето».
Кроме того не секрет, что процессора Intel напичканы разными подсистемами, которые работают незаметно для любой ОС.

anonymous
()
Ответ на: комментарий от anonymous

Ну я что-то читал, как в Эльбрусе якобы есть режим как бы с автоматически включённым санитайзером, но мне тут же сказали, что существующий софт в этом режиме работать не будет. Первое решето - это Си, второе решето - это Баш. В принципе, есть способы сделать разработку безопасной, но тут всё опять же упирается в то, кто отвечает за репозиторий. Можно, например, взять самый умный статический анализатор и в нём отметить нужную закладку как false positive. Или просто сделать чуть более сложный алгоритм, который статический анализатор не поймёт.

Программы пишут люди, самое важное - это цели данных людей. Если эти люди хотят захватить мир через контроль над ИТ, никакие практики безопасного программирования не помогут, поскольку в конечном итоге, скачивая программу, мы доверяем этим людям.

Мы сейчас в России находимся в таком положении, что мы либо доверяем США, либо сидим без компьютеров. И это может закончиться для нашей страны очень и очень плачевно.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

А то, что США хотят контролировать мир с помощью ИТ - это не мои домыслы, а их собственные заявления.

den73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.