LINUX.ORG.RU

12
Всего сообщений: 56

кто-нибудь запускал plan9 для RPi под QEMU?

Что-то не гуглится строка запуска. Меня больше всего интересует raspberry pi 2. На железке всё запускается и работает. На QEMU пока только доходит до показа объёма доступной памяти.

 , , ,

den73 ()

Программирование на Эсперанто

Друзья, не секрет что LOR богат талантами и интересными личностями.

Вот уже почти месяц тема о программировании на Русском языке лидирует в топе форуме.

(ЯОС - 2020-02)

Темы о программировании на Русском языке всплывают с завидной регулярностью.

В связи с этим хотелось бы поднять вопрос шире, а именно о программировании на языке Эсперанто.

Преимущества мне кажутся очевидны. Язык простой, компактный, одновременно гибкий. Понятен как носителям европейских языков, так и языков Славянских.

Позволяет максимально сжато и понятно называть переменные, функции и классы благодаря простой системе суффиксов и префиксов.

Помогает избежать ментальных коллизий между языком, на котором программист думает, и языком, на котором он пишет.

Что думает уважаемый ЛОР?

 , ,

gret_och_ka ()

ЯОС - 2020-02

Чтобы не мусорить в теме про уязвимость в futex, отвечаю тут на

https://www.linux.org.ru/news/security/16140128?cid=16141747

Если я правильно понимаю, ты предлагаешь использовать для системного программирования язык с русскими ключевыми словами.

Да

И это, по-твоему, должно увеличить безопасность российского ПО, поскольку незнающие русский язык программисты из АНБ и прочих враждебных России организаций не смонут его понять.

Не потому, а потому что эта будет российская, а не международная разработка. Поскольку владельцы репозитория будут российскими, контролировать коммиты будет Россия. Таким образом, чтобы внедрить закладку, АНБ придётся как минимум завербовать находящегося в России владельца. Язык увеличивает лояльность разработчиков к России - надо, чтобы систему разрабатывали те, кто связывает свою будущее с Россией. Чем лучше человек знает английский, тем в меньшей степени он связывает своё будущее с Россией. Это не закон природы, но статистическая корреляция. Кроме того, за счёт разработки на родном языке увеличивается качество, производительность труда, кадровый резерв.

Не менее важно, что система написана не на Си, а на Обероне. Это огромный шаг вперёд по надёжности.

Я думаю, что понять они его смогут написав простой транслятор ключевых слов.

Этого не достаточно, т.к. нужно будет понять каждый идентификатор, но дело не в непонятности - см. выше.

С другой стороны такой язык сильно сужает сообщество разработчиков, которые захотят принять участие в проектах.

Любой проприетарный проект резко сужает кол-во разработчиков, которые в нём могут участвовать, поскольку это NDA. Тем не менее, мы видим, что проприетарные проекты доминируют. Я провёл некоторые выкладки, возможно, сильно неточные, т.к. дефицит времени сейчас. Любая коммерческая организация с проприетарным продуктом резко ограничена в числе участвующих в разработке. Всего в мире, как говорит гугл, около 20 млн программистов. Если в коммерческой организации 2 программиста, то она, выбрав проприетарную модель разработки, сразу отказалась от 19999998 программистов, сузив круг разработчиков в 10 млн раз. И тем не менее есть масса успешных проектов с двумя разработчиками. А если взять ОС, то самые популярные ОС, если я всё правильно понял - это всё же проприетарные iOS, MacOS, Windows, Android, vxWorks. В Microsoft порядка 40 тыс инженеров, и этого хватает, чтобы быть десктопной системой номер один, и ещё делать кучу других продуктов. Учитывая ещё и качество Линукса, в котором уже каждую неделю находят дыру, вообще есть сомнения в том, что открытая модель разработки имеет смысл. Да и мне что-то кажется, что большинство современных разработчиков линукса пишут его за зарплату, а не за светлую идею. Те времена прошли.

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

