События истории рассказываются в хронологическом порядке, если вам кажется, что какое либо событие не относится к делу, то скорее всего — это не так, просто момент в котором будет понятно почему я упомянул это событие, будет позднее. Создаваемый мной язык, со временем менялся, если вы читаете и понимаете, что язык не очень и дальше можно не читать, то все же рекомендую дочитать до конца, возможно ваше мнение изменится. Изображение к статье не отражает главных особенностей языка, но в языке действительно нет ссылок.
Здравствуй, читатель! Меня зовут Александр, родился я в небольшом городке (меньше 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% кода. Я впал в отчаянье и думал, как мне мне сделать так, чтобы язык был простым, но поддерживал все мне необходимое. Я решил попробовать взять за основу ООП и для того, чтобы язык был простым, придерживаться следующих правил:
- В языке должны быть только классы, свойства и методы(ничего больше).
- Каждый метод, в конкретном классе должен компилироваться в одну LLVM IR функцию. То есть, в классе A есть метод m, который в не зависимости от того какие аргументы ему будут переданы, всегда компилируется в единственную LLVM IR функцию, но если B наследует A, то метод m уже компилируется в другую LLVM IR функцию.
- Управление памятью должно быть автоматическим.
- Язык не должен иметь ссылок.
Я приступил к обдумыванию, как сделать необходимые для языка возможности не нарушая правила. И вот, что я придумал:
- Как сделать аналог классов типов из 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 инструкций.
gentee
Язык с какой целью создавался? Хобби и прокачка навыков? Я просто не увидел ни упоминание о назначении языка, ни что вообще на нём можно писать (только консольные приложения под Linux?).
mikhailian
А для чего создавался Temple OS? А для чего животные дарили друг другу цветы в старом советском мультике?
khim
Не знаю что там в советсвом мультике, но TempleOS создал очевидно душевнобольшой человек — и она же, в кенечном счёте, его и погубила.
Это просто пугает. Кому это нужно, зачем?Если человек создаёт себе язык программирования и что-то там ещё «чисто по фану» не ожидая, что этим кто-то будет пользоваться — это нормально, так можно многим вещам научиться…
Но вот это вот:
Автор же явно не считает что этот проект был нужен только и исключительно ему (как оно могло бы быть, если бы он был в своём уме), он предлагает кому-то ещё на это время потратить… кому и зачем?
Taetricus Автор
Мне это было нужно, но никто не делал. Я решил, что раз никто не делает — сделаю сам. А поскольку результат превзошёл все мои ожидания, то если в текущем времени есть такие люди как я в то время, у них хотябы будет возможность использовать язык который им нравится.
inetstar
Нужна отдельная статья про сам язык. Чем он лучше других. Какие потенциальные области применения.
Taetricus Автор
Я целый блог открыл и сегодня в нем уже два новых материала, если успею по отвечать на все сообщения и комментарии(их много и они не только на хабре), то сегодня про типы в языке напишу, на хабр наверно буду что-то писать, но хабр это не совсем то место. Для меня лично хабр — место больших и интересных статей.
Вот чем.
Мне не извесны такие области, в которых его нельзя было бы применить.
Jef239
Вам не кажется, что это очень пахнет BolgeOs?
Отсюда и реакция.
А областей, где он не применим — навалом.
Можно ли применить его в игре "Ну погоди"? Там сотня байт ОЗУ и пара килобайт ПЗУ. Влезет?
Можно ли применить ваш язык для запросов к СУБД, то есть вместо SQL?
Можно ли заменить им язык 1С?
Можно ли им заменить Ladder?
И так далее, и так далее, ниш очень много.
Taetricus Автор
Вообще не уместное сравнение, BolgenOS — Ubuntu с измененными обоями, а Cine написал и придуман с нуля.
Это не область, с таким успехом можно написать «А можно ли на Си написать для стакана воды? У него 0 байт ОЗУ.» Область называется — программирование микроконтроллеров и я не вижу препятствий для моего языка в этой области, но разумеется есть минимальные системные требования для контроллеров. Тот же JS тоже используется в этой области, но не на всех контроллерах с ним можно работать.
Можно, если какая либо СУБД введет поддержку Cine в качестве языка запросов.(Спойлер — этого никогда не будет)
А можно ли в Qt Creator заменить С++ и Qt на Vala и GTK?
Мне до этого не была известна эта область.
Если рассуждать как вы, то ни один язык не может занять даже 1/1000000 ниш.
Jef239
Конечно. Или язык общего назначения и гигантская конкуренция с С++ и т.д. Или — нишевой язык с возможностью занять свою нишу.
Ну и чем лучше вы понимаете конкурентов своего языка и его плюсы по сравнению с конкурентами — тем больше у языка шансов. Например, язык Котлин взлетел потому, что его создатели хорошо понимали нишу — такой же, как Ява, но некоторые вещи писать удобней.
Вот это бы описать подробно. Чем не устраивали и почему ваш язык лучше.
Taetricus Автор
Цитаты из статьи.
Со временем я понял, что самые мои частые ошибки связаны с ссылками и указателями. И я от них избавился, сохранив все мне необходимые функции.
Jef239
На C++ Builder посмотрите. Это С++ со строками из Delphi. То, что вы хотите — там есть.
А вот это хотелось бы подробнее.
stilic
Оскорбили на пустом месте.
В ситуации с BolgenOS тот чел взял полностью готовые проекты. Рабочие совершенно.
И перебил в тех готовых проектах копирайты на свои — всего лишь вся его работа.
Здесь же человек что-то делает. Сам делает.
Jef239
Компилятор сам, а язык? Паскаль с фигурными скобочками — это сам? Я в школе тоже операционку писал. И инкрементальный компилятор. :-)) На Минск-22. Недописал, разумеется. Дальше пары процедур не ушло.
P.S. Но свой BolgeOs у меня был. Планов громадье, реализован пшик.
stilic
Тут же главное, что логику работы с переменными у языка меняет. В этом и есть суть.
А синтаксис — зачем менять, если он устраивает.
У современного мейнстрима вообще много сходного в синтаксисе языков. Зачем заведомо оригинальное делать, даже если это не нужно? Ради принципа что ли? Чтобы сложнее было изучать?
P.S.:
Впрочем:
Кроме begin/end -> на {} он еще строки и массивы меняет на слайсы.
Jef239
Мне кажется, вы додумываете за автора.
«Логику работы с переменными» меняет Котлин. Но в Котлине понятно, что хотели сделать (Яву с меньшими ошибками) и на основе какого опыта.
Синтаксис Паскаля вполне отражает его семантику. Будет иная семантика — нужен несколько иной синтаксис.
В любом случае — нужно описание от автора. Пока что мне это RATFOR напоминает. И (если вы правы) компилировать его лучше, как ратфор — препроцессором в паскаль.
stilic
Не обязательно заводить другую семантику.
Есть такой вполне существующий язык Go, где синтаксис прячет от вас — используете вы обращение по ссылке или нет.
Оба варианта будут работать без вопросов:
Вторая строка это — неявное:
Jef239
Так это в Object Pascal (ака Deplhi) есть. Но очень ограничено — для наследников TObject. И не ограниченно — для передачи параметров по ссылке (const и var).
Но если человек отказывает от ссылок — я это понимаю как передачу RW-параметров копированием на входе и выходе. Тогда намного понятней не const/var, а in/out/inout
Короче, пусть автор сам напишет.
Taetricus Автор
Невнимательно читали статью, в ней есть ответы на все ваши вопросы. Создал потому, что меня не до конца устраивали те языки которые я видел, а также я не видел решения проблемы с sse2(что за проблема, тоже написано в статье). Название так же указано — cine.
Hardcoin
Не знаю, огорчу вас или обрадую, но -msse2 для компилятора GCC существует уже кучу лет. Если цель действительно была в этом, что будете делать теперь?
В любом случае удачи, вы вполне можете освоить чуть более практическое программирование и зарабатывать более приемлимую 1000$ вместо двух сотен.
Taetricus Автор
Дело не в том, что есть -msse2. Объясню на современном примере, поскольку sse2 сейчас активно используется. У меня зарплата 200$ / месяц и даже с такой зарплатой я смог позволить себе компьютер с процессором Ryzen 2200G. У этого процессора есть поддержка инструкций AVX2, а теперь вопрос: «В каком количестве программ, распространяемых автором через бинарники, есть поддержка AVX2?». Недавно была новость о том, что какой-то человек предложил в Fedora компилировать программы в репозитории с поддержкой AVX2, ему быстро объяснили что к чему. Я хотел создать язык, котрой похож на паскаль, но у которого слайсы вместо массивов и строк, кавычки вместо begin end и который компилируется в какое-то промежуточное представление, которое на машине конечного пользователя скомпилируется до конца с учетом того, есть ли у него поддержка тех или иных технологий. И вы меня не огорчите, потому такой подход всё ещё актуален(хотя и не так сильно как в те времена), а так же потому, что за 12 лет язык оброс такими фишками, сочетания которых я не вижу не в одном языке до сих пор. Самые основные я перечислил в этом комментарии.
khim
Если вы всё это делаете «для души»… ну ради бога: всё лучше, чем водку бухать.
Но если вы хотите это «продать»… ну был у меня один знакомый, который носился с идеей «идеальной клавиатуры». У меня даже где-то его драйвер и наклейки на клавиши есть… разумеется удалось его убедить в том, чтобы эту его клавиатуру использовать новно нуль человек за 20 лет.
Хотя сам он её считает, разумеется, «гениальной» и «идеальной»…
Taetricus Автор
Я не пытаюсь никому ничего продать, я даю людям выбор, которого у меня не было.
Если бы не такие люди, которые придумывают и воплощают идеи, то мы бы до сих пор в лесу с копьями на лосей охотились.
khim
Люди, которые «воплощают идеи» сильно отличаются от людей, которые могут в одиночку автомобиль создать…
Возможно когда-нибудь вас жизнь этому научит… а может быть и никогда.
Taetricus Автор
Если вы судите людей, по тому, заметили ли они кавычки будучи уставшим после работы, то это крайне печально. Надеюсь жизнь вас научит, что это не тот критерий по которому надо людей судить.
А разве нельзя в одиночку создать автомобиль, в котором будут воплощены новые идеи?
khim
Проблема в том, что на развитие автоиндустрии ваш автомобиль повлияет ровно… никак.
Самое сложное в этом мире — это не изобрести что-то «новое», а убедить хоть кого-то хоть для чего-то этим «новым» воспользоваться.
Как правило когда новинка приобретает распространение люди начинают исследовать вопрос «а когда и кто её изобрёл»… часто оказывается, что переизобретена она была десятки и сотни раз, вот только никому не удалось, до определённого момента, показать что от этого изобретения есть хоть кому-то хоть какая-то польза.
Огромное количество изобреталей (самых разных) этого не понимают… что несколько странно: они же вроде неглупые люди — иначе не смогли бы ничего изобрести…
ch0mb0r
Можно на клавиатуру глянуть?
переизобретатель русской раскладки
KvanTTT
Ну, кстати, русская, а тем более английская раскладки далеко не оптимальны для современных клавиатур, потому что были созданы для печатных машинок. Английская создана аж в 1870 году. Собственно поэтому позже была создана раскладка Дворак и другие. Но они, увы, не взлетели.
Это же касается и формы расположения клавиш — сейчас есть эргономичные клавиатуры, более удобные и эффективные.
ch0mb0r
dz60 гуглите, пробел должен быть разделен на две или три части
а самое страшное в русской раскладке — так это как враги из IBM после захвата Союза поместили запятую в верхний регистр — ну бред же
при том что у наших компьютеров были русские клавиатуры, который были гораздо длинней
А что до раскладки, их множество на klava.org/delta/#rus_basic
однако если вы потренируетесь, а потом дату с кейлогера закинете на хитмапу, то станет очевидна их неоптималость по отношению к нагрузке на пальцы хом рова
поэтому я и сделал идеальную раскладку, жду пока детали придут для кастомной механики, там уже с прошивкой на сях можно будет эксперементировать с раскладками на полную
asakasinsky
Боюсь, что идеальной раскладки не существует.
Что хорошо для набора текста — плохо для написания кода.
ch0mb0r
Кстати да, совершенно верно, даже более того — лейаут под питон и жс будет так же разным — решение — подгружаемые/подключаемые профили/слои
все нормальные прошивки(материнок для кастомных клав) позволяют это реализовать быстро и просто.
kanazei
Можно на раскладку глянуть?
ch0mb0r
она еще не готова (дело встало т.к нужно было уже серьезно кодить и вытаскивать статку из текста, и на тот момент не хватило навыка, а щас работа и нет времени, но думаю на каникулах запилю),
вот ключевые моменты:
kanazei
Понятно, минимальное изменение йцукен.
Если ещё не, то присоединяйся к любителям эргономики, в том числе и раскладок t.me/klavaorgwork
ch0mb0r
Нет, это то что я оставил себе на повседнев при помощи куцого Xkeymap
там ограниченный функционал, плюс никакущее юзабилити в плане конфига
а так у меня полностью переделанная раскладка когда было нужно много печатать по-русски
ок, загляну
Joric
Я примерно знаю всех переизобретателей клавиатур, и очень интересно было бы узнать, про кого именно идет речь. Причудливые клавиатуры сейчас на взлете, и для них есть рынок — своеобразный, но еще не сильно перегретый. Первые 50 сетов Corne продались за полчаса fstn.hateblo.jp
Upd: если только это не thornik.livejournal.com/472554.html
ch0mb0r
ортолинейная клава — мусор, имхо
тов. Кхим имел в виду mi.anihost.ru/fonisoft.htm
есть тред на реддите с гораздо более ясным ангельским ;)
Joric
Ссылку на тред на реддите, пожалуйста.
ch0mb0r
www.reddit.com/r/MechanicalKeyboards
это сообщество в принципе, там иногда проскальзывают ортолинейки, но все это больше похоже на предметы искусства, нежели реально удобные и практичные вещи
типа ergodox'a с отрицательным углом наклона
VADemon
Ирония в том, что вы ссылаетесь "на возможно быстрый" ICC, который намеренно исполняет медленный код на процессорах отличных от Intel, хотя автор как раз в том комментарии написал, что накопил на AMD Ryzen 2200G.
khim
Есть такое дело. Но фишка в том, что, во-первых, эту проверку можно убрать, а во-вторых даже с ней многие вещи на AMD Ryzen работают быстрее, чем с clang'ом (хотя и медленнее, чем на Intel).
orcy
Присоединяюсь к вопросу про клавиатуру!
stilic
Вы не правы. Бывает, что и получается.
Возьмем очень специфическую клавиатуру, которую создали подобные вашему знакомому желающие создать «идеальную клавиатуру».
ergodox-ez.com
Получилось крайне необычно, явно это нишевый продукт. Думаете, только через 20 лет будут использовать?
Отнюдь.
Ребята, используя краудфаундинг, собрали достаточно денег от желающих столь необычную клавиатуру приобрести. И основали настоящее произодство.
Конечно, массово народ на нее не подсадишь, однако желающих достаточно, что завод функционировал. Исходя из того, что они модернизируют и развивают данную модель, исходя из того что и вторую нестандартную клавиатуру на своем производстве запустили — значит, необходимый для этого спрос имеется.
И 20 лет не понадобилось.
Чуть ранее тот же Мальтрон или Кинесис и обычными инвестициями, на свой страх и риск, запустили производство тоже необычных (и довольно дорогих) моделей. Клавиатуры крайне необычные — но спрос есть.
Те же кто не сумели раздобыть бабло на произодство (или им это не интересно) — публикуют документацию. По которой кто-то делает для себя. А особо понравившиеся модели — и в произодство запускают.
Кто-то — налаживает производство компонентов необычных клавиатур, для самостоятельной сборки предназначенных.
keeb.io/products/iris-keyboard-split-ergonomic-keyboard?variant=29480467267678
Это значительно проще и по силам одиночке. И таких комплектов для самостоятельной сборки довольно много продается очень не похожих друг на друга вариантов.
Это нынче вполне себе хобби, способное воплотиться в реальность.
Сдается, что вы зря отговорили человека.
khim
Подхода: «я набираю тексты двумя пальцами, а значит так будут делать все, а потому давайте рассчитаем, исходя из этого, всю эгономику» — у них не было.
У автора же с его навязчивой идеей «избавиться от ссылок» (и заодно сразу похоронить все алгоритмы и подходы, где дерева недостаточно, а нужно что-то посложнее) — вот такой же подход.
Ни экспериментов, ни тестов, ничего.
И какая из этих клавиатур была создана «сумрачным гением» с подходом «если я не вижу зачем это мне — значит оно не нужно и никому»?
Кто сказал, что я отговорил? Насколько я знаю он всё ещё носится с идеями свою «гениально идеальную клавиатуру», «результат 12 лет разработки» куда-то внедрить.
stilic
Один — Dominic Beauchamp.
Насчет исследований — вы не в курсе их отсутствия:
Есть куча жалоб на блок для больших пальцев. Явно автор имел длинные большие пальцы, а статистическими исследованиями не закомочился. Эту проблему решают уже другие проекты Redox, например. Или Dactyl Manuform. Там специально переработана идея блока под большие пальцы.
У них другой подход — «я набираю вслепую десятью пальцами и сделаю идеальную клавиатуру для этого». Упомянутый Ergodox именно под это и заточен.
Что, как вам известно наверняка, даже в среде ИТ-шников не самый распространенный навык.
Набирать зрячим методом (вертеть головой то влево то вправо) или набирать двумя пальцами (получается, что напрасно ужали клавиатуру специально под десятипальцевый набор, в частности это привело к нестандартному расположению []'~, сиречь Х, Ъ, Э, Ё).
stilic
Вполне себе здравая идея, реализованная в других языках (или в определенных способах программирования). Скажем, в функциональных во главе угла.
stilic
Ну например, отсутствие выделенных функциональных клавиш на том же ErgoDox и размещение их таким образом, что модификаторы и фунциональные не совмещены по умолчанию.
stilic
В настоящее время расцветает самодеятельное клавиатуростроение.
Компоненты доступны.
Платы можно заказать индивидуально.
Корпуса сделать на 3D принтере.
И даже наладить массовое производство можно, не выезжая из дома. Небольшими партиями это вполне доступно обычному человеку, без инвестиций.
Разумеется, если его идея настолько интересна, что он найдет покупателей на свою клавиатуру за 15-40 тыс. рублей — а именно столько выходит стоимость кастомной клавиатуры.
Судя по тому, как цветет и пахнет нынче этот рынок, какое большое число разнообразных наборов для самостоятельной сборки и готовых необычных клавиатур можно купить — число покупаетлей интересующихся подобными вещами достаточно велико.
fougasse
байт-код и jit, чтоли?
Taetricus Автор
Байт-код — да, jit — нет. Ближе всего AOT, но компиляция производится перед установкой программы. При установке у пользователя также спрашиваются вопросы, ответы на которые влияют на то, в какой бинарник собирётся программа. Подробнее вот здесь.
khim
И главное заключается не в том, что Google смогл это сделать — а в том, что они смогли сделать платформу, куда это можно было бы внедрить…
kasthack_phoenix
Вы сейчас придумали ngen, который существует с 2001-го года.
Taetricus Автор
Здорово, а ещё я придумал префиксные деревья, хотя они тоже были изобретены ещё в прошлом веке. Во первых как я понял ngen не задаёт вопросов(если вы не понимаете о каких вопросах идет речь, прочитайте второй пункт в этом комментарии), а во вторых тут не только в компиляции дело(хотя я и начал делать по большей части из-за неё), но в сочетании всех фишек языка и компилятора.
edo1h
А если вопрос поставить так: в каком количестве программ теоретический выигрыш от использования SIMD выше 5%? Если брать всякие видеокодеки, криптографию и прочие числодробилки, то SIMD там давно есть, а вот в условной 1C вряд ли найдётся применение векторным инструкциям.
Naves
В 1С есть функционал для решения СЛАУ habr.com/en/company/1c/blog/420029
Taetricus Автор
Без проведения качественного исследования, мы можем только гадать.
Банальный поиск символа в строке, можно ускорить с помощью SIMD, а также некоторые алгоритмы сортировки, поиск элемента в массиве(в некоторых случаях), а выше перечисленные действия, встречаются часто. И вот в этих случаях — SIMD используется редко.
Боюсь мы этого никогда не узнаем.
Fregl
Мда… что я только что прочитал? Компьютер Байт в 2001 году на 48 КБ? Серьёзно? Какая то непонятная биография, много воды…
Паскаль не нравится, Си не нравится (боже мой, там же скобочки ставить надо), давай как запилю свой ЯП…
У самого был напряг с доступом к компьютерам до поступления в ВУЗ, но уже в 2000 было много компьютерных клубов. ZX Spectrum у самого появился довольно поздно, где то в 1998, но на долго не хватило, уже тогда понимал какой это отстой, когда везде уже Sega и PlayStation на каждом углу (в каждом клубе были).
Помню, как я думал что я очень умный и пришёл в институт на первую пару програмирования, а чувак на ассемблере за 10 минут наклепал скринсейвер в формате полёт к звездам. Вот тогда я понял, что я не ноль, а даже меньше в программировании. Было неприятно это осознавать, но у чувака компы был чуть ли не с рождения (и не сперктум, а ibm совместимые).
Уже не первый раз встречаю здесь статью формата: паскаль не нравится, С++ не осилил, Джава сложно — буду писать что то свое… Пустая трата времени, лучше совершенствоваться в чем то перспективном или популярном. Но это мое мнение.
aslepov78
Плюсую… человек абсолютно точно болен, это раз. У человека не настолько высокая квалификация как он думает. Отсюда и на работу не берут нормальную. Нет, я не говорю что он дурак. Напротив. Но его компилятор его же и губит. А ему тут подливают еще, про Илона Маска… Срочно, срочно к психиатру.
Taetricus Автор
bugdesigner
За 12 лет уж можно было вышку заочно получить.
Veliam
Искренне не понимаю этой погони за ачивкой в виде диплома. Никто в него даже не заглядывает, да и что там можно увидеть. Вот на тестовом задании что-то можно увидеть, а в дипломе… Ну разве что «осилил досидеть 5 лет». У меня есть ВО, но если бы его сейчас не было, не потратил бы ни минуты на его получение.
edo1h
Тут вопрос в том, что первоначальный отсев ведут совсем не IT-специалисты. И отсутствие диплома существенно снижает шансы кандидата.
Да и "осилил досидеть 5 лет" тоже о чём-то говорит. Наличие ВО хотя бы гарантирует минимальную обучаемость и способность достигать цели. И профильное образование — не совсем ерунда, оно даёт системность в изучении хотя бы базовых вещей. Сколько раз встречал людей, строящих, как говорится, здание на песке (например, сетевой администратор, не понимающий что означают цифры в маске сети).
grinCo
Отсутвие высшего образования сильно ограничивает выбор работы и страны.
Например, ОЧЕНЬ трудно получить ПМЖ в США, Канаде, Германии.
Это ответ на коммент выше, но пусть будет просто дополнение к вашему ответу, т.к. я промазал.
den_po
Ну вот лично я когда в Питер переехал, на заочке ещё учился. Так вот пока я диплом не получил, программистом устроиться не мог. А с дипломом сразу взяли.
PyerK
В 90% случаях универ даёт нетворкинг достаточный для успешного поиска первой работы. Точнее работа сама находит студента. (Работал с 3го курса)
den_po
Это не было моей первой работой, у меня на момент переезда было около 10 лет стажа (по разным специальностям). Ну и для поиска первой работы в другом городе универ мне ничего не дал =)
PsyHaSTe
Общался с HR на тему наличия диплома у кандидата.
Их позиция: "Вышку сейчас может получить кто угодно при минимальных усилиях. Если нету — значит и этих минимальных усилий приложить человек не смог, зачем нам тогда такой лентяй и раздолбай?".
DmitrySpb79
Кстати, позиция имеющая довольно-таки здравый смысл.
Если у человека нет никакого образования, то вариантов два — либо с вероятностью 2% он гений, который и так знал больше программы, либо с вероятностью 98% он раздолбай, которому не хватило усидчивости даже предметы по своей специальности прослушать. К сожалению, вероятность второго выше первого.
Отсутствие вышки безусловно, можно компенсировать законченными проектами, сертификатами и прочим, но в любом случае человеку придется сложнее по сравнению с другими соискателями при прочих равных условиях.
Taetricus Автор
Для этого нужны деньги и время, ни того ни другого не было.
Kudesnick33
Мне в чем-то близка ваша история. Тоже кодил для души, запоздалое знакомство со спекки, колледж. Но меня спасло то, что я таки пошел в универ, на заочку. До этого чуть не погряз в написании планировщика для pic18 на ассемблере, ибо «нафиг эти ваши си — тут ассемблер простой, а макросы рулят». Работал в инструментальном цехе, во время сессий — подрабатывал тем, что делал лабы и курсачи на заказ, в т.ч. старшим курсам. И знаете, мое мнение: вышка дает гораздо больше денег и времени, после окончания, а отбирает значительно меньше того и другого, чем кажется заранее. Единственное, о чем жалею — поздно спохватился.
smind
Вопрос приоритетов
xndr
Плюсую. Болен, ну или такая «особенность». Будто не от мира сего. На работе есть такой коллега, хороший специалист, но вот что-то не то, и рассуждения такие же, на уровне ребенка.
sandstramger
Извините, а вы практикующий психиатр, чтобы ставить диагнозы?
Почему-то я на сто процентов уверен, что нет.
Поэтому у вас нет никакого права ставить людям диагнозы.
khim
То есть чтобы создать гениальный язык никакого диплома не нужно, а чтобы ставить психиатрические диагнозы — нужен?
Откуда такая разница?
P.S. Я не считаю что автор — псих. Но что ему явно не хватает общения как с людьми, так и со специалистами — факт.
aslepov78
Это Ваше личное мнение, спорить не намерен.
Эм… я сказал что он больной. А конкретный диагноз ессно поставит врач. Но до него еще дойти надо, к чему и призываю.
almator
Нет идеального языка программирования как неидеальны люди создавшие его. Если все это запил один, то тем более и он будет неидеальным. Хорошее начало карьеры в жизни а потом в грузчики???? Но преданность своей идее конечно восхищает.
svanichkin
Уважаю таких принципиальных людей. Не нужно слушать что говорят люди, они все время будут пытаться вас остановить, будут говорить что это никому не нужно или что вот проще же сделать вот так. Я сам постоянно с таким сталкиваюсь, да что говорить стоит посмотреть на Илона Маска или других великих людей, которых в процессе постоянно пытались остановить так или иначе. Но кто не останавливается тот добивается успеха. Желаю вам успеха, искренне и поддерживаю начинание.
JustDont
Некоторые из тех, кто не останавливается — добиваются успеха.
Починил.
BOOMeranGG
Никто из тех, кто остановился — не добился успеха
Дополнил
JustDont
Некоторые из тех, кто остановились — не добились бы успеха даже если бы продолжали.
Еще дополнил.
Taetricus Автор
Спасибо за поддержку.
Alesh
Надо было получать вышку, пусть разгружая по ночам вагоны. Написать свой язык это конечно круто, но если бы эту энергию, да в правильное русло ..
Taetricus Автор
Теперь я это понимаю, но тогда мне было 18. Так же сыграло роль то, что я везде слышал "Программисту вышка не нужна!". Может кому-то она была и не нужна, но мне бы точно не мошешала.
smind
В чем проблема получить вышку. Я на пятом десятке решил получить второе высшее, скоро дипломная практика.
Taetricus Автор
Я рад за вас(без иронии), но у меня нет ни времени, ни денег. Да и смысла я уже особого не вижу, это статья не биография и 99% процентов важных событий в жизни не упомянута. За все время у меня было где-то 13 мест работы, 10 из них есть в трудовой. Примерно на 9 из 13 работ, когда я увольнялся, меня работодатели очень просили остаться и предлагали увеличение зп(я хороший работник, не пью не курю и очень ответственный), но я всё время уходил, поскольку ненавидел то, чем занимался, а смена работы на некоторое время заглушала ненависть. Из-за такого количества записей в трудовой, когда я устраиваюсь на работу, на меня смотрят как на прокажённого, сомневаюсь, что меня уже высшее образование поможет.
kvk-2019
Здесь неплохо преподают, в качестве курсовой, насколько помню, была возможность написать свой транслятор на продажу в начале 90-х. Образование, вроде бы, бесплатное. Проблема только поступить. Ну и время — обучение только очное. Раньше 6 лет учиться нужно было. Наверно, без теории трудно создать что-то полезное сейчас чтобы заинтересовать потенциальных пользователей. Вроде бы должны быть госпрограммы для поддержки студентов из бывшего СССР, тем более Беларуси.
KvanTTT
Тем не менее выглядит как биография, с некоторыми моментами о языке. Очень много деталей, неясно для чего упомянутых.
Алкоголь и курение слабо влияют на работника, если занимается он этим не на работе, ну и умеренно.
Taetricus Автор
Прочитайте название статьи, это история о том как я создавал язык, статья не называлась «Я создал язык, сейчас я вам про него расскажу», это именно история. Понятно, что она происходила в моей жизни и я описал те моменты жизни, которые повлияли на мой язык.
Ссылка на исследование? На моём опыте(хочу напомнить про 13 работы), есть прямая взаимосвязь. Не говоря о том, что я за всю жизнь не видел ни одного курящего человека, который не курит на работе.
khim
Давайте я попробую вам объяснить что произошло используя некоторые аналогии.
Вот то, что вы сделали — это действительно круто. Невероятно круто и увлекательно. Ну вот примерно как если бы вы взяли старый токарный станок и сделали самодельный автомобиль.
С другой стороны — вероятность того, что вы сможете на этом самодельном автомобиле или даже вашем языке заработать — равна нулю.
Вас тут сравнивают с Маском… ну так рекомендую вспомнить, что Tesla Roadter делался почти целиком Lotus Group. А потом уже, со временем, Tesla стала самостоятельным производителем.
Никакие самоделки продать сегодня не получится. Ни языки, ни автомобили. 50 лет назад (для языков) или 150 лет назад (для автомобилей) — легко. Сегодня — нет.
Но вот знания, которые вы получили, делая ваш язык — вполне вам могут пригодиться. Если вы освоите какие-нибудь
mainstream
-инструменты.Будете ли вы дорабатывать свой «автомобиль» или нет — дело ваше (многие энтузиасты-самодельщики годами дорабатывают свои изделия — и вполне счастливы).
Но если хотите найти работу — вам нужно, условно, стать слесарем. И как «самодельщик» может искренне считать что «Toyota, по сравнению с моим пепелацем, дерьмо»… при этом искренне… но зарабатывать на жизнь он будет дорабатывая и/или ремонтируя вот это вот «дерьмо»… в программировании — всё точно так же.
Taetricus Автор
Одназначно буду! Я не вижу хороших альтернатив моему языку(разве что Haskell + декларативное программирование, но такой код очень тяжело скомпилировать в эффективную программу, для этого надо в ghc влить больше денег, чем за всё время в JavaScript влили).
Я не пытаюсь на нем заработать, всё бесплатно и по лицензии gpl3 (стандартный модуль MIT).
Я это понимал и когда создавал язык, я мог легко выучить мэйнстримовые технологии и найти работу, но на это нужно много времени, а я хотел закончить язык, а профиль на гитхаб с компилятором был бы большим плюсом в резюме. Я не плохо знаю go(и в том числе писал на нём многопоточное приложение), возможно выучу SQL и попробую поискать работу.
khim
Главное: сранивали ли вы сложность использования вот всего того, что вы наделали с тем, сколько усилий потребуется кому-то, чтобы какой-нибудь условный «плагин для Photoshop» написать на вашем языке с банальным предоставлений нескольких сборок для разных процессоров?
Извините, но я вас разочарую: профиль на гитхаб кого-либо волнует только если у человека в резюме нет опыта работы по профилю. И даже самый блестящий профиль — не поставит вас в списке выше человека, который «умеет в O большое» и 10 лет опыта работы.
Проще для начала по-фрилансить… но вы, похоже, реально верите в то, что ваш компилятор хотя бы одного человека в отделе HR сможет заинтересовать…
Tolomuco
Серьёзно?
А как же все эти рассказы от HRов, про необходимость пет проэкта на гитхаб и т.д. и т.п.?
Мне кажется, вы, в запале полемики, слегка увлеклись.
У меня, скажем, профилем на гитхабе почти все HRы интересовались, когда я работу решил поближе к дому найти, а вот про «О большое» не разу не спросили.
Static_electro
А здесь как обычно, рассказы — они всегда рассказы. Чтоб найти работу — надо убедить работодателя, что ты умеешь ее делать. Некоторым для этого достаточно показать резюме, кому-то — поговорить про О-большое. А к некоторым заходишь на гитхаб (потому что ни резюме, ни О не впечатляют, но мало ли) — и видишь, что несчастный репозиторий был создан именно потому, что "эйчары говорят". Да, а некоторые работодатели не знают, что именно им нужно, к тем особый подход.
Вы действительно думаете, что ваш личный опыт можно обобщать? У меня вот, никто не интересовался профилем на гитхабе, потому что его нет :)
Tolomuco
Я действительно считаю, что мой личный опыт можно обобщать. Просто потому, что я очень обычно для рынка выгляжу и специально для меня несколько не связанных между собой людей особенные правила придумывать не стали бы.
Профиль на гитхаб, кстати, у меня для галочки. Я туда последний раз что-то добавлял лет 5 назад. Тем не менее, как минимум один человек туда заглянул. На собеседовании пару вопросов было «а почему вы вот так сделали, а не по другому».
Так-то, конечно, по одному профилю врядли кто-то принимать решение будет, но его наличие поможет дойти до собеседования.
Taetricus Автор
Проверял. Вот как я хочу писать алгоритм быстрой сортировки массива в котором все значения уникальны:
Можете сами попробовать с какой скоростью отсортирует миллиардный массив эта функция. И сравнить с реализация сортировки из любой стандартной библиотеки, любого языка.
Каких сборок? Вы ничего не поняли вот комментарий в котором я все подробно расписываю.
0xd34df00d
Попробуйте написать это на JS или C++, сохранив структуру данных (список) и отсутствие мутаций.
Taetricus Автор
А вы это к чему?
Yuuri
К невероятным способностям GHC к оптимизации чисто функционального кода.
Taetricus Автор
тогда надо попробовать.
0xd34df00d
А вот тут вы не совсем правы. Личный опыт это несколько опровергает.
khim
Да, конечно, если у вас всё это есть и, в дополнение к этому, ещё и всякие штуки на GitHub — это круто.
А вот если есть только GitHub… ну вот не видел я таких случаев. Как бы… да нет — совсем не видел.
0xd34df00d
Ну, например, пишут в почту из-за профиля на гитхабе. Или скипают phone screening. Или техническую часть интервью, про то самое «О большое», и мы просто с интервьюером трем за смишнявки в виде физзбазза на идрисе, переходя плавно к применимости вот этого вот всего в более, э, промышленном программировании.
Ну и ваше исходное утверждение было о том, что гитхаб волнует только если опыта работы нет. Его отрицание — «гитхаб может волновать, даже если опыт работы есть», а не «если гитхаб есть, то опыт работы не волнует» или что-то такое.
khim
KvanTTT
По себе не судите обо всех. Да и что сложного в "О большое"? Это простое понятие. И как проверить 10 лет опыта работы? А прокаченный гитхаб по крайней мере говорит о том, что человек много трудился над определенными проектами.
khim
Поговорить о задачах, которые пришлось решать и тому подобное.
А зачем это работодателю? Ему ж нужно, чтобы принятый на работу человек решал данные ему задачи, а не те, которые ему нравятся. Как там у Джоела (он, по-моему все банальности в IT описал… но они не стали бы банальностями, если были бы неправдой): знать свое дело и уметь его делать.
Вот «O большое» (и отчасти GitHub профиль) — это о первой части «знать своё дело». А вот «уметь делать дело» — это как раз «10 лет работы». И тут GitHub как бы меньше котируется, а такой как у автора — как бы и отрицательных очков не дал.
Praksitel
Лет 15 назад я переписывался в фидо с парнем, написавшем kiev compiler. В конце концом. помню. его взяли на работу в некую очень крутую контору. Но там была, так сказать, java на стероидах, а не никому неизвестный язык :)
shurkandak
Как сказал один мастер:
Сам же я все чаще прихожу к мысли о том, что классы не сильно то и нужны. И по большому счету классы это такие же функции с дополнительными фичами.
Очень интересная статья.
Victor_koly
Однако хорошая книга, как для уровня лицея. Многие ведь даже в универе учат Паскаль или Бейсик, а не C/C++.
Итого — автор тратил $7 для того, чтобы получить $2?
Taetricus Автор
В лицее тоже был только паскаль, а книгу купил один из учеников, который отучившись, подарил её библиотеке лицея.
Да, я тратил 7$, чтобы получить 2$, но эти 2$ я мог превратить в 4$, а 4$ в 8$ и так далее.
Victor_koly
У нас тоже в лицее были Pascal и Delphi, после него — чуток html.
По поводу «получить $8 и более» — понял идею.
jaiprakash
Блохи прекрасно травятся дихлофосом, в особо запущенных случаях можно съехать на период газовой атаки и последующего проветривания.
А так — прекрасно. Обычно автобиографии и описание фич языка разделяют, но почему бы и нет)
Taetricus Автор
Это не автобиогоафия, а история о ток как я язык свой создавал. Я старался писать только те моменты из жизни, которые повлияли на создание языка. Если я писал бы автобиогоафию, я бы обязательно написал о ключевых моментах: мои родители меня не досмотрели и я упал с окна головой об асфальт, моя любия собака умерла у меня на руках, смотря мне в глазах, мои родители постоянно избивали меня проводами от колонок… Таких моментов в моей жизни была огромное множество, про многие моменты в интернете даже упомянуть нельзя, например: отец заставлял держать щенка, пока он над ним такое делал… (не сексуального характера). Если бы писал биографию, я бы упоминал совершенно другие моменты.
vvzvlad
Пассаж про блохи недалеко ушёл от перечисленного вами
DenomikoN
Я смотрю БАЙТ в Беларуси много людей подтолкнул к программированию. Начало моей истории очень похоже)
Taetricus Автор
Байт выпускался на заводе в Бресте, поэтому в Беларуси он и получил широкое распространение(у меня у нескольких соседей и у лучшего друга, то же был Байт) и если не ошибаюсь, эта книга по программированию была в комплекте.
iago
Автор, я конечно все понимаю, замечания по грамматике в личку, но читаю
и волосы встают дыбом. Вы же про свое детище рассказываете, свою биографию пишете — как вы придумали ЯП, прописали грамматику, если грамматика и пунктуация в русском у вас на уровне 2 класса?
И не надо про то, что родной белорусский — я тоже белорус, русский для нас родной №1 как по повсеместному использованию, так и по часам в школе.
Taetricus Автор
Когда я закончил школу, у меня по всем предметам были оценки 9 и 8, кроме языков(всех) и литератур(всех), там были тройки. Я мало пишу что либо в интернете, я крайне мало общаюсь с людьми. Поэтому знание языка мне редко пригождаются. Есть у вас есть вариант исправления ошибки, пришлите мне этот вариант в лс(как уже сделало несколько человек) и я постораюсь его исправить, поскольку моих знаний не хватает, чтобы увидеть ошибку в приведенном отрывке из статьи.
vvadzim
Всех белорусов по себе равняете? А у мяне как по часам в школе так и по повсеместному использованию родной белорусский. Английский вот часто использую. Для чтения. Но intermediate язык не поворачивается называть родным. Хабр — единственное место, где пишу на русском.
Я уже не белорус по вашей логике?)
nsmcan
Вы — молодец! Побольше бы таких беларусов! Но, увы, таких очень и очень мало. Был очень краткий момент в новой истории, когда белорусский начал возрождаться и стал популярен в школах и даже в некоторых вузах. Возможно, Ваше становление пришлось именно на этот момент. Ни до, ни после никаких серьезных усилий по продвижению белорусского языка не предпринималось.
kryvichh
Пока дочитал до середины. До блох. Таких пятничных историй тут ещё не было...
KvanTTT
А жаль, статья-то на самом деле о языке :)
Taetricus Автор
Статья на самом деля о том, как создавался язык и какие события в моей жизни на это повлияли.
worldmind
Что-то не смог понять в чём киллер фича, читаю растбук, там более чем наглядно описаны киллер фичи rust'а. Языков много придумано, и всегда автор хотел что-то улучшить, но обычно в среднем получалось как у всех, соответстно есть ли смысл в них?
Такие языки как хаскел и раст заметно отличаются и их смысл понятен, более того, практически все новоделы остаются игрушками, у раста хотя бы есть весьма крупный проект на котором это всё обкатывается.
kryvichh
Каждый уважающий себя студент программистского факультета пробовал писать свой язык, или улучшать существующий. Проблема автора в том, что он завис на этом уровне. И у него не было подготовки по теории языков, поэтому он много раз переписывал свой проект.
А вообще я так и не решил, это рассказ о своей жизни программиста-самоучки из провинции без специального образования, или такой тонкий пятничный троллинг?
DenomikoN
Если бы он пошел в БГУИР, то свой компилятор и язык ему предстояло бы написать на 4ом курсе. При этом он бы получил знания по Lex & Yacc — это бы заняло меньше 12 лет точно.
Taetricus Автор
Самая сложная часть компилятора — это превращение структур, полученных в результате парсинга, в код на: asm, llvm ir, c. Lex & Yacc не особо мне бы в этом помогли. А парсинг и структурирование исходных кодов я сделал за неделю, как говорится «без пап, мам, лексов и яков».
Taetricus Автор
Это рассказ о том, как я создавал язык программирования, а истории из жизни приведены по тому, чтобы было понятно как я пришёл к тем или иным решениям, почему так долго и почему я не программист. Если бы я хотел писать о жизни, я бы не писал сюда, так как эта не тематика сайта, но даже если бы я писал, я бы упомянул совершенно другие факты, читайте вот этот комментарий.
kryvichh
OK, значит не троллинг, хотя определённые описанные моменты для меня звучат дико. Ладно, не принимайте близко к сердцу, на самом деле я уважаю увлечённых и бескорыстных людей.
Но на мой взгляд, если ваша основная проблема была отсутствие векторных расширений в коде программ на том же Delphi, то сейчас там во встроенный ассемблер вроде добавили нужные команды. И люди уже их используют с огромной пользой для сообщества: https://github.com/pleriche/FastMM4/pull/38
А быстрые строки с копированием при изменении в Delphi были изначально.
Taetricus Автор
Киллер-фичи языка и компилятора:
1 — Программы компилируются в код на Си, но код на Си компилируется на компьютере конечного пользователя с флагом '--march=native', который позволяет задействовать в программе инструкции процессора, которые не были бы задействованы при распространении обычного бинарника.
2 — При установке программ, конечному пользователю будут заданы вопросы. Во что скомпилируется код на Си, зависит от ответа на вопросы. Например: у пользователя можно спросить, что задействовать, opencl или cuda? И если пользователь выберет например opencl, то с большой вероятностью в бинарнике даже упоминания о cuda не будет.
3 — поскольку язык изначально заточен под создание производительных приложений, а так же учитывая два выше приведенных пункта, программы на cine(если в него вложить столько сил, сколько вложенно в раст) могут оказаться самыми производительными, среди других программ написанных в той же манере, но на других языках.
4 — Язык чертовски прост(даже проще go).
5 — В языке нет ссылок и множества проблем, которые из-за них возникают.
6 — На уровне языка(но не программ) незвозможно изменяя один объект, изменить другой объект. А у меня это самая частая ошибка.
worldmind
1-2. При чём тут язык? Перекомпиляция под платформу это не про язык, а про дистрибутивы и всё такое, у конечного пользователя и компилятора-то может не был, ничего у него не скомпилируется.
3. Это как понимаю пока теория, а раст уже есть
4. Это может быть киллер фичей, ниша для этого есть, но из этой статьи этого не понять, вот надо сравнить его с го в гошной нише (конкурентность)
5. Ссылок или указателей?
6. Не очень понял, в расте вот только одна мутабельная ссылка на одни данные, тоже ничего сломать нельзя.
Taetricus Автор
Вот цитата из моего комментария:
Здесь связка язык + компилятор.
Вы наверное не поняли суть, идея в том, что язык компилируется в промежуточной байт код (для этого в начале я использовал FASM, затем LLVM IR, затем Си), а затем этот байт код компилируется в исполняемый файл, но перед компиляцией пользователю задаются вопросы и в зависимости от ответов, будет генерировать разный код. И такой подход, это дефолтный способ распространения программ на cine, т.е. фактически этот промежуточный байт код с вопросами и должен распространятся. Если вы правильно поняли, то почему при установке приложений на rust(я такие использую), они меня не спрашивают, что использовать: alsa или pulseaudio?, X Org или Wayland?, а тупо устанавливаются бинарником(ELF)? Я понимаю, что это можно сделать с помощью создания настроек, но в cine эти настройки можно указывать при установке и в бинарнике не будет даже упоминания неиспользуемой технологии. Неговоря о том, что сейчас при компиляция бинарных сборок программ, даже AVX2 не принято использовать, а в cine хоть AVX512 вставляй, просто при установке если они явно буду использоваться(например с помощью аттрибута типа vector_size) их пользователь сможет отключить при установке, а если неявно(например при векторизации циклов), то clang сам разберётся какие инструкции ему использовать. А на счёт того, что что у пользователя не будет компилятора, так для программа использующих .NET Framework тоже раньше нужно было устанавливать дополнительное ПО, а игры для которых нужен Direct X?, а программы для Java?
И что? Когда раст был теорией C++ уже был и что, автору раста нужно было его не создавать?
Пока в языке нет поддержки многопоточности, но особенности языка позволяют запускать потоки, не используя мутексы(в языке, внутри программы они будут), и не боясь одновременного обращения для записи и чтения(это не возможно из-за особенностей языка) и я уже сейчас знаю как это всё реализовать.
Ничего из этого. Все объекты рассматриваются как значения, т.е.
Cine решает много проблем, которые решает и Rust, но они решают эти проблемы разными способами. Но благородя тем способам которые использует Cine, язык может решать эти проблемы оставаясь простым, назвать Rust простым языком, думаю не станет даже его самый преданный его поклонник. Так же не стоит забывать, что простота сильно влияет на скорость разработки.
edo1h
чем для пользователя это отличается от
?
Taetricus Автор
edo1h
4 — то есть openssl или zlib в своей программе я не могу использовать? сомнительное преимущество, честно говоря
Taetricus Автор
Цитата из статьи
планируется просто распространять си библиотек в пакете вместе с Си файлом который генерирует cine.
inetstar
Я всё-таки не понял. Распостраняются Си-файлы или байт-код?
Evir
Как я понял, байт-кодом в его случае является «частично пре-компилированный» Си-файл с обвязкой, позволяющей получить разные бинарные файлы в зависимости от ответов на вопросы при установке.
Подразумевается, что при установке код будет собран; если считать Си-файл байт-кодом, то получается такой своеобразный Ahead-of-Time.
Taetricus Автор
Именно так.
khim
И это было гораздо сложнее, чем написать собственно язык.
Да, если бы он не смог убедить руководство Mozilla, что его язык сможет помочь людям писать менее бажный браузер — затевать его не стоило бы.
Все языки, которые обрели популярность, вот совсем все были решены для решения какой-то практической задачи.
Они могли обрести популярность не там и не для того, для чего они были созданы изначально. Python был затеян как замена Bash для проекта Amoeba. Сам проект закончился пшиком — но созданные для него язык, со временем, обрёл популярность.
А вы через что собрались получиться пользователей? На деревьях они не растут, знаете ли…
Как-то это всё не очень вам помогло. Билл Гейтс и Пол Аллен написали BASIC за три месяца, а вам для cine потребовалось 12 лет, как вы пишите.
Конечно это не значит что ваш язык в 20 раз сложнее бейсика, просто вы не можете одновременно претендовать на простоту языка и суперскорость — и при этом не давая ни простого описания языка, на, собственно, суперскорости…
Ну Ok, пусть ваш язык прост. Некоторые несложные задачи он решает (а написание компилятора с несложного языка — это, на самом деле, простая задача). Как насчёт задач посложнее? Ну, например, считать с диска JSON, найти в нём элемент с определённым именем и посчитать расстояние между этим элементом и корнем? Как вообще — хотя бы распарсить JSON в языке, в котором, как вы говорите «нет ссылок»?
edo1h
причём тут это?
они разработали реализацию языка, а не придумали новый.
khim
Поймите вы наконец, что разработать новый язык — это даже не полдела, а, скорее 10% дела. Главное — понять откуда возьмутся пользователи у вашего языка и чем вы их будете «покупать».
JavaScript — купил тем, что был встроен в популярные продукт и альтернативы у него, если вы хотели для Netscept делать не полностью статические странички — не было.
Turbo Pascal — купил тем, что позволял комфортно что-то разрабатывать на компьютерах без жёстких дисков (они появились через несколько лет и стоили огромных денег).
C — купил тем, что на нём была целая операционная система (редкость по тем временам, это сейчас их десятки) и библиотеки к ней.
Ну и так далее.
Вы же говорите: «вот вещь, смотрите какая классная вещь… мне нравится». Ну Ok — вам нравится, но почему оно, вдруг, должно понравится хоть кому-то ещё?
Вы говорите: оно будет быстро и беспроблемно (потому как ссылок нет)… Ну насчёт второго — это проверить сложно, но первое… где бенчмарки?
И так далее… работа проделана огромнейшая — но самое главное… даже не затронуто.
Taetricus Автор
У нас с вами очень разные взгляды.
Что значит популярный? Каков критерий популярности?
Ну во первых, мне нужно известить большую аудиторию о том, что есть такой язык. Самый популярный ресурс который я знаю — habr.com, вначале я хотел просто рассказать про язык, но понял, что история его создания в разы интересней, не говоря о том, что мне давно хотелось с ней поделиться. Вы наверно думаете, что никто языком не заинтересовался? Огорчу вас. У меня забита личка, у меня забита почта, мне ставят звезды на github, мне предложили помощь в разработке и несколько человек активно задают вопросы по языку и предлагают какие-либо нововведения. Один человек даже нашёл мой telegram и написал слова благодарности, поскольку моя статья его вдохновила. Вы скажете это ничто? Так я не гугл, я обычный человек и у меня нет имперских амбиций по захвату всего рынка языков панорамировании, если я найду хотя бы 10 единомышленников — для меня это уже победа.
Буду делать всё, что в моих силах.
Не нужно подменять понятия, не сложный язык — не значит простой в написании компилятор.
Я никогда не работал с JSON, но знаю что он из себя представляет. Это текстовый файл на диске, как и исходники моего языка. Исходный код моего компилятора этим же компилятором прекрасно парсится, анализирует и считает всё, что нужно. Зачем для этого нужны ссылки?
khim
Давайте вернёмся к вопросу через годик. Когда все эти люди разбегутся.
Ну… посмотрим. Будет интересно посмотреть через год — останутся ли у вас эти 10 пользователей.
Я бы сказал, что если останутся один-два — это уже будет успех. Терри Дэвис тоже искренне считал, что у него есть последователи.
Затем, что JSON — это древовидная структура. Можно, конечно, загрузить её в массив и, скажем, при добавлении элемента в середину сдвигать там всё — но обычно с использованием указателей/ссылок/etc — работать проще. Можно запретить их, конечно (скажем в BASIC их нет), но тогда это просто приведёт к тому, что людям придётся их эмулировать «руками», индексами на массивах. А поскольку это будет происхожить без поддержки языка — то ошибки при этом будут случаться чаще, чем если бы ссылки в языке таки присутствовали…
Taetricus Автор
У меня нет сведений о количестве пользователей, но мне кажется, что язык Nim имеет 10000 пользователей, но при этом он не создавался для решения какой либо конкретной задачи.
Я думаю это зависит от того, буду ли я активно развивать язык, писать документацию и взаимодействовать с пользователями.
Нет проблем создавать деревья в cine.
Я так и сделал в стандартном модуле в реализации ассоциативных массивов, но не из-за отсутствия ссылок, а для производительности.
khim
Поскольку то, что Python — это дикие тормоза — известно всем, то даже такая странная вещь, как Nim нашла своих последователей.
Ну потому что Python — это действительно очень медленно, так что сделать что-то быстрее Python — не так сложно. На этом несколько разных языков поднялись. По популярности, конечно, они и близко к Python не приближаются, но какое-то community образовалось.
А вы, вроде как, в то, чтобы переманить людей с конкретного языка тоже ведь не целитесь.
Нет — это зависит от того, сможет ли ваш язык решить ну хоть какую-то задачу лучше, чем альтернативы… причём не на 3% лучше, а настолько лучше, что кто-то рискнёт его для чего-то реального поиспользовать.
О! Класс. То есть вместо того, чтобы делать ссылку объектом языка вы предлагаете использовать массивы, которые могут быть переменной длины.
Ну как в Java используется массив размера один для возврата значения из фунции.
И там и там, думаю, это будет не слишком удобно использовать… но да, работать будет. Об эффективности, конечно, помолчим…
То есть уже в стандартной библиотеке вы упёрлись в то, что ссылки, в общем-то, нужны, но решили вместо добавления их в язык навтыкать костылей… прелестно, просто прелестно.
worldmind
Также можно сказать и про дженерики и обработку ошибок в go — пожертвовали в угоду простотЫ, я считаю что это ошибочное упрощение, но многим нравится, время покажет кто прав.
jMas
Великолепный труд. Я очень завидую вашему упорству. Вам нужно найти практическое применение своему языку. Найти реальные задачи на которых ваш язык будет показывать заметные результаты и приходить на хабор через месяц с примерами и графиками. Так вам охотней поверят.
Evir
Вообще, тот же C# мне не очень нравится именно из-за отсутствия модификатора const и нормальной работы со структурами и ссылками/указателями; если честно, мне даже кажется кощунством продвигаться в этом направлении ещё глубже. Сейчас играюсь с Unity, и каждый раз переживаю, что при любом вызове функции всякие там Vector3 будут копироваться вместо передачи по ссылке; интересно, как бы работал Ваш язык с кучей геометрических рассчётов.
Свой компилятор – это очень круто; я пытался реализовать парсер C#-кода в AST с разбором типа каждого выражения, чтобы потом править определённым образом код и пересохранять. Тоже хотел сделать что-то в каком-то смысле уникальное и новое (описывать историю, «квест», через код), но я почему-то сломался на обработке генериков. Поразбирав подробнее, как оно работает в C#, я решил, что мне оно не нужно настолько. Да и переоценка вменяемости того pet-проекта оный забраковала.
Честно, не думаю, что кроме опыта Вы получили что-то полезное, занимаясь своим проектом, но закончить такое детище – хорошее достижение. Вы молодец.
kasthack_phoenix
readonly structs в релизе уже два года как.
Evir
Вау, спасибо. Вот только я колупаюсь на Monodevelop и Unity 2019.1; не знаю, есть ли у меня варианты такую свежатину пощупать, или нужно ещё минимум год-два ждать… Надо будет поузнавать.
Taetricus Автор
Ну значит не я это первый придумал, прям печально стало. Но в cine это все по умолчанию и другое поведение — ошибка. А в C++ это опция.
Так это безумие! Это очень сильно ударит по производительности.
Конечно осталось, ведь это преимущество.
Уверен на 100%, что если в cine было вложено столько же сил и денег сколько в c#, то мой язык смотрелся бы гораздо лучше.
Спасибо.
Evir
В первом случае выходит, что получение имени из экземпляра класса не имеет побочных эффектов (на сам экземпляр), соотвественно, получение имени не вызывает копирование; а вот перед заменой имени Copy-onWrite сработает (если счётчик ссылок покажет, что есть более двух ссылок на объект):
Причём компилятор не даст в const-методе изменять данные экземпляра, если нет специального ключевого слова на изменяемом свойстве (если не ошибаюсь, volatile).
Taetricus Автор
Я не знал, что в C++ есть счётчик ссылок.
worldmind
Про установку не понимая, зачем мне отвечать на какие-то вопросы? У меня других дел хватает, это работа создателей дистрибутива независимо от того где оно будет компилироваться, ну и компилять у себя я готов только если ничего конфигурить не будет нужно — ввёл условный apt rebuild all и получил прирост производительности, тогда ок.
Taetricus Автор
worldmind
Да, но тогда целевая аудитория сильно уменьшается, особенно учитывая что приложений ставится очень много.
Taetricus Автор
Я это понимаю, но и захват всего рынка я то же не планирую.
worldmind
Касательно ссылок получается copy on write, может и не так плохо, не готов конкретно возразить, но есть подозрение, что так производительности си не достичь, скорее всего Раст не случайно все свои сложности ввёл.
Что кстати со сборкой мусора?
Taetricus Автор
Про потенциальную производительность выше Си, я говорил с учётом того, что полученный на cine код, окончательно компилируется на машине пользователя подстраиваясь под систему, в противоположность Си программам, которые принято распространять в виде исполняемых файлов собранных обычно не для самых производительных машин(для совместимости), к тому-же cine генерирует один большой Си файл и компилятор очень многое может оптимизировать в Си программа разбивается на отдельные библиотеки и в последующем они линкуются, но у линкера не такой большой полёт для оптимизации, как у компилятора. Если C, Rust, C++ будут делать как Cine, то программы на них будут более производительными, но Cine будет где-то рядом. Уточню, что эти рассуждения были бы верными в случает если Cine был бы доделал до версии 1.0, в данный момент я не делал бенчмарков и не могу сказать даже примерно где он находится. Так же уточню, что copy on write срабатывает только при необходимости, а это не всегда бывает.
Подсчет ссылок. Зацикливание двух объектов на друг друге не возможно из-за особенностей языка.
khim
Ну… это вам ещё предстоит испытать…
worldmind
Вообще нужна статья которая убедит людей что язык действительно крут, эта статья скорее про историю, а не про сам язык. Скорее всего нужны примеры решения реальных задач.
Taetricus Автор
Хоть кто-то в комментах это понял, а то я задобался объяснять в комментах, что это история создания, а не описание языка.
Пока что мне нужно туториалы понаписать, чем я и занимаюсь в указанном в статье блоге.
Будут.
worldmind
Просто начинать стоило с самого языка, история это потом, когда языком уже заинтересовались благодаря его киллер-фичам.
worldmind
Если вдруг будет дефицит идей — у меня завалялась, пока не похоже что сам доберусь писать.
Taetricus Автор
Насчёт мессенджера, у меня самого много идей, но боюсь я никогда не доберусь до их воплощения.
fougasse
Taetricus Автор
Нисколько не сомневался, но мы не о скорости компиляции размышляем.
А я разве утверждал такое? А писал о том, что если есть 2 похожие технологии, которые предназначены для плюс-минус одного и того же, пользователь может выбрать какую из них использовать.
Так и cine 1.0 ещё не вышел. Или вы хотите, что бы мой язык с версии 0.1 рвал всех в клочья? Я писал о том, что у него есть такой потенциал из-за дизайна языка и особенностей компилятора.
Это шутка?
Невнимательно читали статью, я писал об этом. Множество ссылок на одни данные, по одной из ссылок данные меняются, хотя программист рассчитывал, что ссылка ведет на уникальный объект. Это моя самая распространенная ошибка.
Так в языке и указателей нет.
Подробней писал в этом комментарии(там где код написан, в коде есть комментарии)
khim
Когда мы делали свою особую песочницу, которая должна была, в некоторых условиях, быть быстрее альтернатив благодаря специальному компилятору… мы бенчмарки прогоняли до того, как компилятор был готов. Была какая-то адская смесь из изменённого GCC, каких-то скриптов, обрабывавших ассемблерный выхлоп, и чего-то ещё. Скомпилировать реальные программы было нельзя, но где-то половину SPEC2000 — мы прогнать сумели.
Чего было уже достаточно для того, чтобы аргументировать перед руководителями, что наш проект имеет смысл.
Вы же пытаетесь в качестве киллер-фичи продать, извините, «шкуру неубитого медведя»…
А что есть тогда? Вот захотите вы прочитать JSONчик маленький (ну, банально: закачик хочет, чтобы конфигурация в JSON хранилась). Куда вы его засунете?
Taetricus Автор
Я не это называю ключевой особенностью, а то что язык простой удобный, но при этом есть огромный потенциал производительности. Сейчас его производительности с головой хватает для всех целей с которыми его сейчас будут использовать. Или может вы считаете что его сейчас будут использовать для реальных крупных проектов? Я вас умоляю.
Смотрите ответы на этот комментарий.
khim
Любое высказывание про элементы пустого множества истинно… так что формально вы правы.
Vitter
добавьте это в текст статьи. Хотя бы в «P.S.»
Taetricus Автор
Там уже есть раздел «Интересные факты».
Pavia00
Жму вам руку. Я свой компилятор 3 года делал. Причем на отладки ссылок застрял на 1 год.
Простату языка проще проверить на задачах из rosetecode.org там сразу видно какой язык проще.
У Паскаля код длине чем у современных языков таких как Rust.
worldmind
Важный момент касательно простоты — важно чтобы сложность инструмента соответствовала сложности решаемых задач. На эти грабли наступали многие perl, php, js — делали "простой" язык, а потом пользователи, полюбив удобство решения простых задач, начинают решать сложные, возникает куча проблем, в ответ язык начинает развиваться и в итоге ничем не отличается от "сложных" языков в противовес которым создавался "простой", go думаю на те же грабли наступает, о чём говорят холивары про обработку ошибок и дженериков.
Вообще я большой сторонник простоты, но простые модели обычно ограничены, "идеальный газ" очень простая модель, и она даже работает, но только в определённых границах, которые надо понимать.
worldmind
Ну и вероятно автор не знаком со многими известными языками, что насчёт питона например?
a1111exe
Превед
Цитата из статьи.
worldmind
Что-то пропустил, видимо потому что не упоминалось о каком-то влиянии питона.
a1111exe
Тут есть ещё момент, что автор ищет производительности:
У Python-а, каким бы синтаксически приятным он ни был, производительность в смысле быстроты определённо не преимущество. Поэтому вряд ли автору имело смысл что-то говорить о влиянии Python на разработку языка, одним из главных критериев которого было "чтобы программы на моём языке были производительны".
ch0mb0r
гуглите Nim
а вообще простым файндНреплейсом уже можно бустануть питона сайтоном, а потом лупы переписать на нампайные и тд и тп в итоге будет лейтёхать ничуть не хуже пыщ
Flying
Бедный, несчастный русский язык, за что вы его так?
Taetricus Автор
Я питон изучал только ради любопытства, не знаю зачем его упомянул. Питон повлиял на меня только в том плане, что я понял то, что в моём языке динамической типизации точно не будет(мне она жутко не понравилась).
fougasse
Что вы имеете против сильной динамической типизации?
0xd34df00d
(тянет руку) А можно я?
Смысл типов в возможности проверки определенных свойств программы без ее запуска. Ну, например, что она не складывает число со строкой или массив с объектом. Или что она не лезет в сеть или на диск там, где вы не ожидаете. Или что нигде нет деления на ноль. Или что она не пускает неаутентифицированного пользователя в админку. Или что она всегда завершается.
В рантайме это проверять уже поздно и вообще медленно.
Taetricus Автор
Вот прям с языка сорвали.
rboots
Возьмите парня на работу, а то судя по статье знает больше многих мидлов, а до сих пор велосипеды изобретает и работает непонятно кем
ZaMaZaN4iK
Насколько я знаю на работе вместо создания велосипедов принято использовать готовые решения, если они подходят. Если он не на работе, значит просто недостаточно хочет туда :)
MagicWolf
Узнал себя местами, напишу со своей перспективы.
Саша, ты набрал много опыта программирования, и это заметное достижение.
Но мне кажется, что твоя слабость в том, что ты чересчур увлекаешься деталями. ИМХО сейчас новые языки программирования мало кому нужны, если за плечами разработчиков не стоит крупная организация или сообщество.
Может стоит больше обсуждать с другими людьми для чего и что ты делаешь?
У тебя очень хорошие способности в программировании, раз ты сумел столько всего выучить и использовать. Может тебе сконцентрироваться на поиске такой работы? Далеко не везде требуют образование. И в коллективе ты лучше начнешь видеть свои слепые пятна. А они есть у всех людей.
В любом случае, удачи тебе в твоих делах.
kryvichh
Новые языки всё время возникают. Вот, например, земляки-беларусы выкатили «SQL на стероидах»: habr.com/en/company/lsfusion
Но только мизерная часть новых языков применяется кем-то, кроме своих создателей.
worldmind
У них как раз та же проблема — не очень убедительно хвалили свой язык, надо понимать что время у всех ограничено, всех языков не изучить, приходится выбирать то что кажется крутым и лучше известного не чуток, а радикально, хаскел и Раст как примеры.
Так что надо учиться "продавать" свои результаты, у нас с этим проблемы, не учили этому, наоборот говорили не хвастаться.
CrushBy
Для универсальных языков программирования это действительно верно. Но это не касается DSL. Бывают узкие области, где нужен свой специализированный язык, заточенный под конкретные задачи. Есть ряд специальных инструментов для разработки таких языков.
Taetricus Автор
Я это понимаю. Но возможно, даже если язык не обретет популярности, какие-то фишки моего языка станут использовать в других языках, в cine есть много ново и интересного. В этом случае я не зря жизнь жил, ведь я сделал мир лучше чем он был до меня.
Если ты про жизнь, то как бы пафасно это не звучало, я очень необычный человек, со взглядами сильно отличающимися со взглядами 99.999% людей, советы других людей для меня зачастую не применимы, я в лет 15-20 прислушивался к советам, каждый раз разочаровывался результатом. Если ты про программирование, то в моём окружении есть только один человек умеющий программировать, но он самую малость программирует на PHP для WordPress, разница в нашем знании программирования — пропасть, он не понимает о чём я говорю.
Я подумываю над этим, но здесь есть много нюансов.
Спасибо.
khim
Тогда почему вы считаете, что хоть кто-то хоть когда-то прислушается и присмотрится к вашей Temple OS… ой, извините, языку cine?
Taetricus Автор
Потому что это была история про то, как я создавал язык, а не технический мануал по языку. Про язык я буду писать в отдельном блоге(ссылку на который я дал в статье) и иногда на хабре.
То есть вы хотите сказать, что человек отказывается от продукта если его создатель не похож на него? Очень хочу почитать те исследования на которые вы опираетесь, при своих высказываниях.
khim
Берёте любую книжку про маркетинг (хотя бы того же Карнеги) — и читаете.
Я не зря столько раз произносил слово «продать» при общении с вами. Тот факт, что «рынок» языков программирования не совсем обычен — ничего не меняет, по большому счёту.
В современном мире типичная цена языка программирования — нуль. Есть языки, за которые нужно платить денег (в основном старые, с которым люди уже «срослись» и готовы за них платить), есть такие, за использование которых платят (иногда даже и «по-настоящему», но чаще — путём вкладывания денег в разные конференции и маркетинговую литературу), так что язык, который не стоит ничего… это, на самом деле, довольно-таки дорогое предложение.
Соотвественно если вы кого-то хотите им заинтересовать — нужно в него вкладываться. Статья на Хабре и блог — это, как бы, уже не так плохо… но это ставит ваш язык в один ряд с тысячами других, подобных… ну и почему, как вы считаете, кто-то захочет посмотреть на именно ваше творение, а не, скажем творение DeuterideLitium6 или Pavia00?
jMas
В этом мире прежде чем начать чем то заниматься — нужно прочитать теорию по маркетингу и рынку. Занимает не так много времени. Это покажет индустрию с другой стороны, многие вещи станут очевидными.
a1111exe
Атмосферно. Очень больно было читать, как человек с такими навыками работает грузчиком и охранником.
Чувствуется, что cine это Детище. Родимое, дорогое, любимое. Как человек, поздно зашедший в карьеру из-за гигантских амбиций суъективного характера (и тоже много лет поработавший в процессе личной учёбы на низкоквалифицированных работах, испытавший и нищету, и депрессию), позволю себе это прокомментировать. Возможно, я ошибаюсь, но после прочтения статьи отнюдь не очевидно, что Вы работаете программистом и нормально зарабатываете. Если не ошибаюсь, то очень рекомендую потратить Х времени на среднестатистическую карьеру программиста. Тем более, что по сложившемуся впечатлению, Вам легко доступна карьера выше среднестатистической. Потому что нормальная зарплата, какими бы мы ни были идеалистами, обеспечивает материальный комфорт и фундамент душевного спокойствия. Я сейчас как раз в этой фазе, и подпишусь обеими руками. Что касается Детища, то ничего, если оно подождёт. Вы важнее любого языка программирования, в том числе и Вами созданного. Осмелюсь даже сказать, что ничего страшного, даже если Детище никогда не взлетит. Главное, чтобы для Вас, живого человека, жизнь была, наконец, жизнью, а не огнём, водой и медными трубами. Тем более, что, судя по Вашим скиллам в самомотивации, Вы уже из комфортной карьеры найдёте как прицепиться если не к разработке нового языка, то к радикальному улучшению уже существующего, с опытом и наработками из Детища. В самом худшем случае Ваши идеи (в смысле, Ваш язык) не найдут общественного признания. Лично я считаю, что это не страшно — кто сказал, что всё, аутентично найденное самостоятельно, непременно должно признаваться обществом? Их истинная ценность это то, что делает Вас тем, кто Вы есть. Ровно так же я решил для себя: докарьерные наработки будут моим личным активом, который буду пересматривать и допиливать по мере возможности и личного развития. Если когда-нибудь выстрелит — ок, если нет — тоже хорошо, ведь главное, что с ними я стал лучшей версией самого себя в своих же глазах.
Как бы там ни было, успеха!
Taetricus Автор
Я процитирую один из своих комментариев выше
Я подумываю попробовать стать go backend разработчиком, знания и небольшой опыт go имеется(компилятор cine я переписывал с go + некогда были написаны несколько программ).
Спасибо за приятный комментарий.
jMas
Как было замечено выше, если бы цель была получить работу — работа бы уже была. Здесь амбиции. Просто их нужно сматчить с запросами рынка. Обычные программисты делают маленькие шажки и матчат свои способности с рынком чаще. Автор решил сделать один большой шаг. Но чем длиннее шаг — тем выше шанс сделать шаг в направлении которое не матчится с рынком. Чтобы сделать что то полезное для рынка — нужно быть участником рынка, а не наблюдателем.
Рыноку нужны не обязательно революционные идеи. Нужны просто хорошие идеи с практическими примерами применения. Если у тебя есть идея, тебе нужно ее упростить так, чтобы пользу от этой идеи понял даже дурак. Тогда получится бомба.
Кстати, некоторым идея может понравится просто потому что для них это ново — но это нисколько не говорит насколько идея эффективна.
Taetricus Автор
Какие? Это тролинг?
Вы статью хоть по диагонали читали? Для меня не было подходящего инструмента и я его сделал. Я делал язык не для того чтобы устроится на работу, хотя со временем я начал понимать что это может быть плюсом при устройстве.
jMas
Хорошо, вот у вас есть инструмент. Например если представить ремесленника — ему нужна лопата для того чтобы копать поле — он сделал себе лопату и копает себе поле дальше. Зачем этому ремесленнику идти в город и рассказывать всем о своем инструменте? Обычно другие сами приходят к нему и просят поделиться его инструментом, либо начинают его копировать.
Для чего вам этот инструмент? Для чего вы его используете?
perfect_genius
a1111exe
Буду исходить из того, что это не тонкий подкол (или всё же?...).
В некоторых религиях, конечно, есть предписания оставлять после себя, например, детей, но там главный мотиватор "приказ свыше".
Есть рациональные аргументы, почему индивидуально человек непременно должен стремиться после себя что-то оставить?
И, кстати, почему под "что-то после себя оставить" не подпадают дела человека в течение жизни? Например, если человек за время жизни успел помочь многим другим людям — кого-то подвёз, какой-то бабушке помог дорогу перейти, нуждающемуся дал денег на хлеб (а то и работу организовал), пожертвовал какие-то суммы на спонсирование дорогостоящих операций, и в таком духе. Может, конечно, быть и наоборот (не подвёз, а переехал и т.д.), или где-то посередине, но как бы там ни было — чем это не след, который за собой и после себя оставляет человек?
worldmind
Строго рациональных нет и не может быть, ибо это вопрос об извне заданном смысле жизни, а извне никого похоже нет, наждо выбирать себе смысл самостоятельно.
Но что-то можно сказать, во-первых, это форма бессмертия — нечто живущее намного дольше чем ты, а во-вторых, это уважение к предкам, ведь когда-то они горбатились, жили намного хуже нас, но находили в себе силы сделать что-то, что осталось нам и позволило нам жить лучше и они конечно не хотели бы чтобы цепочка прервалась на каком-то одном поколении, которое скажет «после нас хоть потоп» и всё протеряет.
a1111exe
А само это "извне" есть?
Всё же бессмертие это не "намного дольше" а бесконечно дольше. Но вне зависимости от этого, странный, имхо, аргумент. Как может человеку быть "холодно" или "жарко" от того, что что-то живёт после него, если он сам мёртв? Единственный вариант (подскажите, если есть ещё), чтобы ему, возможно, было не всё равно — это наличие жизни после смерти. Тем не менее, такие аргументы иногда прилетают от людей, которые убеждены, что после смерти ничего нет.
Если предположить, что после смерти ничего нет, то какой ещё может быть мотиватор, кроме ублажения своего эга при жизни ("я такое тут делаю, я останусь в истории, меня будут помнить" и в таком духе)? Но в этом случае не принципиально, чтобы что-то реально осталось после, т.к. после смерти (по предположению) уже нет эга, которое можно ублажать. И мотиватор "можем умереть и не оставить после себя ничего" становится бессмысленным именно в качестве мотиватора.
Традиция уважения к родителям и, в общем случае, к предкам, насколько мне известно, восходит к религиозным предписаниям. Хотя в уважении к родителям и старшим есть и рациональный аспект: так поддерживается структура общества, при которой более опытные и мудрые пользуются авторитетом и могут направлять молодые горячие головы в конструктивное русло. Впрочем, трудиться и что-то производить для цивилизации можно и по разным другим причинам. Но что-то мне подсказывает, что в "можем умереть и не оставить после себя ничего" имелось в виду "можем не оставить после себя чего-то такого, чтобы много-много людей долго-долго нами восхищались".
worldmind
Даже если где-то глубинах нашего разума мотивация именно такова, в этом нет ничего плохого, да мы такие, социальные существа, которым важен статус, уважение, оценённость, даже если это не предельно рационально.
Если мы удовлетворяем эти наши древнии потребности не унижением слабого или насильным покрытием большинства самок, а созиданием, то это вполне повод гордится.
Более того, о будущем после нашей смерти мы также можем думать желая блага своим потомкам (опять же — потребность пришла из эволюции, но неродной ребёнок так же ценен, ибо мы ушли от биологической эволюции к культуре и родной этот тот кому ты привил свои ценности).
a1111exe
Иногда чувствую себя инопланетянином. :)
Мне важно личное пространство, душевный и физический комфорт. Для душевного комфорта достаточно развиваться, помогать нуждающимся в меру возможности, а также чтобы у себя, родственников, друзей и человечества всё было хорошо (человечество, увы, пока очень сильно не справляется). Для физического комфорта тупо нужны деньги (ещё, чтобы помогать нуждающимся).
Статус, уважение, оценка окружающих почему-то мне безразличны, пока не угрожают вышеназванному.
Ну, в общем, думаю, что понял. "Можем умереть и не оставить после себя ничего" это аргумент не к разуму (как я ошибочно подумал), а к эмоциям. У меня нет на это отклика, ну и ладно. Спасибо за разъяснение!
perfect_genius
Отвечал так за автора, т.к. по тексту ему явно важнее всего его идеи.
Я тоже недавно так же горел идеями и хотел улучшить мир, пока мне
не прострелили коленоне надоело годами не видеть результата и работать в неприятных мне работах. Теперь, стиснув зубы, выбираю из идей только те, которые можно коммерциализировать, чтобы обрести «личное пространство, душевный и физический комфорт».khim
Идеи, за которые вам никто не платит — тоже имеют право на жизнь… но вам нужно понимать, что если никто, кроме вас, за них не платит — то платить будете вы.
И неважно: хотите вы собирать марки, паровозы или пишите свой язык… если вам устраивает ситуация, когда вы с этого не получаете дохода — то почему нет?
К сожалению у очень многих изобретателей подход к их Детещу совсем иной: я такую, такую, ТАКУЮ вещь сделал — а её никто не ценит… но я им докажу!
Обычно кончается это потерянными годами и, в особо запущенных случаях, смертью (как у пресловутой TempleOS).
perfect_genius
Не очень понял, что вы имели в виду, но я не выкидываю «некоммерческие» идеи и буду реализовывать их как только появится «свобода».
a1111exe
Ну… он прямо написал:
Человек явно понимает, что неплохо бы балансировать, чтобы не закончиться раньше воплощения своих идей. Да, есть сильные амбиции, но очень непохоже, что есть мания.
Мои личные амбиции тоже лежат вне сферы монетизации. И тоже в какой-то момент "стиснул зубы" и в таком духе. Но в бэкграунде продолжаю по чуть-чуть заниматься ими. В идеале хочется прийти к чему-то вроде автоматизированного бизнеса, которым практически не нужно заниматься, но который обеспечивает финансовую независимость с хорошим запасом — чтобы забыть все финансовые проблемы как страшный сон и заняться, наконец, на полную ставку теми вещами, которые по-настоящему интересны. Да, да, я всё понимаю, мечтать не вредно. :)
Что ж, пожелаю финансовой независимости себе, Вам, автору и всем по-хорошему амбициозным людям, амбиции которых вне монетизации.
0xd34df00d
Да, это потеха, но не обязательно эго, а просто системы вознаграждения, которая чуть глубже и шире, чем это понятие. А ещё это, как минимум, мысли о себе будущем, который через 30-40-50 лет будет смотреть обратно на свою жизнь и испытывать какие-то эмоции по этому поводу.
Восхищение кучей людей, впрочем, необязательно. Достаточно, чтобы я будущий был доволен.
0xd34df00d
Потому что иначе ваша жизнь не имеет никаких сайд-эффектов, а неимеющие сайд-эффектов вещи можно не вычислять.
Потому что грань, позволяющая судить о достаточности затраченных усилий, тонка и неочевидна.
a1111exe
Как бы человек, и не стремясь к этому, каждый день, простите за вульгарность, ходит в туалет и оставляет там сайд-эффекты. Этого достаточно, чтобы его жизнь можно было вычислять?
И что это, кстати, за вычислитель? В рамках какой онтологии Ваш аргумент рационален?
А когда грань достаточности усилий очевидна и не тонка, чтобы можно было достоверно судить? Можно пример усилия, необходимого и достаточного для этого, с конкретной гранью?
0xd34df00d
Зависит от упомянутой далее в предыдущем комментарии грани.
Я сам себе этот вычислитель. Аргумент рационален в рамках заботы о себе будущем.
Мысли «я чё-т хренью какой-то по жизни занимаюсь, бессмысленная она у меня и бестолковая» догоняют уже сейчас, а мне всего 28. Что же дальше будет?
Зависит от
конкретной монадывычислителя.Вот то, что я полторы статьи в реферируемых журналах на тему формулирования и исследования критерия устойчивости регрессионных моделей наваял — это хрень и ерунда. Заниматься диплёрнингом было бы ещё большей ерундой, поэтому я дропнул аспирантуру и вообще ушёл из этой области.
Если же у меня получится сформулировать и формально доказать, например, какое-то тотальное подмножество современного хаскеля, то это будет интересно и может быть достаточно, по крайней мере, на несколько лет.
Хотя, казалось бы, диплёрнинг на человеческую жизнь влияет больше, чем доказанная strong normalization theorem для ещё одной системы типов.
worldmind
Вот не уверен, шума конечно от диплёрнинга больше, но вот если будет какой-то формально доказаный язык и на нём будут писать надёжные системы для медицины, АЭС, самолётов, космолётов и прочих, пользы будет намного больше, но не очень заметной для непосвящённых.
a1111exe
И вот тут я потерял видимость понимания, что в Вашей терминологии значит "вычислять жизнь". В связи с остальным контекстом осторожно предположу, что "вспоминать прошлое". Подтверждаете?
a1111exe
Попробую своими словами сформулировать Ваш аргумент, как я его понял.
Примерно так?
dernuss
ну в некоторых играх такая возможность была, сохраняли на магнитофон.
Потом ещё и изменять сохранения научились;)
SADKO
А ещё был TR-DOSовский magic button, добавляющий возможность сохранения хоть куда.
Taetricus Автор
Ез всех игр которые мне нравились, такая возможность была только у laser squad(эх сколько времени я на неё потратил, больше только на lode runner).
SADKO
Грустная story, есть в ней что-то от поверженного демона Врубеля...
Tereshkov
Впечатлён вашей историей. Сам пережил в юности ощущения, подобные вашим, и магия рождения исполняемого файла из пены исходников когда-то заставила приняться за собственный компилятор. Как и вы, восхищался Паскалем, недоумевал по поводу C и мечтал об «идеальном языке». Понятие «идеальности» со временем трансформировалось, теперь самым близким к идеалу кажется Go, так что мой Паскаль постепенно стал приобретать его привкус. Однако самое большое удовольствие я находил в том, чтобы каждый байт моего компилятора был мне как родной, поэтому я с самого начала рассматривал компиляцию только в машинный код — без LLVM IR, C и ассемблера. Я смотрю на свою работу только как на любительскую и потому готов простить себе весьма скверный уровень оптимизации.
Тем не менее, очень хотелось бы вам пожелать получить более фундаментальную подготовку и найти работу, достойную ваших способностей, чтобы ваша история была светлее «Моих университетов» Горького. Увы, любительские проекты почти никогда не получают отклика публики, соразмерного тем усилиям, которые вложил автор. Они — вещь глубоко личная, интимная, а признание в профессиональной среде приходится заслуживать чем-то другим.
Удачи вам!
Taetricus Автор
Спасибо.
khim
Tereshkov
В своё время Бертран Расселл говорил о ценности философии: философия нужна не человечеству — философия нужна человеку. К хобби-проектам применимо то же самое. Чтобы преподнести человечеству что-то полезное из области IT, придётся первым делом освоить массу готовых библиотек и фреймворков: если это компиляторы — то LLVM, если игры — какой-нибудь Unity 3D, если нейросети — PyTorch или TensorFlow. Иначе продукт неконкурентоспособен. С течением времени эти библиотеки всё усложняются и дают всё меньше шансов прикоснуться к сути вещей. Я не занимаюсь разработкой игр, но, кажется, сейчас можно сделать игру с хорошей физикой, даже не понимая, что такое тензор инерции и как решать дифференциальные уравнения. А ведь потребность в понимании сути остаётся! Но это потребность конкретного человека, а не человечества — и вот этот человек берётся за свой «ненужный» проект. Не знаю, согласится ли со мной автор публикации (кажется, его амбиции простираются дальше), но моя мотивация всегда была именно такой.
khim
Сделать что-то своё, игрушечное, но «почти как настоящее» — лучший способ понять как в принципе подобные вещи делаются… и неважно что вы там разрабатываете: мини-компилятор или мини-фреймфорк для создания Web-сайтов.
Но вот получив такую штуку пытаться превратить её в что-то большое бессмысленно. Не то, чтобы игрушечный проект не может взлететь — может. Но он должен решать конкретную проблему в конкретном месте и конкретными способами.
Ну вот взгляните на историю создания Linux. Фактически первое же письмо обращается к довольно-таки большой аудитории (пользователи Minix) и предлагает им решение нескольких проблем, которые у них «поперёк горла» стоят: yes — it's free of any minix code, and it has a multi-threaded fs.
Эту маленькую строчку легко не заметить и вообще пропустить, читая это письмо — но если вы почитаете всю переписку, то увидите — что это было основой успеха.
Почему? Потому что Танненбаум создал Minix как учебный язык, он поставлялся вместе с книгой — но у него была большая проблема: лицензия не давала возможности распространять изменённые версии и при этом ради того, чтобы код оставался обозримум Танненбаум оказывался добавлять в операцонку многопоточную файловую систему.
То есть тысячи людей оказались в ловушке — и они были хвататься буквально за соломинку.
Ну а потом — «каша из топора»: имея довольно-таки игрушечную OS и большую группу крайне заинтересованных в её успехе лиц — можно сделать что угодно.
Но интерес людей — это, в таких случаях, всегда — ключ к успеху. В данном же случае… ну вот видите вы в этом списке киллер-фич хоть чего-нибудь, чего люди бы очень хотели, но, по тем или иным причинам, не могли получить? Я, например, не вижу.
Распространять программу в виде C файла? Ну, блин, всю жизнь мечтал прямо. А работа с SSE — вроде как планируется, но что можно реально получить вот «прямо здесь и сейчас»… похоже не знает и сам автор…
При этом использовать готовые библиотеки вроде как нельзя, кучи уже написанных библиотек на первое время (всякие JSON'ы, PNG и JPG и всё прочее что есть из коробки в том же Go)… тоже нет.
Ну и кто тогда будет «первым заинтересованным пользователем»? И для чего он этот язык будет использовать?
S-e-n
Обучение, деньги, чсв и пр — это побочный профит.
khim
Ну вот если рассматривать язык программирования именно так — то всё хорошо. «Я написал язычок-с, а вот он себя уже и компилирует-с, да я вообще крут! Ща подучу Flask (или Laravel или что там ещё) и пойду денег заработаю.» — это нормально.
А вот «да мой язык уже даже может сам себя компилировать — я ща как расскажу как я крут, так все про C++ и Rust забудут и будут моё изделие использовать» — это нет.
S-e-n
Автор находится здесь. Всему своё время.
Taetricus Автор
Вы ошибаетесь.
Я так понимаю статью вы не читали. Всё это изначально и задумывалось для решения одной проблемы, а к концу написания языка, он начал решать несколько проблем. И лично для меня эти проблемы очень важны и я уверен, что я не один такой из 7,7 миллиарда человек.
А я вижу и уверен, что и таких как вы и таких ка я — много.
Я мечтал, а никто не делал. Я не стал отчаиваться и сделал сам.
Во первых не SSE, а SIMD. Там будет поддержка вплоть до AVX512, во вторых всё это есть уже сейчас, просто инструкции вставляет clang, но в некоторых алгоритмах он не справляется и мне нужно будет вставить их в ручную.
Сейчас можно почитать историю о создании языка. Сам автор прекрасно знает, что уже сейчас можно получить от языка и создал блог в котором об этом будет рассказывать подробно
Библиотеки написанные на си можно использовать хоть сейчас, просто они не попадают в пакет(но это планируется). Вот кстати цитата из статьи:
Вообще то у меня вся личка на разных ресурсах(не только на хабре) и среди них есть как пользователи заинтересованные в изучении язык, так и пользователи которые хотят помочь в разработке.
Taetricus Автор
Я с вами не соглашусь. Нас 7,7 миллиарда вы всерьёз верите, что в мире много людей с проблемой которой нет у хотя бы миллиона людей? И если один человек решит проблему для себя, его опыт может помочь решить проблемы значимой части человечества. Почитайте историю Джефа Безоса и о том как он создал Amazon, и если вы считаете, что Amazon не решает многих проблем значимой части человечества, то извените, но нам с вами не по пути.
khim
Нет, иногда такое случается (историю Linux я уже описывал) — но это нужно такие «болевые точки» искать. А не надеяться, что то, что проблема, которую вы решаете кого-то заинтересует настолько, что люди захотят на решение смотреть.
Ну вот простейший пример, я про него уже говорил: раскладки. Все знают, что имеющиеся раскладки неудобны… но, тем не менее продажа 50 сетов — это достижение.
Почему? Да потому что у подавляющего большинства проблем есть «отличное решение»: забить. Ну просто проигнорировать и всё. Раскладка плохая? Ну и чёрт с ней, тратить год жизни на то, чтобы потом получить экономию в час каждый год — неразумно. SSE2 инструкции не используются? Ну и пофиг — я лучше подожду лишние полчаса, пока моя программа что-то там посчитает, чем потрачу год на то, чтобы её на полчаса ускорить… И так далее.
Огромное количество проблем просто невыгодно решать — потому что затраты на решение этих пролем не окупятся.
А изучение нового языка программирования — это многодневные затраты (или многомесячные, если язык сложный), для решения каких-то мелких проблем этого никто делать не будет, нужно что-то действительно серьёзное, чтобы человек решил, что эти затраты окупятся.
Что именно я там должен увидеть? Безос увидел проблему, которую он может решить лучше, чем то, что было до Amazon: покупка книг, которые интересны конкретному человеку. Он отлично понимал, чем плохи существующие решения (стоимость аренды склада при магазине в центре города делает невыгодным хранение и продажу редких книг) и как Internet поможет её решить (книги можно доставлять из центрального склада по всей Америке и, тем самым, даже редкие книги будут приносить прибыль), он чётко понимал, что у него будет дикое количество конкурентов — и делал всё возможное, чтобы воспользовались его услугами, а не их…
Ну и где у вас вот это вот всё?
Taetricus Автор
Я не проецировал это на себя, а показывал что утверждение про то, что «если у человек есть проблема, то это его проблема а не человечества» — в корни не верна, а человек преподносит её так как будто это истина, хотя на самом деле — это его мнение, не больше.
khim
Вот какую лично вашу проблему решит тот факт, что cine задаёт какие-то вопросы при установке? Вам мало программ, которые это делают?
Не знаю что вы там понимали, но Безос — это как раз человек, который очень чётко понимает, что если никакому конкретному человеку решение проблемы не нужно — то человечеству в целом эту проблему решать не нужно тоже.
Tereshkov
Истории выдающихся деятелей, увы, слишком часто вводят в заблуждение: читатель вечно недооценивает степень исключительности этих историй. В истории Безоса (или Маска, или Джобса — кого угодно) не заложено никакого рецепта успеха, применимого для всех остальных. Безусловно, для успеха необходимо решение общезначимой проблемы. Однако если брать за ориентир самого себя, то очень легко ошибиться в оценке масштаба проблемы: касается ли она одного, или сотни, или миллиона человек? Известные лично мне неудачи стартапов были, в конце концов, связаны именно с этой ошибкой: проблему десятка человек воображали проблемой тысяч.
Общезначимость проблемы, решённой Amazon, для меня очевидна. Общезначимость проблемы, решаемой вашим языком, весьма туманна. Нигде даже не было чётко сформулировано, что это за проблема. Обратите внимание: все восхищены вашим мужеством, все признают за вами талант (и я в том числе — мой голос под вашим постом), однако почти никто не заявил, что его проблема наконец решена. Моя — точно не решена, хотя мне очень хотелось бы видеть удобный высокопроизводительный статически типизированный компилируемый язык для математических расчётов.
Пока самые сомнительные для меня решения касаются именно удобства (на вопрос о производительности можно будет ответить только позже и с цифрами в руках):
rules
: судя по практике её употребления в самом компиляторе, это очень громоздкий и многословный способ указывать типы аргументов функции.Taetricus Автор
Ещё раз скажу, почитайте историю Безоса. Когда он начинал, все ему говорили, что это бред, что он дурью мается, что никому это кроме него самого не надо и проще сходить в ближайший магазин, чем заказывать через интернет. То есть общество не понимало проблемы, но теперь стало очевидно — это было проблемой.
А чем я рискую пробуя? Разрабатывать свой язык в серьёзный ущерб своей жизни я начал только последние 1.5 года.
Никто особо и не может этого сказать, материалов по языку мало, чтобы заявить о том что проблема решена, нужно попробовать решение, а кроме меня пока язык толком никто не знает и попробовать его для того чтобы оценить решает он их проблемы или нет, никто пока особо не может. Но я как, человек который написал компилятор и стандартный модуль на cine, заявляю — решение которые я искал в других языках, в cine решены.
Вобщето было.
1 — программы не используют всех возможностей компьютера на котором они используются.
2 — ссылки и указатели приводят к большому количеству ошибок.
Проблему номер 2 решают также rust и haskell, но на мой взгляд: rust — черезчюр сложен и неудобен, а так же имеет плохо читаемый синтаксис(когда я вижу код написанный на rust, у меня начинают глаза болеть), в haskell мне всё нравится, но без заморочек с оптимизацией, на самом популярном компиляторе(ghc) не получается писать эффективные программы.
Согласен. Я то же вижу эту проблему и для простых случаев я собираюсь все сделать менее многословным.
Ну на счёт этого я уже писал, это будет как DirectX, JVM, .Net Framework. Один раз поставил и всё работает.
khim
Полная противоположность тому, что делаете вы.
Вам тоже рекомендую. С чего он начал, обратили внимание? Ну когда его жена была водителем в поездке из Нью-Йорка в Сиэтл? Он продумывал дизайн веб-сайта? Или думал о том, где сервера разместить? Нет — он бизнес-план писал. Где было чётко написано — кто будет его клиентами, зачем они к нему придут и прочее.
И это было, до некоторой степени, правдой. Но, тем не менее, его неуверенность в бизнес-плане была не в этом. Цитата из вашей же, блин, книги:
Сайт был запущен 16 июля 1995 года, хотя на тот момент он не был до конца закончен: к примеру, на нем можно было заказать отрицательное количество книг. Безос мотивировал это необходимостью опередить конкурентов.
Вопрос был не в том — будут ли заказывать люди книги через Internet. Вопрос был: а успеет ли Безос раскрутить своё детище до того, как Barnes & Noble (и другие крупные ритейлеры) откроют подобный же сервис.
Кстати именно потому что он начал с бизнес-плана он прекрасно понимал, что денег на книгах — он не сделает… и с самого начала планировал расширение на другие товары.
Вообще всё что он делал — вертелось вокруг маркетинга… то есть того, о чём вы даже думать не хотите.
Более интересный вопрос: а что вы планируете выиграть в случае успеха? 1.5 года — это большой кусок жизни. Не огромный, но большой. Если уж вы его вкладываете, то хотелось бы понять — чего хотите получить взамен… Безос целился в то, чтобы стать ни много ни мало, а конкурентом крупнейшим сетям, рыночная капитализация которых — миллиарды. За это явно стоило рискнуть побороться… тем более он знал, что через год-два «окно возможностей» захлопнется.
А чего планируете достичь вы? Даже если достигните успеха? Стоит оно нескольких лет вашей жизни?
А вам не приходит в голову что компилятор — это, как бы, не самая сложная в мире вещь? Если он не со слишком сложного языка да ещё и неоптимизирующий?
Первые компиляторы, как бы, в машинных кодах писались, ибо других вариантов не было…
А это проблема? Почему это проблема? Для кого это проблема? Сколько люди готовы за её решение готовы потратить усилий? Главное: может ли Cine дать им хоть что-то? У вас же даже бенчмарков нет, а ведь ваше решение отказаться от ссылок приведёт к тому, что многие программы будут, мягко говоря, неоптимальными.
Вот только решение этой задачи напрямую противоречит решению предыдущей задачи. Rust потратил невероятно много усилий, чтобы добиться некоего компромисса.
А с чего вы решили, что ваше творение позволит это сделать?
Вот только во всех трёх случаях тот факт, что его нужно ставить создавал, в какой-то момент, очень серьёзную проблему: люди не хотели ничего ставить.
Во всех трёх случаях решением были миллиардные вливания и принудительная установка (вместе с браузерами, офисом и прочими продуктами).
Откуда вы на это собираетесь брать деньги?
3263927
на таких сумасшедших инженерах и держится мир! удачи вам, даже если это просто хобби — всё равно это вдохновляющая история!
Taetricus Автор
Спасибо.
hrie
История дико крутая, спасибо, что рассказали.
Скажите, а в итоге вы устроились программистом?
Taetricus Автор
Нет, я сосредоточился на том, чтобы дописать компилятор, не тратя время практически ни на что другое.
AlexandrNikolaichev
Явно не хватает теории, но упорство поражает.
Вы бились головой об стену, ожидая увидеть сказочную страну(ваш ЯП), и таки пробили стену, только за ней оказался редкий лесок с одиноким прудом.
Taetricus Автор
Я не совсем понял вашу метафору, но если вы имели в виду, что язык получился не очень, то вы пока не можете об этом судить. Хорошие знания этого языка в данный момент есть только у меня, на практике использовал его только я(переписав компилятор на cine). Разумеется я сужу предвзято, но мне язык очень понравился.
gennayo
Прекрасная статья. Скажите, было трудно собраться со смелостью, что-бы рассказать об этом такому широкому кругу читателей?
Taetricus Автор
Нет ни капли, мне наоборот хотелось поделиться. К тому же почитайте вот этот комментарий, то, что там перечисленно это 1/1000 плохих вещей которые со мной происходили, я давно ничего не боюсь.
gennayo
Не всем дано это понять, и многие комментарии это подтверждают. Но то, что вы всё-таки написали эту статью, очень хорошо. «Имеющий уши, да услышит».
overtest
Дочитав до этой строки, вспомнил себя :)
inferrna
Выскажу своё никому не нужное мнение. Частично у меня есть нечто общее с автором с той лишь разницей, что я нахожу в себе силы вовремя остановиться. Сажусь писать что-то очень нужное, без чего вселенной ни куда (OpenCL реализацию нейронной сети) — через 2 года появляется нечто похожее, только гораздо лучше. Ок, выдыхаем, начинаем копать в другую сторону, благо идей полно. Год пишем нечто, в полной бесперспективности чего убеждаемся на деле (ага, торговый робот), выдыхаем, благодарим себя за бесценный опыт, двигаем дальше. Ну и непыльная работа, такая, чтобы сильно не мешала этим увлечениям, также присутствует.
Полагаю, что я в этом плане куда более распространённый типаж.
Что касается конкретики. Насколько я сумел понять, язык, который пилит автор, слишком вещь в себе и действительно напоминает TempleOS. Библиотеку на нём уже не напишешь, ни о каком FFI речи идти не может. Язык только для написания конечных самостоятельных программ, которые в обязательном порядке будут спрашивать пользователя, в каком виде ему их подавать. Ей-богу, я бы выдохнул и забил.
Советую автору поискать другую цель в жизни, достижимую при помощи денег. Слетать в тёплые страны, например. А когда появится промежуточная цель в виде денег, появится и интерес программировать не то, что хочется, а то, что скажут. Ну, это я по себе сужу, опять же.
Taetricus Автор
Так и есть, но немного помогает тот факт, что в cine можно использовать Си как инлайн ассемблер. Можно прям функции на си писать. Правда всё это не безопасно.
Это не цель моей жизни.
vaplite
Вот. Похожая история с привкусом сожженных нервов. С другой стороны, понятно, почему в том числе люди готовы тратить столько времени на такие вещь-в-себе проекты: банально чтобы не чувствовать дерьма, которого им успели вылить в душу; эскапизм в IT-стиле и всё такое.
P.S. Можно на ваши проекты посмотреть?
jMas
Не хочется ощущать себя рабом системы. Наверное некое подсознательное желание стать на верх пищевой цепочки.
vaplite
И это, конечно же, тоже.
Так и представляю себе, как в голове у человека при мыслях о работе на кого-то всплывает образ деспота-отца, например. Невроз обеспечен.
vaplite
«Как я 12 лет создавал свой ЯП и компилятор к нему» или «Как навязчивые идеи губят перспективы на будущее».
pas9x
Прошу прощения, а блох точно было 14 штук? Вы можете назвать точную дату, время и географические координаты этой находки? Просто нам важно всё это знать для полноты представления о вашем проекте.
Taetricus Автор
Просто увлёкся. Я ведь — человек.
KvanTTT
Никто не спорит, все могут увлекаться. Но есть разница между посиделкой в баре вечером в кругу друзей и публичной статьей на популярном ресурсе. На последнем все же нужно тщательней составлять и проверять текст.
Taetricus Автор
Кто такое сказал? Кому это нужно? Вы может думаете я за это деньги получаю? Вы слишком серьезно к этому относитесь, от того, что я указал сколько было блох никто не умер. Я хотел поделиться с людьми историей — я поделился, людям понравилось — большинству да. Я не знаю есть ли на хабре игнор статей конкретного автора, но если вас так выбешивает мой формат повествования — вы в праве не читать мои статьи.
lavagod
Как говорил один мой знакомый волейболист: «не все вопросы, которые игроки задают друг другу на площадке, задаются для того, чтобы получить на них ответ...» Вопросы типа «куда ты пасуешь?», «ты что не видишь, что я не был готов атаковать?», «куда ты бьешь?» задаются скорее для того, чтобы сбросить напряжение… Не надо рассматривать их серьезно и отвечать на них, аргументируя что и как ты хотел сделать на площадке, рисуя в воздухе кривые атаки.
В данном случае, как мне кажется, к таким «безответным вопросам» относится как статья в целом, так и вопросы к ней. Хорошего кода!
ooprizrakoo
Меня чутка смущает (потому что не понимаю) ваше нежелание устроиться на удаленную работу за 500-1К баксов, где надо программировать какие-то полезные для кого-то вещи. Будь то анализ данных, блохчейны, написание драйверов или шейдеров, или что-то ещё. В таком случае вы и кругозор значительно расширите, и из предметной области не будете далеко выходить, и график работы для себя комфортный сделаете, да и просто жизненный уровень поднять сможете (если оно вам хочется).
Taetricus Автор
Вы читали статью? Я буду очень рад устроиться хоть на какую работу программистом, но на некоторые я претендовать не могу, а те на которые могу — мне отказывают с порога.
jMas
Я удаленной мало занимался, но чтобы дорасти до больших зарплат нужно начинать с подмастерья. Если у вас сильно завышенные требования к работе — это проблема не отсутствия работы, а отсутствия желания выполнять такую работу. Здесь увы психологическая проблема.
Taetricus Автор
Вы плохо читали статью, я пытался устроится на должность Junior Haskell Developer, всем указанным требованиям я соответствовал, но меня послали с порога. А теперь скажу то, что не написано в статье, я бы и на 400$ пошёл. Если вы считаете, что Junior Haskell Developer должен получать меньше — тогда да, у меня были завышенные требования.
jMas
Почему не пошли на что то другое, что более востребовано на рынке?
DmitrySpb79
Автору, спасибо что поделились. Писать код вечерами, разбираясь в LLVM и лямбда-функциях, а днем работать грузчиком — это сильно.
Раз уж вы поделились с общественностью, наверно ждете фидбек. Напишу и свой.
У меня для вас две новости — хорошая и плохая. С какой начать? Пожалуй с плохой.
Плохая новость: новый язык программирования сейчас никому не нужен. Вообще. Их уже и так столько, что даже профессиональные программисты знают дай бог 5% от имеющихся языков. Ценность любого языка — в кодовой базе, наличии примеров, библиотек, готовых решений. Если у вас бюджет как у гугла и сотни программистов-олимпиадников, пишущих под новый язык — тогда на этот рынок можно войти. А так, с нуля, просто без шансов. Для серьезной математики сейчас используют вычисления на видеокартах или облачные сервисы, и просто еще один язык (даже если он по мнению автора, заточен под «высокую производительность»), просто никому не нужен — на видеокарте с 1000 ядер оно все равно в разы быстрее будет. Изучать кому-то новый синтаксис нигде не используемого языка? Извините, без шансов.
Хорошая новость: время потрачено не зря, у вас уже сейчас фактически 12-летний опыт программирования, и даже несмотря на отсутствие «вышки» и записей в резюме, вы вполне сможете устроиться джуниором (или даже не-джуниором) на программиста. Ваш проект на гитхабе тут как раз пригодится, если покажете как все работает, и если это действительно работает, то проблем с трудоустройством не будет. Вы уже прямо сейчас реально можете перейти с зарплаты 200$ на 800-1000$, и это будет совсем другой уровень жизни. Целеустремленности вам не занимать, как и раньше, отложите все дела на 3-5 месяцев, подкачайте теорию и всякие там задачки про гномиков и занимайтесь только трудоустройством и рассылкой резюме. Даже если нет возможности уйти с работы, создайте CV (подробно расскажите в нем о используемых языках и технологиях) и рассылайте его по разным вакансиям хотя бы раз в неделю, это займет не больше 10 минут в день.
Язык пока отложите на год-два. Когда поработаете программистом, пересмотрите проект еще раз, и там уже с новым опытом, подумаете что с ним делать.
Удачи.
100% уверен что вы будете хорошим программистом, тут надо просто свои комплексы перебороть и таки устроиться на постоянную работу.
0xd34df00d
Я бы, например, не отказался от general-purpose-языка с cubical type theory.
S-e-n
aleksandrkotlyarov9
Он не сможет работать в команде.
jMas
Да, вы в точку. Автор поставил на кон многое: ставки слишком высоки, чтобы идти на обычную работу, где скорей всего будет лид, который слышать не хочет о новых языках и которому просто нужно эффективно решать задачи на том что дадут. Автору банально будет сложно преодолеть этот психологический барьер. Что в прочем, объясняет почему он пошел на низко квалифицированный труд — просто потому что там нет конкуренции за то что он действительно ценит.
Taetricus Автор
Опять диванные эксперты подъехали, я уже если честно устал отвечать на такие глупые комменты, но я отвечу.
А с чего мне ему предлагать свой язык использовать? Никто не станет использовать в промышленном программировании язык у которого не: миллион инструментов для разработки, кучи разработчиков под этот язык, кучи библиотек для решения различных проблем. Я вообще не понимаю как к кому-то в голову может прийти, что я буду навязывать свой язык работодателю.
Экстросенсорика зашкаливает, определение характера через монитор. Я cine закончил недавно и всю жизнь использовал другие языки. Мои предпочтения: haskell, go.
С удовольствие пошёл бы на высоко квалифицированный труд — не берут, сто раз пытался.
Ну ка, проверим диванно-экстрасеннсорные способности: Что я действительно ценю?
jMas
Вы сейчас серьезно или просто дурака валяете? Работы на рынке полно — в прямейшем смысле этого слова. Хочешь верстка, хочешь — QA, хочешь удаленно, хочешь в офисе. Есть HR который тебя пристроит на аутсорс. Все относится к IT и можно постепенно мигрировать в то что хочется. Вопрос вам: почему другим удается найти работу в 30, 40, 50 лет, а вам нет? Может быть вы просто не хочете делать то, к чему не привыкли?
L3333437
Как вы читаете статьи? Автор 10 раз говорил, что рад был поработать программером, но без образования в его глубинке никуда не взяли, поэтому пришлось работать грузчиком
jMas
Читаю вполне подробно. Я знаком с парой людей изначально не из IT и наблюдал как они приходили в программирование. Мое мнение — было бы желание, а способ найдется. Более того — сам автор был в Минске где квалифицированную работу уж точно можно найти. Мне кажется, автор просто не согласен на какую то начальную работу в сфере IT. Ему хочется чтобы сразу была работа на Haskel или Go. Но дело в том, что сначала нужно чем то простым заниматься, за пару лет обрасти опытом и спокойно пробовать искать желаемое.
Strawb
Компилятор cine написан на cine?
Автор снимаю шляпу, но зачем вы написали эту статью? Вы же пожалуй достигли просветления?
Taetricus Автор
А почему не поделиться с людьми хорошей историей? :)
sashavoloh
Несмотря на длительный период разработки, вы создали свой аккаунт на гитхабе только 15 декабря 2019 года. Почему не раньше?
Вы не думали о том, чтобы переехать в Минск и поработать С++ разработчиком или девопсом?
Taetricus Автор
Незачем было, ведь я один занимался разработкой.
В статья указанно, что я жил в Минске и в том числе пытался устроиться на работу.
inetstar
На Хабре есть возможность указать кошельки Вебмани и Яндекс.Деньги, чтобы получать пожертвования. Читая про ваши мытарства так и хочется задонатить.
Taetricus Автор
Хабр позволяет добавить: WEB Money, Яндекс Деньги, PayPal. В Беларуси можно открыть WEB Money только в белорусских рублях, кидать туда с российских кошельков — нельзя. Для того, что бы принимать деньги в Яндекс Деньгах нужно быть гражданином РФ, PayPal в Беларуси вообще ни как нельзя использовать. Сразу скажу, что все три валюты я в своё время пытался использовать. Единственное, что нормально можно использовать в Беларуси — Bitcoin. Его не запрещено хранить, его можно принимать физическим лицам, но запрещено юридическим, за исключением членов парка ПВТ. Если что, то вот — bc1qlc0q4heksc7etuyukdz5ts3u6cnd3uzsdt2d0w.
inetstar
Напишите кошелёк в профиле. Может у кого найдутся.
spbislanders
я из РБ, в Минске вам нужно просто верифицировать кошелек в ЯДеньгах, у яндекса офис на немиге, съездите с паспортом.После чего можно принимать RUB, снимать в местных банкоматах BYN
shuhray
Один студент в Англии решил экономить на еде. Купил мешок овсянки и ей питался. Заболел цингой (первый случай в Англии со времён войны)!
Теорию категорий попробуйте поучить по моему учебнику
github.com/George66/Textbook
Taetricus Автор
Спасибо, в свободное время посмотрю.
Gorthauer87
Кстати интересно, а llvm bitcode разве не решает эту же проблему с simd?
Я уже не говорю про wasm даже
khim
Нет. Автор вообще, похоже, не представляет какие проблемы возникают при использовании SIMD и почему люди не делают того, что он предлагает (но пока не делает).
Поясню на примере. При работе с SIMD довольно-таки часто возникает задача вычисления максимума из двух наборов чисел — логично, да?
Логично-то логично, но вот сам SIMD — нелогичен: в SSE2 можно узнать максимум из чисел со 16-битных чисел со знаком и 8-битных чисел без знака… и всё. А вот наоборот — нельзя. Это аж SSE4.1 требуется, чтобы для 16-битные чисел без знака максимум считать.
А есть другая, очень вроде как похожая операция — сравнить числа и потом использовать это в вычислениях… Такая операция — тоже в природе есть.
Вот только она вообще никогда не работает с числами без знака! Только с числами со знаком — при этом сразу, прямо в SSE3 есть и 8-битовые и 16-битовые и 32-битовые варианты… а вот 64-битные — есть только в SSE4.2.
Ну и так далее.
Соотвественно чтобы всё это работало быстро — вам недостаточно написать алгоритм, который хорошо ложится на скалярный процессор и понадеяться, что вам его компилятор как-нибудь да соптимизирует. Нифига. Чтобы всё было быстро — вам нужно изначально структуры данных строить так, чтобы они «хорошо легли» на выбранный набор SIMD-инструкций.
Ну а если так… то о каком автоматическом выборе чего-либо и автоматическом подстраивании может идти речь? Разработчики wasm пытаются придумать что с этим можно было бы сделать… но пока в качестве решение предлагается «ход конём»: так как «фигурная нарезка» из «тут поддерживается, тут не поддерживается, тут рыбу заворачивали» — это, в основном проблема наборов SSE, в AVX2 и ARM'овском NEON'е всё довольно-таки ортогонально… то решение проблемы пока что предполгается напрашивающимся. Поддержим AVX2, NEON — а на всё остальное пока что «забъём». 99% рынка это покроет, а AVX512 добавим когда там свой, очередной, дурдом прекратится (ведь включение AVX512 сегодня ещё и частоту процессора снижает автоматом, так что если код плохо под AVX512 оптимизирован, то ещё и замедление, по итогу, может случиться!).
Taetricus Автор
Вообщето я работал с ними, и в учебниках по которым я изучал sse2 были указаны многие проблемы. Но мне не нужно о них беспокоиться, поскольку я не буду вставлять ассемблерные вставки с SIMD инструкциями, а буду использовать атрибут vector_size из clang, который позволяет создать тип который является вектором и с ним можно работать как с обычным числом, но если у процессора есть инструкция которая позволяет ускорить работу с эти вектором, то он её ускоряет, а если нет, просто традиционным способом исполняет код, без SIMD инструкций.
Я очень много времени потратил проверяя, какой код будет оптимизирован, а какой нет. Я не надеюсь — я знаю.
А вот это не знал, возможно ограничиваюсь использованием AVX2
Taetricus Автор
Частично, но не полностью. Там есть вектора, но в зависимости от максимального размера вектора поддерживаемого процессором, код будет различный.
PyerK
Я автора хочу поддержать в его поисках.
Моё мнение очень полярное к большинству комментирующих. Я считаю что новые языки нужны, нужны поиски выразительных правил и кода для многомерных данных, нейросетей, описанию аппаратуры, и потоковым вычислениям, нужны новые формы записи для нечетких алгоритмов и для алгоритмов которые могут давать сбои (например из за старения цп или радиации), нужны новое представление обработки ошибок итд. И да, нужны те, кто поймут (увидят боль) проблемы и найдут выразительные абстракции.
Я иногда читаю описания языков из 50х-60х, тогда присваивания данных было чем-то новым и непонятным, как и циклы :) и я верю что эволюция языков, в текущем виде, не остановится.
khim
Даже если интересные идеи в языке есть — про них никто не узнает…
Это полвека назад астроном мог замутить для своего телескопа классный язычок — и получить тысячи последователей. В этом веке — я подобного припомнить не могу.
PyerK
Я каждый будний день имею дело с исследователями. И уж никак не склонен идеализировать их способности, они такиеже люди. Я даже типичного ПШД могу по стилю кодирования узнать. Между 15 годами практики программирования и 15 годами теории лежит труднопреодолимая пропасть, как между разными религиями.
А для изменения мира нужны не научные публикации, а школа последователей. И индекс цитируемости её не создаст.
khim
Это вы уже полезли в дебри. Я, как бы, ни разу не исследователь, тем не менее мне регулярно валятся в почту ссылки о том, что на мои работы кто-то сослался.
Но в любом случае шансов на то, что вы, гений такой, что-то сотворили, выложили на GitHub, а потом на это посмотрел исследователь и «улучшил мир»… примерно нуль.
Есть некоторые ритуалы, которые нужно соблюдать. Если вы «сумрачный гений» (или учёный из другой области) то этим риуталом является решение чего-то, за что премию дают или публикация статьи «совместо с местным авторитетом» (примерно как-то так… в моём случае что-то похожее).
Создание TempleOS и выкладываение её на всеобщее обозрение, увы, к успеху не ведёт… даже если она реально содержит что-то интересное — на неё, скорее всего, никто смотреть не будет…
PyerK
Поиск по гитхабу отлично работает. И да, я часто забредаю в проекты, о которых можно подумать что никто не знает. Например какая то редкая и недокументированная АПИ функция и тут находится какой нибудь единственный проект который показывает как ею пользоваться. Или алгоритм обработки данных радаров подповерхностного зондирования. Или алгоритм с доступной лицензией который позволяет мержить цепочки ДНК. Или дизассемблер недокументированных команд процессора\етц. И да, возможно автор даже не забросил проект, а просто умер, но пропахав почву есть шанс что его проект станет фундаментом чего то нового и револючионного, и произойдет это на год или на 10 лет раньше, чем без его трудов.
grinCo
Я думаю через несколько часов ссылка на эту статью появится на dev.by и автору предложат работу.
Главное, чтобы он согласился.
Приятнее допиливать свой язык, когда у тебя полный холодильник.
Anrikigai
Я, конечно, не показатель, но, боюсь, я бы не рискнул взять его на ответственную хорошо оплачиваемую работу, подразумевающую конкретный результат в установленные сроки.
Слишком уж он увлечен своими идеями. Придется постоянно контролировать и заставлять, чтобы делал то, что нужно, а не то, что хочет. И не факт, что получится.
Вот если кому-то удастся его заинтересовать каким-то своим проектом, чтобы он теперь этот новый проект как свое Детище начал воспринимать — тогда да, было бы офигенно.
grinCo
Есть много кейсов в которых можно встроить автора с пользой для конторы. Единственное, что в Беларуси сначала проверяют английский, а потом уже смотрят резюме. Но в таком случае можно пойти на конторы, работающие на российский рынок. Они хоть похуже платят, но в любом случае будет какой-никакой опыт, общение с коллегами, да и зп будет выше чем грузчиком.
Evir
Anrikigai
Меня смущало, что работа грузчиком — не конкуренция пет-проекту. Грузишь и грузишь.
А когда кнопки под руками — это сильный отвлекающий фактор и погуглить на свою тему и все такое.
Но да, вполне возможно, что вы правы. И тогда все намного лучше.
Taetricus Автор
Мне один человек уже предложил прислать резюме, что бы обсудить работу, но пока ничего конкретного.
DeuterideLitium6
Посмотрел на исходники по диагонали. Простой? Я что-то не заметил, во обще не понял как он работает. Какие преимущества перед другими ЯП? Не понятно.
Вот я тут тоже решил свой ЯП замутить, очень простой, рабочие название HLMASM (High Level Macro ASseMbler), транслятор в низкий асм. Основа, ассемблер MASM, точней UASM. В этих ЯП есть высокоуровневые конструкции, .if, .while, invoke, в UASM есть ещё .for, .switch и т.д. В общем, надо довести эти конструкции до полноценного ЯП вроде Си, поддержка типов указателей, наследования классов, соответственно виртуальные функции ну и так далее. Всё, чтобы программирования на ассемблере, было бы таким же лёгким как на Си. Да, есть похожие ЯП, например С-- Сфинкс(занимает промежуточное положение между ассемблером и Си), но это не то, там проще сразу стандартный Си использовать. Синтаксис должен ближе с ассемблеру, а не собственно к Си.
Taetricus Автор
Ясно. Продолжайте.
Да, я в свой время работал со следующими языками:
Asm, C, Pascal, Go, Haskell, Python, JavaScript, Java(совсем мало), Delphi.
И из всех перечисленных — он самый простой.
Успехов вам, надеюсь всё получится.
Vitter
Чесно говоря, думал в конце статьи будет «смотрю, получился у меня почти Руст/раст, теперь любимый язык — Руст».
Вообще, созданный язык — это прекрасная строчка в резюме. Равно как и языки, которые вы знаете.
Это очень сильно облегчит поиск работы программистом.
Что касается самого языка — да, путь у него тернистый и легче не будет.
Что необходимо сделать — дать описание языка(туториал) и примеры. Без этого никуда.
А поскольку шансы языка взлететь близки к 0 (мы живём в эру переизбытка информации), лучше открыть код под какой-либо свободной лицензией, типа MIT, CC,… (смотрю вы уже это успели), может быть кто-то чем-то да воспользуется.
Taetricus Автор
Уже делаю.
Rast1234
Эту бы энергию, да в мирное русло… ЯП — это ж инструмент. Вот захотелось производительности, использования всяких там инструкций… А зачем? Для каких задач? Игры, научные вычисления, хайлоад? Никто не придет за фичами диковинного языка, если не доказана их пригодность и профитность на практике. Потому что людям некогда, они задачи решают тем, что уже есть и проверено. Вот только если припрет, ищется новый подход.
Инструмент, пусть самый красивый, без использования — бесполезная игрушка, арт-объект. В статье мелькало "чтобы жизнь была прожита не зря" — сам по себе написанный язык за, прости господи, 12 лет — это, скорее, зря. Вот был бы, например, какой-то проект вычислительноёмкий, для которого по ходу дела запилили язык, и оттуда пошло-поехало по статьям и коммьюнити, тогда понятны польза и вклад.
Прийти в существующий проект с вкладом на своем языке — так никто в здравом уме не примет, это же невозможно поддерживать. Потому что помимо скорости вычислений есть еще факторы.
Taetricus Автор
Я уже который комментарий читаю, в котором человек явно не читал статью. Там не только производительность. Почитайте статью и желательно комментарии, в некоторых из них, некоторые моменты разжёваны гораздо подробнее.
roodz
У самурая нет цели, только путь
Epsiloncool
А есть исходники этого чуда где-нибудь в гитхабе? При условии, что у него будет открытая лицензия, есть вероятность найти массу энтузиастов и допилить проект до релиза. Как знать, может быть, он станет новым специальным языком программирования (наряду с Go, например). Почему нет? Все языки однажды начинались с чего-то такого.
Сами вы точно не справитесь в одиночку, загубите идею в душном чердаке своего ума. Продать тоже не получится. Настолько сырые теоретические штуки без видимости реальной выгоды продать невозможно.
Taetricus Автор
В статье указаны все исходники, люди уже даже форкнуть успели.
Я это прекрасно понимаю.
HellWalk
Автор конечно силен, но, при прочтении возникла мысль «как же хорошо, что я начал свою карьеру в вебе, и сразу делал какие-то свои сайты для людей (в смысле не на заказ, а просто для посетителей)» — этот путь довольно быстро позволил понимать что нужно пользователям (точнее понимать как понимать что нужно пользователям) и реализовывать именно это, а не витать где-то в облаках абстрактных нулей и единиц.
rpiontik
Несколько фактов:
1. Работаю программистом с 16 лет в России (с 1996г.) Не разу не встретил трудностей при трудоустройстве программистом.
2. Программистом в 2000х было быть вообще круто. Даже в армии ты был пристроен в штаб. Уже молчу про связи, которые тогда формировались;
3. Без высшего образования достиг уровня Head of IT к 2009г в иностранной (крупной) конторе. После чего понял, что это не то, что я хочу.
4. Встретил огромное количество успешных спецов из Беларуси без высшего образования. А также с высшим. В одних коллективах. Хорошо всем известная EPAM не зря там развернулась. Очень сильная школа ИТ.
5. Крипта в Беларуси не то, что развита… я бы сказал, что весьма и весьма развита. Я лично работал с ребятами которые запилили свою биржу, майнера и т.п. создав экосистему.
6. Большое количество народа в Беларуси работает на Запад. Вполне успешно.
При этом, странно видеть такую жесткую самоизоляцию. Тут или абсолютная гениальность, которая позволила в течении 12 лет опережать все, что нажито ИТ сообществом, либо… создание собственного мира со своим масштабом гениальности, где язык оказывается успешным.
Учитывая большое количество несоответствий в статье и фактов, почему-то, скорее верится во второе, чем в первое. Но бывает всякое… посмотрим.
Taetricus Автор
Время тогда было другое, видел где-то интервью программиста в возрасте который говорил, что до 2003 было гораздо проще стать программистом без ВО, но со временем — это изменилось.
Каких? По подробнее пожалуйста.
rpiontik
Я не вижу никаких изменений. Сегодня я беру на работу программистов. И ВО для меня не важно. Интервью, единственное, что влияет на мое решение.
Я внимательно прочел Ваш пост и Вы, пожалуйста, прочтите мой комментарий.
Taetricus Автор
Мне отказывали до интервью.
Если вы имеете в виду то, что моя история не совпадает с вашим опытом, то вы же понимаете, что одного вашего опыта не достаточно для построения объективной картины, вы видели много программистов без ВО, но вы же не знаете сколько человек с навыками, но без ВО не смогли из-за последнего получить работу, а ведь соотношение может быть 1/100. Выше в комментариях был человек который тоже был без ВО и не мог найти работу, получил — нашёл. Плюс был комментарий про HR который не брал людей без ВО. Тут в комментариях много разных версий.
rpiontik
Вы не верно интерпретировали мой пост. Я не видел тех для кого было проблемой трудоустройство без ВО. Точнее Вы первый.
И для этого есть ряд коренных причин:
Из этих пунктов есть редкие исключения. Например МГУ. Но это исключения, а не общее правило.
Чтобы найти работу удаленно, даже писать об образовании нет необходимости.
Но определенные корочки действительно дают приоритет Вашей персоне. Но это приоритет при равных навыках. Например, сертификаты вендоров (Microsoft как пример).
khim
Голубую карту без «правильных» корочек очень тяжело получить. Это как пример. Да, там тоже список ВУЗов, не просто «российские корочки».
rpiontik
Мне кажется Вы ровно то же описали, что я сказал. Про карты и т.п. речи не шло. Только про трудоустройство. И уж тем более я не имел ввиду релокацию. При релокации возникают требование законодательства страны, сверх требований самой компании.
Taetricus Автор
Вот комментарий человека и я такое мнение HR видел не раз.
rpiontik
Человек это человек. Я встречал много людей которые ошибаются. Видел людей которые показывали мне, что я ошибаюсь. Но есть одна вещь, которой я придерживаюсь:
Учиться нужно не у того, кто знает как заработать миллион, а у того, кто его заработал.
А то, что вы нашли в том самом комментарии, говорит не о том, что оно нужно это ВО, а о том, что если ты даже для этого не напрягся, то какой из тебя сотрудник то?
И тут, ка как странно, я вижу здравый смысл в этой позиции. Особенно учитывая Ваш подход к делу.
И ниже человек написал ровно о том, что я сейчас пишу. Но Вы… видите только проблему…
Taetricus Автор
Вначале почитайте статью пожалуйста. Вы просто упёрлись в стену и не желаете увидеть что либо, отличное от вашего мнения.
rpiontik
Ну да. Ведь проблемы у меня? Я не умею читать.
rpiontik
Давайте, даже, далеко ходить не будем. Приведите пример с этого ресурса https://career.habr.com/ где требуется ВО.
Taetricus Автор
Написал Junior Developer (а именно на такое место я могу претендовать), вторая вакансия в списке https://career.habr.com/vacancies/1000055811. Квест пройден.
rpiontik
Вы торопитесь. С выводами. С какого раза вы нашли эту вакансию? Их было 50/50 с теми где требования нет? 80/20? 90/10? Учитывая то, что я вчера специально потратил время и за три страницы не нашел ни одного требования ВО, то скорее 90/10. И Вы нашли то самое, которое не нашел я…
Тогда вопрос — что же Вы ищите? Проблемы? Если да, то логично их находить.
P.S. Проверил по Вашему запросу. Примерно 70/30. В пользу вакансий без обязательного требования ВО. Да и даже в приведенной вами ссылке написано
Т.е. и тут нет формального требования иметь ВО. Нужно стремление чего-то достигать.
Taetricus Автор
А где я вывод сделал. Вы торопитесь сделать вывод, что я делал вывод. Вы написали свой комментарий как будто найти вакансию с требованием ВО — это нечто нереальное. Я на это потратил 30 секунд.
С первого.
А какие вы смотрели? Мы же про меня общались, я могу претендовать только на джуна, а только такие вакансии и стоит смотреть. Понятно, что если ищут человека с 10 лет опыта то никто не будет указывать ВО.
worldmind
Ну не факт что на джуна, не надо себя недооценивать
rpiontik
Во-первых, да, тут уже дали коммент. Не нужно искать должность джуна. Если Вы не джун.
Во-вторых, Вы не увидели главного. Почему Вас не взяли на работу. И как эпилог, я могу сказать, что и я бы не взял. Но не искал бы простой способ оправдаться, а сказал бы так:
— Вам не нужна эта работа. А какая Вам нужна, я не знаю.
jMas
Проблема автора, что он частное пытается выдать за общее (слухи и единичные попытки как "так везде"). Даже не знаю как это назвать. Может есть в психологии термин? Хотя возможно софт-скилы подкачали, но по комментариям не скажешь...
sbnur
Читаю и думаю, как удачно сложилась жизнь.
Благодаря решениям партии и правительства, был вынужден закончить факультет прикладной математики помимо основной специальности, так компьютеры естественным образом вошли в мою жизнь. За время своей профессиональной деятельности пришлось освоить множество языков программирования, множество сред разработки, множество технологий и выполнить множество разных проектов в команде или лично.
Имея за плечами более 40-летний опыт работы, хотелось бы всем посоветовать пройти подобный путь — его достоинство широта обзора и глубина понимания — конечно, достаточность широты и глубины можно оспорить — нет пределов совершенству
PsyHaSTe
Спасибо за статью, не каждый день читаешь историю программиста, который снимал за 30 баксов дом с удобствами во дворе, чтобы экономить кушая что огород послал.
Проект шикарный, но работая в туберкулезных больницах, грузчиком и так далее вы не сделаете свой язык лучше/быстрее. Вы же сами показали, поковырял паскаль — о, вот так надосделать. Поковырял хаскель — крутые идеи, возьму у тебя… Чтобы развивать свой проект, нужно смотреть по сторонам. А когда по сторонам стеллажи и пустые бутылки из-под водки то развитие происходит так себе.
Если же заниматься этим в свободное время, то, простите, когда жить? Я понимаю, у вас этот проект интереснее всего на свете, но если не давать организму отдыхать, то он рано или поздно возьмет своё, у вас будет глубокая депрессия, перегорание, и вы забросите проект. Особенно печально, если кто-то всё же решит ваш язык после этого попробовать, а вы будете отмахиваться потому что не сможете его развивать. Я как-то увольнялся и меня попросили подработать. Через полгода я реально начал перегорать. Я знал что на мне задачи но я физически не мог заставить себя сесть и сделать даже копеечные изменения. В итоге я быстренько рассчитался, и больше так старался не делать.
Выход один: найти работу по специальности — и это не грузчик. На работе часто можно попиливать свой велосипед, особенно если он решает какую-то проблему. Если же никакую не решает — то это тоже урок и сигнал, что стоит что-то менять. С вашими навыками вы к текущему моменту спокойно могли бы иметь 3000-4000$ в месяц на руки. Проблема в том, что чем дальше, тем больше "сениор с 12 летним стажем программирования без единой записи в трудовой" будет вызывать вопросов.
А еще медицина обычно недешевая. 120$ это даже не смешно. Для сравнения работники макдональдса получают порядка 500$, при том что они исторически считаются дном социального уровня (сам был школьником — там работал, знаю).
Taetricus Автор
А зачем жить если за жизнь ни чего не сделал?
моя текущая работа — 90% ничего не делание, я имею ввиду — ничего не делание, а не делай, что хочешь.
PsyHaSTe
Жить надо для себя. Самореализация — одна из вещей, которые человеку нужно. Делать "вопреки" и "не взирая", а потом смотреть как плодом титаническим многолетних усилий никто не пользуется — печальное зрелище.
Представьте человека, который пинцетом изо дня в день переносит песчинки с пляжа в урну. И в снег, и в дождь, он это делает. А потом через 12 лет пытается продать полную фуру песка за миллион долларов, потому что тут ведь столько труда.
Но правда в том, что ценность определяется в полезности. Если вы делаете вещь, которая как вам кажется решает проблему, но ей никто не пользуется, велика вероятность того, что вы делали её чисто для себя. История с трудоустройством намекает на то, что у вас возможно есть проблемы с коммуникацией с другими людьми и вы не понимаете их потребностей и желаний. Если это так, то вы не сможете сделать вещь, которая другим людям будет полезна.
А деятельность "вопреки" только усилит диссонанс "как же так, они меня не приняли".
Значит как минимум 10% времени вы тратите на деятельность, который мог бы заниматься робот (которого вы работая в определенной компании и могли бы сделать).
rpiontik
Тоже отметил замкнутость цели на себя. Как минимум, можно было разделить свою идею с кем-то.
Надо отметить, что и эта статья не намекает на желание работать с кем-то в команде.
Taetricus Автор
Знаю людей, которые разделили свою идею с другими. В результате другие присвоили эту идею себе.
Вообще то, что я закинул свой проекты на github — прямо показывает моё желание работать в команде.
khim
Во всей этой дискуссии нигде ни разу не прозвучало ваше желание поступиться хоть где-то хоть чем-то.
Ни ради того, чтобы получить работу (попытка искать вакансию какая вам нравится, а не какая есть… почему сразу Haskell, а не скажем, PHP или Python?), ни для того, чтобы привлечь кого-то к вашему проекту (вопросы при устновке — это типа круто… и пофиг, что почти никто из пользователей не хочет на них отвечать).
Ну и какая это «работа в команде»?
Taetricus Автор
Их нет, редко встречаю людей с которыми не могу найти общий язык. Но я не испытываю дискомфорта от отсутствия общения и по этому общаюсь или по нужде(на работе с коллегами, если они есть) или с теми с кем мне очень интересно общаться.
pas9x
Пытаюсь скомпилировать hello world. Первое с чем я столкнулся — непонятно какой компилятору нужен набор параметров чтобы скомпилировать программу. И только после просмотра исходников компилятора оказалось, что ему обязательно нужен параметр flags. А что в этот параметр подставлять — я не знаю.
По примерам исходников набросал это, но не завелось:
Видимо это из-за того, что не подключена стандартная библиотека. А как её подключить я не знаю. Читал документацию, но не нашёл там как подключить stdlib. Поэтому я заглянул в код OS.cine и решил сделать вывод строки в консоль таким-же образом:
На этот раз ошибок синтаксиса не обнаружилось, но что-то пошло не так.
Taetricus Автор
Вы смотрели видео в блоге? Там в конце был для примера, запущен hello world.
Вкратце как нужно сделать.
cine на прямую вам никогда не нужно вызывать, все через fei
Создаёте директорию(например hello), в ней открываете терминал и выполняете
fei new hello-cine
Эта команда создаст новый проект. Имейте в виду, что бинарник будет иметь путь /usr/bin/hello-cine и если вы назовёте проект ls — то он перезапишет /usr/bin/ls.
Затем выполните
fei build
это соберет проект.Затем выполните
sudo fei install pkgs/release.fpkg
После чего просто выполните hello-cine. И ничего от рута делать не надо.
И да в cine и в fei есть --help
Пожалуйста как попробуете, напишите о результате. У меня и на реальной и на виртуальной машине всё отлично работало.
Comdiv
Taetricus Автор
Забыл про него — исправлю.
Изначально так и было, но для fei install нужен sudo, а пути с которых sudo запускает программы, указаны в /etc/sudoers. Не менять этот файл.
khim
То есть вы сходу и заранее отсекли подавляющее большинство пользователей. Вот просто так, потому что вам этого захотелось.
Comdiv
Так сам fei можно установить в /usr/local/bin, а то, что он ставит — в его каталог
Evir
Это единственный вариант?
Не то, чтобы я стремился попробовать, но просто звучит очень странно… Может, это потому, что у меня больше опыта по вебу, но у меня с моими «домашними поделками» до этапа установки никогда не доходило; на этапе экспериментов и дебага гораздо удобнее всё вызывать через ./, без задействования /usr/bin, /opt и прочих стандартных папок.
Taetricus Автор
К сожалению сейчас только так, потом добавлю возможность запуска без установки.
worldmind
Думаю лучше ставить в ~/.local/bin/ туда например ставить pip install --user без всяких sudo, и пусть к этой папке в убунте вроде по дефолту добавляется в юзерский PATH
Panzerschrek
Чувствуется, автору не хватает опыта промышленной разработки. Имея опыт промышленного программирования, можно было бы не допустить изложенных выше ошибок. Тогда бы компилятор можно было бы написать гораздо быстрее и с меньшими страданиями.
JTG
Компилятор, который может собрать сам себя — это конечно здорово, но что-то я опасаюсь за автора, уж больно напоминает смесь «Истории одного байта» и TempleOS.
Dreamer_other
А как у вас реализуется полиморфизм времени выполнения, есть ли интерфейсы, виртуальные методы? То есть, выражения rules анализируются при компиляции, значит и диспетчеризация методов всегда происходит статически? Вообще ваш язык напоминает Go, но там для этого есть интерфейсы. Конечно, дженерики снижают потребность в виртуальных методах, но тем не менее, допустим пишем игру и есть цикл обновления игровых сущностей:
Как такое реализуется на cine?
Являются ли в вашем языке функции объектами первого класса? Возможно ли писать в функциональном стиле с map и filter? Можно ли хранить ссылки на функции в объектах?
Taetricus Автор
Язык не ООП, а функционально процедурный.
Мягко и шелковисто — никак. Но с помощью костылей можно. Связанно это с тем, что в слайсах могут быть элементы только одного конкретного типа, но есть тип Fluid, который аналог гошного interface{}.
Да.
Да, в стандартной библиотеке есть map — вот сдесь, а про filter я забыл, пометил себе, что нужно написать.
Можно.
Dreamer_other
А замыкания и лямбда-функции у вас есть? Без них трудно считать, что язык поддерживает функциональную парадигму.
Еще такой момент, я правильно понимаю, что в собранном exe будет присутствовать исходник сконвертированный в С? Вы не думаете, что таким образом сложно защитить свой код от взлома или исследования, если это требуется?
Evir
Скорее невозможно; если, конечно, не удастся как-то мощно обфусцировать тот C-код, который будет сгенерирован для установки.
Taetricus Автор
Taetricus Автор
лябда — будут, замыкания нет.
в fpkg(не исполняемый)
Я выступаю за open source. К тому же легко может написать обфускатор.
Dreamer_other
Таким образом вы сильно урезаете себе количество пользователей. Более того, эту особенность нужно писать большими буквами на видном месте, что бы для разработчиков не было сюрпризом то, что в собранном дистрибутиве есть практически исходный код. Обфускация — это очень слабая защита.
KvanTTT
Какие еще числа? Как бы и так есть кватернионы (используются для задания трансформаций в 3d графике), которые и есть расширение комплексных чисел. А также другие более сложные числовые системы.
Taetricus Автор
А теперь я знаю, что они находятся и над кватернионами.
wentout
Обоснуй.
Выглядит как «глубже — выше — сильнее», мы это уже проходили. Нужна практическая ценность. Если ты, например, хочешь «до»-сказать, что-то вроде «время не монотонно», то это был бы интересный повод для обсуждения. Но пока создаётся иное ощущение. Или, например что-нибудь этакое: «Да-да, забыл упомянуть, вот тут это самое нужно потому, что для понимания многомерных пространств, как ни странно, хорошо подходит Helix».
Taetricus Автор
Про числа — никаких подробностей.
Маловато было интересных фактов, добавил ещё один. Я не пытался кого то обратить на это внимание. Если числа покажут свою эффективность, я не раскрою их секрет, поскольку я прекрасно понимаю, что на cine я не заработаю (это больше хотелка для души), а вот на этих числах — очень даже.
Новые числа позволяют(100%) находить в нейронных сетях лучшие возможные веса для тех примеров которые были даны сети для обучения. Но есть загвоздка, при написании такого алгоритма «в лоб», не хватит ни времени ни памяти для того чтобы обучить даже небольшую сеть. Я долго продумывал как решить эту проблему и в какой-то момент придумал. С новым алгоритмом памяти хватит даже на обычном пк, а вот по времени — не знаю, но новый алгоритм просто нереально хорошо распараллеливается, но есть и минус — теперь получение лучших возможных коэффициентов не гарантируется, а просто есть вероятность их получения(но всё равно неплохие коэффициенты в результате будут). Самое интересное в этом алгоритме это то, что чем больше весов в сети, тем больше вероятность качественных весов. Единственное в чем может быть загвоздка — возможно лучшие веса для текущей выборки, окажутся посредственными для примеров не входящих в выборку.
Vitter
числа даже не патентируются, поэтому заработать на них нереально сложно.
А судя по вашей бизнесс-жилке (а судя по вытаскиванию денег у жуликов она у вас таки есть) можно с ними делать лишь одно — тайно (не открывая подробностей) создать НУЖНУЮ нейронку и продавать результаты её работы. Правда, ключевое слово «нужную».
KvanTTT
Верно: идею невозможно запатентовать.
Фразочки про 100% попахивают дешевой рекламой.
stilic
Серьезно?
habr.com/en/post/288364
Apple таки получила патент на прямоугольник со скруглёнными уголками
zaiats_2k
А как насчёт октонионов и седенионов?
KvanTTT
Тоже хотел про них написать, но понял, что бессмысленно, т.к. "числа" автора скорее всего покроют и их и все что угодно.
P.S. Есть еще интересные и другие расширения: дуальные числа, сюррельные числа. Кроме того, существуют числовые системы, в которых можно измерять бесконечности: Порядковое число.
TaF
Ребята, не надо критиковать. Кто из нас не хотел сделать нечто подобное?
Завидуйте молча))
wentout
Критика нужна, особенно конструктивная.
Очевидно очень талантливый парень в глуши сидел, мира не видел, ни с кем толком не общался, писал «гениальную идею» много лет. Он или начнёт воспринимать нас всерьёз или уйдёт ещё больше в изоляцию. Первое, вроде бы как, — предпочтительней, — мы же тут, как бы, человеколюбивые, и всё такое… А ты бы хотел на его месте, чтобы тебя троллили, а ты только потом когда-нибудь понял, что это был такой «тонкий троллинг»?
«Специалисту» покажись? циник… ;^)
tsukanov-as
Автор, продолжай делать то что делаешь. Борись до конца.
ps Но на работу таки устройся программером. Начнешь джуниором за копейки, за год станешь лидером если харизмы хватит. Работу не ищи по вкусу. Иди туда куда возьмут. Немного опыта получишь и сменишь на то что душе ближе.
5e2d
Автор, на самом деле, Вы – молодец! И никого не слушайте, особенно всяких «мамкиных» критиков (они просто не могут в одиночку реализовать большой проект, вот и завидуют), обращайте внимание только на критику по существу, а её пока что не так много.
Судя по материалам, размещенным на github, язык у Вас (на мой взгляд) действительно получился весьма простым, красивым и практичным.
Также возьму на себя смелость дать Вам ряд рекомендаций:
1. Обязательно напишите обучающие материалы, как можно более подробные и примерами (и, кстати, в размещенном Вами коде нет комментариев, их явно следует добавить, пояснив назначение каждой функции).
2. Придумайте идеи презентационных программ, которые можно было бы быстро на Вашем языке написать. Программы должны быть простыми и практически полезными (да придумать непросто, но возможно), тогда, во-первых, под их реализацию можно попытаться собрать деньги через краудфандинг, а во-вторых, через эти маленькие проекты привлечь единомышленников, которые освоили бы Ваш язык, и далее помогали бы его развивать.
3. Принимайте участие во всех доступных тематических мероприятиях (выставках, конференциях и т.п.). Когда появятся демо-программы, распространяйте информацию о них, и сразу же о языке. А когда хотя бы одна из написанных презентационных программ станет известна более-менее широкой публике, у Вашего проекта (и команды, которая к тому времени должна появиться) уже будет портфолио, под которое можно будет привлекать гранты и внимание серьёзных дядь.
Продолжайте своё дело, ибо невозможно выиграть в чужой «игре», Вы же создали свою, и возможно, уже всего в трёх шагах от победы.
И да, конечно, на любом этапе всё может пойти не так, но имхо, это интереснее, чем просто работать программистом в среднестатистической конторе. В любом случае, выбор за Вами.
Удачи и успехов!
Taetricus Автор
уже делаю
Постораюсь
В начале были, но из-за перписываний — исчезли. Но я старался давать всем функциям и переменным говорящие имена.
Это будет обязательно.
Мне кажется это лишним, я никогда сам на них не был и даже примерно не понимаю, что там происходит.
Спасибо.
caporegim
Просто не верится, читал и думал стеб какойто. Изучить программирование, написать язык и работать не по профилю столько лет… С таким талантом при желании давно можно было работать разработчиком и без диплома. Тут скорее проблемы другого рода, очень напомнило историю Перельмана.
khim
Ну Перельман хоть сделал что-то, что реально кому-то помогло. Тут же очередная TempleOS с вероятностью 99%. Ну то есть история «как угробить свою жизнь без водки и наркотиков».
P.S. Буду рад ошибиться, конечно… но пока симптомы не очень обнадёживают…
L3333437
Насчет вас например все понятно.
codefather-labs
Статья очень классная. Очень лампово. Спасибо. Читал с удовольствием
d3n-nc
Ура! Теперь можно на этом языке написать наикрутейший CineOsCineNginxCineRedisCinePostgresql!
foxiko
Вам бы в репозиторий побольше информации добавить…
Taetricus Автор
У меня сейчас другие приоритеты, нужно в начало в блоге хотя бы базовые вещи о языке рассказать.
chvv
Тяжело читать такого рода текст, это посильнее Джокера будет.
Часть комментаторов тут советует автору устроиться на работу хоть дистанционно или получить высшее образование. Благое пожелание, только совершенно нереалистичное.
В нормальном социальном обществе (точно пока не в Белорусии и не в России) таким людям, как автор, оказали бы первичную помощь, поместили бы в условия с нормальным питанием, комфортным существованием, психологической и психиатрической поддержкой. Дали бы возможность заниматься тем, что ему нравится (изобретение ЯП) и мягко бы выправляли психологические травмы. Возможно, через какое-то время он бы действительно смог бы социализироваться настолько, чтобы найти удаленную работу программиста.
На текущем уровне это просто невозможно.
А те люди, которые тут в комментариях оказывают ему, как им кажется, психологическую поддержку, еще более усугубляют и без того нелегкое положение автора. Он ведь до сих пор уверен, что программистом его не берут потому, что «работников отдела кадров, заставляют печатать фальшивые вакансии, чтобы создать видимость, что не всё так плохо».
Грустно, и не вижу что можно сделать в такой ситуации.
PS: А начинали мы с ним одинаково, со Спектрума, Бейсика и Турбопаскаля.
Taetricus Автор
Опять экстрасенсы знают о мне больше чем я. Моя фраза о работниках отдела кадров была для примера того, насколько плачевным было положение в стране. Тогда безработица носила массовый характер. А не брали меня совершенно по другим причинам. Но вы думайте дальше, что способны читать мысли людей через монитор.
chvv
Извините, я не хотел вас обидеть ни в коем разе.
Я лишь хотел выразить свою точку зрения, сформированную после прочтения вашего текста, которую, как мне кажется, разделяет еще какое-то количество людей на этом форуме. Другая, возможно, придерживается другой. И хорошо.
Я, скорее всего, во многом ошибаюсь, и картина моя искажена.
Полагаю, вы хорошо понимаете, что на один и тот же предмет или факт может существовать множество различных точек зрения.
Приношу свои искренние извинения! И, разумеется, желаю вам всего самого хорошего!
Taetricus Автор
Вы меня не обидели, просто из-за большого количества комментариев которые говорят о мне чушь я был зол. И я не говорю, что все комментарии критикующие меня — чушь, вовсе нет. Просто люди прочитав мою статью по которой можно крайне поверхностно понять кто я, но люди начинают мнить себя великими философами и психологами и начинают писать откровенную чушь. Люди пишут «Он не сможет работать в коллективе». У меня было 13 работ, на многих у меня были коллективы, я прекрасно в них вписывался, общался с коллегами даже после работы. А иногда бывают такие «самородки» которые пишут, что если бы я работал программистом, то впаривал бы тимлиду, что нужно использовать мой язык на работе. Я даже не могу понять с чего нужно начать думать, чтобы додуматься до такого бреда. Ну самый шик это фразы типа «Хотел бы найти работу — нашёл», очень хотел, искал, в статье только два примера на которые по моему мнению я подошел бы 100%, а были десятки попыток устроится на вакансии где я свои возможности оценивал гораздо ниже. Многие живут своей жизнью и проецирую её на меня, они не знают, что такое заплатить за коммуналку и денег остается только на еду, они не знают взгляда работодателя когда он видит много записей в трудовой, они не видели лица работодателя когда он доходит до строчки грузчик в трудовой. Ну и на последок, человек прочитал статью и написал мне в личку о том, что ему кажется, что мы очень похожи и нам есть, что обсудить. Он написал о себе несколько фактов, прочитав которые мне показалось, что мы не очень похожи и я написал несколько фактов о себе, после которых он мне больше не писал.
P.S. Если вы прочитав статью представили какого то человека, вы должны знать, что это не я. И даже на него не похож.
khim
Такие истории — они всегда так устроены: вроде как и хочешь помочь… но совершенно неясно как.
chvv
Нам ближе, мне кажется, скандинавские страны.
В штатах много чего «не слава богу».
stilic
Whuthering
Просто чудесно, как вы сюда приплели вопрос, который к обсуждаемой теме ну вообще ни коим образом не относится. И кстати, вы очень интересно ткнули пальцем в небо, поскольку у нас действительно собираются перенимать их опыт.
А так, большинство рассказов про «отбирание на пустом месте» раздуто поехавшими истеричками типа Ирины Бергсет и местными упоротыми типа того же Бекмана, в половине случаев чуть более чем наполовину перевирая реальные обстоятельства событий, и эти же истерики с радостью поддерживает роспропаганда с посылом «вот видите, как там все плохо».
worldmind
Вам платят за распространение басен?
S-e-n
chvv
Ну если кто из Белоруссии взвалит на себя этот крест. Или хотя бы попробует.
Тут нужно личное общение, не через форум.
S-e-n
Так ему уже предлагают, судя по комментам, т.е. нашлись люди.
Да и почему крест? Автор умеет делать всякое, не имеет заоблачных запросов, и несмотря на то, что его тут упорно пытаются окрестить ненормальным, ведёт себя вполне таки адекватно.
chvv
Я и не говорю, что псих.
Но крайне социально дизадаптирован.
Обычным людям общаться с такими нелегко.
И такую ответственность взвалить на себя готов не каждый. Это легко в комментах тут написать, ну как я сделал.
L3333437
Доктор, предъявите сперва свою справку.
Zar13st
Эххх, прочитал статью и поностальгировал о временах, когда ещё не было семьи, детей и ипотеки.
Можно было всё своё свободное время и даже рабочее посвящать своему хобби.
В-общем я совсем не понимаю автора в его желании жить на гроши в жопе мира, но прекрасно понимаю желание заниматься любимым делом.
Надеюсь, лет через 5 автор будет вспоминать прошедшие годы с таким же тёплым чувством, как я свои.
А иначе зачем это всё…
Taetricus Автор
Нет такого желания
PsyHaSTe
Ну так вы же ничего не предпринимаете чтобы это поменять. Значит вас всё устраивает.
Это как человек, который из года в год ноет что нужно бы в качалку записаться (например, я), но вместо этого каждые выходные он заваливается в кресло и открывает книжку по теории категорий.
Хорошая статья с правильным посылом: вы там где вы хотите быть. Ваши действия правдивее ваших слов.
vaplite
Самый полезный комментарий из всех, здесь написанных.
Taetricus Автор
Я устал отвечать на бредовые комментарии поэтому вот — https://habr.com/ru/post/481276/#comment_21050484
wentout
Taetricus
Саша, мне понравилась история мучений с языком, спасибо, было прикольно, хоть кино снимай. Напугало, что «история» появилась раньше описания языка. Искренне считал, что уже лет 10 так никто не делает, потому, что вроде бы как теперь читать истории — дорого.
Поэтому решил всё же посмотреть исходники, где, как и предполагал, убедился, что идиосинкразии они не вызывают: значит уже хорошо!
Вопрос: можешь ли ты переписать свой Transpiler так, чтобы его можно было исполнять в VM в JavaScript (Node.js или Браузер — не суть), или же, что может быть намного лучше — для TypeScript?
Видишь ли, Deno уже на подходе, а значит VM на Rust очень скоро поедет у кого-нибудь в Prod…
С~C++ — это сложная и многоликая аудитория, они могут всё, и даже больше чем хотят. Пока ты учил компиляторы, многие остальные люди учили «популярность», «маркетинг» и прочие странные нам, инженерам, вещи.
В мире много языков программирования, и ещё один язык общего назначения нужен мало кому. В мире JavaScript народ попроще будет, да и народа намного больше. Банальнальная статистика подсказывает, что вероятность, что кому-нибудь понравится твоё видение прекрасного, увы, намного выше, чем то, как оно может быть использовано сейчас. Заодно профессию получишь, востребованную, сразу, сходу. Не знаю, стал ли бы я на твоём месте «играться», в эту подмену «чистого искусства» на бытовые радости, и стоит ли эта игра свеч в принципе, но почему бы не попробовать? Умение добиваться поставленных целей, ответственность и собственный взгляд на искусство программирования могли бы быть приятным дополнением к, например, такой строке в резюме: «написал свой транспайлер в TypeScript т.к. мне хотелось писать на мной созданном языке» — это сразу покажет людям уровень твоей квалификации. И хоть скорее всего это не будет не так сложно и возвышенно, как создание собственного компилятора, но, по крайней мере людям будет понятно с кем они имеют дело, и почему он уверен, что заслуживает внимания и прочее, тому подобное, коммуникабельное и измеримое.
chvv
Не знаю, почему вас заминусили. Пока лучший пост.
А у меня кармы не хватает, видимо. :)
wentout
Не знаю, мне всё равно, лишь бы автор прочёл.
Но, всё же, может быть потому, что не верят :)
Хотя, что правда, то правда, на LLVM ничего не собирал, и на С~C++ не пишу.
khim
Если специально — так тем более обидно: такие мозги — да в мирных бы целях…
Taetricus Автор
Сколько я не видел каких либо интервью JS-никами, у меня всегда складывается впечатление, что они вообще не смотря в сторону других языков.
Dreamer_other
Не соглашусь. Я думаю, этот пост интересен именно историей состоящей из смеси технологии и личных переживаний, тут уже сравнивали с «историей одного байта», очень цепляет. Хотя автору, конечно, стоило более развернуто описать двенадцатилетний плод своих трудов.
wentout
Да, конечно, тут перегнул с сожалениями :)
Цепляет, в том то и дело, что цепляет настолько, что хочется посмотреть описание и структуру, а приходится сразу лезть в исходники. Может быть, конечно, это такой хитрый план, тогда автору ещё большее уважение, т.к. время как будто бы не тратил, а социальную инженерию тоже как-то почувствовал, несмотря на такую вот «всю эту» историю. Поправил. Спасибо :)
Evir
Вообще, складывается ощущение, что сейчас (12 назад этого ещё не было в достаточном виде) можно было бы реализовать cine/fei как надстройку над Nim.
Сборка в C – есть (см. compileToC/compileToCpp), возможность сделать собственные кастомные операторы – есть (":", ":=", ".=" и собственную вариацию "."); есть куча вариантов макросов во всех вариациях, в том числе и уровня работы с AST, когда можно в compile-time блок кода как угодно с ног на голову переворачивать. Опять же, есть условная компиляция через when, так что если устанавливать через пакет Nim-кода вместо C-кода – можно так же избежать попадания ненужного кода в итоговый бинарник.
RationalBot
Грустная история…
«Стратегия без тактики — это самый медленный путь к победе. Тактика без стратегии — это просто суета перед поражением.“ — Сунь Цзы.
Александр, я бы посоветовал миссию с ЯП считать выполненной, поставить жизненную цель и идти к ней с тем же упорством.
Чем больше времени уходит, тем меньше шансов устроиться на любую квалифицированную работу.
Даже если вы доведете свой проект до совершенства, ни одна вменяемая организация не предложит вам работу программистом.
Я не HR, но отсею по резюме. И не из-за отсутствия высшего образования, а из-за недостатка требуемых компетенций для решения производственных задач. Даже если дойдете до этапа технического интервью, то шансы прости его успешно не очень большие.
Несколько замечаний по самому проекту.
То, что оно транслируется в С, не делает программы заведомо эффективными.
Скажем, тривиальный hello world транслируется в 30 КБ кода на С (вместо 60 байт). И результирующий бинарник получается в 3 раза больше.
Бенчмарк идиотский, конечно, но других пока нет.
standart-test генерирует код, который не собирается (или собирается с 1799 варнингами после магии с ключами компиляции). Причем, размер С файла уже под 2.5 МБ. Оно точно будет быстро?
В чем магия пакаджей и fei я просто не понял. Почему бы просто не генерить С и make файлы для clang, зачем это в один файл сливать? По крайней мере, на данном этапе?
Баг: если в программе только инлайн С, то она не собирается (выше пример про printf), если потом добавить вызов printLn, то собирается.
Совет про сравнение с NumPy — очень правильный. Никто же не требует, чтобы оно сходу было быстрее, но база для сравнения должна быть?
Taetricus Автор
Она есть уже давно. (Не cine)
Это очевидно.
Как и очевидно то, что размер бинарника не влияет на производительность.
Надо глянуть, у меня вроде всё нормально.
Повторюсь, размер бинарника не влияет на производительность.
И в статье и в комментариях указанно неоднократно, fei при установке пакета спросит вопросы, ответы на которые влияют на сборку. Просто ни fei ни cine — не спрашивают ничего.
Проверю.
rpiontik
Интересно — какова она?
berqman
Вы почему-то считаете, что если человек изолировался от мира и занимается тем-что ему нравится — то это диагноз. С чего вы взяли, что человеку плохо и что он болен? С того, что он может себе позволить жить как хочет а вы нет?
Бросьте эту дурную привычку вешать на всех людей ярлыки. «Я прочел и сделал вывод», «очень похоже, что человек болен», «я о таком читал/видел/слышал»… Поверьте, если бы человек был сумасшедшим, он был бы в больнице. Моя близкая родственница провела там 10 лет с шизофренией, я знаю о чем говорю.
У человека нет мании величия, нет навязчивых идей или глобального плана или еще либо, что указывало бы на нестабильность его рассудка. Я же вижу обычного интроверта, со своими уникальными интересами. И Все!
У каждого уважающего себя программиста есть потаенный проект, который он собирает и очень расчитывает на него. У кого-то получается осуществить свои амбиции на счет него а у кого-то нет. Но даже тут нет нислова близкого к тому, что могло бы указать на нестабильность рассудка. Это просто история о том, как человек на протяжении 12ти лет воплощал свою идею в мир.
У многих из вас хватило бы терпения потратить столько времени на реализацию своего проекта? Очень сомневаюсь.
Мне понравилась статья, читал будто сказку на ночь.
chvv
Нет, дело отнюдь не в том, что автор обладает какой-то пресловутой свободой жить, недоступной нам, завидующим.
Сейчас совсем другие времена.
Во-первых, большинству глубоко наплевать, кто-как живет, со своими бы проблемами разобраться.
Во-вторых, статью за тунеядство вроде бы давно отменили, делай что хочешь, мы же не родители. Хочешь — сиди в WOW или в танчики рубись хоть целыми днями, хочешь — косплей, хочешь — орхидеи экзотические разводи.
Автор, с его же слов, проживает с матерью, и, опять же, с его слов, их взаимоотношения с детства были не самые комфортные.
Автор некоторое время проживал совсем в скотских условиях.
Автор не может устроится на работу по специальности.
Автора такая ситуация не вполне устраивает.
Видимо, но это неточно, у автора отсутствуют люди, с которыми он может коммуницировать.
И, судя по комментариям более разбирающихся людей, чем я, автор, к сожалению, далеко не Перельман. Что будет с таким человеком через 5-10 лет — большой вопрос.
Вот эти дистанционные поглаживания создают иллюзию, что все нормально у всех участников дискуссии.
Я позволю себе усомниться в полезности такой позиции, прежде всего для автора.
perfect_genius
Очередной язык одиночки, очередное сопротивление народа — значит, с людьми всё в порядке.
Я тоже такой же романтик, у меня тоже был юношеский максимализм, тоже работаю не по специальности (завод, общепит, склад), тоже поздно сел за ПК, и даже возраст тот же. Свой язык делаю почти 10 лет и конец только наметился, а вы уже «релизнулись», поздравляю. Не все доходят до этого.
Но вы поторопились рассказать историю создания, будто язык уже стал успешным-известным. Ну хоть в комментариях попытались раскрыть особенности языка. Если упор на SIMD остался, то как думаете, почему другие тоже не додумались включать его? Разве процессоров без него достаточно много?
Отсутствие пробела перед открывающей скобкой — это у вас профдеформация?
С чем могли бы вам помочь другие, кроме поиска багов? Или всё хотите делать сами?
Ну и важный вопрос на случай, если вдруг ваш язык таки выстрелит — как на русском звучит название языка? :)
Удачи вам.
Taetricus Автор
Всегда ставил, а во время написания статьи, почему то перестал.
Ну очевидно, когда будут написаны туториалы. С написанием модулей для языка. Написании тестов, там где их не хватает. Написание программ на cine.
Ни капли.
Я произношу как кайн. Очень похоже произносит слово kine google translate если выбрать английски.
worldmind
Касательно проблем с поиском работы — могу сказать что они вполне реальны, сам с подобным столкнулся, если твоё резюме выглядит хоть немного нестандартно (ну там чехарда разработки и менеджемента, большие пропуски в стаже), то очень велики шансы что тебя просто не позовут на интервью, ибо великому психологу и экстрансенсу — эйчару или там какому тимлиду показалось что ты какой-то не такой и не подходишь.
Не забывайте что мы живём в сумасшедшем обществе, нормальный человек тут исключений, а «нормальным» непонятно как это ты взял и перестал работать? Или с начальника отдела в программисты пошёл? Да точно псих, ату его!
worldmind
Но настойчивость должна помочь.
worldmind
Ещё «умный» эйчар может погуглить про тебя и узнать, что ты изобретаешь свой язык в избушке с блохами или пишешь какую-то книгу, то это тоже минус к шансам на интервью, во всяком случае пока твой язык/книга никем не признаны.
erdemus
Спасибо за рассказ. А расскажите, как с вашим опытом юниксов мимо вас прошла профессия сисадмина? Сидели бы спокойно, настроили бы структуру как вам хочется, и писали бы компилятор. Работа программистом очень полезна была бы опытом, но после работы что-то ещё писать непросто.
Taetricus Автор
Потому, что я не гожусь в сисадмин. У меня нет принтера я не умею с ними работать, то же со сканером. Не умею нормально настраивать локальные сеть, особо не интересуюсь компьютерным оборудованием.
F0iL
serge-sb
Внимательно прочитал [почти] все комменты, и у меня только один (в сущности) вопрос. Если я правильно всё понял, то программы на вашем языке «дособираются» уже на конечном компьютере перед установкой? Значит про portable-версии программ можно забыть? Как вообще происходит синхронизация исполняемого кода с железом, на котором код запускается? Или подразумевается, что аппаратная конфигурация компьютера неизменна?
Whuthering
С одной стороны, работа, конечно, проделана впечатляющая — даже если результат не пойдет в массы, автор все равно получил отличный опыт и занимался тем, что ему было действительно интересно.
С другой стороны, в целом статью читать было больно. Мне кажется, стоит немного приостановиться в развитии своего детища, и все-таки обратить внимание и силы на развитие профессиональной карьеры и улучшение материального положения — как минимум, потому что, как я понял, для вас это больная тема, да и заниматься тем, что душе нравится, гораздо лучше и притнее когда есть где жить, что есть, и уверенность в завтрашнем днем. И поэтому, небольшая порция непрошенных советов:
1. Спрос на программистов сейчас огромен, в том числе и в Беларуси. Мидлы и синьоры нарасхват, джуниоры нужны меньше, но есть важный нюанс — по сравнению с большинством джунов, у вас в результате работы над своим творением есть какие-никакие (а скорее даже весьма ощутимые) знания computer science, понимание структур данных и алгоритмов (опыт их использования и изобретения новых), понимание работы ОС и компиляторов, живое представление об особенностях языков программирования и парадигм, хорошее знание Linux-систем в конце концов. И это очень и очень большой плюс вам по сравнению с конкурентами.
2. Советую для старта выбрать какой-нибудь очень мейнстримовый стек, типа Java, C#, JS, Python, C++ — что больше понравится. Go, про который вы говорили — тоже ок, но «мейнстримом» я бы его не назвал, потому что позиций по нему гораздо меньше, чем по перечисленным выше языкам. А «количество вакансий» в вашем случае очень важно, потом объясню почему.
По выбранному языку берете книги или онлайн-курсы и натаскиваетесь на базовый уровень — просто чтобы уверенно отвечать на вопросы на собеседованиях, когда до них дойдет дело.
3. Уясните для себя, что отсутствие высшего образования в IT — это не проблема, а лишь небольшая трудность. В наше время можно встретить огромное количество людей, ставшими программистами, не имея профильного образования (в прошлом бывшие инженерами, врачами, учеными, и много кем другим). Я не раз встречал в софтверных компаниях людей, вообще не имевших никакого диплома вуза — и это не мешало им находить работу и работать. Да, спектр фирм, в которые вас возьмут, из-за этого сузится — поэтому в том числе и важно, чтобы изначально много вариантов.
4. Составьте хорошее резюме. Инструкций в интернете навалом. В вашем случае важно акцентировать внимание не на том, чего у вас нет, а на том, что у вас есть. Места работы оставьте хоть сколь-нибудь связанные с IT, ничего страшного, если это будет список всего на половину страницы. Еще половина страницы — общая информация о себе (как зовут, сколько лет, где живешь, колледж/лицей где учился), еще половина — краткое описание вашего детища-компилятора, причем непосредственно на описание можно потратить 1-2 абзаца (и дать ссылку на гитхаб и блог, если вдруг заинтересуются), а остальное — перечисление или ключевые слова, что из общеизвестных инструментов вы использовали для разработки своего творения (в том числе и старых версий) — Go, LLVM, Linux, другие библиотеки и инструменты, можно 1-2 слова для каждого пункта о том, как именно и для чего именно, туда же можно дописать какие алгоритмы и структуры данных вам пришлось использовать и имплементировать (все что сложнее стандартных сортировок и поисков). Цель этого — чтобы человек, читающий ваше резюме зацепился за знакомые слова, и понял, что ему будет о чем с вами поговорить на равных.
Как сделаете резюме, обязательно отправьте его на ревью кому-нибудь уже давно работающему в отрасли разработки ПО, лучше нескольким людям, и отредактируйте исходя из обратной связи. В крайнем случае мне в личку скиньте, чем смогу помогу.
5. Научитесь представлять презентовать себя и отвечать на сложные вопросы. Рассказывать про опыт работы (хоть какой-нибудь, но если не-релевантный, то без деталей), про свой проект (так, чтобы даже неподготовленный человек понял что это и зачем это), про то, почему нет образования и почему не устраивались на серьезную IT-работу раньше. На все эти вопросы лучше иметь заранее подготовленные ответы, желательно тоже потренироваться с кем-нибудь из тех, кто в теме.
6. «Будьте в струе», как говорится. Вполне возможно, что «варясь в собственном соку» вы упустили огромную часть современного IT-мира. Выше вон, например, говоря про работу сисадминов вы упомянули принтеры и сканеры — ну это же вообще дичь какая-то :) Читайте профессиональные ресурсы и форумы, именно не про языки и технологии, а «о жизни», например упомянутый dev.by, читайте хабы «Карьера в IT» и «Учебный процесс в IT» на Хабре, смотрите видео с митапов и конференций, как по интересующим вам языкам и технологиям, так и просто, например, о командной работе, методологиях разработки, о тестировании, о CI, и т.д.
7. Будьте упорным. Позиция, что вы описали «я подавался в несколько мест, в одном мне отказали так, в другом вообще не ответили, все тлен» — абсолютно провальная. Не получилось с одними — получится с другими. Выбираете 20 компаний, подаетесь на позиции. Отказали, проигнорировали? Выбираете следущие 50. И так далее. Чем больше у вас есть вариантов, тем лучше. Упорство, массовый перебор всех вариантов, долбление даже казалось бы в закрытые двери — рано или поздно наткнетесь на то, что сработает. И это самый важный пункт.
8. Если вам отказали — просите фидбэк. Большинство промолчат, но некоторые ответят, и этот ответ может оказаться очень ценным.
9. И еще, если в описании вакансии в требованиях написано «высшее образование» — подавайтесь на нее все равно. Если по списку технических требований вы попадаете хотя бы на 50% того, что написано — подавайтесь без сомнений. Очень часто список требований в опиании означает не «обязательно», а «неплохо бы».
Удачи.