Как я 12 лет создавал свой ЯП и компилятор к нему



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

Здравствуй, читатель! Меня зовут Александр, родился я в небольшом городке (меньше 10000 человек) в Беларуси. Моя семья была бедной, игрушек крайне мало, про компьютер и какие либо приставки вообще можно не заикаться. Не смотря на то, что семья была бедной, у матери были не бедные родственники, которые иногда дарили нам какие либо не дешевые вещи. И вот однажды (где то в 2001 году) эти самые родственники, дарят нам компьютер «Байт»(советский аналог ZX Spectrum 48k). Радости моей не было предела! Сразу же я начал, запускать на нем игры. Игры на этом компьютере загружались с обычных аудиокассет с магнитной лентой. Загрузка одной игры длилась примерно 5 минут и с не малой вероятностью, могла прекратиться из-за некачественного сигнала. Чтобы увеличить вероятность успешной загрузки, мне приходилось протирать спиртом и регулировать положение считывающей головки магнитофона. Весь этот шаманизм при загрузке, длительность загрузки и невозможность сохраняться в играх, привели к тому, что постепенно я начал терять интерес к играм. Но вместе с «Байт»-ом мне также подарили книгу, по работе с этим компьютером. Я решил прочитать эту книгу, чтобы узнать больше о возможностях «Байт»-а. В книге оказался учебник по встроенному в «Байт» языку программирования «Бэйсик».

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

Примерно через год, после событий описанных выше, у меня в школе появляется информатика. Со временем на уроках нас начинают учить программированию в программе «ИнтАл». На уроках мы программировали мало, так как было много других материалов не связанных с программированием, а также работали за компьютерами по очереди (компьютеров было меньше, чем учеников). Но в нашей школе был факультатив по информатике и я решил туда записаться, с надеждой, что на факультативе мне дадут больше программировать. На факультативе мы начали изучать Turbo Pascal, с первого момента мне язык очень понравился. Там были записи(они же структуры), юниты(они же модули и библиотеки), процедуры и функции. Это был какой то новый прекрасный мир, прекраснее чем все, что я знал до этого. Начав изучать паскаль, я окончательно решил, что хочу стать программистом.

Закончив 9 классов школы, у меня появился выбор, пойти в какой либо колледж, либо пойти в 10 класс. Я решил пойти в лицей, по специальности оператор ЭВМ с углубленным изучением физики, математики, астрономии и информатики. Многие люди говорили, что если я отучусь по этой специальности, то мне будет проще поступить в ВУЗ на программиста. На решение вступительного экзамена давалось три часа, я использовал только 30 минут, из которых 10 я проверял, все ли правильно. Поступил! В лицее я продолжил изучать Pascal, но также начал изучать Photoshop, Corel Draw, Excel, командную строку Windows и .bat файлы.

Узнав, что я поступил, те самые родственники которые подарили мне «Байт», подарили мне новый компьютер со следующими характеристиками: одно-ядерный Intel Celeron 800 Mhz, 64 Mb оперативной памяти, 14 Gb жёсткий диск, встроенное видео с разрешением 640 x 480 и 16 цветов. Родители скинулись и сделали апгрейд, купив 64 Mb оперативной памяти и видео карту Matrox Milenium g400 16 Mb, c поддержкой 16 миллионов цветов, разрешение стало 800 x 600 (ограничение монитора). В то время доступа в интернет почти не у кого не было, вся информация в основном бралась с дисков, которые продавались в магазинах.

Один из моих друзей купил несколько дисков по программированию на языке Delphi, на дисках был Borland Delphi 7, куча учебников, куча компонентов и программа с большим количеством вопросов по Delphi и с ответами на эти вопросы (эдакий офлайн StackOverflow на минималках).

Все было настолько просто и удобно, что программы писались одна за другой. Так же в библиотеке лицея был учебник по программированию на языке C. Прочитав её, я понял, что мне C совершенно не нравится, Pascal и тем более Delphi мне нравились в разы больше. C сложнее и не так удобен, единственное, что мне в нем понравилось — вместо begin end используются фигурные скобки. Но не нужно думать, что Pascal был для меня идеальным языком, со временем многие вещи в языке стали меня раздражать(помимо begin end). Например мне хотелось, чтобы строки и массивы были структурами со следующими полями: указатель на область памяти с данными, количество элементов, максимальное количество элементов которое может вместить область памяти на которую указывает указатель, чтобы несколько массивов или строк могли указывать на одну и туже область памяти и можно было создавать массив из куска другого массива не копируя элементы. Как позже выяснилось, такие массивы как я хотел, называются слайсами. Мне тогда захотелось написать транслятор который переводит из такого изменённого паскаля в обычный, но я отказался от этой идеи.

Тот самый друг который познакомил меня с Delphi, сказал, что некая компания бесплатно рассылает диски с какими-то Ubuntu и Kubuntu. Я даже не знал, что это такое, но он бесплатно дал мне 2 диска. Ubuntu у меня не запустилась, а вот Kubuntu запустилась и очень хорошо работала. Я был поражён — оказывается кроме Windows и dos есть, что-то ещё. Очень хотелось поставить Kubuntu на компьютер и по изучать его, но 14 Gb диск был категорически против. К тому же к этому времени у меня уже появился интернет (5 Kb/s), а модем в Kubuntu не работал. Поэтому диск с Kubuntu был закинут на полку. Неожиданно все тот же друг, начал бредить каким то ассемблером, все показывал мне какие то программы на нём, но у меня они вызывали лишь улыбку, поскольку 50 строк ассемблера заменялись одной строкой Delphi, но друг всё же уговорил меня попробовать и дал диск с FASM и учебниками по ассемблеру. Ассемблер мне не понравился, хотя макросы в FASM — классная штука.

И вот я закончил лицей, пришло время поступать в ВУЗ. Но незадолго до окончания лицея, я начал подрабатывать в интернете. В интернете есть куча мошенников которые, притворяются успешными предпринимателями и предлагают доверчивым пользователям следующую сделку — «Дайте нам хотя бы доллар, а через 2 недели мы вернем вам 2 доллара». Если этим мошенникам дать доллар, то как ни странно, через 2 недели они действительно возвращают 2 доллара, но если дать 10 то через 2 недели, будет указано, что у меня на счету 20 долларов, но снять их будет невозможно. Я создавал множество почтовых ящиков и используя различные почтовые ящики и меняя ip адрес (у меня был динамический ip), регистрировал на сайтах мошенников множество аккаунтов, каждый раз кладя на них 1 доллар. Учитывая то, что я таким образом уже немного зарабатывал, меня стала посещать мысль — «А может мне не идти в ВУЗ? Программировать в своё удовольствие я могу и без ВУЗ'а.». К этой мысли меня также склоняло и то, что в интернете часто писали, что программисту вышка не нужна. В то время как я размышлял — «поступать или не поступать?», жизнь за меня решила сама. Мой отец зарегистрировался на сайте знакомств, нашёл себе новую любовь и кинул меня с матерью. Понимая, что мать одна не сможет меня содержать, пока я буду учиться, я не стал поступать в ВУЗ. После лицея я обязан был отработать год на каком либо предприятии. Я устроился по специальности в продуктовый магазин, занимался выпиской ТТН и ввод пришедшего в магазин товара в компьютер. Немного поработав в магазине, я написал программу которая анализирует базу данных продуктов в магазине и ищет потенциальные проблемы. После этого в компании, которая владела магазином, предложили перевестись к ним на должность программиста, но узнав, что у меня нет высшего образования — передумали. И я остался дальше работать в магазине. Зарплата у меня была не плохая, а вот доход от мошенников был очень скромным. Низкими доходы были потому, что регистрация аккаунтов занимала много времени, а в Беларуси было очень тяжело работать с интернет деньгами. Liberty Reserve — интернет деньги, работу которых обеспечивал банк в Коста-Рике, который не выдавал информацию о своих клиентах правительству, из-за чего большинство мошенников и использовали Liberty Reserve.

Покупать эти деньги в Беларуси было особо затруднительно, так как в автоматическом обменники приходилось платить в семь раз дороже(если память не изменяет), а покупать у людей было рискованным занятием. Я перестал обманывать мошенников и получал доход, только от работы. Отработав год, решил поискать, что нибудь по лучше. У меня была на руках не плохая сумма денег и я решил обновить свой компьютер. Характеристики нового ПК: AMD Athlon 64 x2 2600 (с поддержкой SSE2 инструкций, которых не было в предыдущем процессоре. Это важно!), 1 Gb оперативной памяти, 80 Gb жёсткий диск. Вспомнив о том, что я хотел по изучать Kubuntu но у меня был слишком маленькие жёсткий диск, я решил поставить Linux и Windows одновременно, поскольку с диском у меня проблем уже не было. Сходив в магазин компьютерных дисков, мною был приобретен диск с openSUSE 10.2. Моей новой работой стала починка компьютеров в одной из компаний моего города, с испытательным сроком в один месяц. Начальник этой компании, а также его жена разрабатывали некое бухгалтерское ПО, узнав, что я увлекаюсь программированием, они предложили присоединится за процент от будущих продаж, но поскольку разработку они вели на Visual FoxPro и SQL, мне необходимо было выучить эти языки. Я согласился. Через месяц оказалось, что они и не собирались меня брать на работу, а нужен я им был, чтобы подменить ушедшего в отпуск сотрудника, когда он вернулся, они сказали, что я им больше не нужен, но все же хотели, чтобы я им помог с разработкой, я разумеется отказался и начал искать новую работу. Несколько месяцев безуспешных поисков привели к тому, что я пошёл на стройку подсобным рабочим.

Зарплата у подсобного рабочего была в 3.5 раза меньше чем у оператора ЭВМ в магазине, но надо сказать, что и работа на порядок проще(я был крепким парнем). В выходные дни, используя FASM, я начал изучать эти новые для меня SSE2 инструкции. Поэкспериментировав я понял, что в некоторых задачах, эти инструкции могут значительно увеличить производительность. Мне стало интересно, как разработчики ПО встраивают в свои приложения SSE2 инструкции, ведь если все задачи в которых имеет смысл использовать SSE2, будут решены с их использованием — то программа не будет запускаться на компьютерах без поддержки SSE2, но если их не использовать — то программа будет работать медленнее. Конечно можно в начале программы узнать, есть ли у процессора поддержка SSE2, и в зависимость от результата выполнять разный код, но в таком случае увеличивается сложность разработки и тестирования, а также увеличенное потребление оперативной памяти и кэша процессора. Проанализировав несколько программ, я увидел, что большинство программ не использует SSE2. И тут я задался вопросом «А почему компиляторы не компилируют в ассемблер с макросами, а на компьютере конечного пользователя некая утилита не заполнит необходимые для макросов константы и только после этого создаётся бинарник?». И я, вспомнив про видоизмененный паскаль, который я придумал в лицее, решил написать такой компилятор. Так же мной было принято решение, добавить в язык дженерики и язык стал выглядеть примерно так:

type Point(a){
    x, y: a;
}

type Line(a){
    a, b: Point(a);
}

function createLine(a, b: Point(a)) Line(a){
    result.a = a;
    result.b = b;
}

Со временем у меня появился интернет с нормальной скоростью и я полностью отказался от Windows в пользу Linux(было много дисков с программами для Windows, а качать их аналоги для Linux с медленным интернетом проблематично). На тот момент у меня был дистрибутив Ubuntu 8.10, но я активно интересовался и другими дистрибутивами. В какой то момент, я решил попробовать дистрибутив под названием Gentoo. Разбираясь как устанавливается Gentoo я узнал про use-флаги и сразу понял, что их поддержку нужно добавить в свой язык. То есть, при установке программы написанной на моём языке, утилита которая добавляет константы в ассемблерный код, будет также спрашивать значение констант которые определил программист при разработке и в зависимость от этих констант, макросы будут вставлять различный код. Почти закончив разработку компилятора, я из форумов узнаю о каком-то LLVM, в котором есть некий ассемблероподобный язык LLVM IR. Изучив немного, что это и с чем его едят, я решил компилировать не в FASM, а в LLVM IR, поскольку он умеет оптимизировать код, а мой компилятор практически ничего не оптимизировал, не говоря о том, что разработчики LLVM со временем наверняка будут добавлять новые оптимизации, а это значит, что мне не надо будет этого делать и я смогу сосредоточиться на других вопросах. И я начал переписывать свой компилятор. В LLVM IR помимо инструкций, были также параметры функций и параметры аргументов функций, например можно было указать, что аргумент функции, который является ссылкой, не будет скопирован. И я решил добавить такие параметры, только указывать их нужно было не при объявлении функции, а при вызове и в отличии от LLVM IR, эти параметры носили не информативный характер, для оптимизации, а были требованием поведения. Пример:

function inc(a: ^Integer) Integer{
    result = a^ + 1;
}

procedure foo(){
    var
        a: ^Integer;
        b: Integer;
    ...
    //некий код
    ...
    b = inc(ro nocp a) //если бы функция inc изменяла значение по ссылке или копировала ссылку, то код бы не компилировался
}

Со временем я уехал в Минск и устроился грузчиком, зарплата была очень хорошей (800 $/месяц), хотя времени на разработку стало меньше. Читая форумы, я стал очень часто натыкаться на упоминания языка Haskell, упоминания обычно сопровождались фразами вроде: «взрывает мозг», «очень необычно», а также упоминалось, что там есть какие-то монады, которые тяжело понять. Я не выдержал и решил изучить этот язык. Скачав целую кучу учебников по Haskell и начал учить. Взял первый учебник, написано очень мутно — удалил, взял второй, читаю и испытываю ощущение, будто все страницы перетасованы — удалил, беру третью, книга написана толково, но она как будто рассчитана на изучение через примеры(а я люблю изучить теорию, а затем подкрепить её практикой) — удалил, дело доходит до четвёртой, написано толково, изучается через теорию — похоже то, что надо. Книга называлась «Изучай Haskell во имя добра». Во время прочтения у меня не возникло ни одного вопроса, никаких проблем с монадами у меня так же не возникло. Мне настолько понравилась книга, что я пошёл и купил её бумажный экземпляр. Прочитав до конца книгу я понял, что все языки которые я видел до этого, попросту меркнут на фоне Haskell, это просто какой-то новый, недостижимый для других языков уровень. Я решил изучить Haskell глубже, прошёл курсы по Haskell(а заодно по основам статистики и языку Python), начал смотреть лекции по функциональному программированию и лямбда исчислению Чёрча.