Другой язык программирования и другой язык общения команды этому очень помогут. Проблема нашей страны в том, что уже сделана стратегическая ставка на линукс, это очень плохо. Вот подождём, может Касперский со своей ОС заменит. Но можно и не дождаться. Плюс к тому, русский язык сам по себе нуждается в защите и это часть политики нашего государства. Поэтому вроде как государство должно было бы помочь, однако этого пока не случилось. Поэтому я и пишу во всякие форумы - остаётся делать ставку только на добровольцев. Найти хотя бы пару толковых - это уже будет прорыв. Если в России примерно 450 тыс. программистов. Даже на Хабре был опрос, где 15% прочитавших статью о программировании на русском языке отнеслись к этой идее положительно (70% были против). Т.е. цифры говорят о том, что число моих потенциальных соратников составляет 67 тыс. человек (конечно, замер неточный, но по ощущением, порядка 10% лояльны к этой идее, видимо, те, кто читали статью, изначально были более лояльны к идее). Нужно до них донести мой проект и думаю, что два соратника во всей России должно найтись.

Блин, как я много пишу, пора уже завязывать.

Открой тему в Development и начни с краткого перечисления особенностей, целей и краткого обзора.

Реп у меня в профиле, там всё написано: https://gitlab.com/budden/ja-o-s

@hummer

Отправлены во временный игнор Obersterj (Мюнхен) и zabbal (Берлин) и Exmor_RS (город не указан). Пожалуйста, учитывайте это, отвечая на комментарии.

 , ,

den73 ()

чтение любого файла так, как будто он utf-8

Я хочу открывать любой файл так, как будто он utf-8. При этом в реальности там может быть смесь двоичных данных и utf-8. Хочу алгоритм, который будет читать любой файл без потери данных, а utf-8 читать как последовательность символов юникода.

Предлагается такой алгоритм:

Пытаемся читать символ юникода. Если получилось, то ок. Если не получилось, то мы прочитали сколько-то (не более 5-6) байт, и дальше поняли, что что-то пошло не так. В этом случае, мы для каждого байта возвращаем знак-заменитель U+FFFD � , а за ним символ юникода с кодом, численно равным этому байту (как 8-разрядному беззнаковому целому). Если попался просто знак-заменитель, то мы его удваиваем. В итоге, независимо от того, является ли данный поток правильным utf-8, с ошибками, или вообще не utf-8, наш «чтец» вернёт всю информацию, которая была в потоке, без потерь.

Вопросы:

  • не изобрёл ли я велосипед?
  • нужно ли что-то делать с особыми кодами, U+FFFE, U+FFFF?
  • какие грабли я не предусмотрел?

 ,

den73 ()

как назвать контейнер?

Вот у меня есть тип, который включает в себя массив (кусок памяти). В массиве каждый бит изображает число от 0 до Размер-1. И таким образом реализовано множество целых чисел. Тип мутабельный. Доступ не потокобезопасный. Диапазон чисел, к-рые могут храниться, фиксируется в момент создания. Отрицательные числа хранить нельзя.

Задача на 5: как назвать такой контейнер?

Если его назвать так, чтобы название отражало смысл, то получится что-то типа:

ПодмножествоФиксированногоОтрезкаЦелыхОтНуляДоЭнМутабельноеОднопоточноеБезЗащитыНаБитовомВекторе.

А если название не отражает смысл, то оно проживёт до момента, когда появится немутабельное или с поддержкой параллельного доступа, или с изменяемым размером. У нас в лиспе никогда не было этих вот STL-ей и стандартных контейнеров от Явы. Да и в SQL тоже как-то мало разных контейнеров.

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

 , , ,

den73 ()

Помогайте с переводом

Начал переводить с отладчика. Следующие слова вызывают сложности:

  • -breakpoint- (ТочкаОстанова)
  • align client - я перевёл как РазмещЗалить, но не нравится. По смыслу это значит, что есть align top, left, bottom, right, client. Т.е. разместить данный виджет сверху, слева, внизу, справа, или залить им всё оставшееся после вот этих вот прилепленных к краям виджетов место в хозяйском виджете. Можно ещё «заполнить» - тоже вроде имеет смысл
  • -toolBar- панель инструментов (спасибо за короткие варианты, но больше не надо. Хотя… как у велика эта штука называется, не бардачок, а как же?), готовальня
  • отладчик в состоянии, когда выполнение остановлено - было dbgBreak, как сделать - состПриостановлен ?
  • next - популярная в обероне вещь для односвязных списков. Переводил как «след», но возникает конфликт со словом «след». Соответственно, следщ. Думаю, не очень ужасно. Варианты - сл, следующий(ая), затем, ещё, за, после, вперёд.
  • previous - для двусвязных, перед, До, назад, взад
  • init (конструктор объекта, слово Init из Паскаля) - варианты иниц, родись, констр, ЯвисьОкно, СтройсяОкно - на самом деле это «СтройСяОкно».
  • object - сущность, существо, субъект, машина, вещь (явисьВещь, служиВещь, сломайсяВещь, исчезниВещь) - ообъект

Те, кто считает, что программирование на русском языке не нужно, сразу идут лесом.

 , ,

den73 ()

Новый язык программирования для русскоговорящих

Синтаксис от Хаскеля, семантика от Ракета.

факториал(сч) =
  если (сч == 1)
    1
    сч * факториал (сч - 1)

фибоначчи(сч) =
  если (сч < 3)
       1
       пусть рекурсия (н-1 1; н 2; тек-сч 3)
         если (сч == тек-сч) н $ рекурсия н (н + н-1) $ тек-сч + 1

Будет ещё конструкция надо-быстро с семантикой от Си (и использованием gcc).

Исходники: https://github.com/Kalimehtar/russian-lang

Пакет для Ракета: https://pkgd.racket-lang.org/pkgn/package/russian-lang

Документация: https://docs.racket-lang.org/russian-lang/index.html

 , ,

monk ()

Сделать так, чтобы было легко отличать русскую «эс» (с) от латинской «ц» (c)

Занялся решением вопроса неотличимости с от c. Вопрос решается двумя способами:

  • сделать кнопку, как в Яре, к-рая подчёркивает латиницу.
  • сделать шрифт

Начал делать шрифт, получились симпатичные глазастые буквы.

Соответственно, вопрос - куда добавлять глаза - в латиницу или в кириллицу?

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

Первоисточник

И ещё вопрос - кто может это сделать? Мне нужно переделать все шрифты DejaVu, в общей сложности это до сотни глифов (не считал на самом деле). Или нужен доброволец, или нужен недорогой исполнитель, который за это возьмётся. Или… хотя бы дорогой исполнитель. На примере одной буквы я это сделал, т.е. в принципе, я могу это сделать и сам, но лучше пусть это сделает кто-нибудь другой.

Ряд ссылок на тему шрифтов, к-рые я накачал во время изучения:

Не, ссылок пока не будет, может потом… Куда-то делись.

Итог темы

Сделал режим подчёркивания латиницы, который можно отключить командой главного меню, http://вече.программирование-по-русски.рф/viewtopic.php?f=5&t=91&p=1571#p1571

Шрифт с отличающимся начертанием кириллицы можно попробовать сделтаь как-то так:

http://вече.программирование-по-русски.рф/viewtopic.php?f=2&t=268&sid=023381a8c0b0dacdc8c6735ac37aafe7&start=10#p1570

 , , , ,

den73 ()

Добавил поддержку русских ключевых слов и идентификаторов в ЯОС

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

Выглядит это вот так,

https://gitlab.com/budden/jaos/-/blob/яос/док/реклама/ао-с-кириллицей-2020-06-12.png

Пример исходника:

модуль Proba; 

использует Commands; 

конст Ойляля* = 80000;

тип дача* = объект
	перем 
		баня* : INTEGER;
		дом* : INTEGER 
		
	проц &Стройсь(ценаДома, ценаБани : INTEGER);
	тело
		дом := ценаДома;
		сам.баня := ценаБани кн Стройсь кн дача;
		