Очень хотел изучить теорию категорий, но не нашёл никаких материалов объясняющих эту теорию простым и понятным языком. Я писал на Haskell всякие мелкие утилиты. В какой-то момент я наткнулся на вакансию Junior Haskell Developer прочитав требования я понял, что подхожу под все требования и решил попробовать. Написал резюме и откликнулся на вакансию. Думая, что мне пришлют для проверки навыков тестовое задание, я отрыл IDE, firefox + google и стал ждать ответа, ответ пришёл примерно через полтора часа где меня вежливо послали. Данная вакансия висела на сайте ещё год. Haskell стал моим основным языком и я начал писать на нём всё подряд.

Со временем я понял, что Haskell очень хорош, только если использовать декларативное программирование, но при таком раскладе программы получаются медленными и потребляющими чрезмерное количество памяти, на Haskell можно писать эффективно, но в этом случае приходится использовать императивный подход, а писать на Haskell императивно — сомнительное удовольствие! Я забросил Haskell и продолжил разработку своего компилятора, но решил добавить в свой язык функции высшего порядка и убрать фигурные скобки, а для структурирования кода использовать отступы (как в Haskell). Язык стал выглядеть так:

function lineLength(line: Line) Real
    result = sqrt(sqr(line.a.x - line.b.x) + sqr(line.a.y - line.b.y))

В какой-то момент случился кризис и мои 800$ превратились в 400$, аренда комнаты 120$ + дорога на работу и с работы + коммуналка и с зарплаты остаётся примерно 250$. А зачем мне жить в арендной комнате и получать 250$, если я могу жить в нормальной квартире и получать примерно те же деньги у себя в городе? Я решил уволиться. После увольнения у меня оставалась некоторая сумма денег и подумав, я решил — сниму жильё в любом населенном пункте Беларуси и там, нигде не работая и не на что не отвлекаясь, допишу компилятор. Я нашёл в одном городке целый дом за 35$ в месяц. Дом не большой, старый, туалет на улице, нет душа и ванной комнаты. Но ценник был очень соблазнительный, да и хозяйка сказала, то могу выедать всё, что есть в огороде, а там было много овощей и фруктов, из-за чего я мог сильно сэкономить на еде. Я согласился и заплатил аренду за 2 месяца. На перевозку всех вещей у меня ушёл целый день и заселился я только ночью, из-за чего придя домой я сразу лёг на кровать и уснул. Проснувшись, я увидел, что хлеб, который я оставил в пакете на столе, погрызен крысами, «Ну и чёрт с ним, что крысы в доме. Буду прятать продукты в металлический холодильник» — подумал я в тот момент и пошёл на улицу. Выйдя на улицу, я почувствовал покусывания в ногах, закатав колоши, я увидел кучу блох (14 штук). Изучив квартиру, я обнаружил, что они обитают в определенном месте в доме, которое находится далеко от комнаты, где я сплю, но чтобы выйти на улицу, я должен пересечь их логово. В общем, большую часть времени я находился в безопасной комнате (и блох на мне действительно в это время не появлялось), а когда нужно было выйти на улицу, я быстро пробегал через блохастую комнату, иногда даже выходя на улицу не подцепив ни одной блохи, но чаще всего 1-2 все же цеплялись. Периодически я созванивался с матерью и в одном из разговоров я рассказал про блох. Пообщавшись, мы с матерью договорились, что я возвращаюсь домой, но 3 месяца не ищу работу, а буду писать компилятор и в это время она не будет меня донимать. Вернувшись домой, я менее чем за 3 месяца дописал компилятор. Прежде чем продолжить, я хочу вам рассказать о подходе который я использую при разработке. Свой подход я со временем выработал сам и старался всегда его придерживаться(хотя иногда меня заносит и я забываю его использовать).

Подход заключается в следующем: я представляю, что существует библиотека со всеми возможными типами и функциями, кроме одной, той самой которую мне сейчас надо написать. Я пишу эту недостающую функцию (используя всю мощь функций и типов из выдуманной библиотеки), затем запускаю компилятор и если не хватает типа, создаю его, а если не хватает функции, то эта функция становится той самой которую мне необходимо написать. Сразу скажу, что сейчас я изменил свой подход, и вместо представления о том, что в библиотеке есть функции и типы, я представляю, что там есть классы и методы (даже если язык не объектно ориентированный). Когда я закончил компилятор, разумеется в нем было куча ошибок. Я начал поиск и исправление ошибок, но из-за большого количества возможностей(дженерики, параметры аргументов функций, классы типов, функции высшего порядка), ошибок было крайне много, а из-за подхода который я использовал при разработке, изменение одной функции могло приводить к изменению большой группы функций. Долгое время исправляя ошибки(а к слову говоря, больше чем искать ошибки, я ненавижу только писать юнит тесты), я наткнулся на ошибку для исправления которой необходимо переписать 60% кода. Я впал в отчаянье и думал, как мне мне сделать так, чтобы язык был простым, но поддерживал все мне необходимое. Я решил попробовать взять за основу ООП и для того, чтобы язык был простым, придерживаться следующих правил:

  1. В языке должны быть только классы, свойства и методы(ничего больше).
  2. Каждый метод, в конкретном классе должен компилироваться в одну LLVM IR функцию. То есть, в классе A есть метод m, который в не зависимости от того какие аргументы ему будут переданы, всегда компилируется в единственную LLVM IR функцию, но если B наследует A, то метод m уже компилируется в другую LLVM IR функцию.
  3. Управление памятью должно быть автоматическим.
  4. Язык не должен иметь ссылок.

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

  • Как сделать аналог классов типов из Haskell?

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

    abstract class Printable
    
    require method (Printable) print()
    method (Printable) printLn()
        this.print()
        String.eol().print()
    

  • А если нужно унаследовать от абстрактного класса существующий класс?

    Просто разрешить это делать, при условии, что существующий класс перезапишет методы, требуемые абстрактному классу. Пример:

    class Some(SomeParent)
        a, b String
    
    class Some(Some, Printable)
    
    override method (Some) print()
        this.a.print()
        this.b.print()
    

  • Как отказаться от ссылок?

    Работать с переменными только как со значениями(но 2 переменные могут содержать одно и то же значение, изменяя которое в одной переменной — изменяет и во второй).
  • А как без указателей передавать аргументы в функцию, которая должна менять эти аргументы?

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

    method (Some) foo(a :String, b String) // a - можно изменять, b - нет
        c := 10 // c можно изменять
        d .= 12 // d нельзя изменять
        с:someMethod() // вызывается метод someMethod, c передается как изменяемый объект
        c.someMethod() // вызывается метод someMethod, c передается как неизменяемый объект
        //2 метода выше, хоть и имеют одно имя, являются двумя разными методами, которые могут иметь разные сигнатуры
    

  • Как сделать дженерики?

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

    class Point
        x,y Number
    
    method (Some) foo(a Point<x UInt64, y UInt64>) //аргумент a является экземпляром класса, который является наследником класса Point, но с измененными классами свойств x и y. Разумеется новый класс свойства, должен быть наследником старого класса.
    
  • Логично, чтобы в классе Point свойства x и y всегда имели один тип.

    class Point
        x, y !Number // класс свойства x можно менять, а y всегда как x
    

  • А если свойства приватные?

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

    class Point
        numberClass #Number
        private x, y .numberClass
    
    method (Point) createPoint(x, y .numberClass) This //This - класс такой же как и у объекта к которому применяется метод
        result:x = x
        result:y = y
    

  • Как сделать так, чтобы любой метод конкретного класса имел только один вариант LLVM IR функции?

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

    method (Some) foo(a .z, b Point<numberClass .f>, c UInt64)
    //a имеет класс как у свойства z класса к которому применяется метод
    //b имеет класс который наследуется от класса Point но с измененным классом свойства numberClass, новый класс свойства имеет такой же класс как и свойство f класса к которому применяется метод
    //c всегда имеет класс UInt64, изменить его при наследовании нельзя
    

  • Как реализовать автоматическое управление памяти?

    При выделении памяти на куче, к этой памяти добавлять счётчик, которые увеличивается, если какой-то объект использует эту память и уменьшается, если какому либо объекту, эта память не нужна. Если счётчик достиг 0 — освобождать память.

Концепт выглядит неплохо, приступил к разработке с нуля. Мои три месяца прошли и пришла пора искать работу. Время тяжёлое, работы нигде нет, ходят слухи, что даже работников отдела кадров, заставляют печатать фальшивые вакансии, чтобы создать видимость, что не всё так плохо. И я верю этим слухам, так как, часто звонишь по объявлению, а мне сразу говорят — вакансия не актуальна, хотя вакансия регулярно обновляется и висит на протяжении долгого времени. Поиск хоть какой-нибудь работы занял 5 месяцев. Устроился я в департамент охраны на должность контролёр КПП, на объект находящийся в туберкулёзной больнице. В мои обязанности входило: досмотр больных и посетителей. Зарплата — 170 $/мес. Несмотря на то, что часов работы стало больше, чем на предыдущих работах, времени на разработку тоже стало больше, поскольку работа была посменная. И вот я дописал весь код, создал стандартную библиотеку, написал для библиотеки тесты.

Запустив тесты я увидел множество ошибок, в процессе их исправления я понял, что большинство из них связаны с неопределенным поведением, а устранять их крайне тяжело. Например некоторые ошибки проявлялись через раз, некоторые проявлялись на уровне оптимизации O0 и O2, но не проявлялись на O1 и O3. Конца и края ошибкам я не видел, а толкового инструментария для поиска ошибок в LLVM IR, я не нашёл. Во время изучения мною LLVM IR, я смотрел, что генерирует clang из C. В какой-то момент я понял, что превращение из C в LLVM IR занимает крайне мало времени, а основную часть занимает оптимизация LLVM IR. Так зачем я использую LLVM IR? Ведь его оптимизация все равно будет происходить на компьютере конечного пользователя.

Так почему мне не использовать C вместо LLVM IR? Я вижу только плюсы при замене LLVM IR на C: нормальные макросы, упрощение написания кода, кучу инструментария, перспектива при необходимости использовать сторонние C библиотеки. И я начал переписывать компилятор заменяя LLVM IR на C. Когда я закончил замену, я быстро нашёл и исправил все ошибки найденные в тестах. Во время написания компилятора самой распространённой моей ошибкой было изменение какого либо значения по указателю, думая, что он уникален, а на самом деле на объект по указателю указывало несколько ссылок. Я решил изменить количество уровней мутабельности переменных, this объектов и аргументов методов с 2 (мутабельные и иммутабельные) до 4. В этой статье опущено множество деталей, так как объяснение всех нюансов и тонкостей на всех этапах создания языка, заняло бы 20 — 40 таких статей (которая и так получается огромной). Но для того, чтобы понять новые уровни, все таки необходимо уточнить некоторые детали. Когда я писал про то, что 2 переменные могут содержать одни и те же данные и изменяя одну переменную, вы можете повлиять на вторую, возможно вы подумали, что при создании переменной, в куче создаётся объект, а переменная хранит указатель на этот объект, но это не так. Я очень хотел, чтобы программы на моём языке были производительны, а выделять память под каждую переменную — далеко не производительно. Поэтому при создании переменной значение хранится в переменной, но в значении может быть указатель. При присвоении переменной какого либо объекта, значения объекта копируются в перемененную и все указатели указывают на одну и туже область памяти.

А теперь вернемся к уровням мутабельности, вот два новых уровня:

  • Можно менять значение переменной, но нельзя менять значения по ссылкам.
  • Нельзя менять значение переменной, но можно менять значения по ссылкам.

Возможно у вас возник вопрос — «Зачем учитывать ссылки, если язык их не поддерживает?». Отвечаю, их не нужно было учитывать, просто нужно было придерживаться нескольких правил, нарушая которые в большинстве случаев, была бы ошибка компиляции. Также мною была добавлена возможно указывать, что this объект в методе будет не читаем (по аналогии со свойством). Язык стал выглядеть так:

method (#Some) foo(a String, b `String, c ~String, d :String)
//this нельзя использовать
//a можно только читать
//в b можно заменить любой символ, но нельзя присвоить новую строку или изменить длину строки
//c может присвоить новую строку и изменить длину строки, но нельзя изменить символы в уже переданной строке
//d можно изменить, что угодно

Снова переписал компилятор и начал перепись стандартной библиотеки. Во время переписи обнаружил серьёзную проблему, дело в том, что если при вызове метода, аргумент которого (по сигнатуре) частично, либо полностью должен быть иммутабельным, но будет передан более мутабельный аргумент, то уровень его мутабельности для вызова снизится (что логично) и вот в чём проблема: предположим, что у нас есть полностью мутабельная переменная и мы применяем к ней метод, который применяется только к переменой с мутабельным значением, но с иммутабельными значениями по ссылкам, в таком методе будет легально присвоить в this полностью иммутабельный объект (так как значения копируются, а ссылки и там и там иммутабельны), но при завершении метода, мы получим полностью мутабельную переменную, в которой есть ссылка на иммутабельное значение, а это полностью всё ломает. Объяснение получилось достаточно запутанным, поэтому вот пример:

method (~Some) veryBadMethod(value This)
 this = value

method (#Some) foo()
    a := Some
    b .= Some#randomValue() //подразумевается, что с использованием b не возможно ничего изменить
    a~veryBadMethod(b)
    a:someMethod() //а вот здесь, вышеуказанное правило нарушается

В тот момент когда я осознал проблему, я был в бешенстве. Я честно пытался создать безопасный, простой и обязательно создающий производительные программы язык, но всё тщетно. Все, надоело, плевать на производительность, рубисты же как то выживают. Решил — будет только 2 уровня мутабельности, как в начале, а при присвоении какого либо объекта, его значение полностью копируется, в этом случае ещё не надо париться насчёт управления памятью, объект не нужен — значит полностью его освободить.

Во время очередной переписи компилятора, я начал очень сильно кашлять, сопровождалось всё это высокой температурой. Кашель был настолько сильным, что я подумал «Все! Молодец! Поработал в туберкулёзной больнице.». Я пошёл в поликлинику, где мне сделали снимок лёгких и положили в больницу. Оказалось — острый бронхит. Во время пребывания в больнице, мне постоянно меряли давление, верхняя граница которого частенько была в диапазоне 150-180. Количество таблеток от давления и от бронхита в сумме составляла 11 штук в день. После выхода из больницы, у меня начались проблемы с когнитивными способностями, особенно это касалось памяти, у меня были такие ситуации когда я о чём-то думал и в процессе думания, забывал о чём и долго не мог вспомнить. В больницу я по этому поводу не пошёл (почему? в двух словах не рассказать, статью целую написать можно). Со временем мои способности начали восстанавливаться, но полностью до сих пор не восстановились. Вернувшись с больницы, плохо соображающий, почти 30-летний парень, живущий с матерью, на окраине мира, за 200$ в месяц (немного увеличилась зарплата), потративший свою молодость на то, что так и не смог сделать, на меня накатилось крайне депрессивное состояние.

Я начал прокрастинировать, в основном играя в компьютерные игры. В одной из игр (Disciples 3) был такой юнит — верховный вампир, когда он изрядно ранен, он становится гораздо сильнее и произносит фразу — «Погибну сражаясь!». Эта фраза меня вдохновила, ведь какой смысл был в моей жизни, если я не закончу то, что начал? Я закончу свой компилятор, чего бы мне это не стоило! Я продолжил разработку, причём если раньше я писал только по выходным, то теперь я частенько стал писать и после работы. Практически сразу после начала разработки, я подумал «Зачем я полностью копирую объекты? Ведь я могу сделать как в Haskell.». Если хаскелю дать сложить 10 чисел, то он их не сложит, а лишь пометит себе, что их надо сложить, но непосредственно сложение будет произведено в момент когда понадобится результат вычисления, а такое событие может и не произойти. Я могу сделать так-же, не копировать объекты, а пометить сколько объектов владеет областью памяти (тем более у меня есть счетчики, те самые которые обеспечивают автоматическое управление памятью) и если памятью владеет несколько объектов, и значения в этой памяти нужно изменить, то только тогда она будет скопирована.

И тут я понимаю, что всё ещё могу сделать программы на моём языке производительными. И вот настал момент когда я все закончил, но для меня было принципиально важно переписать компилятор, используя свой язык. Во время переписывания компилятора, я сразу понял, что язык крайне неудобен, особенно мне мешали ссылки на свойства, они задумывались как полезная фишка языка, а на практике оказались самым большим его недостатком и никто в здравом уме не будет использовать такой язык.

В тот момент когда в языке было множество вариантов мутабельности, я подумывал над ещё одним дизайном языка, но не стал его реализовывать, так как при стольких вариантах мутабельности он был крайне неудобен, а то, что переменные могут быть взаимосвязаны, делало бы язык небезопасным. Но теперь уже таких проблем нет. И я начал всё заново. Новый язык больше не объектно ориентированный, вместо классов теперь типы, с возможностью создавать дженерики. Пример:

type Point(a)
    x,y a

type SimplePoint
    x,y Double

//где-то в коде
a := Point(UInt64)

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

group Equal
//equal(a, a) -> Bool

То есть, если тип является членом группы Equal, то должна быть функция с именем equal, которая должна принимать 2 аргумента данного типа, и возвращать тип Bool.

В языке появились правила (rules) — это такой мини язык программирования, код которого выполняется во время компиляции. В этом коде можно добавить тип в группу. Пример:

rules
    1 = type == [_] //если некий тип является слайсом
    2 = type[0] > Equal //а его элементы входят в группу Equal
    3 = 1 & 2
    join 3 Equal //то добавить такой тип в группу Equal

Теперь может быть бесконечное множество функций и процедур с одинаковым именем. Для того, чтобы определить какую функцию из множества доступных вызвать, в функциях так же есть правила, которые оперируя типами передаваемых аргументов, могут определить — подходит ли функция к данным аргументам. У функций есть приоритеты, от 1 до 9 (по умолчанию 5), если при вызове функции, есть несколько подходящих варианта с одинаковым приоритетом, и нет подходящего варианта с приоритетом повыше, то это ошибка компиляции. Пример функции:

func notEqual(a, b)
    rules
        final = a > Equal & a == b
        result = Bool
    result = !(a == b) //! и == синтаксический сахар, данное выражение эквивалентно result = (neg(equal(a, b)) или a.equal(b).neg()

Закончив разработку нового компилятора, переписав стандартную библиотеку и тесты для неё, я начал переписывать компилятор на собственном языке, как я писал ранее, для меня это принципиально. Я очень боялся, что снова обнаружу проблему в языке, которую не смог предусмотреть заранее, но все прошло гладко, а писать на таком языке, было сплошным удовольствием. Для сборки программ, я использовал самописные bash скрипты, но разумеется это не вариант. Поэтому я написал(разумеется на своём языке) сборщик и установщик пакетов.

И вот наконец, я готов представить вашему взору: язык программирования cine, компилятор с таким же именем, сборщик и установщик проектов fei. Вот ссылки на github:

Инсталятор cine и fei.
Исходники компилятора.
Исходники установщика и сборщика пакетов.
Исходники стандартной библиотеке(я использую название модуль).
XML файл для создания подсветки синтаксиса в текстовом редакторе Kate.

Для установки и работы вам необходим Linux x86_64(к сожалению пока только так) и установленный clang.

Поскольку никаких учебников по языку ещё не существует, я открыл блог, где буду писать туториалы по программированию на cine.

Интересные факты:

  • Названия cine и fei произошли от сгенерированно самописным генератором случайных имен n-kine и enfei.
  • В коде на языке cine можно использовать код написанный на C.
  • Компилятор cine автоматически сортирует члены типов по выравниванию (от большего к меньшему).
  • Язык изначально назывался 4ernika, так как в момент когда я решил его создать, я ел чернику.
  • Когда язык был объектно ориентированным, была возможность при наследовании класса от нескольких классов, объединять их свойства. Например size и count объединить в одно свойство, то есть при обращении к свойству size или count, обращение происходило к одному и тому же свойству. Так же была возможность наоборот, создать класс в котором одно свойство имело несколько имен, а при наследовании, этим именам можно было назначить разные свойства.
  • С самого начала и до конца, в языке не было глобальных переменных (отказался от них ещё в лицее).
  • Во время написания одной из версий языка, я придумал новый алгоритм обучения нейронных сетей основанный на новом виде чисел, которые находятся над комплексными (все комплексные числа можно представить в виде новых чисел, но не все новые числа можно представить в виде комплексных). Мне очень хотелось попытаться реализовать этот алгоритм и попробовать его в деле, но поскольку это заняло бы немало времени, я сфокусировался на компиляторе. Но рано или поздно вернусь к этому алгоритму.
  • В языке cine нет специального типа для строк, строка в cine — слайс из элементов типа UInt8, но в каждом слайсе есть специальный флаг, которым помечаются строки.
  • Когда я перешел от использования LLVM IR к C, встал выбор об использовании clang или GCC. Написав несколько примеров, которые скомпилировал двумя компиляторами в ассемблерный код, просмотрев оба файла, я остановился на clang.
  • Хотя изначально язык затевался с целью возможности включения SIMD инструкций в код, в версии 0.1 нет явного использования SIMD (оно обязательно появится), но в одном из проходных вариантов языка, я не выдержал и реализовал поиск элементов слайса с использованием SIMD инструкций.

Комментарии 527

    +6
    Язык с какой целью создавался? Хобби и прокачка навыков? Я просто не увидел ни упоминание о назначении языка, ни что вообще на нём можно писать (только консольные приложения под Linux?).
      +8
      А для чего создавался Temple OS? А для чего животные дарили друг другу цветы в старом советском мультике?
        +3
        Не знаю что там в советсвом мультике, но TempleOS создал очевидно душевнобольшой человек — и она же, в кенечном счёте, его и погубила.

        Если человек создаёт себе язык программирования и что-то там ещё «чисто по фану» не ожидая, что этим кто-то будет пользоваться — это нормально, так можно многим вещам научиться…

        Но вот это вот:
        И вот наконец, я готов представить вашему взору: язык программирования cine, компилятор с таким же именем, сборщик и установщик проектов fei.
        Это просто пугает. Кому это нужно, зачем?

        Автор же явно не считает что этот проект был нужен только и исключительно ему (как оно могло бы быть, если бы он был в своём уме), он предлагает кому-то ещё на это время потратить… кому и зачем?
          +4
          Это просто пугает. Кому это нужно, зачем?

          Мне это было нужно, но никто не делал. Я решил, что раз никто не делает — сделаю сам. А поскольку результат превзошёл все мои ожидания, то если в текущем времени есть такие люди как я в то время, у них хотябы будет возможность использовать язык который им нравится.
            +6
            Нужна отдельная статья про сам язык. Чем он лучше других. Какие потенциальные области применения.
              –4
              Нужна отдельная статья про сам язык.

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

              Вот чем.
              Какие потенциальные области применения.

              Мне не извесны такие области, в которых его нельзя было бы применить.
                –1
                Вам не кажется, что это очень пахнет BolgeOs?

                Отсюда и реакция.

                А областей, где он не применим — навалом.

                Можно ли применить его в игре "Ну погоди"? Там сотня байт ОЗУ и пара килобайт ПЗУ. Влезет?

                Можно ли применить ваш язык для запросов к СУБД, то есть вместо SQL?

                Можно ли заменить им язык ?

                Можно ли им заменить Ladder?

                И так далее, и так далее, ниш очень много.
                  +1
                  Вам не кажется, что это очень пахнет BolgeOs?

                  Вообще не уместное сравнение, BolgenOS — Ubuntu с измененными обоями, а Cine написал и придуман с нуля.
                  Можно ли применить его в игре «Ну погоди»? Там сотня байт ОЗУ и пара килобайт ПЗУ. Влезет?

                  Это не область, с таким успехом можно написать «А можно ли на Си написать для стакана воды? У него 0 байт ОЗУ.» Область называется — программирование микроконтроллеров и я не вижу препятствий для моего языка в этой области, но разумеется есть минимальные системные требования для контроллеров. Тот же JS тоже используется в этой области, но не на всех контроллерах с ним можно работать.
                  Можно ли применить ваш язык для запросов к СУБД, то есть вместо SQL?

                  Можно, если какая либо СУБД введет поддержку Cine в качестве языка запросов.(Спойлер — этого никогда не будет)
                  Можно ли заменить им язык 1С?

                  А можно ли в Qt Creator заменить С++ и Qt на Vala и GTK?
                  Можно ли им заменить Ladder?

                  Мне не извесны такие области, в которых его нельзя было бы применить.

                  Мне до этого не была известна эта область.
                  И так далее, и так далее, ниш очень много.

                  Если рассуждать как вы, то ни один язык не может занять даже 1/1000000 ниш.

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

                    Если рассуждать как вы, то ни один язык не может занять даже 1/1000000 ниш
                    Конечно. Или язык общего назначения и гигантская конкуренция с С++ и т.д. Или — нишевой язык с возможностью занять свою нишу.

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

                    меня не до конца устраивали те языки которые я видел
                    Вот это бы описать подробно. Чем не устраивали и почему ваш язык лучше.

                    Как пример описания
                    Нам нужен был калькулятор, выражения для которого могли бы выполнять как в контроллерах под MS-DOS (16 бит), так и в нашей среде разработки на персоналке. Подумали, что можно встроить — не устроило по размеру ОЗУ и ПЗУ на контроллере. Написал свой калькулятор. Потому туда приделал условные операторы и циклы. Получился язык, у которого два достоинства: тесная связь с нашей SCADA (нативно обращаемся к поля ФБ) и возможность откомпилить куда хочется, ибо код компилятора собственный и понятный.
                      –1
                      В малых микроконтроллерах нужно статическое распределение памяти, чтобы избежать фрагментации кучи. Ваш язык может не использовать кучу?

                      но разумеется есть минимальные системные требования для контроллеров

                      Вот это бы описать подробно. Чем не устраивали и почему ваш язык лучше.

                      Цитаты из статьи.
                      вместо begin end используются фигурные скобки. Но не нужно думать, что Pascal был для меня идеальным языком, со временем многие вещи в языке стали меня раздражать(помимо begin end). Например мне хотелось, чтобы строки и массивы были структурами со следующими полями: указатель на область памяти с данными, количество элементов, максимальное количество элементов которое может вместить область памяти на которую указывает указатель, чтобы несколько массивов или строк могли указывать на одну и туже область памяти и можно было создавать массив из куска другого массива не копируя элементы. Как позже выяснилось, такие массивы как я хотел, называются слайсами. Мне тогда захотелось написать транслятор который переводит из такого изменённого паскаля в обычный, но я отказался от этой идеи.

                      Со временем я понял, что самые мои частые ошибки связаны с ссылками и указателями. И я от них избавился, сохранив все мне необходимые функции.
                        +1
                        Например мне хотелось, чтобы строки и массивы были структурами со следующими полями:

                        На C++ Builder посмотрите. Это С++ со строками из Delphi. То, что вы хотите — там есть.

                        Со временем я понял, что самые мои частые ошибки связаны с ссылками и указателями. И я от них избавился, сохранив все мне необходимые функции.
                        А вот это хотелось бы подробнее.
                          –2
                          На C++ Builder посмотрите. Это С++ со строками из Delphi. То, что вы хотите — там есть.

                          Во первых я не люблю C++, а во вторых точно такие строки и массивы как я хотел есть в go, но когда я начинал, go не было.
                          В третьих мне мой итоговый язык очень понравился, и я в ближайшее время не собираюсь его ни на что менять.
                          А вот это хотелось бы подробнее.

                          Подробнее в этом комментарии.
                    +3
                    Вам не кажется, что это очень пахнет BolgeOs?

                    Оскорбили на пустом месте.

                    В ситуации с BolgenOS тот чел взял полностью готовые проекты. Рабочие совершенно.
                    И перебил в тех готовых проектах копирайты на свои — всего лишь вся его работа.

                    Здесь же человек что-то делает. Сам делает.
                      –2
                      Компилятор сам, а язык? Паскаль с фигурными скобочками — это сам? Я в школе тоже операционку писал. И инкрементальный компилятор. :-)) На Минск-22. Недописал, разумеется. Дальше пары процедур не ушло.

                      P.S. Но свой BolgeOs у меня был. Планов громадье, реализован пшик.
                        0
                        Компилятор сам, а язык? Паскаль с фигурными скобочками — это сам?


                        Тут же главное, что логику работы с переменными у языка меняет. В этом и есть суть.
                        А синтаксис — зачем менять, если он устраивает.

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

                        P.S.:
                        Впрочем:
                        Кроме begin/end -> на {} он еще строки и массивы меняет на слайсы.

                          0
                          Мне кажется, вы додумываете за автора.

                          «Логику работы с переменными» меняет Котлин. Но в Котлине понятно, что хотели сделать (Яву с меньшими ошибками) и на основе какого опыта.

                          Синтаксис Паскаля вполне отражает его семантику. Будет иная семантика — нужен несколько иной синтаксис.

                          В любом случае — нужно описание от автора. Пока что мне это RATFOR напоминает. И (если вы правы) компилировать его лучше, как ратфор — препроцессором в паскаль.
                            0
                            Синтаксис Паскаля вполне отражает его семантику. Будет иная семантика — нужен несколько иной синтаксис.


                            Не обязательно заводить другую семантику.

                            Есть такой вполне существующий язык Go, где синтаксис прячет от вас — используете вы обращение по ссылке или нет.

                            type Object struct {
                               Field int
                            }
                            
                            var a Object
                            var b *Object
                            b = new(Object)
                            


                            Оба варианта будут работать без вопросов:

                            
                            a.Field = 2
                            b.Field = 3
                            

                            Вторая строка это — неявное:
                            *b.Field = 3

                              0
                              Так это в Object Pascal (ака Deplhi) есть. Но очень ограничено — для наследников TObject. И не ограниченно — для передачи параметров по ссылке (const и var).

                              Но если человек отказывает от ссылок — я это понимаю как передачу RW-параметров копированием на входе и выходе. Тогда намного понятней не const/var, а in/out/inout

                              Короче, пусть автор сам напишет.
                                –1
                                копированием на входе и выходе

                                Вы не читали статью, там есть счётчик ссылок. При попытке изменить объект просматривается счётчик ссылок, если он равен единице, то объект меняется, если больше, то создается копия объекта(не полная) и уже эта копия меняется. В объекте который владел изменяемым объектом, ссылка на оригинальный объект заменяется ссылкой на копию.
                                  +1
                                  А что, простые переменные нельзя передавать в функцию? Или они тоже являются объектами?
                                  Вот у меня массив из тысячи целых. Это тысяча объектов с тысячей счетчиков?
                                    0
                                    А что, простые переменные нельзя передавать в функцию?

                                    Можно. Переменные хранятся на стэке для них счётчик не нужен.
                                    Вот у меня массив из тысячи целых. Это тысяча объектов с тысячей счетчиков?
                                    Счётчик есть только у массива.
                              0
                              Паскаль с фигурными скобочками — это сам?

                              Может в начале статью стоит почитать? Это первый дизайн языка был похож на Паскаль, окончательный не похож ни на один язык. Посмотрите исходники.
                                0
                                Зачем? Я подожду, если язык хорош — то будет к нему описание. А если плох — так и вообще незачем в сорцы лезть.
                +3

                Невнимательно читали статью, в ней есть ответы на все ваши вопросы. Создал потому, что меня не до конца устраивали те языки которые я видел, а также я не видел решения проблемы с sse2(что за проблема, тоже написано в статье). Название так же указано — cine.

                  +2

                  Не знаю, огорчу вас или обрадую, но -msse2 для компилятора GCC существует уже кучу лет. Если цель действительно была в этом, что будете делать теперь?


                  В любом случае удачи, вы вполне можете освоить чуть более практическое программирование и зарабатывать более приемлимую 1000$ вместо двух сотен.

                    +2
                    Дело не в том, что есть -msse2. Объясню на современном примере, поскольку sse2 сейчас активно используется. У меня зарплата 200$ / месяц и даже с такой зарплатой я смог позволить себе компьютер с процессором Ryzen 2200G. У этого процессора есть поддержка инструкций AVX2, а теперь вопрос: «В каком количестве программ, распространяемых автором через бинарники, есть поддержка AVX2?». Недавно была новость о том, что какой-то человек предложил в Fedora компилировать программы в репозитории с поддержкой AVX2, ему быстро объяснили что к чему. Я хотел создать язык, котрой похож на паскаль, но у которого слайсы вместо массивов и строк, кавычки вместо begin end и который компилируется в какое-то промежуточное представление, которое на машине конечного пользователя скомпилируется до конца с учетом того, есть ли у него поддержка тех или иных технологий. И вы меня не огорчите, потому такой подход всё ещё актуален(хотя и не так сильно как в те времена), а так же потому, что за 12 лет язык оброс такими фишками, сочетания которых я не вижу не в одном языке до сих пор. Самые основные я перечислил в этом комментарии.
                      +4
                      Я хотел создать язык, котрой похож на паскаль, но у которого слайсы вместо массивов и строк, кавычки вместо begin end и который компилируется в какое-то промежуточное представление, которое на машине конечного пользователя скомпилируется до конца с учетом того, есть ли у него поддержка тех или иных технологий.
                      Вот только проблема в том, что не факт, что сможете даже используя всё это обогнать какой-нибудь банальный ICC.

                      Если вы всё это делаете «для души»… ну ради бога: всё лучше, чем водку бухать.

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

                      Хотя сам он её считает, разумеется, «гениальной» и «идеальной»…
                        +10
                        Но если вы хотите это «продать»…

                        Я не пытаюсь никому ничего продать, я даю людям выбор, которого у меня не было.
                        ну был у меня один знакомый, который носился с идеей «идеальной клавиатуры». У меня даже где-то его драйвер и наклейки на клавиши есть… разумеется удалось его убедить в том, чтобы эту его клавиатуру использовать новно нуль человек за 20 лет.

                        Если бы не такие люди, которые придумывают и воплощают идеи, то мы бы до сих пор в лесу с копьями на лосей охотились.
                          –4
                          Но если вы хотите это «продать»…
                          Я не пытаюсь никому ничего продать, я даю людям выбор, которого у меня не было.
                          Извините, но если вы даже не понимаете почему я поставил кавычки вокруг слова «продать»… то вы действительно не понимаете что делаете.

                          Если бы не такие люди, которые придумывают и воплощают идеи, то мы бы до сих пор в лесу с копьями на лосей охотились.
                          Люди, которые «воплощают идеи» сильно отличаются от людей, которые могут в одиночку автомобиль создать…

                          Возможно когда-нибудь вас жизнь этому научит… а может быть и никогда.
                            +2
                            Извините, но если вы даже не понимаете почему я поставил кавычки вокруг слова «продать»… то вы действительно не понимаете что делаете.

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

                            А разве нельзя в одиночку создать автомобиль, в котором будут воплощены новые идеи?
                              +7
                              А разве нельзя в одиночку создать автомобиль, в котором будут воплощены новые идеи?
                              Можно. И это даже делалось. Aurora, к примеру.

                              Проблема в том, что на развитие автоиндустрии ваш автомобиль повлияет ровно… никак.

                              Самое сложное в этом мире — это не изобрести что-то «новое», а убедить хоть кого-то хоть для чего-то этим «новым» воспользоваться.

                              Как правило когда новинка приобретает распространение люди начинают исследовать вопрос «а когда и кто её изобрёл»… часто оказывается, что переизобретена она была десятки и сотни раз, вот только никому не удалось, до определённого момента, показать что от этого изобретения есть хоть кому-то хоть какая-то польза.

                              Огромное количество изобреталей (самых разных) этого не понимают… что несколько странно: они же вроде неглупые люди — иначе не смогли бы ничего изобрести…
                          +1
                          Можно на клавиатуру глянуть?

                          переизобретатель русской раскладки
                            0
                            переизобретатель русской раскладки

                            Ну, кстати, русская, а тем более английская раскладки далеко не оптимальны для современных клавиатур, потому что были созданы для печатных машинок. Английская создана аж в 1870 году. Собственно поэтому позже была создана раскладка Дворак и другие. Но они, увы, не взлетели.


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

                              0
                              dz60 гуглите, пробел должен быть разделен на две или три части

                              а самое страшное в русской раскладке — так это как враги из IBM после захвата Союза поместили запятую в верхний регистр — ну бред же

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

                              А что до раскладки, их множество на klava.org/delta/#rus_basic

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

                              поэтому я и сделал идеальную раскладку, жду пока детали придут для кастомной механики, там уже с прошивкой на сях можно будет эксперементировать с раскладками на полную
                                +1
                                Боюсь, что идеальной раскладки не существует.
                                Что хорошо для набора текста — плохо для написания кода.
                                  +1
                                  Кстати да, совершенно верно, даже более того — лейаут под питон и жс будет так же разным — решение — подгружаемые/подключаемые профили/слои

                                  все нормальные прошивки(материнок для кастомных клав) позволяют это реализовать быстро и просто.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              она еще не готова (дело встало т.к нужно было уже серьезно кодить и вытаскивать статку из текста, и на тот момент не хватило навыка, а щас работа и нет времени, но думаю на каникулах запилю),

                              вот ключевые моменты:
                              • запятая на месте твердого знака (дико удобно, привыкаешь за полчаса и потом половину недели отвыкаешь на работе)
                              • твердый знак в верхнем регистре мягкого
                              • в английской же все открытые скобочки доступны в нижнем регистре
                              • закрытие же происходит в верхнем
                            +1
                            Я примерно знаю всех переизобретателей клавиатур, и очень интересно было бы узнать, про кого именно идет речь. Причудливые клавиатуры сейчас на взлете, и для них есть рынок — своеобразный, но еще не сильно перегретый. Первые 50 сетов Corne продались за полчаса fstn.hateblo.jp

                            Upd: если только это не thornik.livejournal.com/472554.html
                              +1
                              ортолинейная клава — мусор, имхо

                              тов. Кхим имел в виду mi.anihost.ru/fonisoft.htm

                              есть тред на реддите с гораздо более ясным ангельским ;)
                                0
                                Ссылку на тред на реддите, пожалуйста.
                                  +1
                                  www.reddit.com/r/MechanicalKeyboards

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

                                  типа ergodox'a с отрицательным углом наклона
                              –3

                              Ирония в том, что вы ссылаетесь "на возможно быстрый" ICC, который намеренно исполняет медленный код на процессорах отличных от Intel, хотя автор как раз в том комментарии написал, что накопил на AMD Ryzen 2200G.

                                –1
                                Есть такое дело. Но фишка в том, что, во-первых, эту проверку можно убрать, а во-вторых даже с ней многие вещи на AMD Ryzen работают быстрее, чем с clang'ом (хотя и медленнее, чем на Intel).
                                0
                                ну был у меня один знакомый, который носился с идеей «идеальной клавиатуры».

                                Присоединяюсь к вопросу про клавиатуру!

                                  –2
                                  У меня даже где-то его драйвер и наклейки на клавиши есть… разумеется удалось его убедить в том, чтобы эту его клавиатуру использовать новно нуль человек за 20 лет.


                                  Вы не правы. Бывает, что и получается.

                                  Возьмем очень специфическую клавиатуру, которую создали подобные вашему знакомому желающие создать «идеальную клавиатуру».
                                  ergodox-ez.com
                                  Получилось крайне необычно, явно это нишевый продукт. Думаете, только через 20 лет будут использовать?

                                  Отнюдь.
                                  Ребята, используя краудфаундинг, собрали достаточно денег от желающих столь необычную клавиатуру приобрести. И основали настоящее произодство.

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

                                  И 20 лет не понадобилось.

                                  Чуть ранее тот же Мальтрон или Кинесис и обычными инвестициями, на свой страх и риск, запустили производство тоже необычных (и довольно дорогих) моделей. Клавиатуры крайне необычные — но спрос есть.

                                  Те же кто не сумели раздобыть бабло на произодство (или им это не интересно) — публикуют документацию. По которой кто-то делает для себя. А особо понравившиеся модели — и в произодство запускают.

                                  Кто-то — налаживает производство компонентов необычных клавиатур, для самостоятельной сборки предназначенных.
                                  keeb.io/products/iris-keyboard-split-ergonomic-keyboard?variant=29480467267678
                                  Это значительно проще и по силам одиночке. И таких комплектов для самостоятельной сборки довольно много продается очень не похожих друг на друга вариантов.

                                  Это нынче вполне себе хобби, способное воплотиться в реальность.

                                  Сдается, что вы зря отговорили человека.

                                    –2
                                    Возьмем очень специфическую клавиатуру, которую создали подобные вашему знакомому желающие создать «идеальную клавиатуру».
                                    Ваше «специфическую клавиатуру» создавал далеко не один человек и они проводили реальные исследования, замеры, эксперименты.

                                    Подхода: «я набираю тексты двумя пальцами, а значит так будут делать все, а потому давайте рассчитаем, исходя из этого, всю эгономику» — у них не было.

                                    У автора же с его навязчивой идеей «избавиться от ссылок» (и заодно сразу похоронить все алгоритмы и подходы, где дерева недостаточно, а нужно что-то посложнее) — вот такой же подход.

                                    Ни экспериментов, ни тестов, ничего.

                                    Чуть ранее тот же Мальтрон или Кинесис и обычными инвестициями, на свой страх и риск, запустили производство тоже необычных (и довольно дорогих) моделей. Клавиатуры крайне необычные — но спрос есть.
                                    И какая из этих клавиатур была создана «сумрачным гением» с подходом «если я не вижу зачем это мне — значит оно не нужно и никому»?

                                    Сдается, что вы зря отговорили человека.
                                    Кто сказал, что я отговорил? Насколько я знаю он всё ещё носится с идеями свою «гениально идеальную клавиатуру», «результат 12 лет разработки» куда-то внедрить.
                                      –1
                                      Возьмем очень специфическую клавиатуру, которую создали подобные вашему знакомому желающие создать «идеальную клавиатуру».


                                      Ваше «специфическую клавиатуру» создавал далеко не один человек и они проводили реальные исследования, замеры, эксперименты.


                                      Один — Dominic Beauchamp.

                                      Насчет исследований — вы не в курсе их отсутствия:
                                      Есть куча жалоб на блок для больших пальцев. Явно автор имел длинные большие пальцы, а статистическими исследованиями не закомочился. Эту проблему решают уже другие проекты Redox, например. Или Dactyl Manuform. Там специально переработана идея блока под большие пальцы.

                                      Подхода: «я набираю тексты двумя пальцами, а значит так будут делать все, а потому давайте рассчитаем, исходя из этого, всю эгономику» — у них не было.

                                      У них другой подход — «я набираю вслепую десятью пальцами и сделаю идеальную клавиатуру для этого». Упомянутый Ergodox именно под это и заточен.

                                      Что, как вам известно наверняка, даже в среде ИТ-шников не самый распространенный навык.

                                      Набирать зрячим методом (вертеть головой то влево то вправо) или набирать двумя пальцами (получается, что напрасно ужали клавиатуру специально под десятипальцевый набор, в частности это привело к нестандартному расположению []'~, сиречь Х, Ъ, Э, Ё).

                                        –2
                                        У автора же с его навязчивой идеей «избавиться от ссылок» (и заодно сразу похоронить все алгоритмы и подходы, где дерева недостаточно, а нужно что-то посложнее) — вот такой же подход.


                                        Вполне себе здравая идея, реализованная в других языках (или в определенных способах программирования). Скажем, в функциональных во главе угла.
                                          –2
                                          Скажем, в функциональных во главе угла.
                                          Не знаю что там у кого «во главе угла» но во всех популярных — ссылки есть (даже если они ссылками и не называются).
                                            0
                                            Не знаю что там у кого «во главе угла» но во всех популярных — ссылки есть (даже если они ссылками и не называются).

                                            Не мутабельность.
                                            Когда она есть — дело десятое есть ссылки или нет.
                                            Ну а при эмуляции функциональщины на мейнстримовых языках — делается через копирование переменных.
                                              –3
                                              Не мутабельность.
                                              Мутабельность обычно тоже есть. Да, как в Rust с его unsafe-блоками: с пометками и прочим — но есть. Ибо теория — это хорошо, а программы-то как-то писать надо.
                                                0

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

                                          0
                                          И какая из этих клавиатур была создана «сумрачным гением» с подходом «если я не вижу зачем это мне — значит оно не нужно и никому»?


                                          Ну например, отсутствие выделенных функциональных клавиш на том же ErgoDox и размещение их таким образом, что модификаторы и фунциональные не совмещены по умолчанию.
                                          Поглядите на стандартную раскладку Ergodox
                                          image

                                          и попытайтесь нажать что то типа Alt+F1 хотя бы (не говоря уже про Ctrl+Shift+F6).
                                            0
                                            Кто сказал, что я отговорил? Насколько я знаю он всё ещё носится с идеями свою «гениально идеальную клавиатуру», «результат 12 лет разработки» куда-то внедрить.


                                            В настоящее время расцветает самодеятельное клавиатуростроение.
                                            Компоненты доступны.
                                            Платы можно заказать индивидуально.
                                            Корпуса сделать на 3D принтере.
                                            И даже наладить массовое производство можно, не выезжая из дома. Небольшими партиями это вполне доступно обычному человеку, без инвестиций.
                                            Разумеется, если его идея настолько интересна, что он найдет покупателей на свою клавиатуру за 15-40 тыс. рублей — а именно столько выходит стоимость кастомной клавиатуры.
                                            Судя по тому, как цветет и пахнет нынче этот рынок, какое большое число разнообразных наборов для самостоятельной сборки и готовых необычных клавиатур можно купить — число покупаетлей интересующихся подобными вещами достаточно велико.
                                              –2
                                              Небольшими партиями это вполне доступно обычному человеку, без инвестиций.
                                              Не путайте «сумрачного гения» с доходом в 100 долларов в месяц, потому что он занят своими «гениальными идеями» и озабачивается тем, чтобы хоть что-то заработать когда становится нечего жрать и «обычного человека», для которого это хобби.
                                                0
                                                Небольшими партиями это вполне доступно обычному человеку, без инвестиций.


                                                хоть что-то заработать когда становится нечего жрать и «обычного человека», для которого это хобби.


                                                Хобби делать платы и дарить их что ли?
                                                Речь-то об том, что их сейчас легко делать и продавать — инфраструктура, доступная для мелкосерийного произоводства есть. Пример был выше, можете купить плату хоть сейчас.
                                                  –1
                                                  Хобби делать платы и дарить их что ли?
                                                  Не обязательно дарить. Можно и продавать. Но пока вы не зарабатываете этим себе на жизнь — это хобби.
                                        +3

                                        байт-код и jit, чтоли?

                                          –1
                                          Байт-код — да, jit — нет. Ближе всего AOT, но компиляция производится перед установкой программы. При установке у пользователя также спрашиваются вопросы, ответы на которые влияют на то, в какой бинарник собирётся программа. Подробнее вот здесь.
                                            +2
                                            Ближе всего AOT, но компиляция производится перед установкой программы.
                                            Это то, что делает ART на миллиардах телефонов.

                                            И главное заключается не в том, что Google смогл это сделать — а в том, что они смогли сделать платформу, куда это можно было бы внедрить…
                                              +3
                                              Ближе всего AOT, но компиляция производится перед установкой программы

                                              Вы сейчас придумали ngen, который существует с 2001-го года.

                                                0
                                                Здорово, а ещё я придумал префиксные деревья, хотя они тоже были изобретены ещё в прошлом веке. Во первых как я понял ngen не задаёт вопросов(если вы не понимаете о каких вопросах идет речь, прочитайте второй пункт в этом комментарии), а во вторых тут не только в компиляции дело(хотя я и начал делать по большей части из-за неё), но в сочетании всех фишек языка и компилятора.
                                            +1
                                            В каком количестве программ, распространяемых автором через бинарники, есть поддержка AVX2?

                                            А если вопрос поставить так: в каком количестве программ теоретический выигрыш от использования SIMD выше 5%? Если брать всякие видеокодеки, криптографию и прочие числодробилки, то SIMD там давно есть, а вот в условной 1C вряд ли найдётся применение векторным инструкциям.

                                              0
                                              В 1С есть функционал для решения СЛАУ habr.com/en/company/1c/blog/420029
                                                –1
                                                А если вопрос поставить так: в каком количестве программ теоретический выигрыш от использования SIMD выше 5%?

                                                Без проведения качественного исследования, мы можем только гадать.
                                                Если брать всякие видеокодеки, криптографию и прочие числодробилки, то SIMD там давно есть

                                                Банальный поиск символа в строке, можно ускорить с помощью SIMD, а также некоторые алгоритмы сортировки, поиск элемента в массиве(в некоторых случаях), а выше перечисленные действия, встречаются часто. И вот в этих случаях — SIMD используется редко.
                                                а вот в условной 1C вряд ли найдётся применение векторным инструкциям.
                                                Боюсь мы этого никогда не узнаем.
                                        –19
                                        Мда… что я только что прочитал? Компьютер Байт в 2001 году на 48 КБ? Серьёзно? Какая то непонятная биография, много воды…
                                        Паскаль не нравится, Си не нравится (боже мой, там же скобочки ставить надо), давай как запилю свой ЯП…
                                        У самого был напряг с доступом к компьютерам до поступления в ВУЗ, но уже в 2000 было много компьютерных клубов. ZX Spectrum у самого появился довольно поздно, где то в 1998, но на долго не хватило, уже тогда понимал какой это отстой, когда везде уже Sega и PlayStation на каждом углу (в каждом клубе были).
                                        Помню, как я думал что я очень умный и пришёл в институт на первую пару програмирования, а чувак на ассемблере за 10 минут наклепал скринсейвер в формате полёт к звездам. Вот тогда я понял, что я не ноль, а даже меньше в программировании. Было неприятно это осознавать, но у чувака компы был чуть ли не с рождения (и не сперктум, а ibm совместимые).
                                        Уже не первый раз встречаю здесь статью формата: паскаль не нравится, С++ не осилил, Джава сложно — буду писать что то свое… Пустая трата времени, лучше совершенствоваться в чем то перспективном или популярном. Но это мое мнение.
                                          –12
                                          Плюсую… человек абсолютно точно болен, это раз. У человека не настолько высокая квалификация как он думает. Отсюда и на работу не берут нормальную. Нет, я не говорю что он дурак. Напротив. Но его компилятор его же и губит. А ему тут подливают еще, про Илона Маска… Срочно, срочно к психиатру.
                                            +2
                                            У человека не настолько высокая квалификация как он думает.
                                            А как я думаю? Я не упомянул в статье о том, что я думаю на счёт своей квалификации. Не надо придумывать и гадать.
                                            Отсюда и на работу не берут нормальную.
                                            Одного работодателя не устроило то, что нет высшего образования, другой работодатель даже не стал проверять мою квалификацию. Повторюсь, не надо придумывать и гадать.
                                              +6

                                              За 12 лет уж можно было вышку заочно получить.

                                                +3

                                                Искренне не понимаю этой погони за ачивкой в виде диплома. Никто в него даже не заглядывает, да и что там можно увидеть. Вот на тестовом задании что-то можно увидеть, а в дипломе… Ну разве что «осилил досидеть 5 лет». У меня есть ВО, но если бы его сейчас не было, не потратил бы ни минуты на его получение.

                                                  +14

                                                  Тут вопрос в том, что первоначальный отсев ведут совсем не IT-специалисты. И отсутствие диплома существенно снижает шансы кандидата.


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

                                                    +8
                                                    Отсутвие высшего образования сильно ограничивает выбор работы и страны.
                                                    Например, ОЧЕНЬ трудно получить ПМЖ в США, Канаде, Германии.

                                                    Это ответ на коммент выше, но пусть будет просто дополнение к вашему ответу, т.к. я промазал.
                                                    +1

                                                    Ну вот лично я когда в Питер переехал, на заочке ещё учился. Так вот пока я диплом не получил, программистом устроиться не мог. А с дипломом сразу взяли.

                                                      +2

                                                      В 90% случаях универ даёт нетворкинг достаточный для успешного поиска первой работы. Точнее работа сама находит студента. (Работал с 3го курса)

                                                        0

                                                        Это не было моей первой работой, у меня на момент переезда было около 10 лет стажа (по разным специальностям). Ну и для поиска первой работы в другом городе универ мне ничего не дал =)

                                                      +3

                                                      Общался с HR на тему наличия диплома у кандидата.


                                                      Их позиция: "Вышку сейчас может получить кто угодно при минимальных усилиях. Если нету — значит и этих минимальных усилий приложить человек не смог, зачем нам тогда такой лентяй и раздолбай?".

                                                        +1
                                                        Их позиция: «Вышку сейчас может получить кто угодно при минимальных усилиях

                                                        Кстати, позиция имеющая довольно-таки здравый смысл.

                                                        Если у человека нет никакого образования, то вариантов два — либо с вероятностью 2% он гений, который и так знал больше программы, либо с вероятностью 98% он раздолбай, которому не хватило усидчивости даже предметы по своей специальности прослушать. К сожалению, вероятность второго выше первого.

                                                        Отсутствие вышки безусловно, можно компенсировать законченными проектами, сертификатами и прочим, но в любом случае человеку придется сложнее по сравнению с другими соискателями при прочих равных условиях.
                                                      0
                                                      Для этого нужны деньги и время, ни того ни другого не было.
                                                        +5
                                                        Мне в чем-то близка ваша история. Тоже кодил для души, запоздалое знакомство со спекки, колледж. Но меня спасло то, что я таки пошел в универ, на заочку. До этого чуть не погряз в написании планировщика для pic18 на ассемблере, ибо «нафиг эти ваши си — тут ассемблер простой, а макросы рулят». Работал в инструментальном цехе, во время сессий — подрабатывал тем, что делал лабы и курсачи на заказ, в т.ч. старшим курсам. И знаете, мое мнение: вышка дает гораздо больше денег и времени, после окончания, а отбирает значительно меньше того и другого, чем кажется заранее. Единственное, о чем жалею — поздно спохватился.
                                                          0

                                                          Вопрос приоритетов

                                                      –5
                                                      Плюсую. Болен, ну или такая «особенность». Будто не от мира сего. На работе есть такой коллега, хороший специалист, но вот что-то не то, и рассуждения такие же, на уровне ребенка.
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                          0
                                                          То есть чтобы создать гениальный язык никакого диплома не нужно, а чтобы ставить психиатрические диагнозы — нужен?

                                                          Откуда такая разница?

                                                          P.S. Я не считаю что автор — псих. Но что ему явно не хватает общения как с людьми, так и со специалистами — факт.
                                                            +2
                                                            Почему-то я на сто процентов уверен, что нет


                                                            Это Ваше личное мнение, спорить не намерен.

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


                                                            Эм… я сказал что он больной. А конкретный диагноз ессно поставит врач. Но до него еще дойти надо, к чему и призываю.

                                                        +9
                                                        Нет идеального языка программирования как неидеальны люди создавшие его. Если все это запил один, то тем более и он будет неидеальным. Хорошее начало карьеры в жизни а потом в грузчики???? Но преданность своей идее конечно восхищает.
                                                          +9
                                                          Уважаю таких принципиальных людей. Не нужно слушать что говорят люди, они все время будут пытаться вас остановить, будут говорить что это никому не нужно или что вот проще же сделать вот так. Я сам постоянно с таким сталкиваюсь, да что говорить стоит посмотреть на Илона Маска или других великих людей, которых в процессе постоянно пытались остановить так или иначе. Но кто не останавливается тот добивается успеха. Желаю вам успеха, искренне и поддерживаю начинание.
                                                            +29
                                                            Но кто не останавливается тот добивается успеха.

                                                            Некоторые из тех, кто не останавливается — добиваются успеха.

                                                            Починил.
                                                              –2
                                                              Никто из тех, кто остановился — не добился успеха

                                                              Дополнил
                                                                +6
                                                                Некоторые из тех, кто остановились — не добились бы успеха даже если бы продолжали.

                                                                Еще дополнил.
                                                              0

                                                              Спасибо за поддержку.

                                                              0

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

                                                                +6

                                                                Теперь я это понимаю, но тогда мне было 18. Так же сыграло роль то, что я везде слышал "Программисту вышка не нужна!". Может кому-то она была и не нужна, но мне бы точно не мошешала.

                                                                  +2

                                                                  В чем проблема получить вышку. Я на пятом десятке решил получить второе высшее, скоро дипломная практика.

                                                                    0
                                                                    Я рад за вас(без иронии), но у меня нет ни времени, ни денег. Да и смысла я уже особого не вижу, это статья не биография и 99% процентов важных событий в жизни не упомянута. За все время у меня было где-то 13 мест работы, 10 из них есть в трудовой. Примерно на 9 из 13 работ, когда я увольнялся, меня работодатели очень просили остаться и предлагали увеличение зп(я хороший работник, не пью не курю и очень ответственный), но я всё время уходил, поскольку ненавидел то, чем занимался, а смена работы на некоторое время заглушала ненависть. Из-за такого количества записей в трудовой, когда я устраиваюсь на работу, на меня смотрят как на прокажённого, сомневаюсь, что меня уже высшее образование поможет.
                                                                      +1
                                                                      Здесь неплохо преподают, в качестве курсовой, насколько помню, была возможность написать свой транслятор на продажу в начале 90-х. Образование, вроде бы, бесплатное. Проблема только поступить. Ну и время — обучение только очное. Раньше 6 лет учиться нужно было. Наверно, без теории трудно создать что-то полезное сейчас чтобы заинтересовать потенциальных пользователей. Вроде бы должны быть госпрограммы для поддержки студентов из бывшего СССР, тем более Беларуси.
                                                                        +1
                                                                        это статья не биография и 99% процентов важных событий в жизни не упомянута.

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


                                                                        я хороший работник, не пью не курю и очень ответственный

                                                                        Алкоголь и курение слабо влияют на работника, если занимается он этим не на работе, ну и умеренно.

                                                                          –2
                                                                          Тем не менее выглядит как биография, с некоторыми моментами о языке. Очень много деталей, неясно для чего упомянутых.

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

                                                                          Ссылка на исследование? На моём опыте(хочу напомнить про 13 работы), есть прямая взаимосвязь. Не говоря о том, что я за всю жизнь не видел ни одного курящего человека, который не курит на работе.
                                                                          0
                                                                          Я 20 лет проработал без «вышки» и с записями в трудовой у меня в порядке — уже вкладыш закончился. Так что пробуйте искать работу в области информационных технологий, рано или поздно Вас обязательно наймут, вопрос лишь времени и усилий.
                                                                        +11
                                                                        Давайте я попробую вам объяснить что произошло используя некоторые аналогии.

                                                                        Вот то, что вы сделали — это действительно круто. Невероятно круто и увлекательно. Ну вот примерно как если бы вы взяли старый токарный станок и сделали самодельный автомобиль.

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

                                                                        Вас тут сравнивают с Маском… ну так рекомендую вспомнить, что Tesla Roadter делался почти целиком Lotus Group. А потом уже, со временем, Tesla стала самостоятельным производителем.

                                                                        Никакие самоделки продать сегодня не получится. Ни языки, ни автомобили. 50 лет назад (для языков) или 150 лет назад (для автомобилей) — легко. Сегодня — нет.

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

                                                                        Будете ли вы дорабатывать свой «автомобиль» или нет — дело ваше (многие энтузиасты-самодельщики годами дорабатывают свои изделия — и вполне счастливы).

                                                                        Но если хотите найти работу — вам нужно, условно, стать слесарем. И как «самодельщик» может искренне считать что «Toyota, по сравнению с моим пепелацем, дерьмо»… при этом искренне… но зарабатывать на жизнь он будет дорабатывая и/или ремонтируя вот это вот «дерьмо»… в программировании — всё точно так же.
                                                                          +2
                                                                          Будете ли вы дорабатывать свой «автомобиль» или нет

                                                                          Одназначно буду! Я не вижу хороших альтернатив моему языку(разве что Haskell + декларативное программирование, но такой код очень тяжело скомпилировать в эффективную программу, для этого надо в ghc влить больше денег, чем за всё время в JavaScript влили).
                                                                          С другой стороны — вероятность того, что вы сможете на этом самодельном автомобиле или даже вашем языке заработать — равна нулю.

                                                                          Я не пытаюсь на нем заработать, всё бесплатно и по лицензии gpl3 (стандартный модуль MIT).
                                                                          Но если хотите найти работу — вам нужно, условно, стать слесарем. И как «самодельщик» может искренне считать что «Toyota, по сравнению с моим пепелацем, дерьмо»… при этом искренне… но зарабатывать на жизнь он будет дорабатывая и/или ремонтируя вот это вот «дерьмо»… в программировании — всё точно так же.
                                                                          Я это понимал и когда создавал язык, я мог легко выучить мэйнстримовые технологии и найти работу, но на это нужно много времени, а я хотел закончить язык, а профиль на гитхаб с компилятором был бы большим плюсом в резюме. Я не плохо знаю go(и в том числе писал на нём многопоточное приложение), возможно выучу SQL и попробую поискать работу.
                                                                            +1
                                                                            Я не вижу хороших альтернатив моему языку(разве что Haskell + декларативное программирование, но такой код очень тяжело скомпилировать в эффективную программу, для этого надо в ghc влить больше денег, чем за всё время в JavaScript влили).
                                                                            Вы это проверяли? Сравнивали хоть с какими-нибудь вещами на Benchmarks Game?

                                                                            Главное: сранивали ли вы сложность использования вот всего того, что вы наделали с тем, сколько усилий потребуется кому-то, чтобы какой-нибудь условный «плагин для Photoshop» написать на вашем языке с банальным предоставлений нескольких сборок для разных процессоров?

                                                                            а профиль на гитхаб с компилятором был бы большим плюсом в резюме.
                                                                            Извините, но я вас разочарую: профиль на гитхаб кого-либо волнует только если у человека в резюме нет опыта работы по профилю. И даже самый блестящий профиль — не поставит вас в списке выше человека, который «умеет в O большое» и 10 лет опыта работы.

                                                                            Я не плохо знаю go(и в том числе писал на нём многопоточное приложение), возможно выучу SQL и попробую поискать работу.
                                                                            Проще для начала по-фрилансить… но вы, похоже, реально верите в то, что ваш компилятор хотя бы одного человека в отделе HR сможет заинтересовать…
                                                                              0
                                                                              Извините, но я вас разочарую: профиль на гитхаб кого-либо волнует только если у человека в резюме нет опыта работы по профилю.

                                                                              Серьёзно?
                                                                              А как же все эти рассказы от HRов, про необходимость пет проэкта на гитхаб и т.д. и т.п.?
                                                                              Мне кажется, вы, в запале полемики, слегка увлеклись.
                                                                              У меня, скажем, профилем на гитхабе почти все HRы интересовались, когда я работу решил поближе к дому найти, а вот про «О большое» не разу не спросили.
                                                                                +2

                                                                                А здесь как обычно, рассказы — они всегда рассказы. Чтоб найти работу — надо убедить работодателя, что ты умеешь ее делать. Некоторым для этого достаточно показать резюме, кому-то — поговорить про О-большое. А к некоторым заходишь на гитхаб (потому что ни резюме, ни О не впечатляют, но мало ли) — и видишь, что несчастный репозиторий был создан именно потому, что "эйчары говорят". Да, а некоторые работодатели не знают, что именно им нужно, к тем особый подход.
                                                                                Вы действительно думаете, что ваш личный опыт можно обобщать? У меня вот, никто не интересовался профилем на гитхабе, потому что его нет :)

                                                                                  0
                                                                                  Я действительно считаю, что мой личный опыт можно обобщать. Просто потому, что я очень обычно для рынка выгляжу и специально для меня несколько не связанных между собой людей особенные правила придумывать не стали бы.
                                                                                  Профиль на гитхаб, кстати, у меня для галочки. Я туда последний раз что-то добавлял лет 5 назад. Тем не менее, как минимум один человек туда заглянул. На собеседовании пару вопросов было «а почему вы вот так сделали, а не по другому».
                                                                                  Так-то, конечно, по одному профилю врядли кто-то принимать решение будет, но его наличие поможет дойти до собеседования.
                                                                                –3
                                                                                Вы это проверяли? Сравнивали хоть с какими-нибудь вещами на Benchmarks Game?

                                                                                Проверял. Вот как я хочу писать алгоритм быстрой сортировки массива в котором все значения уникальны:
                                                                                quicksort :: (Ord a) => [a] -> [a]
                                                                                quicksort [] = []
                                                                                quicksort (x:xs) =
                                                                                    let smallerSorted = quicksort [a | a <- xs, a <= x]
                                                                                        biggerSorted = quicksort [a | a <- xs, a > x]
                                                                                    in  smallerSorted ++ [x] ++ biggerSorted
                                                                                

                                                                                Можете сами попробовать с какой скоростью отсортирует миллиардный массив эта функция. И сравнить с реализация сортировки из любой стандартной библиотеки, любого языка.
                                                                                с банальным предоставлений нескольких сборок для разных процессоров?

                                                                                Каких сборок? Вы ничего не поняли вот комментарий в котором я все подробно расписываю.
                                                                                  +2

                                                                                  Попробуйте написать это на JS или C++, сохранив структуру данных (список) и отсутствие мутаций.

                                                                                    –1
                                                                                    А вы это к чему?
                                                                                      0

                                                                                      К невероятным способностям GHC к оптимизации чисто функционального кода.

                                                                                        –1
                                                                                        тогда надо попробовать.
                                                                                  +5
                                                                                  Извините, но я вас разочарую: профиль на гитхаб кого-либо волнует только если у человека в резюме нет опыта работы по профилю. И даже самый блестящий профиль — не поставит вас в списке выше человека, который «умеет в O большое» и 10 лет опыта работы.

                                                                                  А вот тут вы не совсем правы. Личный опыт это несколько опровергает.

                                                                                    –3
                                                                                    А вот тут вы не совсем правы. Личный опыт это несколько опровергает.
                                                                                    Интересно каким образом? Вы не умеете в «O большое»? Или у вас нет опыта работы?

                                                                                    Да, конечно, если у вас всё это есть и, в дополнение к этому, ещё и всякие штуки на GitHub — это круто.

                                                                                    А вот если есть только GitHub… ну вот не видел я таких случаев. Как бы… да нет — совсем не видел.
                                                                                      +5

                                                                                      Ну, например, пишут в почту из-за профиля на гитхабе. Или скипают phone screening. Или техническую часть интервью, про то самое «О большое», и мы просто с интервьюером трем за смишнявки в виде физзбазза на идрисе, переходя плавно к применимости вот этого вот всего в более, э, промышленном программировании.


                                                                                      Ну и ваше исходное утверждение было о том, что гитхаб волнует только если опыта работы нет. Его отрицание — «гитхаб может волновать, даже если опыт работы есть», а не «если гитхаб есть, то опыт работы не волнует» или что-то такое.

                                                                                        0
                                                                                        Его отрицание — «гитхаб может волновать, даже если опыт работы есть», а не «если гитхаб есть, то опыт работы не волнует» или что-то такое.
                                                                                        Ok, уели. Если формально подходить, то да — GitHub иногда может помочь. Но если бы 12 лет были потрачены на получение «вышки» и опыта работы — пользы, в смысле приёма на работу, было бы больше.
                                                                                    0
                                                                                    И даже самый блестящий профиль — не поставит вас в списке выше человека, который «умеет в O большое» и 10 лет опыта работы.

                                                                                    По себе не судите обо всех. Да и что сложного в "О большое"? Это простое понятие. И как проверить 10 лет опыта работы? А прокаченный гитхаб по крайней мере говорит о том, что человек много трудился над определенными проектами.

                                                                                      –2
                                                                                      Да и что сложного в «О большое»? Это простое понятие.
                                                                                      В том-то и дело, что это простое понятие — потому если человек им не владет, значит рассматривать что у него там на GitHub — не нужно. Он неуправляем и, соответственно, будет делать то, что захочет, а не то, что нужно.

                                                                                      И как проверить 10 лет опыта работы?
                                                                                      Поговорить о задачах, которые пришлось решать и тому подобное.

                                                                                      А прокаченный гитхаб по крайней мере говорит о том, что человек много трудился над определенными проектами.
                                                                                      А зачем это работодателю? Ему ж нужно, чтобы принятый на работу человек решал данные ему задачи, а не те, которые ему нравятся. Как там у Джоела (он, по-моему все банальности в IT описал… но они не стали бы банальностями, если были бы неправдой): знать свое дело и уметь его делать.

                                                                                      Вот «O большое» (и отчасти GitHub профиль) — это о первой части «знать своё дело». А вот «уметь делать дело» — это как раз «10 лет работы». И тут GitHub как бы меньше котируется, а такой как у автора — как бы и отрицательных очков не дал.
                                                                                      +1
                                                                                      Лет 15 назад я переписывался в фидо с парнем, написавшем kiev compiler. В конце концом. помню. его взяли на работу в некую очень крутую контору. Но там была, так сказать, java на стероидах, а не никому неизвестный язык :)
                                                                                        0
                                                                                        Проще для начала по-фрилансить…
                                                                                        спорное утверждение, лучше отправить эту статью знакомым из ИТ — думаю что автор с лёгкостью освоит какой-нибудь мейнстримовый стек.
                                                                                          –1
                                                                                          Я не плохо знаю go(и в том числе писал на нём многопоточное приложение), возможно выучу SQL и попробую поискать работу.

                                                                                          Проще для начала по-фрилансить…

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


                                                                                  Как сказал один мастер:

                                                                                  Ironically I think TypeScript has helped me more with avoiding classes than using them. Vue 3 is a 100% TS codebase with 0 usage of classes.


                                                                                  Сам же я все чаще прихожу к мысли о том, что классы не сильно то и нужны. И по большому счету классы это такие же функции с дополнительными фичами.

                                                                                  Очень интересная статья.
                                                                                    0
                                                                                    Так же в библиотеке лицея был учебник по программированию на языке C.

                                                                                    Однако хорошая книга, как для уровня лицея. Многие ведь даже в универе учат Паскаль или Бейсик, а не C/C++.

                                                                                    Покупать эти деньги в Беларуси было особо затруднительно, так как в автоматическом обменники приходилось платить в семь раз дороже(если память не изменяет)

                                                                                    Итого — автор тратил $7 для того, чтобы получить $2?
                                                                                      +1

                                                                                      В лицее тоже был только паскаль, а книгу купил один из учеников, который отучившись, подарил её библиотеке лицея.
                                                                                      Да, я тратил 7$, чтобы получить 2$, но эти 2$ я мог превратить в 4$, а 4$ в 8$ и так далее.

                                                                                        0
                                                                                        У нас тоже в лицее были Pascal и Delphi, после него — чуток html.
                                                                                        По поводу «получить $8 и более» — понял идею.
                                                                                      +1
                                                                                      Блохи прекрасно травятся дихлофосом, в особо запущенных случаях можно съехать на период газовой атаки и последующего проветривания.

                                                                                      А так — прекрасно. Обычно автобиографии и описание фич языка разделяют, но почему бы и нет)
                                                                                        0

                                                                                        Это не автобиогоафия, а история о ток как я язык свой создавал. Я старался писать только те моменты из жизни, которые повлияли на создание языка. Если я писал бы автобиогоафию, я бы обязательно написал о ключевых моментах: мои родители меня не досмотрели и я упал с окна головой об асфальт, моя любия собака умерла у меня на руках, смотря мне в глазах, мои родители постоянно избивали меня проводами от колонок… Таких моментов в моей жизни была огромное множество, про многие моменты в интернете даже упомянуть нельзя, например: отец заставлял держать щенка, пока он над ним такое делал… (не сексуального характера). Если бы писал биографию, я бы упоминал совершенно другие моменты.

                                                                                          +3

                                                                                          Пассаж про блохи недалеко ушёл от перечисленного вами

                                                                                        0
                                                                                        Я смотрю БАЙТ в Беларуси много людей подтолкнул к программированию. Начало моей истории очень похоже)
                                                                                          –1
                                                                                          Байт выпускался на заводе в Бресте, поэтому в Беларуси он и получил широкое распространение(у меня у нескольких соседей и у лучшего друга, то же был Байт) и если не ошибаюсь, эта книга по программированию была в комплекте.
                                                                                          –3
                                                                                          Автор, я конечно все понимаю, замечания по грамматике в личку, но читаю
                                                                                          Я перестал обманывать мошенников и получал доход, только от работы. Отработав год, решил поискать, что нибудь по лучше. У меня была на руках не плохая сумма денег

                                                                                          и волосы встают дыбом. Вы же про свое детище рассказываете, свою биографию пишете — как вы придумали ЯП, прописали грамматику, если грамматика и пунктуация в русском у вас на уровне 2 класса?

                                                                                          И не надо про то, что родной белорусский — я тоже белорус, русский для нас родной №1 как по повсеместному использованию, так и по часам в школе.
                                                                                            +1

                                                                                            Когда я закончил школу, у меня по всем предметам были оценки 9 и 8, кроме языков(всех) и литератур(всех), там были тройки. Я мало пишу что либо в интернете, я крайне мало общаюсь с людьми. Поэтому знание языка мне редко пригождаются. Есть у вас есть вариант исправления ошибки, пришлите мне этот вариант в лс(как уже сделало несколько человек) и я постораюсь его исправить, поскольку моих знаний не хватает, чтобы увидеть ошибку в приведенном отрывке из статьи.

                                                                                              +1
                                                                                              Всех белорусов по себе равняете? А у мяне как по часам в школе так и по повсеместному использованию родной белорусский. Английский вот часто использую. Для чтения. Но intermediate язык не поворачивается называть родным. Хабр — единственное место, где пишу на русском.
                                                                                              Я уже не белорус по вашей логике?)
                                                                                                –1
                                                                                                Вы — молодец! Побольше бы таких беларусов! Но, увы, таких очень и очень мало. Был очень краткий момент в новой истории, когда белорусский начал возрождаться и стал популярен в школах и даже в некоторых вузах. Возможно, Ваше становление пришлось именно на этот момент. Ни до, ни после никаких серьезных усилий по продвижению белорусского языка не предпринималось.
                                                                                              +11

                                                                                              Пока дочитал до середины. До блох. Таких пятничных историй тут ещё не было...

                                                                                                0

                                                                                                А жаль, статья-то на самом деле о языке :)

                                                                                                  0
                                                                                                  Статья на самом деля о том, как создавался язык и какие события в моей жизни на это повлияли.
                                                                                                +2
                                                                                                Что-то не смог понять в чём киллер фича, читаю растбук, там более чем наглядно описаны киллер фичи rust'а. Языков много придумано, и всегда автор хотел что-то улучшить, но обычно в среднем получалось как у всех, соответстно есть ли смысл в них?
                                                                                                Такие языки как хаскел и раст заметно отличаются и их смысл понятен, более того, практически все новоделы остаются игрушками, у раста хотя бы есть весьма крупный проект на котором это всё обкатывается.
                                                                                                  +3
                                                                                                  Каждый уважающий себя студент программистского факультета пробовал писать свой язык, или улучшать существующий. Проблема автора в том, что он завис на этом уровне. И у него не было подготовки по теории языков, поэтому он много раз переписывал свой проект.

                                                                                                  А вообще я так и не решил, это рассказ о своей жизни программиста-самоучки из провинции без специального образования, или такой тонкий пятничный троллинг?
                                                                                                    0
                                                                                                    Если бы он пошел в БГУИР, то свой компилятор и язык ему предстояло бы написать на 4ом курсе. При этом он бы получил знания по Lex & Yacc — это бы заняло меньше 12 лет точно.
                                                                                                      0
                                                                                                      При этом он бы получил знания по Lex & Yacc — это бы заняло меньше 12 лет точно.

                                                                                                      Самая сложная часть компилятора — это превращение структур, полученных в результате парсинга, в код на: asm, llvm ir, c. Lex & Yacc не особо мне бы в этом помогли. А парсинг и структурирование исходных кодов я сделал за неделю, как говорится «без пап, мам, лексов и яков».
                                                                                                      0
                                                                                                      это рассказ о своей жизни программиста-самоучки из провинции без специального образования, или такой тонкий пятничный троллинг?

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

                                                                                                        OK, значит не троллинг, хотя определённые описанные моменты для меня звучат дико. Ладно, не принимайте близко к сердцу, на самом деле я уважаю увлечённых и бескорыстных людей.


                                                                                                        Но на мой взгляд, если ваша основная проблема была отсутствие векторных расширений в коде программ на том же Delphi, то сейчас там во встроенный ассемблер вроде добавили нужные команды. И люди уже их используют с огромной пользой для сообщества: https://github.com/pleriche/FastMM4/pull/38
                                                                                                        А быстрые строки с копированием при изменении в Delphi были изначально.

                                                                                                      0

                                                                                                      Киллер-фичи языка и компилятора:
                                                                                                      1 — Программы компилируются в код на Си, но код на Си компилируется на компьютере конечного пользователя с флагом '--march=native', который позволяет задействовать в программе инструкции процессора, которые не были бы задействованы при распространении обычного бинарника.
                                                                                                      2 — При установке программ, конечному пользователю будут заданы вопросы. Во что скомпилируется код на Си, зависит от ответа на вопросы. Например: у пользователя можно спросить, что задействовать, opencl или cuda? И если пользователь выберет например opencl, то с большой вероятностью в бинарнике даже упоминания о cuda не будет.
                                                                                                      3 — поскольку язык изначально заточен под создание производительных приложений, а так же учитывая два выше приведенных пункта, программы на cine(если в него вложить столько сил, сколько вложенно в раст) могут оказаться самыми производительными, среди других программ написанных в той же манере, но на других языках.
                                                                                                      4 — Язык чертовски прост(даже проще go).
                                                                                                      5 — В языке нет ссылок и множества проблем, которые из-за них возникают.
                                                                                                      6 — На уровне языка(но не программ) незвозможно изменяя один объект, изменить другой объект. А у меня это самая частая ошибка.

                                                                                                        +5
                                                                                                        1-2. При чём тут язык? Перекомпиляция под платформу это не про язык, а про дистрибутивы и всё такое, у конечного пользователя и компилятора-то может не был, ничего у него не скомпилируется.
                                                                                                        3. Это как понимаю пока теория, а раст уже есть
                                                                                                        4. Это может быть киллер фичей, ниша для этого есть, но из этой статьи этого не понять, вот надо сравнить его с го в гошной нише (конкурентность)
                                                                                                        5. Ссылок или указателей?
                                                                                                        6. Не очень понял, в расте вот только одна мутабельная ссылка на одни данные, тоже ничего сломать нельзя.
                                                                                                          –1
                                                                                                          При чём тут язык? Перекомпиляция под платформу это не про язык, а про дистрибутивы и всё такое

                                                                                                          Вот цитата из моего комментария:
                                                                                                          Киллер-фичи языка и компилятора:

                                                                                                          Здесь связка язык + компилятор.
                                                                                                          Перекомпиляция под платформу это не про язык, а про дистрибутивы и всё такое, у конечного пользователя и компилятора-то может не был, ничего у него не скомпилируется.

                                                                                                          Вы наверное не поняли суть, идея в том, что язык компилируется в промежуточной байт код (для этого в начале я использовал FASM, затем LLVM IR, затем Си), а затем этот байт код компилируется в исполняемый файл, но перед компиляцией пользователю задаются вопросы и в зависимости от ответов, будет генерировать разный код. И такой подход, это дефолтный способ распространения программ на cine, т.е. фактически этот промежуточный байт код с вопросами и должен распространятся. Если вы правильно поняли, то почему при установке приложений на rust(я такие использую), они меня не спрашивают, что использовать: alsa или pulseaudio?, X Org или Wayland?, а тупо устанавливаются бинарником(ELF)? Я понимаю, что это можно сделать с помощью создания настроек, но в cine эти настройки можно указывать при установке и в бинарнике не будет даже упоминания неиспользуемой технологии. Неговоря о том, что сейчас при компиляция бинарных сборок программ, даже AVX2 не принято использовать, а в cine хоть AVX512 вставляй, просто при установке если они явно буду использоваться(например с помощью аттрибута типа vector_size) их пользователь сможет отключить при установке, а если неявно(например при векторизации циклов), то clang сам разберётся какие инструкции ему использовать. А на счёт того, что что у пользователя не будет компилятора, так для программа использующих .NET Framework тоже раньше нужно было устанавливать дополнительное ПО, а игры для которых нужен Direct X?, а программы для Java?
                                                                                                          Это как понимаю пока теория, а раст уже есть

                                                                                                          И что? Когда раст был теорией C++ уже был и что, автору раста нужно было его не создавать?
                                                                                                          Это может быть киллер фичей, ниша для этого есть, но из этой статьи этого не понять, вот надо сравнить его с го в гошной нише (конкурентность)

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

                                                                                                          Ничего из этого. Все объекты рассматриваются как значения, т.е.
                                                                                                          a := [UInt64]{1, 2, 3} //на внутреннем уровне в a есть ссылка на память где хранится 1, 2, 3
                                                                                                          b := a //теперь и в b есть та же ссылка
                                                                                                          b:setLast(7) //поскольку программа знает, что память по ссылке используется в 2-х объектах, то массив мо ссылке просто копируется в новый, и теперь в a и b разные ссылки. И уже в новом массиве, последний элемент меняется на 7
                                                                                                          a:setLast(4) //программа видит, что массив в a использует только 1 объект, b использует уже другой массив, поэтому такой массив можно изменять не копируя его.
                                                                                                          //в результате в a - 1,2,4,  а в b - 1,2,7
                                                                                                          

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

                                                                                                          Cine решает много проблем, которые решает и Rust, но они решают эти проблемы разными способами. Но благородя тем способам которые использует Cine, язык может решать эти проблемы оставаясь простым, назвать Rust простым языком, думаю не станет даже его самый преданный его поклонник. Так же не стоит забывать, что простота сильно влияет на скорость разработки.
                                                                                                            +3
                                                                                                            Вы наверное не поняли суть, идея в том, что язык компилируется в промежуточной байт код (для этого в начале я использовал FASM, затем LLVM IR, затем Си), а затем этот байт код компилируется в исполняемый файл, но перед компиляцией пользователю задаются вопросы и в зависимости от ответов, будет генерировать разный код.

                                                                                                            чем для пользователя это отличается от


                                                                                                            ./configure
                                                                                                            make
                                                                                                            sudo make install

                                                                                                            ?

                                                                                                              –2
                                                                                                              1. Обычно программы так не распространяются, а в cine только такой способ и есть, при этом он сильно упрощен(а можно упростить ещё сильнее).
                                                                                                              2. Часть компиляции происходит на машине девелопера, часть на машине пользователя.
                                                                                                              3. При вашем подходе, через 20 лет программа может не собраться из за несовместимости библиотек, cine компилируется в один большой Си файл, который к версии 1.0 должен будет придерживаться каких либо стандартов(например c99 + некоторые расширения из GCC и clang) и через 20 лет если у вас есть компилятор который умеет компилировать c99 + расширения + (в случае linux) поддерживает posix совместимые библиотеки, то программа должна без проблем установится.
                                                                                                              4. При вашем подходе может не хватать каких либо библиотек и вам прийдётся их устанавливать. Программы написанные в cine распространяются в виде самодостаточного пакета.
                                                                                                                +2

                                                                                                                4 — то есть openssl или zlib в своей программе я не могу использовать? сомнительное преимущество, честно говоря

                                                                                                                  –1
                                                                                                                  Цитата из статьи
                                                                                                                  перспектива при необходимости использовать сторонние C библиотеки

                                                                                                                  планируется просто распространять си библиотек в пакете вместе с Си файлом который генерирует cine.
                                                                                                                  0
                                                                                                                  Я всё-таки не понял. Распостраняются Си-файлы или байт-код?
                                                                                                                    +2
                                                                                                                    Как я понял, байт-кодом в его случае является «частично пре-компилированный» Си-файл с обвязкой, позволяющей получить разные бинарные файлы в зависимости от ответов на вопросы при установке.
                                                                                                                    Подразумевается, что при установке код будет собран; если считать Си-файл байт-кодом, то получается такой своеобразный Ahead-of-Time.
                                                                                                                      0
                                                                                                                      Именно так.
                                                                                                                0
                                                                                                                А на счёт того, что что у пользователя не будет компилятора, так для программа использующих .NET Framework тоже раньше нужно было устанавливать дополнительное ПО, а игры для которых нужен Direct X?, а программы для Java?
                                                                                                                И во всех трёх случаях решение было одно: нанять маркетологов, вбухать несколько миллиардов долларов в рекламу — и добиться того, чтобы CLR Runtime, DirectX и JRE стояли на миллиардах компьютеров.

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

                                                                                                                И что? Когда раст был теорией C++ уже был и что, автору раста нужно было его не создавать?
                                                                                                                Да, если бы он не смог убедить руководство Mozilla, что его язык сможет помочь людям писать менее бажный браузер — затевать его не стоило бы.

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

                                                                                                                Они могли обрести популярность не там и не для того, для чего они были созданы изначально. Python был затеян как замена Bash для проекта Amoeba. Сам проект закончился пшиком — но созданные для него язык, со временем, обрёл популярность.

                                                                                                                А вы через что собрались получиться пользователей? На деревьях они не растут, знаете ли…

                                                                                                                Так же не стоит забывать, что простота сильно влияет на скорость разработки.
                                                                                                                Как-то это всё не очень вам помогло. Билл Гейтс и Пол Аллен написали BASIC за три месяца, а вам для cine потребовалось 12 лет, как вы пишите.

                                                                                                                Конечно это не значит что ваш язык в 20 раз сложнее бейсика, просто вы не можете одновременно претендовать на простоту языка и суперскорость — и при этом не давая ни простого описания языка, на, собственно, суперскорости…

                                                                                                                Ну Ok, пусть ваш язык прост. Некоторые несложные задачи он решает (а написание компилятора с несложного языка — это, на самом деле, простая задача). Как насчёт задач посложнее? Ну, например, считать с диска JSON, найти в нём элемент с определённым именем и посчитать расстояние между этим элементом и корнем? Как вообще — хотя бы распарсить JSON в языке, в котором, как вы говорите «нет ссылок»?
                                                                                                                  0
                                                                                                                  Как-то это всё не очень вам помогло. Билл Гейтс и Пол Аллен написали BASIC за три месяца, а вам для cine потребовалось 12 лет, как вы пишите.

                                                                                                                  причём тут это?
                                                                                                                  они разработали реализацию языка, а не придумали новый.

                                                                                                                    +4
                                                                                                                    они разработали реализацию языка, а не придумали новый.
                                                                                                                    Ну если хотите именно «нового языка» — то есть пример JavaScript… первая версия вообще за 10 дней была разработана.

                                                                                                                    Поймите вы наконец, что разработать новый язык — это даже не полдела, а, скорее 10% дела. Главное — понять откуда возьмутся пользователи у вашего языка и чем вы их будете «покупать».

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

                                                                                                                    Turbo Pascal — купил тем, что позволял комфортно что-то разрабатывать на компьютерах без жёстких дисков (они появились через несколько лет и стоили огромных денег).

                                                                                                                    C — купил тем, что на нём была целая операционная система (редкость по тем временам, это сейчас их десятки) и библиотеки к ней.

                                                                                                                    Ну и так далее.

                                                                                                                    Вы же говорите: «вот вещь, смотрите какая классная вещь… мне нравится». Ну Ok — вам нравится, но почему оно, вдруг, должно понравится хоть кому-то ещё?

                                                                                                                    Вы говорите: оно будет быстро и беспроблемно (потому как ссылок нет)… Ну насчёт второго — это проверить сложно, но первое… где бенчмарки?

                                                                                                                    И так далее… работа проделана огромнейшая — но самое главное… даже не затронуто.
                                                                                                                      –1
                                                                                                                      Альтернатив js`у уже было много, которые норм работали в браузере, но где они теперь? он выиграл конкурентную борьбу не просто, потому что был первый.
                                                                                                                        +2

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

                                                                                                                    0
                                                                                                                    Да, если бы он не смог убедить руководство Mozilla, что его язык сможет помочь людям писать менее бажный браузер — затевать его не стоило бы.

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

                                                                                                                    Что значит популярный? Каков критерий популярности?
                                                                                                                    А вы через что собрались получиться пользователей? На деревьях они не растут, знаете ли…

                                                                                                                    Ну во первых, мне нужно известить большую аудиторию о том, что есть такой язык. Самый популярный ресурс который я знаю — habr.com, вначале я хотел просто рассказать про язык, но понял, что история его создания в разы интересней, не говоря о том, что мне давно хотелось с ней поделиться. Вы наверно думаете, что никто языком не заинтересовался? Огорчу вас. У меня забита личка, у меня забита почта, мне ставят звезды на github, мне предложили помощь в разработке и несколько человек активно задают вопросы по языку и предлагают какие-либо нововведения. Один человек даже нашёл мой telegram и написал слова благодарности, поскольку моя статья его вдохновила. Вы скажете это ничто? Так я не гугл, я обычный человек и у меня нет имперских амбиций по захвату всего рынка языков панорамировании, если я найду хотя бы 10 единомышленников — для меня это уже победа.
                                                                                                                    и при этом не давая ни простого описания языка, на, собственно, суперскорости…

                                                                                                                    Буду делать всё, что в моих силах.
                                                                                                                    а написание компилятора с несложного языка — это, на самом деле, простая задача

                                                                                                                    Не нужно подменять понятия, не сложный язык — не значит простой в написании компилятор.
                                                                                                                    Как насчёт задач посложнее? Ну, например, считать с диска JSON, найти в нём элемент с определённым именем и посчитать расстояние между этим элементом и корнем? Как вообще — хотя бы распарсить JSON в языке, в котором, как вы говорите «нет ссылок»?

                                                                                                                    Я никогда не работал с JSON, но знаю что он из себя представляет. Это текстовый файл на диске, как и исходники моего языка. Исходный код моего компилятора этим же компилятором прекрасно парсится, анализирует и считает всё, что нужно. Зачем для этого нужны ссылки?
                                                                                                                      –1
                                                                                                                      Все языки, которые обрели популярность, вот совсем все были решены для решения какой-то практической задачи.
                                                                                                                      Что значит популярный? Каков критерий популярности?
                                                                                                                      Существенный процент разработчиков ими пользуется. Ну пусть будет 0.1% — это примерно 10 тысяч человек, если считать что всего у нас разработчиков 10 миллионов.

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

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

                                                                                                                      Я бы сказал, что если останутся один-два — это уже будет успех. Терри Дэвис тоже искренне считал, что у него есть последователи.

                                                                                                                      Зачем для этого нужны ссылки?
                                                                                                                      Затем, что JSON — это древовидная структура. Можно, конечно, загрузить её в массив и, скажем, при добавлении элемента в середину сдвигать там всё — но обычно с использованием указателей/ссылок/etc — работать проще. Можно запретить их, конечно (скажем в BASIC их нет), но тогда это просто приведёт к тому, что людям придётся их эмулировать «руками», индексами на массивах. А поскольку это будет происхожить без поддержки языка — то ошибки при этом будут случаться чаще, чем если бы ссылки в языке таки присутствовали…
                                                                                                                        –1
                                                                                                                        Все языки, которые обрели популярность, вот совсем все были решены для решения какой-то практической задачи.
                                                                                                                        Что значит популярный? Каков критерий популярности?
                                                                                                                        Существенный процент разработчиков ими пользуется. Ну пусть будет 0.1% — это примерно 10 тысяч человек, если считать что всего у нас разработчиков 10 миллионов.

                                                                                                                        У меня нет сведений о количестве пользователей, но мне кажется, что язык Nim имеет 10000 пользователей, но при этом он не создавался для решения какой либо конкретной задачи.
                                                                                                                        Давайте вернёмся к вопросу через годик. Когда все эти люди разбегутся.
                                                                                                                        Я думаю это зависит от того, буду ли я активно развивать язык, писать документацию и взаимодействовать с пользователями.
                                                                                                                        Затем, что JSON — это древовидная структура.

                                                                                                                        Нет проблем создавать деревья в cine.

                                                                                                                        type Tree(a)
                                                                                                                            leaf a
                                                                                                                            nodes [Tree(a)]


                                                                                                                        Можно запретить их, конечно (скажем в BASIC их нет), но тогда это просто приведёт к тому, что людям придётся их эмулировать «руками», индексами на массивах

                                                                                                                        Я так и сделал в стандартном модуле в реализации ассоциативных массивов, но не из-за отсутствия ссылок, а для производительности.
                                                                                                                          –1
                                                                                                                          У меня нет сведений о количестве пользователей, но мне кажется, что язык Nim имеет 10000 пользователей, но при этом он не создавался для решения какой либо конкретной задачи.
                                                                                                                          Nim создавался как «быстрый Python».

                                                                                                                          Поскольку то, что Python — это дикие тормоза — известно всем, то даже такая странная вещь, как Nim нашла своих последователей.

                                                                                                                          Ну потому что Python — это действительно очень медленно, так что сделать что-то быстрее Python — не так сложно. На этом несколько разных языков поднялись. По популярности, конечно, они и близко к Python не приближаются, но какое-то community образовалось.

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

                                                                                                                          Я думаю это зависит от того, буду ли я активно развивать язык, писать документацию и взаимодействовать с пользователями.
                                                                                                                          Нет — это зависит от того, сможет ли ваш язык решить ну хоть какую-то задачу лучше, чем альтернативы… причём не на 3% лучше, а настолько лучше, что кто-то рискнёт его для чего-то реального поиспользовать.

                                                                                                                          Нет проблем создавать деревья в cine.

                                                                                                                          type Tree(a)
                                                                                                                              leaf a
                                                                                                                              nodes [Tree(a)]
                                                                                                                          О! Класс. То есть вместо того, чтобы делать ссылку объектом языка вы предлагаете использовать массивы, которые могут быть переменной длины.

                                                                                                                          Ну как в Java используется массив размера один для возврата значения из фунции.

                                                                                                                          И там и там, думаю, это будет не слишком удобно использовать… но да, работать будет. Об эффективности, конечно, помолчим…

                                                                                                                          Я так и сделал в стандартном модуле в реализации ассоциативных массивов, но не из-за отсутствия ссылок, а для производительности.
                                                                                                                          То есть уже в стандартной библиотеке вы упёрлись в то, что ссылки, в общем-то, нужны, но решили вместо добавления их в язык навтыкать костылей… прелестно, просто прелестно.
                                                                                                                            0
                                                                                                                            То есть уже в стандартной библиотеке вы упёрлись в то, что ссылки, в общем-то, нужны, но решили вместо добавления их в язык навтыкать костылей…

                                                                                                                            Также можно сказать и про дженерики и обработку ошибок в go — пожертвовали в угоду простотЫ, я считаю что это ошибочное упрощение, но многим нравится, время покажет кто прав.
                                                                                                                              –3
                                                                                                                              Все языки, которые обрели популярность, вот совсем все были решены для решения какой-то практической задачи

                                                                                                                              Nim создавался как «быстрый Python».

                                                                                                                              Вы определитесь. Поскольку замена Python — не решение практической задачи, а разработка нового инструмента решающая проблемы старого и под это определение Cine тоже прекрасно подходит.
                                                                                                                              Нет — это зависит от того, сможет ли ваш язык решить ну хоть какую-то задачу лучше, чем альтернативы… причём не на 3% лучше, а настолько лучше, что кто-то рискнёт его для чего-то реального поиспользовать.

                                                                                                                              Так как бы уже решает. Но из-за отсутствия туториалов и библиотек — его мало кто использовать будет, а вот появление туториалов и библиотек уже зависит от меня.
                                                                                                                              О! Класс. То есть вместо того, чтобы делать ссылку объектом языка вы предлагаете использовать массивы, которые могут быть переменной длины.

                                                                                                                              Да. И ничего в этом страшного нет. К тому же версия cine — 0.1, я в любой момент могу добавить тип который может хранить(а может и не хранить) один объект — это не проблема.
                                                                                                                              Ну как в Java используется массив размера один для возврата значения из фунции.

                                                                                                                              И я напомню, что джаве это не как не мешает быть во многих рейтингах самым популярным языком.
                                                                                                                              И там и там, думаю, это будет не слишком удобно использовать…
                                                                                                                              Удобно. В крайнем случае можно сделать тип обвязку — это не проблема.
                                                                                                                              Об эффективности, конечно, помолчим…

                                                                                                                              А что с ней? Это может на 2% медленнее чем на языке со ссылками и без сборщика мусора и быстрее чем на языке со ссылками и сборщикам мусора.
                                                                                                                              То есть уже в стандартной библиотеке вы упёрлись в то, что ссылки, в общем-то, нужны
                                                                                                                              То есть надо читать внимательно, я это сделал ради производительности, а не потому что ссылки нужны.