проц Процедурка*(ц: Commands.Context);
перем д: дача;
тело
	NEW(д, 1000000, 500000);
	ц.out.Int(Ойляля + д.баня + д.дом,0); 
	ц.out.String("... Мечта сбывается..."); 
	ц.out.Ln; ц.out.Update кн Процедурка;

проц ЗабылиСтереть; тело кн ЗабылиСтереть;

проц Test*(ц: Commands.Context);
тело
 Процедурка(ц) кн Test;

кн Proba.  

Всё остальное см. в репозитории https://gitlab.com/budden/jaos

 , , , ,

den73 ()

Как и где собрать денег на доработку ОС на русском языке?

Потихоньку пилю ОС на русском языке на базе A2. Общая идея состоит в том, чтобы перевести исходные тексты. Пока что существенно улучшены инструменты (IDE, отладчик, логгер), некоторые вещи оживлены с помощью разработчиков A2 (веб-браузер, запуск в вирт. машине), расширил область возможного применения кириллицы (шрифты, раскраска исходного текста, ввод-вывод, богатый текст). Занимаюсь внедрением UTF32 в тех нужных местах, где сейчас внутри системы используется ASCII или UTF8. Как только с этим будет закончено, буду учить компилятор поддержке кириллицы в ключевых словах и идентификаторах, а потом буду делать средства поддержки машинного перевода, чтобы можно было с минимальными трудозатратами сделать русскоязычную версию.

На этой неделе впервые в истории проекта потратил деньги на наёмный труд - примерно 1500 рублей. Раньше я если куда-то ходил просить, то просил не менее миллиона рублей, чтобы уйти с работы и заняться разработкой плотно хотя бы в течение года. Теперь открывается возможность помогать делу с помощью малых денежных сумм. Соответственно, вопрос - реально ли набрать где-то эти копейки? Тратить свои как-то не особа охота - я и так уже вкладываю свой труд, думается, порядка 500-1000 коммитов за год, хотя я не считал. Соответственно, это должна быть некая площадка, имеющая отношение к ИТ и к патриотизму. Или хотя бы просто к патриотизму, или хотя бы просто к ИТ. Сумма, начиная с которой имеет смысл заморачиваться - это порядка 5 тыр в месяц. Есть ли вообще прецеденты краудфандинга странных вещей в области ИТ+патриотизм? Сколько денег удаётся на такое набрать?

 , ,

den73 ()

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

Думаю, кто-то помнит тему Новая версия Яролита (форк ГОСТ 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 ()

Какой выдумать или создать формат для конфигов?

Хочу для своего упражнения использовать yaml. Вроде голанг его умеет читать и писать. Что говорит на эту тему духовенство? Уместен ли такой формат или же лучше взять что-то другое?

json не хочу по той причине, что в него нельзя вставлять комментарии, xml слишком многословен.

==========================================

Решение: взят обычный json, который читает - пишет структуру. Для комментария в структуре предусмотрено специальное поле Comment. Это не так удобно, зато гомоиконно.

Если в конфиге задано поле, отсутствующее в структуре, например, если название поля написано с опечаткой, то будет ошибка чтения конфига. Это важно, поскольку толерантность многих программ к опечаткам в конфигах приводит к тому, что можно часами сидеть и искать ответ на вопрос «ну почему же это дерьмо не работает»?

Код такой:

package main

import (
	"strings"; "fmt"; "os"
	"encoding/json"
	"io/ioutil"
	// "github.com/flynn/json5"
)

type SecretConfigDataStruct struct {
	Comment       string
	RecieverEMail string
	SMTPServer    string
	SMTPUser      string
	SMTPPassword  string
	SenderEMail   string }

var SecretConfigData SecretConfigDataStruct

func (sds *SecretConfigDataStruct) SaveToFile(filename string) (err error) {
	var text []byte
	text, err = json.MarshalIndent(sds,""," ")
	if err != nil { return	}	
	err = ioutil.WriteFile(filename, text, 0600)
	return }

const ConfigFileName = "secret-data.config.json"

// for development
func saveSecretConfigDataExample() {
	sds := SecretConfigDataStruct{
		Comment:       "Example config file. Copy this one to the secret-data.config.json and edit",
		SenderEMail:   "den@example.net",
		RecieverEMail: "world@example.net",
		SMTPServer:    "smtp.example.net",
		SMTPUser:      "Кирилл",
		SMTPPassword:  "bla-bla-bla"}
	err := sds.SaveToFile(ConfigFileName + ".example")
	if err != nil {	panic(err)	}}

func loadSecretConfigData() (err error) {
	sds := &SecretConfigData
	fn := ConfigFileName
	if _, err = os.Stat(fn); os.IsNotExist(err) {
		fmt.Printf("No config file %s found. Create one by copying from %s.example\n",
			fn, fn)
		return	}
	var bytes []byte
	bytes, err = ioutil.ReadFile(fn)
	if err != nil {
		fmt.Printf("Unable to read config %s\n", fn)
		return	}
		dec := json.NewDecoder(strings.NewReader(string(bytes)))
		dec.DisallowUnknownFields() 
		err = dec.Decode(sds)
	if err != nil {
		fmt.Printf("Error reading config file %s: %#v\n", fn, err)
		return	}
	fmt.Printf("playWithSecretConfigData returned %#v\n", sds)
	return }

 , , ,

den73 ()

питонизируем си, js и иже с ними

Когда я изобретал «Яр», я думал про синтаксис. С одной стороны, всем хорош Питон: в нём минимум лишнего. С другой, достаточно случайно задеть пробел и строчка кода втянется внутрь цикла или ветвления. Т.е. надёжность такого синтаксиса плохая. Как же скрестить коня и трепетную лань? А очень просто - нужно всего лишь поменять стиль отступов в Си-образных языках, и получится вот что:

function showTableStructure() {
  if (name.length == 0) {
    alert("Please select a table!");
    return;  }

  getTableStructure(name, { type: getCurrentObject().type }, 
   function(data) {
    buildTable(data);
    $("#results").addClass("no-crop");});}

Налицо питонячья компактность и при этом сишная надёжность. Но стало опять похоже на лисп...

 , ,

den73 ()

ищется учебный компилятор/линкер

Ищется компилятор и линкер простого языка в машинный код для учебных целей. Сейчас копаюсь с Обероном КП (тж известен, как blackboxcomponentbuilder), но он написан, по моим понятиям, достаточно плохо - оптимизирован под однопроходность и ещё есть ряд проблем. Из его плюсов - в нём есть горячая замена модулей и динамическая загрузка, компилятор и компоновщик встроены прямо в рантайм, достаточно мощная интроспекция, наличие безопасных и опасных примитивов, сборка мусора, загрузка библиотек, написанных на иных языках, отладчик.

Я думаю, что скорее всего аналогов у него нет и искать безполезно, но вдруг что-то подобное всё же есть.

 , , , ,

den73 ()

яролит взад

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

a b c d e f g h i j k l m n o p q r s t u v w x y z
а б ц д е ф г ш и й к л м н о п ь р с т у в ю х ы з
Здесь по возможности пары подобраны так, чтобы совпадать с яролитом. Некоторые буквы кириллицы кодируются диграфами и для них это невозможно. Но если записать все констрейнты и решить их, то по сути выбора нет - задача решается однозначно. Например, в яролите й = jj. Очевидно, что в обратном яролите j = й. ш = sh, отсюда вытекает, что в обратном яролите h = ш. И т.п. Вот как надо писать:
линух.орг.ру
йошн леннон
гит цлоне шттпс://гитшуб.цом/алтоцмс
гит цшекоут -ф девелоп
мосцою
спутник
новицшок
ыандех тахи 

Для устранения неоднозначности в чатах можно в неочевидных слуаях писать:

Вставим ,енглисш ,аббревиатион ,ОС в русское предложение
ОС здесь неоднозначно, т.к. может быть ОС в русском и OS в английском, и даже значит одно и то же. Запятая перед словом является грамматической ошибкой, что позволяет использовать её для обозначения того, что следующее слово - английское, записанное транслитом.

Самое смешное, что на работе мы его уже используем в чате. Т.е. по сути уже есть одно внедрение. Правда, я пока не знаю, что думает про нас третий русскоязычный пользователь :)

Экономия на двух переключениях вполне ощутима, всё понятно, информацию можно передать точно и иногда можно поржать над тем, что получается (вплоть до упадения под стол), что делает работу веселее. Правда, мой коллега предлагает другой вариант:

h x 
Х Ш 
Интересно узнать ваше мнение - какой вариант лучше. Ну и присылайте свои смешные переводы.

 ,

den73 ()

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

Выпущена новая версия яролита. Она почти равна русскому подмножеству ГОСТ 16876-71 (ISO/R 9:1968) (так случайно получилось).

V chashhakh juga zhil by citrus? Da, no falqshivyjj ehkzempljar!

Отличия от ГОСТ:

ь = q (перевернули мягкий знак)
ъ = jq (твёрдый знак разрезали и перевернули)
† = j8224j // любой юникод тоже представим
// Переключение языка с помощью последовательности
Ajj da xesukin xrsyn
// Добавлены дореформенные буквы (но их выкину в пользу братских и "небратских")
http://программирование-по-русски.рф/яролит.яргт/

Дальше изучаем тему. Буду складывать сюда всё, что найду:

http://meganorm.ru/Data2/1/4294835/4294835719.pdf - ГОСТ (ныне упразднён)

https://www.iso.org/standard/3587.html - история

https://www.ub2000.de/ru/kachestvo-perevodov/zaverennye-perevody-soglasno-sta... - пример использования (некоторые организации в германии требуют перевод по этому стандарту)

http://userscripts-mirror.org/scripts/review/89883 - кодировщик на JS для 1968 - неправильный, т.к. в нём й = j, а должно быть jj.

 , ,

den73 ()

Сколько времени собирается javascript v8?

Вдруг кто-нибудь пробовал? И насколько этот процесс муторный?

 ,

den73 ()

Использование пробела в качестве Alt_R в xkb и создание Яро-раскладки

Я доделал Яро-раскладку под офтопик на базе AutoHotkey, и она вроде работает. Теперь хочу такую же под Linux. У меня какой-то из довольно новых дебианов с Lxde, раскладка должна органично вписаться в эту среду, ну и вообще, быть совместимой.

Вот веб-версия: http://программирование-по-русски.рф/яроклава-js.яргт

Вот текущая версия для AutoHotkey (Win only).

;;;; Этот файл должен быть в кодировке utf-8 с BOM. 
;;;; Яро-раскладка
;;;; Общая идея такова:
;;;;  Пробел становится модификатором, который 
;;;;  позволяет, не выходя из русской раскладки  набивать латиницу и некоторые спец.значки
;;;;  При этом оставлен только один способ набивать
;;;;  знаки препинания .,:;/\, это позволяет меньше путаться.
;;;;  
;;;;  Проверено на AutoHotkey v1.1.29.01 (Unicode 64-bit), 
;;;;  под Windows 10.
;;;; 
;;;;  https://bitbucket.org/budden/iaroklava-js
;;;;  http://программирование-по-русски/яроклава-js.яргт
;;;;
;;;;  (C) Денис Будяк 2018, budden73@mail.ru
;;;;  Код распространяется по лицензии MIT 
;;;; 
;;;;  Установка: инсталлируйте программу AutoHotkey
;;;;  скопируйте этот файл в свою папку "документы" 
;;;;  и запустите AutoHotkey. 

#UseHook, On

; $vk41:: Print("{vk41}","{U+263C}") ; Space+A -> Sun

;;; Нижеследующий фрагмент генерируется так:
;;; - откройте пример.html в браузере
;;; - откройте консоль (F12)
;;; - вызовите ГенерируйКодДляAutoHotKey()
$vkc0:: Нажато("{vkc0}","~")
$+vkc0:: Нажато("+{vkc0}","`")
$vk31:: Нажато("{vk31}","☼")
$+vk31:: Нажато("+{vk31}","≠")
$vk32:: Нажато("{vk32}","@")
$+vk32:: Нажато("+{vk32}","@")
$vk33:: Нажато("{vk33}","#")
$+vk33:: Нажато("+{vk33}","§")
$vk34:: Нажато("{vk34}","$")
$+vk34:: Нажато("+{vk34}","†")
$vk35:: Нажато("{vk35}","°")
$+vk35:: Нажато("+{vk35}","<НЕТ>")
$vk36:: Нажато("{vk36}","^")
$+vk36:: Нажато("+{vk36}","☭")
$vk37:: Нажато("{vk37}","&")
$+vk37:: Нажато("+{vk37}","¿")
$vk38:: Нажато("{vk38}","<НЕТ>")
$+vk38:: Нажато("+{vk38}","<НЕТ>")
$vk39:: Нажато("{vk39}","<НЕТ>")
$+vk39:: Нажато("+{vk39}","<НЕТ>")
$vk30:: Нажато("{vk30}","<НЕТ>")
$+vk30:: Нажато("+{vk30}","<НЕТ>")
$vkbd:: Нажато("{vkbd}","<НЕТ>")
$+vkbd:: Нажато("+{vkbd}","<НЕТ>")
$vkbb:: Нажато("{vkbb}","≈")
$+vkbb:: Нажато("+{vkbb}","≡")
$vk51:: Нажато("{vk51}","q")
$+vk51:: Нажато("+{vk51}","Q")
$vk57:: Нажато("{vk57}","w")
$+vk57:: Нажато("+{vk57}","W")
$vk45:: Нажато("{vk45}","e")
$+vk45:: Нажато("+{vk45}","E")
$vk52:: Нажато("{vk52}","r")
$+vk52:: Нажато("+{vk52}","R")
$vk54:: Нажато("{vk54}","t")
$+vk54:: Нажато("+{vk54}","T")
$vk59:: Нажато("{vk59}","y")
$+vk59:: Нажато("+{vk59}","Y")
$vk55:: Нажато("{vk55}","u")
$+vk55:: Нажато("+{vk55}","U")
$vk49:: Нажато("{vk49}","i")
$+vk49:: Нажато("+{vk49}","I")
$vk4f:: Нажато("{vk4f}","o")
$+vk4f:: Нажато("+{vk4f}","O")
$vk50:: Нажато("{vk50}","p")
$+vk50:: Нажато("+{vk50}","P")
$vkdb:: Нажато("{vkdb}","[")
$+vkdb:: Нажато("+{vkdb}","{{}")
$vkdd:: Нажато("{vkdd}","]")
$+vkdd:: Нажато("+{vkdd}","{}}")
$vkdc:: Нажато("{vkdc}","|")
$+vkdc:: Нажато("+{vkdc}","<НЕТ>")
$vk41:: Нажато("{vk41}","a")
$+vk41:: Нажато("+{vk41}","A")
$vk53:: Нажато("{vk53}","s")
$+vk53:: Нажато("+{vk53}","S")
$vk44:: Нажато("{vk44}","d")
$+vk44:: Нажато("+{vk44}","D")
$vk46:: Нажато("{vk46}","f")
$+vk46:: Нажато("+{vk46}","F")
$vk47:: Нажато("{vk47}","g")
$+vk47:: Нажато("+{vk47}","G")
$vk48:: Нажато("{vk48}","h")
$+vk48:: Нажато("+{vk48}","H")
$vk4a:: Нажато("{vk4a}","j")
$+vk4a:: Нажато("+{vk4a}","J")
$vk4b:: Нажато("{vk4b}","k")
$+vk4b:: Нажато("+{vk4b}","K")
$vk4c:: Нажато("{vk4c}","l")
$+vk4c:: Нажато("+{vk4c}","L")
$vkba:: Нажато("{vkba}","<НЕТ>")
$+vkba:: Нажато("+{vkba}","<НЕТ>")
$vkde:: Нажато("{vkde}","'")
$+vkde:: Нажато("+{vkde}","<НЕТ>")
$vk5a:: Нажато("{vk5a}","z")
$+vk5a:: Нажато("+{vk5a}","Z")
$vk58:: Нажато("{vk58}","x")
$+vk58:: Нажато("+{vk58}","X")
$vk43:: Нажато("{vk43}","c")
$+vk43:: Нажато("+{vk43}","C")
$vk56:: Нажато("{vk56}","v")
$+vk56:: Нажато("+{vk56}","V")
$vk42:: Нажато("{vk42}","b")
$+vk42:: Нажато("+{vk42}","B")
$vk4e:: Нажато("{vk4e}","n")
$+vk4e:: Нажато("+{vk4e}","N")
$vk4d:: Нажато("{vk4d}","m")
$+vk4d:: Нажато("+{vk4d}","M")
$vkbc:: Нажато("{vkbc}","<")
$+vkbc:: Нажато("+{vkbc}","«")
$vkbe:: Нажато("{vkbe}",">")
$+vkbe:: Нажато("+{vkbe}","»")
;;; !!!! ИЗМЕНЕНО ВРУЧНУЮ, СМ. НИЖЕ! $vkbf:: Нажато("{vkbf}","<НЕТ>")
$+vkbf:: Нажато("+{vkbf}","♥")
;;; Конец сгенерированного фрагмента

;; дублируем пробел, как "пробел+буква справа от ю"
$vkbf:: Нажато("{vkbf}"," ")

ПробелУдерживается := 0
ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи := 0

$Space::
  ; Critical
  ПробелУдерживается := 1
  ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи := 0
  ; Critical off
  Return

$+Space::
  ; Critical
  ПробелУдерживается := 1
  ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи := 0
  ; Critical off
  Return

$Space Up:: 
  ; Critical
  if (ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи == 0) {
    ; Critical off
    Send, {Space}
  }
  ПробелУдерживается := 0
  ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи := 0
  ; Critical off
  Return

$+Space Up:: 
  ; Critical
  if (ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи == 0) {
    ; Critical off
    Send, +{Space}
  }
  ПробелУдерживается := 0
  ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи := 0
  ; Critical off
  Return
 

Нажато(vk,s)
{
  Global
  if (ПробелУдерживается == 1) {
    ДругаяКнопкаБылаНажатаВоВремяУдержанияПробелаЛи := 1
    ; Critical off
    SendInput, %s%
  } Else {
    ; Critical off
    SendEvent, %vk%
  }
}

Тут, я вижу, судя по соседним темам, есть виртуозы xmodmap, которые наверняка могут такое сделать за 5 минут. Но когда я в прошлый раз пытался предложить, никто в итоге ничего не сделал и даже частично сделанную работу никто сдать не попытался.

Теперь попробую воспроизвести под Linux

P.S. для тех, кто нагуглит эту тему подвожу итог: решение находится здесь (но, возможно, переедет на gitlab или github в связи с нестабильностью bitbucket): https://bitbucket.org/budden/iaroklava-js/src/master/linux/Яроклава-для-debia...

 , , , ,

den73 ()

Создание транспилятора в tcl?

Посмотрел буквально в течение 30 минут, как работает tclsh. Парсер команды прибит гвоздями. В этом свете неясно, насколько успешным могло бы быть предложение сделать язык, компилирующий в байт-коды тикля, библиотекой. MKuznetsov, что думаешь насчёт транспилятора в tcl? Т.е. отдельного компилятора (написанного хоть на tcl), который на выходе даёт код tcl?

 , ,

den73 ()

Почему на tcl можно писать, будучи пьяным в дугу?

Цитата с https://lurkmore.to/Tcl

Tcl (от англ. tickling — щекотание, тикль) — когда-то популярный среди бородатых дядек и тетек программируемый язык метапрограммирования, позволяющий запрограммировать все то, что можно напрограммировать на Си, находясь при этом в дугу пьяным.

собственно, на этом всё :) Это была чувствительная информация, полезная для разработки передовых языков программирования. Но раз тут никто не хочет это обсуждать, то и нефиг ей тут светиться :)

 , ,

den73 ()