Pull to refresh

Comments 525

Язык с какой целью создавался? Хобби и прокачка навыков? Я просто не увидел ни упоминание о назначении языка, ни что вообще на нём можно писать (только консольные приложения под Linux?).
UFO just landed and posted this here
Не знаю что там в советсвом мультике, но TempleOS создал очевидно душевнобольшой человек — и она же, в кенечном счёте, его и погубила.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

type Object struct {
   Field int
}

var a Object
var b *Object
b = new(Object)


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


a.Field = 2
b.Field = 3

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

все нормальные прошивки(материнок для кастомных клав) позволяют это реализовать быстро и просто.
UFO just landed and posted this here
она еще не готова (дело встало т.к нужно было уже серьезно кодить и вытаскивать статку из текста, и на тот момент не хватило навыка, а щас работа и нет времени, но думаю на каникулах запилю),

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

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

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

есть тред на реддите с гораздо более ясным ангельским ;)
www.reddit.com/r/MechanicalKeyboards

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


Один — Dominic Beauchamp.

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

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

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

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

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

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


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

Не мутабельность.
Когда она есть — дело десятое есть ссылки или нет.
Ну а при эмуляции функциональщины на мейнстримовых языках — делается через копирование переменных.
Не мутабельность.
Мутабельность обычно тоже есть. Да, как в Rust с его unsafe-блоками: с пометками и прочим — но есть. Ибо теория — это хорошо, а программы-то как-то писать надо.
UFO just landed and posted this here
И какая из этих клавиатур была создана «сумрачным гением» с подходом «если я не вижу зачем это мне — значит оно не нужно и никому»?


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

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


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


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


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

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

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

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

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

А если вопрос поставить так: в каком количестве программ теоретический выигрыш от использования SIMD выше 5%?

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

Банальный поиск символа в строке, можно ускорить с помощью SIMD, а также некоторые алгоритмы сортировки, поиск элемента в массиве(в некоторых случаях), а выше перечисленные действия, встречаются часто. И вот в этих случаях — SIMD используется редко.
а вот в условной 1C вряд ли найдётся применение векторным инструкциям.
Боюсь мы этого никогда не узнаем.
UFO just landed and posted this here
Плюсую… человек абсолютно точно болен, это раз. У человека не настолько высокая квалификация как он думает. Отсюда и на работу не берут нормальную. Нет, я не говорю что он дурак. Напротив. Но его компилятор его же и губит. А ему тут подливают еще, про Илона Маска… Срочно, срочно к психиатру.
У человека не настолько высокая квалификация как он думает.
А как я думаю? Я не упомянул в статье о том, что я думаю на счёт своей квалификации. Не надо придумывать и гадать.
Отсюда и на работу не берут нормальную.
Одного работодателя не устроило то, что нет высшего образования, другой работодатель даже не стал проверять мою квалификацию. Повторюсь, не надо придумывать и гадать.

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

Плюсую. Болен, ну или такая «особенность». Будто не от мира сего. На работе есть такой коллега, хороший специалист, но вот что-то не то, и рассуждения такие же, на уровне ребенка.
UFO just landed and posted this here
То есть чтобы создать гениальный язык никакого диплома не нужно, а чтобы ставить психиатрические диагнозы — нужен?

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

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


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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Каких сборок? Вы ничего не поняли вот комментарий в котором я все подробно расписываю.
UFO just landed and posted this here

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

UFO just landed and posted this here
А вот тут вы не совсем правы. Личный опыт это несколько опровергает.
Интересно каким образом? Вы не умеете в «O большое»? Или у вас нет опыта работы?

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

UFO just landed and posted this here
Вы — молодец! Побольше бы таких беларусов! Но, увы, таких очень и очень мало. Был очень краткий момент в новой истории, когда белорусский начал возрождаться и стал популярен в школах и даже в некоторых вузах. Возможно, Ваше становление пришлось именно на этот момент. Ни до, ни после никаких серьезных усилий по продвижению белорусского языка не предпринималось.

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


./configure
make
sudo make install

?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

«Мой язык требует полного переучивания, он ни на что непохож, а будет ли ускорение и когда — я и сам не знаю»… это куда как менее убедительное предложение — согласитесь?

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

Можете побенчмаркать на досуге.

Да, во многих случаях можно использовать всякие NumPy или SciPy и «переложить работу» на плечи C++/Fortran модулей, можно даже видеокарту приспособить… что-то можно отыграть, используя PyPy, но простейшие алгоритмы на СPython — как раз примерно в 100 раз медленнее, чем в C++.

Странно что вы вообще что-то о Python обсуждать собираетесь не зная этого, всем, в общем-то, известного, факта.

Так это не про питон вообще, а про число дробилки, что далеко не основное и для чего есть решения

Что значит «это не питон вообще»? В python какая-то особенная математика теперь?

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

«Решения» же — как правило использования модулей на C++… согласитесь, что язык, который был бы так же удобен, как Python и так же быстр как C++ — пользовался бы популярностью…

Вот Nim и пытался пролезть в эту, вполне очевидную, нишу. Конечно ни до скорости Python, ни до удобства C++ он не добрался… так что успех был ограниченным… но сама ниша — очевидна.
Ну вот я посмотрел на тест с наибольшей разницей (172 раза) — на mandelbrot.

Ну и какой практический смысл сравнивать плохо читаемый (практически обфусцированный), заоптимизированный по самое немогу, завязанный на единственный компилятор (G++), единственную платформу (x86-64), использующий предвычесленные значения забитые прямо в код (волшебные массивы), и выдающим максимум за счет ручного использования векторных операций, непортируемый, слабо поддерживаемый и идеологически не особо корректный (см. «Ещё раз о неопределённом поведении или «почему не стоит забивать гвозди бензопилой»») C&C++-код с легко читаемыми, полностью отвечающими идеологии языка, работающими идентично на всех поддерживаемых интерпретатором платформах Python-реализациями?

Кроме того, если посмотреть детальнее — там есть предыдущие версии C&C++-реализаций (которые впоследствии были заменены все менее понятными (все более обфусцированными), все менее портируемыми, все менее поддерживаемыми, но все более быстрыми) — разница между их производительностью и производительностью Python-реализаций гораздо менее драматична: 4 — 7 раз между хорошо читаемым «C++ g++ #3» и представленными Python-реализациями, что гораздо больше соответствует ситуации в реальных проектах (по моим наблюдениям).
Ну хорошо, мне аж тоже стало интересно. Тоже взял mandelbrot; python3-реализацию из ссылки выше по ветке, и C++-реализацию из общего списка самую нижнюю (mandelbrot C++ g++ #3) из таблицы, т.е. самую медленную.
И, извините, я не понимаю, можно ли считать достижением, что python3-реализация в несколько потоков (извините, не знаток python, так что не могу по коду понять, во сколько потоков пул там по умолчанию «молотит»; а лезть в документацию мне лень) работает в четыре разницы медленнее, чем практически в лоб (не вижу здесь никаких обфускаций или волшебных оптимизаций, кроме разве что одного manually inlining «norm» results in a 5x-7x speedup on gcc) реализованный алгоритм, работающий в один поток даже без всяких openmp.
Результаты
C++
time bash -c "./mandelbrot.gpp-3.gpp_run 16000 > ./mand_output"

real 1m5.565s
user 1m5.488s
sys 0m0.048s

Python3
time bash -c «python3 -OO mandelbrot.python3-7.py 16000 > ./mand_output_py»

real 4m23.843s
user 25m45.748s
sys 0m0.988s

sha256sum ./*output*
609262469ee6a0262ccd03932e557f745c9e7b997ad17835a02a0232a64807be ./mand_output
609262469ee6a0262ccd03932e557f745c9e7b997ad17835a02a0232a64807be ./mand_output_py

UPD: очень грубо (без долей секунд и учёта sys) поделил для python3-реализации, вышло user/real ≈ 5.87; похоже, python3 использовал все шесть ядер моего процессора.

Не настолько знаток чтобы хорошо объяснить, но как понимаю дело в том что в питоне нет примитивных типов данных, всё есть объект, в том числе числа (что требует больше памяти) и всякая операция есть вызов метода (что даёт накладные расходы).

Там есть много всякого, что приводит к фактически гарантированному 10x замедлению по сравнению с нормальными, компилируемыми, языками. Хотя возможно если применить разные трюки в стиле V8 можно будет ещё чуток отыграть… но незачем.

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

Вообще эта истерия вокруг того, что Python — это 100x замедление меня удивляет.

Полвека назад же всё то же самое было: был интерпретируемый BASIC или REXX и быстрые машинные коды (на «больших» машинах — ассеблер) и нокого не удивляло, не задевало и не обижало то, что между ними разница в 100 раз. Об этом прямо в инструкции писали.

И нормально — никто не жаловался. Почему сегодня в подобной же ситуация простая констатация факта вызывает обиды — непонятно…
UFO just landed and posted this here
которые страдают от того, что из программы на два порядка медленнее программ на большинстве других языков. И да — от ускорения на два порядка путём небольшой переделки оных программ — они бы явно не отказались.


А не проще PyPy?
Как оказалось — проще. Но когда разработка Nim начилась — его ещё не было.

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

Всё равно много — но уже не настолько много, чтобы «любая хоть сколько-нибудь разумная реализация» была бы быстрее. Тут уже надо делать что-то близкое по скорости к C++… а это, мягко говоря, непросто (в смысле: с сохранением простоты и удобства, присущих Python непросто… так что Ada или Pascal какой-нибудь вполне быстры).

Великолепный труд. Я очень завидую вашему упорству. Вам нужно найти практическое применение своему языку. Найти реальные задачи на которых ваш язык будет показывать заметные результаты и приходить на хабор через месяц с примерами и графиками. Так вам охотней поверят.

Ничего из этого. Все объекты рассматриваются как значения, т.е.
поскольку программа знает, что память по ссылке используется в 2-х объектах, то массив мо ссылке просто копируется в новый, и теперь в a и b разные ссылки. И уже в новом массиве, последний элемент меняется на 7
Вот есть подобная функциональность: Implicit Sharing. Не без проблем, конечно. Можно создавать свои классы с таким же поведением (см. пример использования). И это только один из вариантов подобного поведения. Магия C++ позволяет писать классы-обёртки, где Copy-on-Write будет срабатывать при попытке вызвать любой non-const метод, и даже не нужно отдельно иметь .=/:= и a.call() / b:call(). Я так понимаю, что это в языке осталось?

Вообще, тот же C# мне не очень нравится именно из-за отсутствия модификатора const и нормальной работы со структурами и ссылками/указателями; если честно, мне даже кажется кощунством продвигаться в этом направлении ещё глубже. Сейчас играюсь с Unity, и каждый раз переживаю, что при любом вызове функции всякие там Vector3 будут копироваться вместо передачи по ссылке; интересно, как бы работал Ваш язык с кучей геометрических рассчётов.

Свой компилятор – это очень круто; я пытался реализовать парсер C#-кода в AST с разбором типа каждого выражения, чтобы потом править определённым образом код и пересохранять. Тоже хотел сделать что-то в каком-то смысле уникальное и новое (описывать историю, «квест», через код), но я почему-то сломался на обработке генериков. Поразбирав подробнее, как оно работает в C#, я решил, что мне оно не нужно настолько. Да и переоценка вменяемости того pet-проекта оный забраковала.

Честно, не думаю, что кроме опыта Вы получили что-то полезное, занимаясь своим проектом, но закончить такое детище – хорошее достижение. Вы молодец.
Вообще, тот же C# мне не очень нравится именно из-за отсутствия модификатора const

readonly structs в релизе уже два года как.

Вау, спасибо. Вот только я колупаюсь на Monodevelop и Unity 2019.1; не знаю, есть ли у меня варианты такую свежатину пощупать, или нужно ещё минимум год-два ждать… Надо будет поузнавать.
Вот есть подобная функциональность

Ну значит не я это первый придумал, прям печально стало. Но в cine это все по умолчанию и другое поведение — ошибка. А в C++ это опция.
где Copy-on-Write будет срабатывать при попытке вызвать любой non-const метод

Так это безумие! Это очень сильно ударит по производительности.
и даже не нужно отдельно иметь .=/:= и a.call() / b:call(). Я так понимаю, что это в языке осталось?

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

Уверен на 100%, что если в cine было вложено столько же сил и денег сколько в c#, то мой язык смотрелся бы гораздо лучше.
Вы молодец.

Спасибо.
Так это безумие! Это очень сильно ударит по производительности.
Почему? Посмотрите ещё раз пример, можете полистать список классов (см. тут; к сожалению, отдельную ссылку именно на список дать не могу – нет там якоря вроде).
Подробнее под спойлером
В C++ можно (можно читать как «нужно», ибо это может дать прирост производительности за счёт того, что компилятор будет лучше понимать код) помечать методы как константные:
QString name() const;
void setName(const QString& value);

В первом случае выходит, что получение имени из экземпляра класса не имеет побочных эффектов (на сам экземпляр), соотвественно, получение имени не вызывает копирование; а вот перед заменой имени Copy-onWrite сработает (если счётчик ссылок покажет, что есть более двух ссылок на объект):
Employee e1(1001, "Albrecht Durer");
Employee e2 = e1;
Employee e3 = e2;
qDebug() << "e1.name:" << e1.name;
// e1+e2+e3 по-прежнему указывают на один и тот же объект в памяти
e1.setName("Hans Holbein"); // перед изменением e1 создаётся копия объекта, и изменение совершается на копии
qDebug() << "e2.name:" << e2.name; // Albrecht Durer
qDebug() << "e3.name:" << e3.name; // Albrecht Durer
e2.setName("Other person"); // перед изменением e2 создаётся копия объекта, и изменение совершается на копии
// теперь e1/e2/e3 указывают на разные объекты
e3.setName("Third person"); // счётчик ссылок e3 равен 1, копирования не происходит

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

Я не знал, что в C++ есть счётчик ссылок.
Естественно, в самом C++ такой функциональности нет. Но в стандартной библиотеке есть, например, обычные сильные и слабые указатели.
А Qt – отдельная платформа поверх С++, там насчёт указателей и сокрытия реализации (и для повышения удобства использования) вообще много чего есть.
Кроме Implicit Sharing:
  • Explicit Sharing;
  • QSharedPointer и QWeakPointer (своя реализация сильных и слабых указателей);
  • QScopedPointer (RAII-обёртка над указателем для гарантированного удаления объекта, созданного на куче, после потери выхода ссылки на него из зоны видимости без явных delete и/или try/catch);
  • QPointer (что-то вроде отдельного вида слабых ссылок на экземпляры классов, наследующихся от QObject);
  • Что такое Pimpl по версии Qt, и с чем его едят! (своё решение проблемы сохранения бинарной совместимости для библиотек).
А ещё есть своя система плагинов, сигналы-слоты и так далее.

Ну и как бы всё это нужно для того, чтобы код вроде того, что я копировал из документации Qt:
Employee e1(1001, "Albrecht Durer");
Employee e2 = e1;
e1.setName("Hans Holbein");

Было удобно и легко писать, чтобы он «красиво выглядел», чтобы был понятным. Ну и чтобы работал быстро; а уж что там внутри – совсем другой вопрос. Цена вопроса – необходимо писать два класса (кроме qpointer, scoped и слабых/сильных ссылок) вместо одного.

Ну и:
Я не знал, что в C++ есть счётчик ссылок.
Тут скорее основная магия в возможности переопределения operator * и operator ->.
UFO just landed and posted this here
Но в стандартной библиотеке есть, например, обычные сильные и слабые указатели.
Посмотрите ссылки в моём комменте, пожалуйста.
Я имел в виду, что в самом C++, на уровне языка, этого нет. Никто же не заставляет использовать стандартную библиотеку; можно использовать boost, ну или вообще написать свою реализацию. Мало у кого какой подход, или какая любовь к костылям, например. )
В С++ такая функциональность есть!

pointer_safety, undeclare_reachable, declare_no_pointers
части 20.7.2-20.7.13 стандарта

А в компиляторах нет, но в них много чего из стандарта нет.

Про установку не понимая, зачем мне отвечать на какие-то вопросы? У меня других дел хватает, это работа создателей дистрибутива независимо от того где оно будет компилироваться, ну и компилять у себя я готов только если ничего конфигурить не будет нужно — ввёл условный apt rebuild all и получил прирост производительности, тогда ок.

и компилять у себя я готов только если ничего конфигурить не будет нужно
Есть разные люди и лично я готов ответить на парочку вопросов при установке, если в конечном итоге приложение будет работать лучше. Я поэтому и начал создавать свой язык, потому что у меня запрос на технологию был, а предоставить мне её никто не мог.
Да, но тогда целевая аудитория сильно уменьшается, особенно учитывая что приложений ставится очень много.
Я это понимаю, но и захват всего рынка я то же не планирую.
Разве? А как же Gentoo? Насколько я понимаю, это является одной из его киллер-фич. Ты можешь иметь все программы скомпилированные строго под твой процессор, если нужно, поскольку компилируешь все сам:
https://wiki.gentoo.org/wiki/GCC_optimization/ru
А как же Gentoo?
Невнимательно читали статью, я это из gentoo и позаимствовал.

Касательно ссылок получается copy on write, может и не так плохо, не готов конкретно возразить, но есть подозрение, что так производительности си не достичь, скорее всего Раст не случайно все свои сложности ввёл.
Что кстати со сборкой мусора?

но есть подозрение, что так производительности си не достичь

Про потенциальную производительность выше Си, я говорил с учётом того, что полученный на cine код, окончательно компилируется на машине пользователя подстраиваясь под систему, в противоположность Си программам, которые принято распространять в виде исполняемых файлов собранных обычно не для самых производительных машин(для совместимости), к тому-же cine генерирует один большой Си файл и компилятор очень многое может оптимизировать в Си программа разбивается на отдельные библиотеки и в последующем они линкуются, но у линкера не такой большой полёт для оптимизации, как у компилятора. Если C, Rust, C++ будут делать как Cine, то программы на них будут более производительными, но Cine будет где-то рядом. Уточню, что эти рассуждения были бы верными в случает если Cine был бы доделал до версии 1.0, в данный момент я не делал бенчмарков и не могу сказать даже примерно где он находится. Так же уточню, что copy on write срабатывает только при необходимости, а это не всегда бывает.
Что кстати со сборкой мусора?

Подсчет ссылок. Зацикливание двух объектов на друг друге не возможно из-за особенностей языка.
Зацикливание двух объектов на друг друге не возможно из-за особенностей языка.
Вот только это приведёт к диким костылям при попытке реализовать хотя бы что-то на тему GUI.

Ну… это вам ещё предстоит испытать…
Зацикливание двух объектов на друг друге не возможно из-за особенностей языка.
А можно поподробнее?
Что мешает сделать класс Tree (Вы писали тут где-то в комментариях пример), а потом собрать дерево A → B → A? Тогда потом даже после «выпадения из зоны видимости» нод A и B получаем утечку памяти, разве нет?
Или получается, что за счёт Copy-on-Write мы автоматически получаем C → B → A? Т.е. корень перед добавлением B → A копируется в C? А если это нежелаемое поведение, и где-то нужно сохранить ссылку на уровень выше?
Или получается, что за счёт Copy-on-Write мы автоматически получаем C → B → A? Т.е. корень перед добавлением B → A копируется в C?

Да именно так это и происходит.
А если это нежелаемое поведение, и где-то нужно сохранить ссылку на уровень выше?

Без костылей — никак. В этом и был смысл языка, что изменяя один объект, нельзя было повлиять на другой. На моей практике в 95% это удобней, но в 5% это действительно проблема.
Мне кажется, или при таком подходе проблемы с написанием кода будут на каждом шагу?
Например, есть массив/коллекция/хешмап (в общем, какой-то контейнер) с объектами. Получается, что если нужно поменять состояние одного из объектов – нужно достать объект (по факту – ссылку на него) из контейнера, затем отредактировать объект, после чего придётся заменить значение в контейнере на новое. Правильно?
Причём получаем следующую ситуацию – в момент редактирования срабатывает Copy-on-Write, потому что ссылок на объект минимум две (в контейнере и изменяемая). То есть, правильно делать в следующем порядке container.getItem → containter.removeItem → редактирование экземпляра → container.addItem? Тогда на момент изменения будет одна ссылка (если, конечно, копия объекта не хранится где-то ещё), и лишнего копирования не будет…
Похоже, правильно говорят, что будут проблемы даже набросать какой-то несложный GUI. Возможно, не будет проблем с IMGUI-подходом; но стандартный вариант, когда есть в том или ином виде контейнер с виджетами, некоторые из которых тоже являются виджетами – явно не для Вашего языка, как я понимаю?
Или есть какой-то подход, который позволяет решать эти проблемы по-другому?
Мне кажется, или при таком подходе проблемы с написанием кода будут на каждом шагу?
Уже попробывал на практике, проблем стало гораздо меньше.
Например, есть массив/коллекция/хешмап (в общем, какой-то контейнер) с объектами. Получается, что если нужно поменять состояние одного из объектов – нужно достать объект (по факту – ссылку на него) из контейнера, затем отредактировать объект, после чего придётся заменить значение в контейнере на новое. Правильно?
Верно, но меня это устраивает.
Причём получаем следующую ситуацию – в момент редактирования срабатывает Copy-on-Write, потому что ссылок на объект минимум две (в контейнере и изменяемая).
Допустим элементы массива являются структурой хранящей два члена, один число (UInt64), а второй массив. При получении элемента из массива значения числа и указатели на память массива копируются на стэк, при этом счётчик у массива внутри элемента увеличивается на 1. Если в полученном элементе изменить число, никакого копирования не происходит, если изменить массив (тот который внутри элемента) то он будет скопирован. При помещении измененного элемента назад в исходный массив если его счётчик будет равен 1, то массив не будет скопирован, иначе будет.
То есть, правильно делать в следующем порядке container.getItem → containter.removeItem → редактирование экземпляра → container.addItem? Тогда на момент изменения будет одна ссылка (если, конечно, копия объекта не хранится где-то ещё), и лишнего копирования не будет…
Это не всегда нужно, но в некоторых случаях это действительно будет оптимизацией.
Похоже, правильно говорят, что будут проблемы даже набросать какой-то несложный GUI.
Возможно, но я вижу несколько возможных и адекватных решений проблемы.
но стандартный вариант, когда есть в том или ином виде контейнер с виджетами, некоторые из которых тоже являются виджетами – явно не для Вашего языка, как я понимаю? Или есть какой-то подход, который позволяет решать эти проблемы по-другому?
Он возможен (поскольку функции являются объектом первого класса и по этому можно делать аналоги интерфейсов из других языков), но мой язык действительно для таких целей подходит менее чем большинство других. Но не стоит забывать, что в языке можно свободно использовать вставки на Си, можно банально сделать бинбинги для GTK.
Допустим элементы массива являются структурой хранящей два члена, один число (UInt64), а второй массив. При получении элемента из массива значения числа и указатели на память массива копируются на стэк, при этом счётчик у массива внутри элемента увеличивается на 1.
Но структура же тоже объект? Или это два разных типа сущностей? Не помню такого в статье; возможно, просто уже прошло слишком много времени.
Похоже, правильно говорят, что будут проблемы даже набросать какой-то несложный GUI.
Возможно, но я вижу несколько возможных и адекватных решений проблемы.
Я тоже вижу; например, IMGUI-подход, когда нет постоянных сущностей/объектов, представляющих элементы интерфейса, а есть только функция, которая умеет обрабатывать события. Но у этого подхода есть свои минусы и трудности.
Он возможен (поскольку функции являются объектом первого класса и по этому можно делать аналоги интерфейсов из других языков)
Да, но в этом случае есть большая проблема с тем, что объект не может хранить своё состояние в себе; каждый раз, меняя элемент интерфейса (надпись на кнопке, например), нужно устраивать пляски с бубном, чтобы в контейнере осталась ссылка на обновлённый вариант кнопки, в контейнере-уровнем-выше осталась ссылка на обновлённый вариант контейнера, и так далее, выше, до самого interface root element/container.
Ну или нужно иметь где-то аналог статичного массива (какой-то менеджер), сводящемуся к хешмапу id → состояние объекта, а на каждом элементе держать уникальный id. Думаю, это как-то можно сделать не очень неудобным… Но зачем?..
Но структура же тоже объект? Или это два разных типа сущностей?
Как было сказано в статье, я при проектировании приложений задействую ООП (хотя язык и не ООП), а в ООП программа представляется в виде объектов которые взаимодействуют друг с другом. Под объектом я понимаю любые данные имеющие тип, где они располагаются — не важно. Счётчики не относятся к объектам, счётчики относятся только к памяти выделенной на куче. Вот пример кода на си, илюстрирующий то о чём я говорю (На всякий случай скажу, что в cine нет массивов, есть только слайсы и можно брать кусок другого слайса не выделяя новую память. Массив в примере только для упрощения кода).
struct array {
    uint64_t *counter;
    uint8_t *array;
}

struct someType {
    uint64_t x;
    struct array y;
}

//аналог этой функции есть в стандартном модуле cine
//есть и decCounter но для примера он не нужен
void incCounter(struct array a){
    *(a.counter)++;
}

//аналог этой функции сгенерируется автоматически
void incCounter(struct someType a){
    *(a.y.counter)++;
}

void foo(){
    //код на cine
    //a := someFunc()
    //someFunc вернёт объект с типом someType
    //counter которого равен 1
    //похожий код на C
    struct someType a = someFunc();
    //код на cine
    //b := a
    //похожий код на C
    struct someType b = a; //данные из a просто копируются в b, все указатели из а указывают на ту же память что и указатели в b
    incCounter(a); //этот вызов вставится автоматически
    //в дальнейшем если какая либо функция захочет изменить a.y.array то она посмотрит на a.y.counter
    //и если там число больше 1 - то создастся новый счётчик a.y.counter со значением 1 (в b останется старый счётчик),
    //затем выделится память размером как у a.y.array и в эту новую память копируется память из a.y.array
    //после чего в a.y.array помещается новый кусок памяти (в b.y.array остаётся старая память) при этом если в a.y.array есть какие либо счётчики
    //то они все увеличиваются на 1. Если нужно поменять a.x
    //то он просто меняется, так как a.x не указатель а просто значение лежащее на стэке (или  регистре процессора, как clang решит), изменение
    //a.x естественно никак не повлияет на b.x
}

Да, но в этом случае есть большая проблема с тем, что объект не может хранить своё состояние в себе; каждый раз, меняя элемент интерфейса (надпись на кнопке, например), нужно устраивать пляски с бубном, чтобы в контейнере осталась ссылка на обновлённый вариант кнопки, в контейнере-уровнем-выше осталась ссылка на обновлённый вариант контейнера, и так далее, выше, до самого interface root element/container.
Это не обязательно, можно в место ссылки хранить номер индекса виджета в массиве.
Ну или нужно иметь где-то аналог статичного массива (какой-то менеджер), сводящемуся к хешмапу id → состояние объекта, а на каждом элементе держать уникальный id. Думаю, это как-то можно сделать не очень неудобным… Но зачем?..
Не обязательно хэш использовать, можно просто использовать массивы, а id это позиция в массиве.
Вообще у меня есть 6 вариантов создания gui:
  1. Создавать аналоги интерфейсов из многих других языков, все виджеты хранятся в одном массиве в типе Fluid (аналог пустого интерфейса), но поскольку в таких интерфейсах «методы» не могут менять сам объект, они могут в качестве результата возвращать новый объект, а затем этот новый объект поместить назад в массив.
  2. Весь GUI храниться в одной структуре которая хранит по одному массиву на каждый тип виджета. При изменении виджета по его типу определяется массив куда новые значения нужно поместить
  3. Создавать один массив со всеми виджетами внутри Fluid, любая функция применяемая к виджету, применяется непосредственно к Fluid, а внутри Fluid уже определяется что это за тип виджета и как с ним поступать, затем изменённый виджет опять помещается в Fluid, а затем в массив.
  4. Создать программу в которой можно удобно создавать GUI, а на выходе эта программа генерирует код создающий такой GUI с указанным поведением и с любыми возможными костылями необходимыми для реализации подобного GUI, а также создать модуль для удобного взаимодействия с этим GUI.
  5. Создать си-обвязки к существующему GUI (GTK, IUP)
  6. IMGUI

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

эта статья скорее про историю, а не про сам язык

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

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

Если вдруг будет дефицит идей — у меня завалялась, пока не похоже что сам доберусь писать.
Насчёт мессенджера, у меня самого много идей, но боюсь я никогда не доберусь до их воплощения.
  1. Кросс под архитектуры, которые отличаются от десктопных — быстрее будет собирать и оптимизировать
  2. Аналогично, совершенно не нужно на хост системе иметь железо типа куды, чтобы под неё собрать
  3. Бенчмарков, как я понимаю, нет? Вы хоть numpy догоняете?
  4. Это слабое преимущество
  5. Какие проблемы со ссылками? А указатели типа проблем ссылок не имеют?
  6. С этого момента поподробней, пожалуйста
Кросс под архитектуры, которые отличаются от десктопных — быстрее будет собирать и оптимизировать

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

А я разве утверждал такое? А писал о том, что если есть 2 похожие технологии, которые предназначены для плюс-минус одного и того же, пользователь может выбрать какую из них использовать.
Бенчмарков, как я понимаю, нет? Вы хоть numpy догоняете?

Так и cine 1.0 ещё не вышел. Или вы хотите, что бы мой язык с версии 0.1 рвал всех в клочья? Я писал о том, что у него есть такой потенциал из-за дизайна языка и особенностей компилятора.
Это слабое преимущество

Это шутка?
Какие проблемы со ссылками?

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

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

Подробней писал в этом комментарии(там где код написан, в коде есть комментарии)
Так и cine 1.0 ещё не вышел. Или вы хотите, что бы мой язык с версии 0.1 рвал всех в клочья?
Если вы это называете ключевой особенностью языка… то да, конечно.

Когда мы делали свою особую песочницу, которая должна была, в некоторых условиях, быть быстрее альтернатив благодаря специальному компилятору… мы бенчмарки прогоняли до того, как компилятор был готов. Была какая-то адская смесь из изменённого GCC, каких-то скриптов, обрабывавших ассемблерный выхлоп, и чего-то ещё. Скомпилировать реальные программы было нельзя, но где-то половину SPEC2000 — мы прогнать сумели.

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

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

А указатели типа проблем ссылок не имеют?
Так в языке и указателей нет.
А что есть тогда? Вот захотите вы прочитать JSONчик маленький (ну, банально: закачик хочет, чтобы конфигурация в JSON хранилась). Куда вы его засунете?
это называете ключевой особенностью языка

Я не это называю ключевой особенностью, а то что язык простой удобный, но при этом есть огромный потенциал производительности. Сейчас его производительности с головой хватает для всех целей с которыми его сейчас будут использовать. Или может вы считаете что его сейчас будут использовать для реальных крупных проектов? Я вас умоляю.
А что есть тогда? Вот захотите вы прочитать JSONчик маленький (ну, банально: закачик хочет, чтобы конфигурация в JSON хранилась). Куда вы его засунете?

Смотрите ответы на этот комментарий.
Или может вы считаете что его сейчас будут использовать для реальных крупных проектов?
Я считаю, что его просто не будут использовать. Ну разве что для приколов каких-нибудь. См. TempleOS.

Сейчас его производительности с головой хватает для всех целей с которыми его сейчас будут использовать.
Любое высказывание про элементы пустого множества истинно… так что формально вы правы.
добавьте это в текст статьи. Хотя бы в «P.S.»
Там уже есть раздел «Интересные факты».
Жму вам руку. Я свой компилятор 3 года делал. Причем на отладки ссылок застрял на 1 год.
Простату языка проще проверить на задачах из rosetecode.org там сразу видно какой язык проще.
У Паскаля код длине чем у современных языков таких как Rust.

Важный момент касательно простоты — важно чтобы сложность инструмента соответствовала сложности решаемых задач. На эти грабли наступали многие perl, php, js — делали "простой" язык, а потом пользователи, полюбив удобство решения простых задач, начинают решать сложные, возникает куча проблем, в ответ язык начинает развиваться и в итоге ничем не отличается от "сложных" языков в противовес которым создавался "простой", go думаю на те же грабли наступает, о чём говорят холивары про обработку ошибок и дженериков.
Вообще я большой сторонник простоты, но простые модели обычно ограничены, "идеальный газ" очень простая модель, и она даже работает, но только в определённых границах, которые надо понимать.

Программы компилируются в код на Си

Ну тут ничего нового, я какое когда-то в ECL видел, и оно уже тогда не было новым чем-то.

но код на Си компилируется на компьютере конечного пользователя с флагом

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

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

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

Например: у пользователя можно спросить, что задействовать, opencl или cuda?

Особенно хорошо если юзер не знает или выберет то что не поддерживается системой. Куду вроде так и нельзя(костыли не рассматриваем) запустить на АМДшках, не?

язык изначально заточен под создание производительных приложений

Эта ниша же такая пустая…
Опять же, неизвестную фигню ставить(ну как упадёт)? А потом удивляться куда это просраны расчеты, да.

если в него вложить столько сил, сколько вложенно в раст


Не стоит ли уважать силы сообщества? Языков уже слишком много, пользы от пачки новых «СУПИРЯЗЫГ9000 BUENO EDITION» нет, ладно бы софт или библиотеки\фреймворки делали(хоть и клоны существующих), но язык…
По сути это нужно лишь индустрии(обучение, продажа литературы и прочее).

могут оказаться

А могут и не оказаться.
То есть сообщество должно попрыгать вокруг мессии, а там или оно сможет всё исправить, или все забудут?
Не знаю нафига комуто понадобился раст(который типа убивец плюсов(вроде ди уже пытался, не?)) но учитывая сколько в него вложено людьми времени, я считаю что разумнее или учавствовать в допиливании его.
Или, что лучше, забить на «новый улучшенный сиплюсплюс без скучных указателей» и принять участие в возне с IDE, библиотеками и фреймворками.

написанных в той же манере

Что если дело в манере?
Скажем если алгоритм дрянь — менять надо его, а не язык.

Язык чертовски прост

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

В языке нет ссылок и множества проблем, которые из-за них возникают.

Всё передаётся по значению?
Если нет — оно всё еще там, тока под капотом(отсутствие явного обозначения «этоссылка» ничего особо не значит). Это не ново(да и явное указание лучше, всегда знаешь что тут тока инт, тут только дабл, а вот тут — что угодно).

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

Так тут дело в кодере, зачем из-за этого 12 лет городить язык?
Ну тут ничего нового
А никто это и не утверждал.
Ну если есть код, его можно запустить на компиляцию и самому, или спец скриптом, ничего нового…
Обычно у программ есть зависимости которые перед компиляцией нужно удовлетворять, а здель собирается один пакет в котором всё есть. Обычно разработчики распространяют свои программы в бинарном виде и не делают ни каких специальные оптимизации под конкретное железо, поскольку расспространятся оно будет скомпилированным под какой-то древний ПК (в статье об этом указано).
Юзер будет просто счастлив.
Я как пользователь был бы счастлив, но поскольку никто кроме разработчиков Gentoo этого не делал — сделал я. Как это реализованно в Gentoo мне не очень нравится.
Это и знающих лишь винду задолбало(далее далее, да ка-бы согласен(нет), далее), а уж у сидящих под линуксом(привыкших в основном к установке из пакетов, или компиляции из исходников) вызовет припадок(для таких вещей есть конфиги, проверки, ключи и прочее).
Эту возможность необязательно использовать, она опциональна. Cine и fei — ничего не спрашивают.
Особенно хорошо если юзер не знает или выберет то что не поддерживается системой.
Программа для видео монтажа может использовать cude или opencl, монтажёру можно предоставить выбор до установки и в итоговой программе не будет намёка на неиспользуемую технологию, что позволит уменьшить потребление ресурсов. Я думаю большинство проффеcсиональных монтажёр знает о opencl и cuda, не говоря о том, что вопрос не имеет ограничений на количество символов и можно при постановке вопроса всё объяснить и дать рекомендации.
Куду вроде так и нельзя(костыли не рассматриваем) запустить на АМДшках, не?
В этом случае можно написать в вопросе то, что если у вас видео карта от AMD cuda вам не доступна.
Эта ниша же такая пустая
Я не по тому язык создал чтобы заполнить нишу, а потому что для меня не было подходящего инструмента.
Опять же, неизвестную фигню ставить(ну как упадёт)? А потом удивляться куда это просраны расчеты, да.
Чушь не надо пороть.
Не стоит ли уважать силы сообщества?
Уважаю.
Языков уже слишком много
И это хорошо, ведь есть выбор.
пользы от пачки новых «СУПИРЯЗЫГ9000 BUENO EDITION» нет
Не вам судить
ладно бы софт или библиотеки\фреймворки делали(хоть и клоны существующих),
Так займитесь этим, вместо пустой критики.
По сути это нужно лишь индустрии
Это нужно мне. И я без всяких мутных личностей решу, что мне делать.
А могут и не оказаться.
Вполне, возможно. Но никто никого не заставляет.
я считаю что разумнее или учавствовать в допиливании его.
Присоединяйтесь к сообществу и помогайте, я не против.
Скажем если алгоритм дрянь — менять надо его, а не язык.
А если алгоритм и так хорош, а на разработку нового уйду годы.
Алгоритмы конечно больше решают чем язык, но чушь пороть не надо.
Это говорят про каждое первое поделие.
Ни разу не слышал таких заявлений по отношению к rust и idris.
так что аргумент так себе
А по мне — очень сильный аргумент.
Всё передаётся по значению?
На уровне языка да.
Если нет — оно всё еще там, тока под капотом
Под катом да, но изменение значения одной переменной, не может повлиять на значение другого — а это решает все мои проблемы в языке.
да и явное указание лучше, всегда знаешь что тут тока инт, тут только дабл, а вот тут — что угодно
То есть статью вы не читали но сразу побежали комменты строчить? Язык имеет строгую типизацию и всегда знаешь, что где хранится.
Так тут дело в кодере, зачем из-за этого 12 лет городить язык?
Ну это вообще детский сад, все делают ошибки в коде, если вы нет — жду от вас статью о том как вы стали богом кодинга, с удовольствием прочту. А я просто взял и создал инструмент на котором я не могу совершить свою самую распространённую ошибку. Вам это не нравится — не используйте.
Ну и вероятно автор не знаком со многими известными языками, что насчёт питона например?

Превед


Я решил изучить Haskell глубже, прошёл курсы по Haskell(а заодно по основам статистики и языку Python), начал смотреть лекции по функциональному программированию и лямбда исчислению Чёрча.

Цитата из статьи.

Что-то пропустил, видимо потому что не упоминалось о каком-то влиянии питона.

Тут есть ещё момент, что автор ищет производительности:


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

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

гуглите Nim

а вообще простым файндНреплейсом уже можно бустануть питона сайтоном, а потом лупы переписать на нампайные и тд и тп в итоге будет лейтёхать ничуть не хуже пыщ

Бедный, несчастный русский язык, за что вы его так?

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

Что вы имеете против сильной динамической типизации?

UFO just landed and posted this here

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

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

Саша, ты набрал много опыта программирования, и это заметное достижение.

Но мне кажется, что твоя слабость в том, что ты чересчур увлекаешься деталями. ИМХО сейчас новые языки программирования мало кому нужны, если за плечами разработчиков не стоит крупная организация или сообщество.

Может стоит больше обсуждать с другими людьми для чего и что ты делаешь?

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

В любом случае, удачи тебе в твоих делах.
Новые языки всё время возникают. Вот, например, земляки-беларусы выкатили «SQL на стероидах»: habr.com/en/company/lsfusion
Но только мизерная часть новых языков применяется кем-то, кроме своих создателей.

У них как раз та же проблема — не очень убедительно хвалили свой язык, надо понимать что время у всех ограничено, всех языков не изучить, приходится выбирать то что кажется крутым и лучше известного не чуток, а радикально, хаскел и Раст как примеры.
Так что надо учиться "продавать" свои результаты, у нас с этим проблемы, не учили этому, наоборот говорили не хвастаться.

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

Для универсальных языков программирования это действительно верно. Но это не касается DSL. Бывают узкие области, где нужен свой специализированный язык, заточенный под конкретные задачи. Есть ряд специальных инструментов для разработки таких языков.
Но мне кажется, что твоя слабость в том, что ты чересчур увлекаешься деталями. ИМХО сейчас новые языки программирования мало кому нужны, если за плечами разработчиков не стоит крупная организация или сообщество.

Я это понимаю. Но возможно, даже если язык не обретет популярности, какие-то фишки моего языка станут использовать в других языках, в cine есть много ново и интересного. В этом случае я не зря жизнь жил, ведь я сделал мир лучше чем он был до меня.
Может стоит больше обсуждать с другими людьми для чего и что ты делаешь?
Если ты про жизнь, то как бы пафасно это не звучало, я очень необычный человек, со взглядами сильно отличающимися со взглядами 99.999% людей, советы других людей для меня зачастую не применимы, я в лет 15-20 прислушивался к советам, каждый раз разочаровывался результатом. Если ты про программирование, то в моём окружении есть только один человек умеющий программировать, но он самую малость программирует на PHP для WordPress, разница в нашем знании программирования — пропасть, он не понимает о чём я говорю.
У тебя очень хорошие способности в программировании, раз ты сумел столько всего выучить и использовать. Может тебе сконцентрироваться на поиске такой работы? Далеко не везде требуют образование. И в коллективе ты лучше начнешь видеть свои слепые пятна. А они есть у всех людей.

Я подумываю над этим, но здесь есть много нюансов.
В любом случае, удачи тебе в твоих делах.

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

Если ты про жизнь, то как бы пафасно это не звучало, я очень необычный человек, со взглядами сильно отличающимися со взглядами 99.999% людей, советы других людей для меня зачастую не применимы, я в лет 15-20 прислушивался к советам, каждый раз разочаровывался результатом.
Тогда почему вы считаете, что хоть кто-то хоть когда-то прислушается и присмотрится к вашей Temple OS… ой, извините, языку cine?
Сейчас об этом невозможно сказать, так как в куче того, что вывалили нет даже никакого описания языка, потому невозможно понять что в нём вообще есть, а чего нет.

Потому что это была история про то, как я создавал язык, а не технический мануал по языку. Про язык я буду писать в отдельном блоге(ссылку на который я дал в статье) и иногда на хабре.
Тогда почему вы считаете, что хоть кто-то хоть когда-то прислушается и присмотрится к вашей Temple OS… ой, извините, языку cine?

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

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

Я не зря столько раз произносил слово «продать» при общении с вами. Тот факт, что «рынок» языков программирования не совсем обычен — ничего не меняет, по большому счёту.

В современном мире типичная цена языка программирования — нуль. Есть языки, за которые нужно платить денег (в основном старые, с которым люди уже «срослись» и готовы за них платить), есть такие, за использование которых платят (иногда даже и «по-настоящему», но чаще — путём вкладывания денег в разные конференции и маркетинговую литературу), так что язык, который не стоит ничего… это, на самом деле, довольно-таки дорогое предложение.

Соотвественно если вы кого-то хотите им заинтересовать — нужно в него вкладываться. Статья на Хабре и блог — это, как бы, уже не так плохо… но это ставит ваш язык в один ряд с тысячами других, подобных… ну и почему, как вы считаете, кто-то захочет посмотреть на именно ваше творение, а не, скажем творение DeuterideLitium6 или Pavia00?

В этом мире прежде чем начать чем то заниматься — нужно прочитать теорию по маркетингу и рынку. Занимает не так много времени. Это покажет индустрию с другой стороны, многие вещи станут очевидными.

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


Чувствуется, что cine это Детище. Родимое, дорогое, любимое. Как человек, поздно зашедший в карьеру из-за гигантских амбиций суъективного характера (и тоже много лет поработавший в процессе личной учёбы на низкоквалифицированных работах, испытавший и нищету, и депрессию), позволю себе это прокомментировать. Возможно, я ошибаюсь, но после прочтения статьи отнюдь не очевидно, что Вы работаете программистом и нормально зарабатываете. Если не ошибаюсь, то очень рекомендую потратить Х времени на среднестатистическую карьеру программиста. Тем более, что по сложившемуся впечатлению, Вам легко доступна карьера выше среднестатистической. Потому что нормальная зарплата, какими бы мы ни были идеалистами, обеспечивает материальный комфорт и фундамент душевного спокойствия. Я сейчас как раз в этой фазе, и подпишусь обеими руками. Что касается Детища, то ничего, если оно подождёт. Вы важнее любого языка программирования, в том числе и Вами созданного. Осмелюсь даже сказать, что ничего страшного, даже если Детище никогда не взлетит. Главное, чтобы для Вас, живого человека, жизнь была, наконец, жизнью, а не огнём, водой и медными трубами. Тем более, что, судя по Вашим скиллам в самомотивации, Вы уже из комфортной карьеры найдёте как прицепиться если не к разработке нового языка, то к радикальному улучшению уже существующего, с опытом и наработками из Детища. В самом худшем случае Ваши идеи (в смысле, Ваш язык) не найдут общественного признания. Лично я считаю, что это не страшно — кто сказал, что всё, аутентично найденное самостоятельно, непременно должно признаваться обществом? Их истинная ценность это то, что делает Вас тем, кто Вы есть. Ровно так же я решил для себя: докарьерные наработки будут моим личным активом, который буду пересматривать и допиливать по мере возможности и личного развития. Если когда-нибудь выстрелит — ок, если нет — тоже хорошо, ведь главное, что с ними я стал лучшей версией самого себя в своих же глазах.


Как бы там ни было, успеха!

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

Я подумываю попробовать стать go backend разработчиком, знания и небольшой опыт go имеется(компилятор cine я переписывал с go + некогда были написаны несколько программ).
Как бы там ни было, успеха!

Спасибо за приятный комментарий.

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


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

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

Как было замечено выше, если бы цель была получить работу — работа бы уже была.
Цель была, работу не смог найти(не все попытки указаны в статье).
Здесь амбиции.
Какие? Это тролинг?
Автор решил сделать один большой шаг. Но чем длиннее шаг — тем выше шанс сделать шаг в направлении которое не матчится с рынком. Чтобы сделать что то полезное для рынка — нужно быть участником рынка, а не наблюдателем.

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

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


Для чего вам этот инструмент? Для чего вы его используете?

Зачем этому ремесленнику идти в город и рассказывать всем о своем инструменте?

Потому, что мой инструмент в миллион раз сложнее лопаты и его нужно совершенствовать, а один в поле не воин.
Для чего вам этот инструмент? Для чего вы его используете?

Для разработки.
Потому, что мой инструмент в миллион раз сложнее лопаты и его нужно совершенствовать
Но погодите — зачем совершенствовать именно его? В мире есть масса других инструментов, которые можно бы поусовершенстсовать…

Для разработки.
Для разработчи чего, извините?

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

Когда Давид Ханссон сказал «у меня есть классный способ разрабатывать web-сайты, быстрее и удобнее, чем другие — но нужно изучить Ruby»… это было понятно: разрабатывать web-сайты — это нужно, а если, потратив время на изучение Ruby, это можно делать быстрее — так это клёво… может быть изучение Ruby и окупится…

У вас же есть две задачи: улучшение языка и использование этого языка для улучшения языка. Ни одна из них не является проблемой, которую люди хотели бы решить, уж извините…
Но погодите — зачем совершенствовать именно его? В мире есть масса других инструментов, которые можно бы поусовершенстсовать…
С удовольствием занялся бы этим, если бы изначально был совместимый для моих целей инструмент. Его не было (или я не знаю о таком) — пришлось делать свой.
Для разработчи чего, извините?
Компьютерных программ.
Понимаете — у вас так получается, что у вас есть инструмент, который используется для разработки этого самого инструмента…
Это инструмент не единственный, это единственный который я опубликовал в интернете. А сколько интересных идей у меня в голове сидит.
у меня есть классный способ разрабатывать web-сайты, быстрее и удобнее, чем другие — но нужно изучить Ruby
Я уверен, что ему тоже многие говорили, что за чем ты это делаешь есть же «любой другой язык»? Зачем ты велосипеды изобретаешь?
У вас же есть две задачи: улучшение языка и использование этого языка для улучшения языка.
Ваши домыслы, не более.
Зачем вы тратите время отвечая на такие стандартные вопросы?
Ты никогда не пройдёшь свой путь до конца, если будешь останавливаться, чтобы бросить камень в каждую тявкающую собаку.

Или отдыхаете так от разработки?
Или отдыхаете так от разработки?
Нет. Просто было 75 новых комментариев, а в ЛС пришло письмо об орфографической ошибке, открыв статью для исправления ошибки — я автоматически сбросил счётчик новых сообщений, для ответа (при необходимости) на новые комментарии мне нужно пролистать полностью все комментарии (теперь я понял насколько божественна система на linux.org.ru, когда все комментарии идут подряд без ветвлений). Для нахождения всех новых комментариев мне нужно много времени, нашёл я время только спустя 2 недели, но раз я уже сел отвечать — ответил на все, даже на те на которые стоило бы не отвечать.
Не хотите забивать ящик сообщениями о новых комментариях?
Для разработки.

Вы понимаете, что вы юлите не перед нами, а перед самим собой. Если вы сами не знаете зачем он вам нужен — как же вы объясните другим людям — зачем им этот инструмент?


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

Вы понимаете, что вы юлите не перед нами, а перед самим собой.
Не юлю, а не хочу отвечать полноценно на глупые вопросы.
Если вы сами не знаете зачем он вам нужен
Вы статью хоть читали?
как же вы объясните другим людям — зачем им этот инструмент?
Этот инструмент для решения моих проблем в разработке. Я уверен что раз проблема есть у меня — она есть и у других. Не говоря о том, что заинтересованные уже нашлись.
Если он вам нужен для обучения и оттачивания скилов, либо потешить свою любознательность
Не нужно гадать — почитайте статью и комментарии.
значит продукт вашей деятельности нужен только вам.
Повторюсь, уже нашлись заинтересованные лица.
Что касается Детища, то ничего, если оно подождёт.
Мы ж можем умереть в любой момент и не успеть оставить после себя ничего.

Буду исходить из того, что это не тонкий подкол (или всё же?...).


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


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


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

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

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

А само это "извне" есть?


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

Всё же бессмертие это не "намного дольше" а бесконечно дольше. Но вне зависимости от этого, странный, имхо, аргумент. Как может человеку быть "холодно" или "жарко" от того, что что-то живёт после него, если он сам мёртв? Единственный вариант (подскажите, если есть ещё), чтобы ему, возможно, было не всё равно — это наличие жизни после смерти. Тем не менее, такие аргументы иногда прилетают от людей, которые убеждены, что после смерти ничего нет.


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


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

Традиция уважения к родителям и, в общем случае, к предкам, насколько мне известно, восходит к религиозным предписаниям. Хотя в уважении к родителям и старшим есть и рациональный аспект: так поддерживается структура общества, при которой более опытные и мудрые пользуются авторитетом и могут направлять молодые горячие головы в конструктивное русло. Впрочем, трудиться и что-то производить для цивилизации можно и по разным другим причинам. Но что-то мне подсказывает, что в "можем умереть и не оставить после себя ничего" имелось в виду "можем не оставить после себя чего-то такого, чтобы много-много людей долго-долго нами восхищались".

«можем не оставить после себя чего-то такого, чтобы много-много людей долго-долго нами восхищались»

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

Иногда чувствую себя инопланетянином. :)


да мы такие, социальные существа, которым важен статус, уважение, оценённость

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


Статус, уважение, оценка окружающих почему-то мне безразличны, пока не угрожают вышеназванному.


Ну, в общем, думаю, что понял. "Можем умереть и не оставить после себя ничего" это аргумент не к разуму (как я ошибочно подумал), а к эмоциям. У меня нет на это отклика, ну и ладно. Спасибо за разъяснение!

Отвечал так за автора, т.к. по тексту ему явно важнее всего его идеи.
Я тоже недавно так же горел идеями и хотел улучшить мир, пока мне не прострелили колено не надоело годами не видеть результата и работать в неприятных мне работах. Теперь, стиснув зубы, выбираю из идей только те, которые можно коммерциализировать, чтобы обрести «личное пространство, душевный и физический комфорт».
Теперь, стиснув зубы, выбираю из идей только те, которые можно коммерциализировать, чтобы обрести «личное пространство, душевный и физический комфорт».
Не обязательно только те, которые можно коммерциализировать. Это уж совсем другая крайность.

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

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

К сожалению у очень многих изобретателей подход к их Детещу совсем иной: я такую, такую, ТАКУЮ вещь сделал — а её никто не ценит… но я им докажу!

Обычно кончается это потерянными годами и, в особо запущенных случаях, смертью (как у пресловутой TempleOS).
Не очень понял, что вы имели в виду, но я не выкидываю «некоммерческие» идеи и буду реализовывать их как только появится «свобода».
Отвечал так за автора, т.к. по тексту ему явно важнее всего его идеи.

Ну… он прямо написал:


Я подумываю попробовать стать go backend разработчиком, знания и небольшой опыт go имеется(компилятор cine я переписывал с go + некогда были написаны несколько программ).

Человек явно понимает, что неплохо бы балансировать, чтобы не закончиться раньше воплощения своих идей. Да, есть сильные амбиции, но очень непохоже, что есть мания.


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

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


Что ж, пожелаю финансовой независимости себе, Вам, автору и всем по-хорошему амбициозным людям, амбиции которых вне монетизации.

UFO just landed and posted this here
UFO just landed and posted this here
Потому что иначе ваша жизнь не имеет никаких сайд-эффектов, а неимеющие сайд-эффектов вещи можно не вычислять.

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


И что это, кстати, за вычислитель? В рамках какой онтологии Ваш аргумент рационален?


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

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

UFO just landed and posted this here
Хотя, казалось бы, диплёрнинг на человеческую жизнь влияет больше, чем доказанная strong normalization theorem для ещё одной системы типов.

Вот не уверен, шума конечно от диплёрнинга больше, но вот если будет какой-то формально доказаный язык и на нём будут писать надёжные системы для медицины, АЭС, самолётов, космолётов и прочих, пользы будет намного больше, но не очень заметной для непосвящённых.
UFO just landed and posted this here
Потому что иначе ваша жизнь не имеет никаких сайд-эффектов, а неимеющие сайд-эффектов вещи можно не вычислять.

Я сам себе этот вычислитель.

И вот тут я потерял видимость понимания, что в Вашей терминологии значит "вычислять жизнь". В связи с остальным контекстом осторожно предположу, что "вспоминать прошлое". Подтверждаете?

UFO just landed and posted this here
Аргумент рационален в рамках заботы о себе будущем.

Попробую своими словами сформулировать Ваш аргумент, как я его понял.


  1. Человек периодически вспоминает о своём прошлом ("вычисляет жизнь"?..), в частности, в старости.
  2. Если он за уже прошедшую жизнь ничего существенного, со своей же точки зрения, не сделал, то и вспоминать своё прошлое ему будет неинтересно.
  3. Если человеку приятно вспоминать о своём прошлом, то до сего момента жизнь прожита не зря, так сказать, "можно вычислять".
  4. Таким образом, чтобы не было "больно за потерянные годы", разумно делать что-то хорошее и значительное со своей точки зрения. И чем оно будет значительней, тем "вкусней" для вспоминания будет прошлое, а следовательно, и настоящее.

Примерно так?

UFO just landed and posted this here
Мысли «я чё-т хренью какой-то по жизни занимаюсь, бессмысленная она у меня и бестолковая» догоняют уже сейчас, а мне всего 28. Что же дальше будет?

Соболезную, you are the Chosen One. Это я к тому, что смысл жизни, если не появляется спонтанно и не помещается полностью в чём-то вроде детей, ресурс редкий и добывать его бывает трудно. Конечно, если, скажем, сесть на иголку, то жизнь осмыслится сразу, но очень ненадолго. Развлечений тоже надолго не хватает, если только не подсесть серьёзно, что часто чревато похлеще, чем иголка. Однако, есть такое впечатление, что люди в массе не особо парятся о смысле. Он как-то автоматически распределяется на семью, работу, бытовуху, нехитрое хобби, вроде рыбалки, и прокрастинацию. По моим нерепрезентативным наблюдениям люди, серьёзно ищущие смысл вне вышеперечисленного, либо "уходят в монастырь/секту", либо являются аномалией.


К сожалению, не могу подсказать, что будет дальше, т.к. в своё время, отслужив, сосредоточился именно на смысле, на дофига лет. Занялся профессиональной карьерой уже когда совсем припёрло. Слава Богу, так вышло, что предварительные поиски смысла помогли мне и с карьерой, а профессиональный опыт частично помогает двигаться в сторону смысла. В этом мне просто безумно везёт. Жаль лишь, что жизнь слишком короткая… Есть и побочки: самые интересные темы никому вокруг абсолютно не интересны, а если интересны, то чисто гипотетически, потому что без очень специфического бэкграунда там делать нечего. Создание семьи сначала отодвигалось чисто ради смысла, а теперь ради обретения хорошей финансовой стабильности, чтобы не попасть в ад бытовухи. В общем, метафорическая палка с двумя концами.


Что-то занесло меня, вопрос-то явно риторический. Закрываю свой фонтан. )


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

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

Что ж, лично я не способен оценить, почему критерий и DL это хрень и ерунда, а формализация Haskell это интересно — не занимался пока толком ни тем, ни другим. Haskell, кстати, давно уже маячит, только меня от него всё время отбрасывает то в лямбда-исчисление, то в теорию типов, то категорий. Собственно, после теории множеств эти господа на очереди. А Вам искренне желаю успеха! В новом году и вообще.

UFO just landed and posted this here

А ещё был TR-DOSовский magic button, добавляющий возможность сохранения хоть куда.

Ез всех игр которые мне нравились, такая возможность была только у laser squad(эх сколько времени я на неё потратил, больше только на lode runner).

Грустная story, есть в ней что-то от поверженного демона Врубеля...

Впечатлён вашей историей. Сам пережил в юности ощущения, подобные вашим, и магия рождения исполняемого файла из пены исходников когда-то заставила приняться за собственный компилятор. Как и вы, восхищался Паскалем, недоумевал по поводу C и мечтал об «идеальном языке». Понятие «идеальности» со временем трансформировалось, теперь самым близким к идеалу кажется Go, так что мой Паскаль постепенно стал приобретать его привкус. Однако самое большое удовольствие я находил в том, чтобы каждый байт моего компилятора был мне как родной, поэтому я с самого начала рассматривал компиляцию только в машинный код — без LLVM IR, C и ассемблера. Я смотрю на свою работу только как на любительскую и потому готов простить себе весьма скверный уровень оптимизации.

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

Удачи вам!
Однако самое большое удовольствие я находил в том, чтобы каждый байт моего компилятора был мне как родной, поэтому я с самого начала рассматривал компиляцию только в машинный код — без LLVM IR, C и ассемблера.
Увы, ваше время ушло. Когда-то этот подход позволил Андерсу Хейлсбергу сделать компилятор и редактор, которые могли на машинке со всего-навсего 64KiB памяти редактировать и компилировать программы без необходимости даже использования дискет… но в сегодняшнем мире — это просто не нужно.
В своё время Бертран Расселл говорил о ценности философии: философия нужна не человечеству — философия нужна человеку. К хобби-проектам применимо то же самое. Чтобы преподнести человечеству что-то полезное из области IT, придётся первым делом освоить массу готовых библиотек и фреймворков: если это компиляторы — то LLVM, если игры — какой-нибудь Unity 3D, если нейросети — PyTorch или TensorFlow. Иначе продукт неконкурентоспособен. С течением времени эти библиотеки всё усложняются и дают всё меньше шансов прикоснуться к сути вещей. Я не занимаюсь разработкой игр, но, кажется, сейчас можно сделать игру с хорошей физикой, даже не понимая, что такое тензор инерции и как решать дифференциальные уравнения. А ведь потребность в понимании сути остаётся! Но это потребность конкретного человека, а не человечества — и вот этот человек берётся за свой «ненужный» проект. Не знаю, согласится ли со мной автор публикации (кажется, его амбиции простираются дальше), но моя мотивация всегда была именно такой.
Но это потребность конкретного человека, а не человечества — и вот этот человек берётся за свой «ненужный» проект. Не знаю, согласится ли со мной автор публикации (кажется, его амбиции простираются дальше), но моя мотивация всегда была именно такой.
Ну вот с вашей мотивацией я готов согласиться. Да и любой будет готов согласиться.

Сделать что-то своё, игрушечное, но «почти как настоящее» — лучший способ понять как в принципе подобные вещи делаются… и неважно что вы там разрабатываете: мини-компилятор или мини-фреймфорк для создания 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)… тоже нет.

Ну и кто тогда будет «первым заинтересованным пользователем»? И для чего он этот язык будет использовать?
Но вот получив такую штуку пытаться превратить её в что-то большое бессмысленно.
Зачем обязательно большое? Зачем вообще за этим гоняться? Сделал для себя, а дальше, если кому-то ещё пригодилось — отлично, если нет — ну и ладно.

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

Обучение, деньги, чсв и пр — это побочный профит.
Ну вот если рассматривать язык программирования именно так — то всё хорошо. «Я написал язычок-с, а вот он себя уже и компилирует-с, да я вообще крут! Ща подучу Flask (или Laravel или что там ещё) и пойду денег заработаю.» — это нормально.

А вот «да мой язык уже даже может сам себя компилировать — я ща как расскажу как я крут, так все про C++ и Rust забудут и будут моё изделие использовать» — это нет.
Ну вот есть у некоторых людей такая потребность.
А у некоторых — нет. Не стОит проецировать на всех.

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

Вы ошибаетесь.
Ну вот взгляните на историю создания Linux. Фактически первое же письмо обращается к довольно-таки большой аудитории (пользователи Minix) и предлагает им решение нескольких проблем, которые у них «поперёк горла» стоят: yes — it's free of any minix code, and it has a multi-threaded fs.

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

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

А я вижу и уверен, что и таких как вы и таких ка я — много.
Распространять программу в виде C файла? Ну, блин, всю жизнь мечтал прямо.

Я мечтал, а никто не делал. Я не стал отчаиваться и сделал сам.
А работа с SSE — вроде как планируется

Во первых не SSE, а SIMD. Там будет поддержка вплоть до AVX512, во вторых всё это есть уже сейчас, просто инструкции вставляет clang, но в некоторых алгоритмах он не справляется и мне нужно будет вставить их в ручную.
но что можно реально получить вот «прямо здесь и сейчас»… похоже не знает и сам автор…

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

Библиотеки написанные на си можно использовать хоть сейчас, просто они не попадают в пакет(но это планируется). Вот кстати цитата из статьи:
перспектива при необходимости использовать сторонние C библиотеки

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

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

Я с вами не соглашусь. Нас 7,7 миллиарда вы всерьёз верите, что в мире много людей с проблемой которой нет у хотя бы миллиона людей? И если один человек решит проблему для себя, его опыт может помочь решить проблемы значимой части человечества. Почитайте историю Джефа Безоса и о том как он создал Amazon, и если вы считаете, что Amazon не решает многих проблем значимой части человечества, то извените, но нам с вами не по пути.
Нас 7,7 миллиарда вы всерьёз верите, что в мире много людей с проблемой которой нет у хотя бы миллиона людей?
Разверните ваше утверждение: нас 7,7 миллиарда человек — вы всерьёз верите, что за проблему, которую решили попробовать решить вы — никто другой ещё не брался?

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

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

Почему? Да потому что у подавляющего большинства проблем есть «отличное решение»: забить. Ну просто проигнорировать и всё. Раскладка плохая? Ну и чёрт с ней, тратить год жизни на то, чтобы потом получить экономию в час каждый год — неразумно. SSE2 инструкции не используются? Ну и пофиг — я лучше подожду лишние полчаса, пока моя программа что-то там посчитает, чем потрачу год на то, чтобы её на полчаса ускорить… И так далее.

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

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

Почитайте историю Джефа Безоса и о том как он создал Amazon
Что именно я там должен увидеть? Безос увидел проблему, которую он может решить лучше, чем то, что было до Amazon: покупка книг, которые интересны конкретному человеку. Он отлично понимал, чем плохи существующие решения (стоимость аренды склада при магазине в центре города делает невыгодным хранение и продажу редких книг) и как Internet поможет её решить (книги можно доставлять из центрального склада по всей Америке и, тем самым, даже редкие книги будут приносить прибыль), он чётко понимал, что у него будет дикое количество конкурентов — и делал всё возможное, чтобы воспользовались его услугами, а не их…

Ну и где у вас вот это вот всё?
Разверните ваше утверждение: нас 7,7 миллиарда человек — вы всерьёз верите, что за проблему, которую решили попробовать решить вы — никто другой ещё не брался?
Может и брался, но я в свое время не нашёл никаких решений.
Ну и где у вас вот это вот всё?
Я не проецировал это на себя, а показывал что утверждение про то, что «если у человек есть проблема, то это его проблема а не человечества» — в корни не верна, а человек преподносит её так как будто это истина, хотя на самом деле — это его мнение, не больше.
Может и брался, но я в свое время не нашёл никаких решений.
Вы не поверите для какого количества разных проблем я получал тот же результат. Что обозначает, что и все люди, которые сталкивались с этой проблемой выбрали то же самое решение: «забить». А дальше — нужно подумать… а может быть для вас — это тоже будет оптимальным решением?

Вот какую лично вашу проблему решит тот факт, что cine задаёт какие-то вопросы при установке? Вам мало программ, которые это делают?

Я не проецировал это на себя, а показывал что утверждение про то, что «если у человек есть проблема, то это его проблема а не человечества» — в корни не верна, а человек преподносит её так как будто это истина, хотя на самом деле — это его мнение, не больше.
Не знаю что вы там понимали, но Безос — это как раз человек, который очень чётко понимает, что если никакому конкретному человеку решение проблемы не нужно — то человечеству в целом эту проблему решать не нужно тоже.
Вот какую лично вашу проблему решит тот факт, что cine задаёт какие-то вопросы при установке?

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

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

Опять 25. Безосу все говорили, что интернет магазины с доставкой на дом никому не нужны, но он продолжал делать свою работу. Никакому конкретному человеку его магазин не нужен был.
Я смогу выбирать, каким способом программа должна решать задачи.
Это проблема? Серьёзно?

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

Безосу все говорили, что интернет магазины с доставкой на дом никому не нужны, но он продолжал делать свою работу.
Нет. Ему говорили, что он не сможет заработать денег, потому что придёт B&N — и всё.

Речи о том, что заказ книг через Internet бессмысленен — не было в принципе.
Это проблема? Серьёзно?

Да серьёзно. У меня когда-то был очень слабый пк, pulseaudio работал очень медленно, alsa — летал, а мейнтрейдеры везде пихали pulseaudio. Тоже самое gstreamer и xine.
Потому что люди хотят, чтобы они это за них сделали.

Не все.
Не хотели бы — все бы пользовались Gentoo.

Gentoo не очень удобен, я пользовался раньше. Но выбирать какие технологии мне нужны — мне очень понравилось, в статье кстати и написанно что я эту идею у gentoo и позаимствовал.
Истории выдающихся деятелей, увы, слишком часто вводят в заблуждение: читатель вечно недооценивает степень исключительности этих историй. В истории Безоса (или Маска, или Джобса — кого угодно) не заложено никакого рецепта успеха, применимого для всех остальных. Безусловно, для успеха необходимо решение общезначимой проблемы. Однако если брать за ориентир самого себя, то очень легко ошибиться в оценке масштаба проблемы: касается ли она одного, или сотни, или миллиона человек? Известные лично мне неудачи стартапов были, в конце концов, связаны именно с этой ошибкой: проблему десятка человек воображали проблемой тысяч.

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

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

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

Ещё раз скажу, почитайте историю Безоса. Когда он начинал, все ему говорили, что это бред, что он дурью мается, что никому это кроме него самого не надо и проще сходить в ближайший магазин, чем заказывать через интернет. То есть общество не понимало проблемы, но теперь стало очевидно — это было проблемой.
Однако если брать за ориентир самого себя, то очень легко ошибиться в оценке масштаба проблемы: касается ли она одного, или сотни, или миллиона человек?
А чем я рискую пробуя? Разрабатывать свой язык в серьёзный ущерб своей жизни я начал только последние 1.5 года.
однако почти никто не заявил, что его проблема наконец решена
Никто особо и не может этого сказать, материалов по языку мало, чтобы заявить о том что проблема решена, нужно попробовать решение, а кроме меня пока язык толком никто не знает и попробовать его для того чтобы оценить решает он их проблемы или нет, никто пока особо не может. Но я как, человек который написал компилятор и стандартный модуль на cine, заявляю — решение которые я искал в других языках, в cine решены.
Нигде даже не было чётко сформулировано, что это за проблема

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

Ну на счёт этого я уже писал, это будет как DirectX, JVM, .Net Framework. Один раз поставил и всё работает.
Я не проецировал это на себя, а показывал что утверждение про то, что «если у человек есть проблема, то это его проблема а не человечества» — в корни не верна, а человек преподносит её так как будто это истина, хотя на самом деле — это его мнение, не больше.
Господи, откуда вы это высосали? Безос с самого начала решал проблему, которой у него не было (но была у некоего количества других людей) и отчётливо понимал, что если он не успеет предложить решение этой проблемы — то это сделает кто-то другой.

Полная противоположность тому, что делаете вы.

Ещё раз скажу, почитайте историю Безоса.
Вам тоже рекомендую. С чего он начал, обратили внимание? Ну когда его жена была водителем в поездке из Нью-Йорка в Сиэтл? Он продумывал дизайн веб-сайта? Или думал о том, где сервера разместить? Нет — он бизнес-план писал. Где было чётко написано — кто будет его клиентами, зачем они к нему придут и прочее.

Когда он начинал, все ему говорили, что это бред, что он дурью мается, что никому это кроме него самого не надо и проще сходить в ближайший магазин, чем заказывать через интернет.
И это было, до некоторой степени, правдой. Но, тем не менее, его неуверенность в бизнес-плане была не в этом. Цитата из вашей же, блин, книги:
Сайт был запущен 16 июля 1995 года, хотя на тот момент он не был до конца закончен: к примеру, на нем можно было заказать отрицательное количество книг. Безос мотивировал это необходимостью опередить конкурентов.
Вопрос был не в том — будут ли заказывать люди книги через Internet. Вопрос был: а успеет ли Безос раскрутить своё детище до того, как Barnes & Noble (и другие крупные ритейлеры) откроют подобный же сервис.

Кстати именно потому что он начал с бизнес-плана он прекрасно понимал, что денег на книгах — он не сделает… и с самого начала планировал расширение на другие товары.

Вообще всё что он делал — вертелось вокруг маркетинга… то есть того, о чём вы даже думать не хотите.

А чем я рискую пробуя? Разрабатывать свой язык в серьёзный ущерб своей жизни я начал только последние 1.5 года.
Более интересный вопрос: а что вы планируете выиграть в случае успеха? 1.5 года — это большой кусок жизни. Не огромный, но большой. Если уж вы его вкладываете, то хотелось бы понять — чего хотите получить взамен… Безос целился в то, чтобы стать ни много ни мало, а конкурентом крупнейшим сетям, рыночная капитализация которых — миллиарды. За это явно стоило рискнуть побороться… тем более он знал, что через год-два «окно возможностей» захлопнется.

А чего планируете достичь вы? Даже если достигните успеха? Стоит оно нескольких лет вашей жизни?

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

Первые компиляторы, как бы, в машинных кодах писались, ибо других вариантов не было…

1 — программы не используют всех возможностей компьютера на котором они используются
А это проблема? Почему это проблема? Для кого это проблема? Сколько люди готовы за её решение готовы потратить усилий? Главное: может ли Cine дать им хоть что-то? У вас же даже бенчмарков нет, а ведь ваше решение отказаться от ссылок приведёт к тому, что многие программы будут, мягко говоря, неоптимальными.
2 — ссылки и указатели приводят к большому количеству ошибок.
Вот только решение этой задачи напрямую противоречит решению предыдущей задачи. Rust потратил невероятно много усилий, чтобы добиться некоего компромисса.

Проблему номер 2 решают также rust и haskell, но на мой взгляд: rust — черезчюр сложен и неудобен, а так же имеет плохо читаемый синтаксис(когда я вижу код написанный на rust, у меня начинают глаза болеть), в haskell мне всё нравится, но без заморочек с оптимизацией, на самом популярном компиляторе(ghc) не получается писать эффективные программы.
А с чего вы решили, что ваше творение позволит это сделать?

Ну на счёт этого я уже писал, это будет как DirectX, JVM, .Net Framework. Один раз поставил и всё работает.
Вот только во всех трёх случаях тот факт, что его нужно ставить создавал, в какой-то момент, очень серьёзную проблему: люди не хотели ничего ставить.

Во всех трёх случаях решением были миллиардные вливания и принудительная установка (вместе с браузерами, офисом и прочими продуктами).

Откуда вы на это собираетесь брать деньги?
Если он не со слишком сложного языка да ещё и неоптимизирующий?
Так он же «компилирует» в C. Уже компиляция получившегося C с большой вероятностью оптимизирует всё, что нужно.
Вот только во всех трёх случаях тот факт, что его нужно ставить создавал, в какой-то момент, очень серьёзную проблему: люди не хотели ничего ставить.
А тут ещё всё сложнее; нужно для установки иметь установленный тулкит автора, компилятор, наверняка какой-то набор lib* и *-dev. Не претендую на истинность, но опыт сборки отдельно взятого десктопного Qt-приложения показывает, что на Linux (и, думаю, так же будет BSD) всё будет достаточно просто; на Mac возможны отдельные проблемы (в том числе с brew); на Windows будут боль и мучения даже если приложению нужны несложные вещи вроде libxml, libssl,…
А тут ещё всё сложнее; нужно для установки иметь установленный тулкит автора
Нужен только clang, libc, fei. Всё остальное планируется поставлять в пакетах с программами, чтобы они были самодостаточными.
Не то, чтобы я поддерживал такой подход… но сейчас частенько используют webkit. Всякие там месседжеры, лаунчеры чего-либо, или для встроенной помощи/документации. В общем, я про подход а-ля Electron.
И что, получается, что долой системные библиотеки, пусть каждое приложения тянет исходники всего, что использует? Думаю, webkit будет ну очень долго собираться. Ну ок, давайте забудем про тот же Slack (который на Electron) – судя по википедии, Skype и Telegram используют Qt (который тоже долго собирается). Не думаю, что предкомпиляция в один большой C-файл заметно упростит и ускорит сборку на компьютере пользователя.
В общем, теперь уже и мне становится интересно, какую нишу, на Ваш взгляд, может занять cine/fei, и разработка каких приложений на нём не будет проблемой.
Безос с самого начала решал проблему, которой у него не было

Да, возможно меня ввело заблуждение видео на ютубе, пытаясь его найти я наткнулся на другие видео где это опровергается. У меня был другой очень хороший пример, и там 100% подходящая ситуация, но я никак его имя не могу вспомнить. Как вспомню напишу.
Более интересный вопрос: а что вы планируете выиграть в случае успеха?

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

А что ещё в жизни делать?
А вам не приходит в голову что компилятор — это, как бы, не самая сложная в мире вещь?
Зачем говорить очевидное?
Если он не со слишком сложного языка да ещё и неоптимизирующий?

Не подменяйте понятия, не слишком сложный язык — не значит, не сложный компилятор. Во первых не большие оптимизации есть, но да 90% оптимизаций делает clang, но я ОЧЕНЬ много изучал как и во что он оптимизирует и я специально делал так, чтобы генерируемый си код был «легкоусвояемый» для clang.
А это проблема? Почему это проблема? Для кого это проблема?

Это шутка такая, или вы меня троллите? Спросите у любого человека у которого есть компьютер, хочет ли он чтоб программы на его компьютере работали быстрее и использовали все возможности ПК?
У вас же даже бенчмарков нет
А в них сейчас и нет особого смысла, версия 0.1.
а ведь ваше решение отказаться от ссылок приведёт к тому, что многие программы будут, мягко говоря, неоптимальными.

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

Потому, что я знаю своё творение в лицо. Знаю что и как оно делает и знаю его потенциал.
Вот только во всех трёх случаях тот факт, что его нужно ставить создавал, в какой-то момент, очень серьёзную проблему: люди не хотели ничего ставить.

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

на таких сумасшедших инженерах и держится мир! удачи вам, даже если это просто хобби — всё равно это вдохновляющая история!

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

Я не совсем понял вашу метафору, но если вы имели в виду, что язык получился не очень, то вы пока не можете об этом судить. Хорошие знания этого языка в данный момент есть только у меня, на практике использовал его только я(переписав компилятор на cine). Разумеется я сужу предвзято, но мне язык очень понравился.
Прекрасная статья. Скажите, было трудно собраться со смелостью, что-бы рассказать об этом такому широкому кругу читателей?
Нет ни капли, мне наоборот хотелось поделиться. К тому же почитайте вот этот комментарий, то, что там перечисленно это 1/1000 плохих вещей которые со мной происходили, я давно ничего не боюсь.
Не всем дано это понять, и многие комментарии это подтверждают. Но то, что вы всё-таки написали эту статью, очень хорошо. «Имеющий уши, да услышит».
Когда я увидел на экране круг, я просто обомлел — это были непередаваемые ощущения.

Дочитав до этой строки, вспомнил себя :)
Выскажу своё никому не нужное мнение. Частично у меня есть нечто общее с автором с той лишь разницей, что я нахожу в себе силы вовремя остановиться. Сажусь писать что-то очень нужное, без чего вселенной ни куда (OpenCL реализацию нейронной сети) — через 2 года появляется нечто похожее, только гораздо лучше. Ок, выдыхаем, начинаем копать в другую сторону, благо идей полно. Год пишем нечто, в полной бесперспективности чего убеждаемся на деле (ага, торговый робот), выдыхаем, благодарим себя за бесценный опыт, двигаем дальше. Ну и непыльная работа, такая, чтобы сильно не мешала этим увлечениям, также присутствует.
Полагаю, что я в этом плане куда более распространённый типаж.

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

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

Это не цель моей жизни.
Вот. Похожая история с привкусом сожженных нервов. С другой стороны, понятно, почему в том числе люди готовы тратить столько времени на такие вещь-в-себе проекты: банально чтобы не чувствовать дерьма, которого им успели вылить в душу; эскапизм в IT-стиле и всё такое.

P.S. Можно на ваши проекты посмотреть?

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

И это, конечно же, тоже.
Так и представляю себе, как в голове у человека при мыслях о работе на кого-то всплывает образ деспота-отца, например. Невроз обеспечен.
«Как я 12 лет создавал свой ЯП и компилятор к нему» или «Как навязчивые идеи губят перспективы на будущее».

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

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

На последнем все же нужно тщательней составлять и проверять текст.

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

В данном случае, как мне кажется, к таким «безответным вопросам» относится как статья в целом, так и вопросы к ней. Хорошего кода!
Меня чутка смущает (потому что не понимаю) ваше нежелание устроиться на удаленную работу за 500-1К баксов, где надо программировать какие-то полезные для кого-то вещи. Будь то анализ данных, блохчейны, написание драйверов или шейдеров, или что-то ещё. В таком случае вы и кругозор значительно расширите, и из предметной области не будете далеко выходить, и график работы для себя комфортный сделаете, да и просто жизненный уровень поднять сможете (если оно вам хочется).
Вы читали статью? Я буду очень рад устроиться хоть на какую работу программистом, но на некоторые я претендовать не могу, а те на которые могу — мне отказывают с порога.

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

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

Вы плохо читали статью, я пытался устроится на должность Junior Haskell Developer, всем указанным требованиям я соответствовал, но меня послали с порога. А теперь скажу то, что не написано в статье, я бы и на 400$ пошёл. Если вы считаете, что Junior Haskell Developer должен получать меньше — тогда да, у меня были завышенные требования.

Почему не пошли на что то другое, что более востребовано на рынке?

Автору, спасибо что поделились. Писать код вечерами, разбираясь в LLVM и лямбда-функциях, а днем работать грузчиком — это сильно.

Раз уж вы поделились с общественностью, наверно ждете фидбек. Напишу и свой.
У меня для вас две новости — хорошая и плохая. С какой начать? Пожалуй с плохой.

Плохая новость: новый язык программирования сейчас никому не нужен. Вообще. Их уже и так столько, что даже профессиональные программисты знают дай бог 5% от имеющихся языков. Ценность любого языка — в кодовой базе, наличии примеров, библиотек, готовых решений. Если у вас бюджет как у гугла и сотни программистов-олимпиадников, пишущих под новый язык — тогда на этот рынок можно войти. А так, с нуля, просто без шансов. Для серьезной математики сейчас используют вычисления на видеокартах или облачные сервисы, и просто еще один язык (даже если он по мнению автора, заточен под «высокую производительность»), просто никому не нужен — на видеокарте с 1000 ядер оно все равно в разы быстрее будет. Изучать кому-то новый синтаксис нигде не используемого языка? Извините, без шансов.

Хорошая новость: время потрачено не зря, у вас уже сейчас фактически 12-летний опыт программирования, и даже несмотря на отсутствие «вышки» и записей в резюме, вы вполне сможете устроиться джуниором (или даже не-джуниором) на программиста. Ваш проект на гитхабе тут как раз пригодится, если покажете как все работает, и если это действительно работает, то проблем с трудоустройством не будет. Вы уже прямо сейчас реально можете перейти с зарплаты 200$ на 800-1000$, и это будет совсем другой уровень жизни. Целеустремленности вам не занимать, как и раньше, отложите все дела на 3-5 месяцев, подкачайте теорию и всякие там задачки про гномиков и занимайтесь только трудоустройством и рассылкой резюме. Даже если нет возможности уйти с работы, создайте CV (подробно расскажите в нем о используемых языках и технологиях) и рассылайте его по разным вакансиям хотя бы раз в неделю, это займет не больше 10 минут в день.

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

Удачи.
100% уверен что вы будете хорошим программистом, тут надо просто свои комплексы перебороть и таки устроиться на постоянную работу.
UFO just landed and posted this here
Плохая новость: новый язык программирования сейчас никому не нужен. Вообще. Их уже и так столько, что даже профессиональные программисты знают дай бог 5% от имеющихся языков. Ценность любого языка — в кодовой базе, наличии примеров, библиотек, готовых решений.
Да? Я вот например, релиз JAI жду очень даже. Тем более, что у него интероп с C. Но он и затачивается изначально примерно под то, чем я занимаюсь.
UFO just landed and posted this here

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

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

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

Экстросенсорика зашкаливает, определение характера через монитор. Я cine закончил недавно и всю жизнь использовал другие языки. Мои предпочтения: haskell, go.
Что в прочем, объясняет почему он пошел на низко квалифицированный труд
С удовольствие пошёл бы на высоко квалифицированный труд — не берут, сто раз пытался.
просто потому что там нет конкуренции за то что он действительно ценит.
Ну ка, проверим диванно-экстрасеннсорные способности: Что я действительно ценю?
С удовольствие пошёл бы на высоко квалифицированный труд — не берут, сто раз пытался.

Вы сейчас серьезно или просто дурака валяете? Работы на рынке полно — в прямейшем смысле этого слова. Хочешь верстка, хочешь — QA, хочешь удаленно, хочешь в офисе. Есть HR который тебя пристроит на аутсорс. Все относится к IT и можно постепенно мигрировать в то что хочется. Вопрос вам: почему другим удается найти работу в 30, 40, 50 лет, а вам нет? Может быть вы просто не хочете делать то, к чему не привыкли?

Работы на рынке полно — в прямейшем смысле этого слова.

Полно, а меня всё равно не брали.
опрос вам: почему другим удается найти работу в 30, 40, 50 лет, а вам нет?

Потому что у меня было 13 работ, потому что я работал грузчиком. потому что у меня не высшего образования. У других нет такого комбо.
потому что у меня не высшего образования

Вторично.
Я диплом по моему не разу так и не показывал.
И начиная с третьей работы про вышку даже и не заикались.
Можете просто соврать.
Объективно — программисту вышка не нужна, за исключением очень специфических направлений на которых работают доли процента программистов.
Как вы читаете статьи? Автор 10 раз говорил, что рад был поработать программером, но без образования в его глубинке никуда не взяли, поэтому пришлось работать грузчиком

Читаю вполне подробно. Я знаком с парой людей изначально не из IT и наблюдал как они приходили в программирование. Мое мнение — было бы желание, а способ найдется. Более того — сам автор был в Минске где квалифицированную работу уж точно можно найти. Мне кажется, автор просто не согласен на какую то начальную работу в сфере IT. Ему хочется чтобы сразу была работа на Haskel или Go. Но дело в том, что сначала нужно чем то простым заниматься, за пару лет обрасти опытом и спокойно пробовать искать желаемое.

Компилятор cine написан на cine?
Автор снимаю шляпу, но зачем вы написали эту статью? Вы же пожалуй достигли просветления?

А почему не поделиться с людьми хорошей историей? :)
Несмотря на длительный период разработки, вы создали свой аккаунт на гитхабе только 15 декабря 2019 года. Почему не раньше?
Вы не думали о том, чтобы переехать в Минск и поработать С++ разработчиком или девопсом?
Несмотря на длительный период разработки, вы создали свой аккаунт на гитхабе только 15 декабря 2019 года. Почему не раньше?

Незачем было, ведь я один занимался разработкой.
Вы не думали о том, чтобы переехать в Минск и поработать С++ разработчиком или девопсом?

В статья указанно, что я жил в Минске и в том числе пытался устроиться на работу.
На Хабре есть возможность указать кошельки Вебмани и Яндекс.Деньги, чтобы получать пожертвования. Читая про ваши мытарства так и хочется задонатить.
Хабр позволяет добавить: WEB Money, Яндекс Деньги, PayPal. В Беларуси можно открыть WEB Money только в белорусских рублях, кидать туда с российских кошельков — нельзя. Для того, что бы принимать деньги в Яндекс Деньгах нужно быть гражданином РФ, PayPal в Беларуси вообще ни как нельзя использовать. Сразу скажу, что все три валюты я в своё время пытался использовать. Единственное, что нормально можно использовать в Беларуси — Bitcoin. Его не запрещено хранить, его можно принимать физическим лицам, но запрещено юридическим, за исключением членов парка ПВТ. Если что, то вот — bc1qlc0q4heksc7etuyukdz5ts3u6cnd3uzsdt2d0w.
Напишите кошелёк в профиле. Может у кого найдутся.

я из РБ, в Минске вам нужно просто верифицировать кошелек в ЯДеньгах, у яндекса офис на немиге, съездите с паспортом.После чего можно принимать RUB, снимать в местных банкоматах BYN

Один студент в Англии решил экономить на еде. Купил мешок овсянки и ей питался. Заболел цингой (первый случай в Англии со времён войны)!
Теорию категорий попробуйте поучить по моему учебнику
github.com/George66/Textbook
Спасибо, в свободное время посмотрю.

Кстати интересно, а llvm bitcode разве не решает эту же проблему с simd?
Я уже не говорю про wasm даже

Нет. Автор вообще, похоже, не представляет какие проблемы возникают при использовании 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 оптимизирован, то ещё и замедление, по итогу, может случиться!).
Нет. Автор вообще, похоже, не представляет какие проблемы возникают при использовании SIMD и почему люди не делают того, что он предлагает (но пока не делает).

Вообщето я работал с ними, и в учебниках по которым я изучал sse2 были указаны многие проблемы. Но мне не нужно о них беспокоиться, поскольку я не буду вставлять ассемблерные вставки с SIMD инструкциями, а буду использовать атрибут vector_size из clang, который позволяет создать тип который является вектором и с ним можно работать как с обычным числом, но если у процессора есть инструкция которая позволяет ускорить работу с эти вектором, то он её ускоряет, а если нет, просто традиционным способом исполняет код, без SIMD инструкций.
понадеяться, что вам его компилятор как-нибудь да соптимизирует.

Я очень много времени потратил проверяя, какой код будет оптимизирован, а какой нет. Я не надеюсь — я знаю.
ведь включение AVX512 сегодня ещё и частоту процессора снижает автоматом

А вот это не знал, возможно ограничиваюсь использованием AVX2
Кстати интересно, а llvm bitcode разве не решает эту же проблему с simd?

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

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


Я иногда читаю описания языков из 50х-60х, тогда присваивания данных было чем-то новым и непонятным, как и циклы :) и я верю что эволюция языков, в текущем виде, не остановится.

Я иногда читаю описания языков из 50х-60х, тогда присваивания данных было чем-то новым и непонятным, как и циклы :) и я верю что эволюция языков, в текущем виде, не остановится.
Нет, конечно. Но для исследовательстких языков, вы не поверите, нужны исследователи. А для этого нужны не новые идеи в языке, а, как ни прискорбно, научные публикации. И тут с бэкраундом «работает грузчиков, а в свободное от работы время пописывает свой язык» вряд ли кого-то удастся заинтересовать.

Даже если интересные идеи в языке есть — про них никто не узнает…

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

Я каждый будний день имею дело с исследователями. И уж никак не склонен идеализировать их способности, они такиеже люди. Я даже типичного ПШД могу по стилю кодирования узнать. Между 15 годами практики программирования и 15 годами теории лежит труднопреодолимая пропасть, как между разными религиями.
А для изменения мира нужны не научные публикации, а школа последователей. И индекс цитируемости её не создаст.

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

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

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

Создание TempleOS и выкладываение её на всеобщее обозрение, увы, к успеху не ведёт… даже если она реально содержит что-то интересное — на неё, скорее всего, никто смотреть не будет…
Поиск по гитхабу отлично работает. И да, я часто забредаю в проекты, о которых можно подумать что никто не знает. Например какая то редкая и недокументированная АПИ функция и тут находится какой нибудь единственный проект который показывает как ею пользоваться. Или алгоритм обработки данных радаров подповерхностного зондирования. Или алгоритм с доступной лицензией который позволяет мержить цепочки ДНК. Или дизассемблер недокументированных команд процессора\етц. И да, возможно автор даже не забросил проект, а просто умер, но пропахав почву есть шанс что его проект станет фундаментом чего то нового и револючионного, и произойдет это на год или на 10 лет раньше, чем без его трудов.
Я думаю через несколько часов ссылка на эту статью появится на dev.by и автору предложат работу.
Главное, чтобы он согласился.
Приятнее допиливать свой язык, когда у тебя полный холодильник.
Я, конечно, не показатель, но, боюсь, я бы не рискнул взять его на ответственную хорошо оплачиваемую работу, подразумевающую конкретный результат в установленные сроки.
Слишком уж он увлечен своими идеями. Придется постоянно контролировать и заставлять, чтобы делал то, что нужно, а не то, что хочет. И не факт, что получится.
Вот если кому-то удастся его заинтересовать каким-то своим проектом, чтобы он теперь этот новый проект как свое Детище начал воспринимать — тогда да, было бы офигенно.
Есть много кейсов в которых можно встроить автора с пользой для конторы. Единственное, что в Беларуси сначала проверяют английский, а потом уже смотрят резюме. Но в таком случае можно пойти на конторы, работающие на российский рынок. Они хоть похуже платят, но в любом случае будет какой-никакой опыт, общение с коллегами, да и зп будет выше чем грузчиком.
Придется постоянно контролировать и заставлять, чтобы делал то, что нужно, а не то, что хочет.
Ну не знаю. Вроде автору почти всё время приходилось работать, чтобы иметь возможность заниматься своим pet-проектом. Не думаю, что для него будет проблемой, если на основной работе он будет программистом, а не грузчиком или контролёром на КПП.
Меня смущало, что работа грузчиком — не конкуренция пет-проекту. Грузишь и грузишь.
А когда кнопки под руками — это сильный отвлекающий фактор и погуглить на свою тему и все такое.
Но да, вполне возможно, что вы правы. И тогда все намного лучше.
Мне один человек уже предложил прислать резюме, что бы обсудить работу, но пока ничего конкретного.
Посмотрел на исходники по диагонали. Простой? Я что-то не заметил, во обще не понял как он работает. Какие преимущества перед другими ЯП? Не понятно.
Вот я тут тоже решил свой ЯП замутить, очень простой, рабочие название HLMASM (High Level Macro ASseMbler), транслятор в низкий асм. Основа, ассемблер MASM, точней UASM. В этих ЯП есть высокоуровневые конструкции, .if, .while, invoke, в UASM есть ещё .for, .switch и т.д. В общем, надо довести эти конструкции до полноценного ЯП вроде Си, поддержка типов указателей, наследования классов, соответственно виртуальные функции ну и так далее. Всё, чтобы программирования на ассемблере, было бы таким же лёгким как на Си. Да, есть похожие ЯП, например С-- Сфинкс(занимает промежуточное положение между ассемблером и Си), но это не то, там проще сразу стандартный Си использовать. Синтаксис должен ближе с ассемблеру, а не собственно к Си.
по диагонали

Ясно. Продолжайте.
Простой?

Да, я в свой время работал со следующими языками:
Asm, C, Pascal, Go, Haskell, Python, JavaScript, Java(совсем мало), Delphi.
И из всех перечисленных — он самый простой.
Вот я тут тоже решил свой ЯП замутить, очень простой, рабочие название HLMASM

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

Вообще, созданный язык — это прекрасная строчка в резюме. Равно как и языки, которые вы знаете.
Это очень сильно облегчит поиск работы программистом.

Что касается самого языка — да, путь у него тернистый и легче не будет.
Что необходимо сделать — дать описание языка(туториал) и примеры. Без этого никуда.
А поскольку шансы языка взлететь близки к 0 (мы живём в эру переизбытка информации), лучше открыть код под какой-либо свободной лицензией, типа MIT, CC,… (смотрю вы уже это успели), может быть кто-то чем-то да воспользуется.
Что необходимо сделать — дать описание языка(туториал) и примеры. Без этого никуда.

Уже делаю.

Эту бы энергию, да в мирное русло… ЯП — это ж инструмент. Вот захотелось производительности, использования всяких там инструкций… А зачем? Для каких задач? Игры, научные вычисления, хайлоад? Никто не придет за фичами диковинного языка, если не доказана их пригодность и профитность на практике. Потому что людям некогда, они задачи решают тем, что уже есть и проверено. Вот только если припрет, ищется новый подход.
Инструмент, пусть самый красивый, без использования — бесполезная игрушка, арт-объект. В статье мелькало "чтобы жизнь была прожита не зря" — сам по себе написанный язык за, прости господи, 12 лет — это, скорее, зря. Вот был бы, например, какой-то проект вычислительноёмкий, для которого по ходу дела запилили язык, и оттуда пошло-поехало по статьям и коммьюнити, тогда понятны польза и вклад.
Прийти в существующий проект с вкладом на своем языке — так никто в здравом уме не примет, это же невозможно поддерживать. Потому что помимо скорости вычислений есть еще факторы.

Я уже который комментарий читаю, в котором человек явно не читал статью. Там не только производительность. Почитайте статью и желательно комментарии, в некоторых из них, некоторые моменты разжёваны гораздо подробнее.
У самурая нет цели, только путь
А есть исходники этого чуда где-нибудь в гитхабе? При условии, что у него будет открытая лицензия, есть вероятность найти массу энтузиастов и допилить проект до релиза. Как знать, может быть, он станет новым специальным языком программирования (наряду с Go, например). Почему нет? Все языки однажды начинались с чего-то такого.

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

А есть исходники этого чуда где-нибудь в гитхабе?

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

Я это прекрасно понимаю.
Автор конечно силен, но, при прочтении возникла мысль «как же хорошо, что я начал свою карьеру в вебе, и сразу делал какие-то свои сайты для людей (в смысле не на заказ, а просто для посетителей)» — этот путь довольно быстро позволил понимать что нужно пользователям (точнее понимать как понимать что нужно пользователям) и реализовывать именно это, а не витать где-то в облаках абстрактных нулей и единиц.
Несколько фактов:
1. Работаю программистом с 16 лет в России (с 1996г.) Не разу не встретил трудностей при трудоустройстве программистом.
2. Программистом в 2000х было быть вообще круто. Даже в армии ты был пристроен в штаб. Уже молчу про связи, которые тогда формировались;
3. Без высшего образования достиг уровня Head of IT к 2009г в иностранной (крупной) конторе. После чего понял, что это не то, что я хочу.
4. Встретил огромное количество успешных спецов из Беларуси без высшего образования. А также с высшим. В одних коллективах. Хорошо всем известная EPAM не зря там развернулась. Очень сильная школа ИТ.
5. Крипта в Беларуси не то, что развита… я бы сказал, что весьма и весьма развита. Я лично работал с ребятами которые запилили свою биржу, майнера и т.п. создав экосистему.
6. Большое количество народа в Беларуси работает на Запад. Вполне успешно.

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

Учитывая большое количество несоответствий в статье и фактов, почему-то, скорее верится во второе, чем в первое. Но бывает всякое… посмотрим.

Работаю программистом с 16 лет в России (с 1996г.) Не разу не встретил трудностей при трудоустройстве программистом.

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

Каких? По подробнее пожалуйста.

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


Каких? По подробнее пожалуйста.

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

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

Мне отказывали до интервью.
Я внимательно прочел Ваш пост и Вы, пожалуйста, прочтите мой комментарий.

Если вы имеете в виду то, что моя история не совпадает с вашим опытом, то вы же понимаете, что одного вашего опыта не достаточно для построения объективной картины, вы видели много программистов без ВО, но вы же не знаете сколько человек с навыками, но без ВО не смогли из-за последнего получить работу, а ведь соотношение может быть 1/100. Выше в комментариях был человек который тоже был без ВО и не мог найти работу, получил — нашёл. Плюс был комментарий про HR который не брал людей без ВО. Тут в комментариях много разных версий.

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


И для этого есть ряд коренных причин:


  1. ВО в период с 1995 до 2010 мало о чем говорит. Все покупалось и продавалось. Диплом можно было купить в переходе по пути на работу.
  2. На западе Российские вузы вообще не котируются.

Из этих пунктов есть редкие исключения. Например МГУ. Но это исключения, а не общее правило.


Чтобы найти работу удаленно, даже писать об образовании нет необходимости.


Но определенные корочки действительно дают приоритет Вашей персоне. Но это приоритет при равных навыках. Например, сертификаты вендоров (Microsoft как пример).

2. На западе Российские вузы вообще не котируются.
Это… не совсем правда. Я общался с HR нескольких западных компаний (и работал тоже). У них нет общего правила для «российских ВУЗов». Есть список конкретных ВУЗов. Более того — даже для других стран (США, Великобритания) — есть список.

Но определенные корочки действительно дают приоритет Вашей персоне.
Голубую карту без «правильных» корочек очень тяжело получить. Это как пример. Да, там тоже список ВУЗов, не просто «российские корочки».

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

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

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

А то, что вы нашли в том самом комментарии, говорит не о том, что оно нужно это ВО, а о том, что если ты даже для этого не напрягся, то какой из тебя сотрудник то?

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

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

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

Ну да. Ведь проблемы у меня? Я не умею читать.

Давайте, даже, далеко ходить не будем. Приведите пример с этого ресурса https://career.habr.com/ где требуется ВО.

Вы торопитесь. С выводами. С какого раза вы нашли эту вакансию? Их было 50/50 с теми где требования нет? 80/20? 90/10? Учитывая то, что я вчера специально потратил время и за три страницы не нашел ни одного требования ВО, то скорее 90/10. И Вы нашли то самое, которое не нашел я…

Тогда вопрос — что же Вы ищите? Проблемы? Если да, то логично их находить.

P.S. Проверил по Вашему запросу. Примерно 70/30. В пользу вакансий без обязательного требования ВО. Да и даже в приведенной вами ссылке написано

Высшее/ неоконченное высшее образование

Т.е. и тут нет формального требования иметь ВО. Нужно стремление чего-то достигать.
Приведите пример с этого ресурса

вторая вакансия в списке career.habr.com/vacancies/1000055811

Вы торопитесь. С выводами.

А где я вывод сделал. Вы торопитесь сделать вывод, что я делал вывод. Вы написали свой комментарий как будто найти вакансию с требованием ВО — это нечто нереальное. Я на это потратил 30 секунд.
С какого раза вы нашли эту вакансию?

С первого.
Учитывая то, что я вчера специально потратил время и за три страницы не нашел ни одного требования ВО, то скорее 90/10.

А какие вы смотрели? Мы же про меня общались, я могу претендовать только на джуна, а только такие вакансии и стоит смотреть. Понятно, что если ищут человека с 10 лет опыта то никто не будет указывать ВО.
Ну не факт что на джуна, не надо себя недооценивать
Во-первых, да, тут уже дали коммент. Не нужно искать должность джуна. Если Вы не джун.

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

Проблема автора, что он частное пытается выдать за общее (слухи и единичные попытки как "так везде"). Даже не знаю как это назвать. Может есть в психологии термин? Хотя возможно софт-скилы подкачали, но по комментариям не скажешь...

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

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


Проект шикарный, но работая в туберкулезных больницах, грузчиком и так далее вы не сделаете свой язык лучше/быстрее. Вы же сами показали, поковырял паскаль — о, вот так надосделать. Поковырял хаскель — крутые идеи, возьму у тебя… Чтобы развивать свой проект, нужно смотреть по сторонам. А когда по сторонам стеллажи и пустые бутылки из-под водки то развитие происходит так себе.


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


Выход один: найти работу по специальности — и это не грузчик. На работе часто можно попиливать свой велосипед, особенно если он решает какую-то проблему. Если же никакую не решает — то это тоже урок и сигнал, что стоит что-то менять. С вашими навыками вы к текущему моменту спокойно могли бы иметь 3000-4000$ в месяц на руки. Проблема в том, что чем дальше, тем больше "сениор с 12 летним стажем программирования без единой записи в трудовой" будет вызывать вопросов.


А еще медицина обычно недешевая. 120$ это даже не смешно. Для сравнения работники макдональдса получают порядка 500$, при том что они исторически считаются дном социального уровня (сам был школьником — там работал, знаю).

Если же заниматься этим в свободное время, то, простите, когда жить?

А зачем жить если за жизнь ни чего не сделал?
но если не давать организму отдыхать

моя текущая работа — 90% ничего не делание, я имею ввиду — ничего не делание, а не делай, что хочешь.
А зачем жить если за жизнь ни чего не сделал?

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


Представьте человека, который пинцетом изо дня в день переносит песчинки с пляжа в урну. И в снег, и в дождь, он это делает. А потом через 12 лет пытается продать полную фуру песка за миллион долларов, потому что тут ведь столько труда.


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


А деятельность "вопреки" только усилит диссонанс "как же так, они меня не приняли".


моя текущая работа — 90% ничего не делание, я имею ввиду — ничего не делание, а не делай, что хочешь.

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

Тоже отметил замкнутость цели на себя. Как минимум, можно было разделить свою идею с кем-то.


Надо отметить, что и эта статья не намекает на желание работать с кем-то в команде.

Тоже отметил замкнутость цели на себя. Как минимум, можно было разделить свою идею с кем-то.

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

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

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

Ни ради того, чтобы получить работу (попытка искать вакансию какая вам нравится, а не какая есть… почему сразу Haskell, а не скажем, PHP или Python?), ни для того, чтобы привлечь кого-то к вашему проекту (вопросы при устновке — это типа круто… и пофиг, что почти никто из пользователей не хочет на них отвечать).

Ну и какая это «работа в команде»?
Нет — это показывает на ваше желание рулить командой.

Одно другому не мешает.
Ни ради того, чтобы получить работу (попытка искать вакансию какая вам нравится, а не какая есть… почему сразу Haskell, а не скажем, PHP или Python?)

А вот фантазировать не надо. Я не искал вакансию на Haskell, в моём резюме было указанно просто Software Developer, в которой были перечислены мои навыки, знания опыт и какие я курсы прошёл. Я пытался устроится на разные работы, а про Haskell я упомянул из-за того, что я в тот момент им горел, мне он нравился я подходил под все требования вакансии и мне всё равно отказали, попытки устроится go разработчиком тоже были.
Нет — это показывает на ваше желание рулить командой.
Одно другому не мешает.
Мешает. Никому не нужен руководитль команды без опыта работы и никому не нужен человек в команду, который будет ей пытаться руководить и будет отказываться делать то, что ему сказали будучи нанят как линейный сотрудник.

Я пытался устроится на разные работы, а про Haskell я упомянул из-за того, что я в тот момент им горел, мне он нравился я подходил под все требования вакансии и мне всё равно отказали, попытки устроится go разработчиком тоже были.
Я даже не знаю — нужно ли в этом месте смеяться или плакать. Вам отказали в одном месте — и вы расстроились? Почему не пошли в другое, третье, 25е…? Вы что — думаете много програмистов без опыта получают предложение где они «подходят под все требования вакансии» с первого раза?

Да если вам один человек из ста предложение сделал — это уже хороший результат!
Я даже не знаю — нужно ли в этом месте смеяться или плакать. Вам отказали в одном месте — и вы расстроились? Почему не пошли в другое, третье, 25е…? Вы что — думаете много програмистов без опыта получают предложение где они «подходят под все требования вакансии» с первого раза?
Я пытался устроится на разные работы
Вы хоть читать научитесь. Их было десятки.
UFO just landed and posted this here
проблемы с коммуникацией

Их нет, редко встречаю людей с которыми не могу найти общий язык. Но я не испытываю дискомфорта от отсутствия общения и по этому общаюсь или по нужде(на работе с коллегами, если они есть) или с теми с кем мне очень интересно общаться.
Пытаюсь скомпилировать hello world. Первое с чем я столкнулся — непонятно какой компилятору нужен набор параметров чтобы скомпилировать программу. И только после просмотра исходников компилятора оказалось, что ему обязательно нужен параметр flags. А что в этот параметр подставлять — я не знаю.

По примерам исходников набросал это, но не завелось:
image
Видимо это из-за того, что не подключена стандартная библиотека. А как её подключить я не знаю. Читал документацию, но не нашёл там как подключить stdlib. Поэтому я заглянул в код OS.cine и решил сделать вывод строки в консоль таким-же образом:

На этот раз ошибок синтаксиса не обнаружилось, но что-то пошло не так.
Вы смотрели видео в блоге? Там в конце был для примера, запущен 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
Пожалуйста как попробуете, напишите о результате. У меня и на реальной и на виртуальной машине всё отлично работало.
будет иметь путь /usr/bin/hello-cine и если вы назовёте проект ls — то он перезапишет /usr/bin/ls.
Почему не в /opt/fei/bin или хотя бы /usr/local/bin?
/usr/local/bin

Забыл про него — исправлю.
/opt/fei/bin

Изначально так и было, но для fei install нужен sudo, а пути с которых sudo запускает программы, указаны в /etc/sudoers. Не менять этот файл.
но для fei install нужен sudo
Вы это сейчас всерьёз? Вы хотя бы понимаете, что эта идея явтоматически сокращает количество людей, которые могли бы в принципе задуматься над тем, чтобы для чего-то использовать ваше поделие раз в десять, если не в сто? Никакого sudo вы ни на iOS, ни на Android не получите. Как и возможности компилировать что-то во время установки (это прямо запрещено правилами AppStore, а в случае с Android — возможно, но очень проблемно).

То есть вы сходу и заранее отсекли подавляющее большинство пользователей. Вот просто так, потому что вам этого захотелось.
Вы это сейчас всерьёз? Вы думаете в версии 0.1 должно быть всё, что только можно пожелать. Я этот способ выбрал потому, что он простой.
Так сам fei можно установить в /usr/local/bin, а то, что он ставит — в его каталог
Это единственный вариант?
Не то, чтобы я стремился попробовать, но просто звучит очень странно… Может, это потому, что у меня больше опыта по вебу, но у меня с моими «домашними поделками» до этапа установки никогда не доходило; на этапе экспериментов и дебага гораздо удобнее всё вызывать через ./, без задействования /usr/bin, /opt и прочих стандартных папок.
К сожалению сейчас только так, потом добавлю возможность запуска без установки.
Думаю лучше ставить в ~/.local/bin/ туда например ставить pip install --user без всяких sudo, и пусть к этой папке в убунте вроде по дефолту добавляется в юзерский PATH
Чувствуется, автору не хватает опыта промышленной разработки. Имея опыт промышленного программирования, можно было бы не допустить изложенных выше ошибок. Тогда бы компилятор можно было бы написать гораздо быстрее и с меньшими страданиями.
А как у вас реализуется полиморфизм времени выполнения, есть ли интерфейсы, виртуальные методы? То есть, выражения rules анализируются при компиляции, значит и диспетчеризация методов всегда происходит статически? Вообще ваш язык напоминает Go, но там для этого есть интерфейсы. Конечно, дженерики снижают потребность в виртуальных методах, но тем не менее, допустим пишем игру и есть цикл обновления игровых сущностей:
for(IUpdatable entity : gameEntities)
{
    entity.update(); //update - виртуальный
}

Как такое реализуется на cine?
Являются ли в вашем языке функции объектами первого класса? Возможно ли писать в функциональном стиле с map и filter? Можно ли хранить ссылки на функции в объектах?
А как у вас реализуется полиморфизм времени выполнения

диспетчеризация методов всегда происходит статически

виртуальных методах

Язык не ООП, а функционально процедурный.
Как такое реализуется на cine?

Мягко и шелковисто — никак. Но с помощью костылей можно. Связанно это с тем, что в слайсах могут быть элементы только одного конкретного типа, но есть тип Fluid, который аналог гошного interface{}.
Являются ли в вашем языке функции объектами первого класса?

Да.
Возможно ли писать в функциональном стиле с map и filter?

Да, в стандартной библиотеке есть map — вот сдесь, а про filter я забыл, пометил себе, что нужно написать.
Можно ли хранить ссылки на функции в объектах?

Можно.
Да, в стандартной библиотеке есть map — вот сдесь, а про filter я забыл, пометил себе, что нужно написать.

А замыкания и лямбда-функции у вас есть? Без них трудно считать, что язык поддерживает функциональную парадигму.

Еще такой момент, я правильно понимаю, что в собранном exe будет присутствовать исходник сконвертированный в С? Вы не думаете, что таким образом сложно защитить свой код от взлома или исследования, если это требуется?
Еще такой момент, я правильно понимаю, что в собранном exe будет присутствовать исходник сконвертированный в С?
Нет, как я понял (и выше получил подтверждение от автора) – в Вашей терминологии правильнее было бы сказать, что исходный код программы на C будет в setup.exe.
Вы не думаете, что таким образом сложно защитить свой код от взлома или исследования, если это требуется?
Скорее невозможно; если, конечно, не удастся как-то мощно обфусцировать тот C-код, который будет сгенерирован для установки.
Нет, как я понял (и выше получил подтверждение от автора) – в Вашей терминологии правильнее было бы сказать, что исходный код программы на C будет в setup.exe
Вы возможно меня меня неправильно поняли(или я сейчас вас неправильно понимаю). Программы на cine распространяются в виде fpkg пакетов, которые можно даже текстовым редактором открыть и увидеть Си код. А на машине конечного пользователя, программа fei скомпилирует Си код в бинарник.
А замыкания и лямбда-функции

лябда — будут, замыкания нет.
собранном exe

в fpkg(не исполняемый)
будет присутствовать исходник сконвертированный в С? Вы не думаете, что таким образом сложно защитить свой код от взлома или исследования, если это требуется?

Я выступаю за open source. К тому же легко может написать обфускатор.
Я выступаю за open source. К тому же легко может написать обфускатор.

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

Какие еще числа? Как бы и так есть кватернионы (используются для задания трансформаций в 3d графике), которые и есть расширение комплексных чисел. А также другие более сложные числовые системы.

А теперь я знаю, что они находятся и над кватернионами.
Обоснуй.
Выглядит как «глубже — выше — сильнее», мы это уже проходили. Нужна практическая ценность. Если ты, например, хочешь «до»-сказать, что-то вроде «время не монотонно», то это был бы интересный повод для обсуждения. Но пока создаётся иное ощущение. Или, например что-нибудь этакое: «Да-да, забыл упомянуть, вот тут это самое нужно потому, что для понимания многомерных пространств, как ни странно, хорошо подходит Helix».
Про числа — никаких подробностей.
Если ты, например, хочешь «до»-сказать, что-то вроде «время не монотонно», то это был бы интересный повод для обсуждения.

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

Новые числа позволяют(100%) находить в нейронных сетях лучшие возможные веса для тех примеров которые были даны сети для обучения. Но есть загвоздка, при написании такого алгоритма «в лоб», не хватит ни времени ни памяти для того чтобы обучить даже небольшую сеть. Я долго продумывал как решить эту проблему и в какой-то момент придумал. С новым алгоритмом памяти хватит даже на обычном пк, а вот по времени — не знаю, но новый алгоритм просто нереально хорошо распараллеливается, но есть и минус — теперь получение лучших возможных коэффициентов не гарантируется, а просто есть вероятность их получения(но всё равно неплохие коэффициенты в результате будут). Самое интересное в этом алгоритме это то, что чем больше весов в сети, тем больше вероятность качественных весов. Единственное в чем может быть загвоздка — возможно лучшие веса для текущей выборки, окажутся посредственными для примеров не входящих в выборку.
числа даже не патентируются, поэтому заработать на них нереально сложно.
А судя по вашей бизнесс-жилке (а судя по вытаскиванию денег у жуликов она у вас таки есть) можно с ними делать лишь одно — тайно (не открывая подробностей) создать НУЖНУЮ нейронку и продавать результаты её работы. Правда, ключевое слово «нужную».
числа даже не патентируются, поэтому заработать на них нереально сложно.

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

Верно: идею невозможно запатентовать.


Фразочки про 100% попахивают дешевой рекламой.

Верно: идею невозможно запатентовать.

Серьезно?
habr.com/en/post/288364
Apple таки получила патент на прямоугольник со скруглёнными уголками

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


P.S. Есть еще интересные и другие расширения: дуальные числа, сюррельные числа. Кроме того, существуют числовые системы, в которых можно измерять бесконечности: Порядковое число.

Тоже хотел про них написать, но понял, что бессмысленно, т.к. «числа» автора скорее всего покроют и их

Покроют.
Есть еще интересные и другие расширения: дуальные числа, сюррельные числа. Кроме того, существуют числовые системы, в которых можно измерять бесконечности: Порядковое число.

Если смотреть с далека, то дуальные немного похожи(самую самую малость).
Ребята, не надо критиковать. Кто из нас не хотел сделать нечто подобное?
Завидуйте молча))
Критика нужна, особенно конструктивная.
Очевидно очень талантливый парень в глуши сидел, мира не видел, ни с кем толком не общался, писал «гениальную идею» много лет. Он или начнёт воспринимать нас всерьёз или уйдёт ещё больше в изоляцию. Первое, вроде бы как, — предпочтительней, — мы же тут, как бы, человеколюбивые, и всё такое… А ты бы хотел на его месте, чтобы тебя троллили, а ты только потом когда-нибудь понял, что это был такой «тонкий троллинг»?
«Специалисту» покажись? циник… ;^)
UFO just landed and posted this here
Автор, на самом деле, Вы – молодец! И никого не слушайте, особенно всяких «мамкиных» критиков (они просто не могут в одиночку реализовать большой проект, вот и завидуют), обращайте внимание только на критику по существу, а её пока что не так много.
Судя по материалам, размещенным на github, язык у Вас (на мой взгляд) действительно получился весьма простым, красивым и практичным.

Также возьму на себя смелость дать Вам ряд рекомендаций:

1. Обязательно напишите обучающие материалы, как можно более подробные и примерами (и, кстати, в размещенном Вами коде нет комментариев, их явно следует добавить, пояснив назначение каждой функции).

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

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

Продолжайте своё дело, ибо невозможно выиграть в чужой «игре», Вы же создали свою, и возможно, уже всего в трёх шагах от победы.

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

Удачи и успехов!
Обязательно напишите обучающие материалы

уже делаю
как можно более подробные и примерами

Постораюсь
и, кстати, в размещенном Вами коде нет комментариев, их явно следует добавить, пояснив назначение каждой функции

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

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

Мне кажется это лишним, я никогда сам на них не был и даже примерно не понимаю, что там происходит.
Удачи и успехов!

Спасибо.
Просто не верится, читал и думал стеб какойто. Изучить программирование, написать язык и работать не по профилю столько лет… С таким талантом при желании давно можно было работать разработчиком и без диплома. Тут скорее проблемы другого рода, очень напомнило историю Перельмана.
Ну Перельман хоть сделал что-то, что реально кому-то помогло. Тут же очередная TempleOS с вероятностью 99%. Ну то есть история «как угробить свою жизнь без водки и наркотиков».

P.S. Буду рад ошибиться, конечно… но пока симптомы не очень обнадёживают…
Насчет вас например все понятно.

Статья очень классная. Очень лампово. Спасибо. Читал с удовольствием

Ура! Теперь можно на этом языке написать наикрутейший CineOsCineNginxCineRedisCinePostgresql!
Вам бы в репозиторий побольше информации добавить…
У меня сейчас другие приоритеты, нужно в начало в блоге хотя бы базовые вещи о языке рассказать.
Тяжело читать такого рода текст, это посильнее Джокера будет.

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

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

На текущем уровне это просто невозможно.

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

Грустно, и не вижу что можно сделать в такой ситуации.
PS: А начинали мы с ним одинаково, со Спектрума, Бейсика и Турбопаскаля.
Он ведь до сих пор уверен, что программистом его не берут потому, что «работников отдела кадров, заставляют печатать фальшивые вакансии, чтобы создать видимость, что не всё так плохо».

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

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

Приношу свои искренние извинения! И, разумеется, желаю вам всего самого хорошего!
Извините, я не хотел вас обидеть ни в коем разе.

Вы меня не обидели, просто из-за большого количества комментариев которые говорят о мне чушь я был зол. И я не говорю, что все комментарии критикующие меня — чушь, вовсе нет. Просто люди прочитав мою статью по которой можно крайне поверхностно понять кто я, но люди начинают мнить себя великими философами и психологами и начинают писать откровенную чушь. Люди пишут «Он не сможет работать в коллективе». У меня было 13 работ, на многих у меня были коллективы, я прекрасно в них вписывался, общался с коллегами даже после работы. А иногда бывают такие «самородки» которые пишут, что если бы я работал программистом, то впаривал бы тимлиду, что нужно использовать мой язык на работе. Я даже не могу понять с чего нужно начать думать, чтобы додуматься до такого бреда. Ну самый шик это фразы типа «Хотел бы найти работу — нашёл», очень хотел, искал, в статье только два примера на которые по моему мнению я подошел бы 100%, а были десятки попыток устроится на вакансии где я свои возможности оценивал гораздо ниже. Многие живут своей жизнью и проецирую её на меня, они не знают, что такое заплатить за коммуналку и денег остается только на еду, они не знают взгляда работодателя когда он видит много записей в трудовой, они не видели лица работодателя когда он доходит до строчки грузчик в трудовой. Ну и на последок, человек прочитал статью и написал мне в личку о том, что ему кажется, что мы очень похожи и нам есть, что обсудить. Он написал о себе несколько фактов, прочитав которые мне показалось, что мы не очень похожи и я написал несколько фактов о себе, после которых он мне больше не писал.
P.S. Если вы прочитав статью представили какого то человека, вы должны знать, что это не я. И даже на него не похож.
В нормальном социальном обществе (точно пока не в Белорусии и не в России) таким людям, как автор, оказали бы первичную помощь, поместили бы в условия с нормальным питанием, комфортным существованием, психологической и психиатрической поддержкой.
Совершенно не факт. Американскому прототипу автора миллионы психиатров, практикующих в стране — не помогли ровым счётом никак.

Грустно, и не вижу что можно сделать в такой ситуации.
Такие истории — они всегда так устроены: вроде как и хочешь помочь… но совершенно неясно как.
Нам ближе, мне кажется, скандинавские страны.
В штатах много чего «не слава богу».
Нам ближе, мне кажется, скандинавские страны.
Это где детей у родителей отбирают практически на пустом месте?
UFO just landed and posted this here

Вам платят за распространение басен?

Такие истории — они всегда так устроены: вроде как и хочешь помочь… но совершенно неясно как.
Предложить работу за человеческую оплату (или посоветовать, где и как поискать). Предложить конструктивную критику по дизайну языка.
Ну если кто из Белоруссии взвалит на себя этот крест. Или хотя бы попробует.
Тут нужно личное общение, не через форум.
Так ему уже предлагают, судя по комментам, т.е. нашлись люди.

Да и почему крест? Автор умеет делать всякое, не имеет заоблачных запросов, и несмотря на то, что его тут упорно пытаются окрестить ненормальным, ведёт себя вполне таки адекватно.
Я и не говорю, что псих.
Но крайне социально дизадаптирован.
Обычным людям общаться с такими нелегко.

И такую ответственность взвалить на себя готов не каждый. Это легко в комментах тут написать, ну как я сделал.
Доктор, предъявите сперва свою справку.
Эххх, прочитал статью и поностальгировал о временах, когда ещё не было семьи, детей и ипотеки.
Можно было всё своё свободное время и даже рабочее посвящать своему хобби.
В-общем я совсем не понимаю автора в его желании жить на гроши в жопе мира, но прекрасно понимаю желание заниматься любимым делом.
Надеюсь, лет через 5 автор будет вспоминать прошедшие годы с таким же тёплым чувством, как я свои.
А иначе зачем это всё…
В-общем я совсем не понимаю автора в его желании жить на гроши в жопе мира

Нет такого желания

Ну так вы же ничего не предпринимаете чтобы это поменять. Значит вас всё устраивает.


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


Хорошая статья с правильным посылом: вы там где вы хотите быть. Ваши действия правдивее ваших слов.

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

Я устал отвечать на бредовые комментарии поэтому вот — https://habr.com/ru/post/481276/#comment_21050484
Taetricus
Саша, мне понравилась история мучений с языком, спасибо, было прикольно, хоть кино снимай. Напугало, что «история» появилась раньше описания языка. Искренне считал, что уже лет 10 так никто не делает, потому, что вроде бы как теперь читать истории — дорого.

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

Вопрос: можешь ли ты переписать свой Transpiler так, чтобы его можно было исполнять в VM в JavaScript (Node.js или Браузер — не суть), или же, что может быть намного лучше — для TypeScript?

Видишь ли, Deno уже на подходе, а значит VM на Rust очень скоро поедет у кого-нибудь в Prod…
С~C++ — это сложная и многоликая аудитория, они могут всё, и даже больше чем хотят. Пока ты учил компиляторы, многие остальные люди учили «популярность», «маркетинг» и прочие странные нам, инженерам, вещи.

В мире много языков программирования, и ещё один язык общего назначения нужен мало кому. В мире JavaScript народ попроще будет, да и народа намного больше. Банальнальная статистика подсказывает, что вероятность, что кому-нибудь понравится твоё видение прекрасного, увы, намного выше, чем то, как оно может быть использовано сейчас. Заодно профессию получишь, востребованную, сразу, сходу. Не знаю, стал ли бы я на твоём месте «играться», в эту подмену «чистого искусства» на бытовые радости, и стоит ли эта игра свеч в принципе, но почему бы не попробовать? Умение добиваться поставленных целей, ответственность и собственный взгляд на искусство программирования могли бы быть приятным дополнением к, например, такой строке в резюме: «написал свой транспайлер в TypeScript т.к. мне хотелось писать на мной созданном языке» — это сразу покажет людям уровень твоей квалификации. И хоть скорее всего это не будет не так сложно и возвышенно, как создание собственного компилятора, но, по крайней мере людям будет понятно с кем они имеют дело, и почему он уверен, что заслуживает внимания и прочее, тому подобное, коммуникабельное и измеримое.
Не знаю, почему вас заминусили. Пока лучший пост.
А у меня кармы не хватает, видимо. :)
Не знаю, мне всё равно, лишь бы автор прочёл.
Но, всё же, может быть потому, что не верят :)
Хотя, что правда, то правда, на LLVM ничего не собирал, и на С~C++ не пишу.
Искренне считал, что уже лет 10 так никто не делает, потому, что вроде бы как теперь читать истории — дорого.
История хорошо зашла как «патничное чтиво». Интересно — случайно так получилось или автор специально так время для публикации выбрал?

Если специально — так тем более обидно: такие мозги — да в мирных бы целях…
Вопрос: можешь ли ты переписать свой Transpiler так, чтобы его можно было исполнять в VM в JavaScript (Node.js или Браузер — не суть), или же, что может быть намного лучше — для TypeScript?
Нет такой цели, но Си можно компилить в WASM.
В мире JavaScript народ попроще будет
Сколько я не видел каких либо интервью JS-никами, у меня всегда складывается впечатление, что они вообще не смотря в сторону других языков.
Сожалею, что сама «история» появилась раньше описания языка. Так уже лет 10 никто не делает, потому, что теперь читать истории — это очень дорого.

Не соглашусь. Я думаю, этот пост интересен именно историей состоящей из смеси технологии и личных переживаний, тут уже сравнивали с «историей одного байта», очень цепляет. Хотя автору, конечно, стоило более развернуто описать двенадцатилетний плод своих трудов.
Да, конечно, тут перегнул с сожалениями :)
Цепляет, в том то и дело, что цепляет настолько, что хочется посмотреть описание и структуру, а приходится сразу лезть в исходники. Может быть, конечно, это такой хитрый план, тогда автору ещё большее уважение, т.к. время как будто бы не тратил, а социальную инженерию тоже как-то почувствовал, несмотря на такую вот «всю эту» историю. Поправил. Спасибо :)
Вообще, складывается ощущение, что сейчас (12 назад этого ещё не было в достаточном виде) можно было бы реализовать cine/fei как надстройку над Nim.
Сборка в C – есть (см. compileToC/compileToCpp), возможность сделать собственные кастомные операторы – есть (":", ":=", ".=" и собственную вариацию "."); есть куча вариантов макросов во всех вариациях, в том числе и уровня работы с AST, когда можно в compile-time блок кода как угодно с ног на голову переворачивать. Опять же, есть условная компиляция через when, так что если устанавливать через пакет Nim-кода вместо C-кода – можно так же избежать попадания ненужного кода в итоговый бинарник.
Грустная история…
«Стратегия без тактики — это самый медленный путь к победе. Тактика без стратегии — это просто суета перед поражением.“ — Сунь Цзы.

Александр, я бы посоветовал миссию с ЯП считать выполненной, поставить жизненную цель и идти к ней с тем же упорством.
Чем больше времени уходит, тем меньше шансов устроиться на любую квалифицированную работу.
Даже если вы доведете свой проект до совершенства, ни одна вменяемая организация не предложит вам работу программистом.
Я не HR, но отсею по резюме. И не из-за отсутствия высшего образования, а из-за недостатка требуемых компетенций для решения производственных задач. Даже если дойдете до этапа технического интервью, то шансы прости его успешно не очень большие.
Несколько замечаний по самому проекту.
То, что оно транслируется в С, не делает программы заведомо эффективными.
Скажем, тривиальный hello world транслируется в 30 КБ кода на С (вместо 60 байт). И результирующий бинарник получается в 3 раза больше.
Бенчмарк идиотский, конечно, но других пока нет.
standart-test генерирует код, который не собирается (или собирается с 1799 варнингами после магии с ключами компиляции). Причем, размер С файла уже под 2.5 МБ. Оно точно будет быстро?
В чем магия пакаджей и fei я просто не понял. Почему бы просто не генерить С и make файлы для clang, зачем это в один файл сливать? По крайней мере, на данном этапе?
Баг: если в программе только инлайн С, то она не собирается (выше пример про printf), если потом добавить вызов printLn, то собирается.
Совет про сравнение с NumPy — очень правильный. Никто же не требует, чтобы оно сходу было быстрее, но база для сравнения должна быть?

поставить жизненную цель и идти к ней с тем же упорством.

Она есть уже давно. (Не cine)
То, что оно транслируется в С, не делает программы заведомо эффективными.

Это очевидно.
Скажем, тривиальный hello world транслируется в 30 КБ кода на С (вместо 60 байт). И результирующий бинарник получается в 3 раза больше.

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

Надо глянуть, у меня вроде всё нормально.
Причем, размер С файла уже под 2.5 МБ.

Повторюсь, размер бинарника не влияет на производительность.
В чем магия пакаджей и fei я просто не понял. Почему бы просто не генерить С и make файлы для clang, зачем это в один файл сливать? По крайней мере, на данном этапе?

И в статье и в комментариях указанно неоднократно, fei при установке пакета спросит вопросы, ответы на которые влияют на сборку. Просто ни fei ни cine — не спрашивают ничего.
если в программе только инлайн С, то она не собирается (выше пример про printf), если потом добавить вызов printLn, то собирается.
Проверю.
Она есть уже давно. (Не cine)

Интересно — какова она?
Интересно — какова она?

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

cine-lang.blogspot.com/2020/02/blog-post.html
Подумав я понял, что бессмысленно продолжать это безумие. И решил писать новый язык с нуля.


Здесь уже была ссылка на compiler.su
Советую обратить внимание на страничку compiler.su/entuziasty-razrabotchiki-kompilyatorov-i-ikh-proekty.php
Там очень часто встречается Статус: проект не развивается.
А из успешных проектов могу назвать только Kotlin
Похоже, автор перфекционист, поэтому не сможет заставлять себя учить чужие «плохие» языки и технологии, когда у него есть идеи как сделать их лучше.

Там очень часто встречается Статус: проект не развивается.
Но зато, скорее всего, развиваются их авторы и работают уже над чем-то более перспективным или хотя бы интересным.
Вы почему-то считаете, что если человек изолировался от мира и занимается тем-что ему нравится — то это диагноз. С чего вы взяли, что человеку плохо и что он болен? С того, что он может себе позволить жить как хочет а вы нет?

Бросьте эту дурную привычку вешать на всех людей ярлыки. «Я прочел и сделал вывод», «очень похоже, что человек болен», «я о таком читал/видел/слышал»… Поверьте, если бы человек был сумасшедшим, он был бы в больнице. Моя близкая родственница провела там 10 лет с шизофренией, я знаю о чем говорю.

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

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

У многих из вас хватило бы терпения потратить столько времени на реализацию своего проекта? Очень сомневаюсь.

Мне понравилась статья, читал будто сказку на ночь.
Нет, дело отнюдь не в том, что автор обладает какой-то пресловутой свободой жить, недоступной нам, завидующим.

Сейчас совсем другие времена.

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

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

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

Автор некоторое время проживал совсем в скотских условиях.

Автор не может устроится на работу по специальности.

Автора такая ситуация не вполне устраивает.

Видимо, но это неточно, у автора отсутствуют люди, с которыми он может коммуницировать.

И, судя по комментариям более разбирающихся людей, чем я, автор, к сожалению, далеко не Перельман. Что будет с таким человеком через 5-10 лет — большой вопрос.

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

Я позволю себе усомниться в полезности такой позиции, прежде всего для автора.
Очередной язык одиночки, очередное сопротивление народа — значит, с людьми всё в порядке.
Я тоже такой же романтик, у меня тоже был юношеский максимализм, тоже работаю не по специальности (завод, общепит, склад), тоже поздно сел за ПК, и даже возраст тот же. Свой язык делаю почти 10 лет и конец только наметился, а вы уже «релизнулись», поздравляю. Не все доходят до этого.
Но вы поторопились рассказать историю создания, будто язык уже стал успешным-известным. Ну хоть в комментариях попытались раскрыть особенности языка. Если упор на SIMD остался, то как думаете, почему другие тоже не додумались включать его? Разве процессоров без него достаточно много?

Отсутствие пробела перед открывающей скобкой — это у вас профдеформация?
С чем могли бы вам помочь другие, кроме поиска багов? Или всё хотите делать сами?
Ну и важный вопрос на случай, если вдруг ваш язык таки выстрелит — как на русском звучит название языка? :)
Удачи вам.
Если упор на SIMD остался, то как думаете, почему другие тоже не додумались включать его? Разве процессоров без него достаточно много?
Потому что со временем стала более популярна jit и aot компиляция, которая решает проблему.
Отсутствие пробела перед открывающей скобкой — это у вас профдеформация?
Всегда ставил, а во время написания статьи, почему то перестал.
С чем могли бы вам помочь другие, кроме поиска багов?

Ну очевидно, когда будут написаны туториалы. С написанием модулей для языка. Написании тестов, там где их не хватает. Написание программ на cine.
Или всё хотите делать сами?

Ни капли.
Ну и важный вопрос на случай, если вдруг ваш язык таки выстрелит — как на русском звучит название языка? :)

Я произношу как кайн. Очень похоже произносит слово kine google translate если выбрать английски.
А вот тут неожиданно, честно говоря. Конечно, мой английский недостаточно хорош (читаю/понимаю документацию), но я ожидал или «сайн», или прям «сине» (как в cinema), ну или на немецкий манер «цайн». Хотя насчёт немецкого варианта я, судя по озвучке через google translate, тоже ошибаюсь.
Касательно проблем с поиском работы — могу сказать что они вполне реальны, сам с подобным столкнулся, если твоё резюме выглядит хоть немного нестандартно (ну там чехарда разработки и менеджемента, большие пропуски в стаже), то очень велики шансы что тебя просто не позовут на интервью, ибо великому психологу и экстрансенсу — эйчару или там какому тимлиду показалось что ты какой-то не такой и не подходишь.
Не забывайте что мы живём в сумасшедшем обществе, нормальный человек тут исключений, а «нормальным» непонятно как это ты взял и перестал работать? Или с начальника отдела в программисты пошёл? Да точно псих, ату его!
Но настойчивость должна помочь.
Ещё «умный» эйчар может погуглить про тебя и узнать, что ты изобретаешь свой язык в избушке с блохами или пишешь какую-то книгу, то это тоже минус к шансам на интервью, во всяком случае пока твой язык/книга никем не признаны.
Спасибо за рассказ. А расскажите, как с вашим опытом юниксов мимо вас прошла профессия сисадмина? Сидели бы спокойно, настроили бы структуру как вам хочется, и писали бы компилятор. Работа программистом очень полезна была бы опытом, но после работы что-то ещё писать непросто.
А расскажите, как с вашим опытом юниксов мимо вас прошла профессия сисадмина?

Потому, что я не гожусь в сисадмин. У меня нет принтера я не умею с ними работать, то же со сканером. Не умею нормально настраивать локальные сеть, особо не интересуюсь компьютерным оборудованием.
UFO just landed and posted this here
Простите, что? Обслуживание принтеров и сканеров — это работа эникейщика, а не сисадмина.

Я знал 2 сисадминов(лично) и оба они на работе занимались в том числе и обслуживанием принтеров и сканеров.
Я знал 2 сисадминов(лично) и оба они занимались в том числе и обслуживанием принтеров и сканеров.


Мало ли как их называют.
В нашей среде сисадмины занимаются настройками серверов.
Эникеи — эти уже с принтерами-сканерами.
UFO just landed and posted this here
Внимательно прочитал [почти] все комменты, и у меня только один (в сущности) вопрос. Если я правильно всё понял, то программы на вашем языке «дособираются» уже на конечном компьютере перед установкой? Значит про portable-версии программ можно забыть? Как вообще происходит синхронизация исполняемого кода с железом, на котором код запускается? Или подразумевается, что аппаратная конфигурация компьютера неизменна?
Если я правильно всё понял, то программы на вашем языке «дособираются» уже на конечном компьютере перед установкой?
Верно.
Значит про portable-версии программ можно забыть?

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

Когда программа собирается на компьютере пользователя, она собирается конкретно под железо этого пользователя.
Есть третий выход:
stackoverflow.com/questions/14408136/have-different-optimizations-plain-sse-avx-in-the-same-executable-with-c-c
software.intel.com/en-us/forums/intel-c-compiler/topic/801418
примерно этим и пользуемся для получения максимальной производительности на процессорах, которые поддерживают нужные инструкции.
Я, честно говоря, и ожидал подобного ответа от Taetricus. А к вашему комменту могу попробовать добавить четвёртый выход: .NET, Java и всё вот это вот jit-ное. Уж если заниматься сборкой на компьютере пользователя, то делать это без стеснений и by design. А то получается какое-то странное половинчатое решение — это я соберу у разработчика, это — у пользователя…
UFO just landed and posted this here
Автор молодец. Разработкой языка можно заниматься вечно и крайне редко народ доводит своё дело до конца. А уж компилятор создать на своём же языке сейчас не все могут. Уж PascalABC насколько серьёзная разработка, а до сих пор разработчики на C# пишут компилятор. Меня в своё время хватило только на создание кастрированного интерпретатора паскаля ;-)

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

Автор и написал транслятор из cine в C.
Цитата из комментария
Программы на cine распространяются в виде fpkg пакетов, которые можно даже текстовым редактором открыть и увидеть Си код. А на машине конечного пользователя, программа fei скомпилирует Си код в бинарник.

Только компилирует не fei, а clang, который вызывается из fei.
И кросс-платформенность страдает именно при трансляции (захаркоженные Linux пути, использование dirent.h и специфичных вызовов для файловых операций)
В принципе, я собрал cine и fei под Windows. fei уже генерит helloworld, как раз дошел до вызова ciine при fei build
Т.ч. имею некое представление о том, как работает fei.
Intel Celeron 800 Mhz, 64 Mb оперативной памяти, 14 Gb жёсткий диск, встроенное видео с разрешением 640 x 480 и 16 цветов

Это что-то не то. Во времена 800х целеронов встроенная видео уже была на каком-нить 915 чипсете и разрешение/глубину цвета было можно поставить гораздо больше, возможно не было драйверов.
Мы на 600МГц целеронах и встроенных видюхах уже в халф-лайф первый играли и видюхи справлялись.
К сожалению не помню полное название модели, но точно помню 800 Mhz, 64 Mb оперативной памяти, 14 Gb жёсткий диск, встроенное видео с разрешением 640 x 480 и 16 цветов. Встроенное видео было не в процессоре, а в материке.
Заводит ли компилятор данные на стеке? Это же в ряде случаев мощнейшая оптимизация.

Учитывая:
— компиляция си-представления у пользователя
— свой менеджер пакетов
более подходящим будет «платформа». Хотя язык и платформу хотелось бы разделить.
И, кажется, в языке не хватает библиотечной части. Можно добавить interop с C, «unmanaged» небезопасный слой.

На данный момент язык является изолированной вещью-в-себе для написания супер-оптимизированных программ, богатый на абстрактные типы и фп. Программ, имеющих мало зависимостей от внешних библиотек.
Куда это применять здесь и сейчас?
— Вычисления!
— Драйвера?
— Своя микро-ОС для микроконтроллеров?
— Своя микро-БД (sqlite)?
Да, очень хотелось бы мощные библиотеки аля numpy, scipy, нейронки, deeplearning — там можно обрести базу пользователей.
Синтаксис сделать более похожим на мейнстрим — C, Java (раз уж фигурные скобки). Или Python/ML/Haskell.
раз уж фигурные скобки
Похоже, до конца Вы не осилили; автор потом бросил фигурные скобки, так что сравнивать скорее нужно с Python.
является изолированной вещью-в-себе
Очень на то похоже.
Заводит ли компилятор данные на стеке?
Да, почти всё кроме массивов хранится на стэке.
И, кажется, в языке не хватает библиотечной части. Можно добавить interop с C, «unmanaged» небезопасный слой.
Там C используется как inline asm, можно хоть целые функции писать, можно подключать C библиотеки, но пока их нельзя в пакет включать (но планируется).
мне повезло сначала найти и вырасти до нормально оплачиваемого разработчика, а потом начать программировать для души, но тоже за оплату
А автору повезло быть перфекционистом, иметь страсть и амбиции.
Кому из вас больше повезло — однозначно не ответить.
У меня ещё такой вопрос по fei. Логично, что после первого изменения (пусть будет «b:call(someArg)», или «b:field = value») «отделение» переменной b уже сработало (т.е. прошёл Copy-on-Write, если на экземпляр были отдельные ссылки). Соответственно, при следующем «изменяющем» вызове на этой переменной уже не стоит делать проверку значения счётчика ссылок… кроме, конечно, одного исключения, о нём чуть ниже.
Ваш компилятор (точнее будет, наверно, всё-таки транспайлер) как-то это учитывает? Как бы я согласен, что мой пример на C++/Qt может быть чуть менее производительным, потому что аналог Вашего примера кода (чуть ниже вставлю), в теории, может меньше раз дёргать проверку счётчика ссылок, что может быть не очень незначительным, если над одной переменной делать много «записывающих действий». Соотвественно, Ваш пример:
result:x = x
result:y = y // мы точно уверены, что usage_count(result) == 1

А теперь об исключении, которое может ломать подобную оптимизацию.
Если один из «записывающих» («изменяющих»?) методов будет куда-то сохранять ссылку на this (в поле одного из аргументов, например), то после вызова метода значение счётчика ссылок, естественно, не будет равно единице. Причём не важно, будет ли метод изменять значение полей на this или вызывать другие методы, которые могут это делать – важен именно факт, что ссылка на this может куда-то «утечь». В общем, я пока не понял, есть ли возможность указать, что метод запрещает копировать ссылку на this (что-нибудь вроде «method (.Some) ...»; ведь, как я понимаю, двоеточие обозначает запись, а точка – неизменяемость).
«b:field = value») «отделение» переменной b уже сработало
В случае с b:field = value «отделится» сдесь может только field, а b храниться на стеке и если ему присвоить какое то d, то на уровне программы содержимое d полностью скопируется (это не затратно) в b, но если например в field есть указатель на массив, то массив не будет скопирован, а просто для этого массива счетчик увеличится на 1.
точнее будет, наверно, всё-таки транспайлер
Неверно.
Транспиляция — преобразование программы, при котором используется исходный код программы, написанной на одном языке программирования в качестве исходных данных, и производится эквивалентный исходный код на другом языке программирования.
Cine не производит эквивалентный код.
Компиля́ция — сборка программы, включающая трансляцию всех модулей программы, написанных на одном или нескольких исходных языках программирования высокого уровня и/или языке ассемблера, в эквивалентные программные модули на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера) или непосредственно на машинном языке или ином двоичнокодовом низкоуровневом командном языке и последующую сборку исполняемой машинной программы.
Мне без разницы названия, но vala, nim, haxe — для них есть компиляторы итогом которых служит код на Си. И все называют их компиляторами и это абсолютно верно, транспайлер не подходящее слово. Транспайлеры обычно служат для преобразования исходного кода на одном языке в исходный код на другом языке, но таким образом, чтобы человек мог с результирующим кодом работать, с тем что генерирует cine — очень тяжело работать.
result:x = x
result:y = y
На всякий случай поясню, счётчика у result нет! Внутри result могут быть указатели на память в куче и вот только на такую память есть счётчики. Присвоение нового значения x никак не может вызвать копирование каких либо данных со счётчиком, но может повлиять на сами счётчики (если они есть) внутри x, на y это не оказывает ровным счётом никакого влияния.
методов
В языке нет методов — только функции, невнимательно прочитали статью, финальный вариант языка не ООП.
сохранять ссылку на this
Ссылки и указатели можно было использовать только в самом первом варианте языка (который не ООП), когда язык был уже ООП никаких ссылок не было, а те что были на уровне программы, а не языка, не могли хранить ссылки на переменные, аргументы методов и тд, поскольку они были только на стэке.
В случае с b:field = value «отделится» сдесь может только field, а b храниться на стеке и если ему присвоить какое то d, то на уровне программы содержимое d полностью скопируется (это не затратно) в b, но если например в field есть указатель на массив, то массив не будет скопирован, а просто для этого массива счетчик увеличится на 1.
Ох, сложно. Документации более подробной ещё нет? Или пример собранного C-кода, который получается с подобного блока?
Вот если по Вашим примерам – есть точки, есть линии. Причём точка – tuple двух координат, а линия – tuple двух точек. Я вызываю функцию, передаю туда линию, две точки и два float (t1/t2). Функция должна сделать два Lerp между двумя переданными точками (используя t1/t2), и результаты Lerp'ов записать в line:a и line:b.
Линия, которая передаётся в функцию, не проходит же Copy-on-Write заранее? Вдруг в функции есть условие, которое приведёт к тому, что записи в переменную не будет (например, if(t1>t2) return). Но переданная линия может иметь счётчик как равный единице, так и с большим значением.
Не совсем понимаю, что значит «хранится на стеке», и как может при Вашем подходе на стеке храниться что-то кроме value type variables и указателей на объекты (с счётчиком ссылок).
Документации более подробной ещё нет?
Пока всё что есть это этот блог, но я там стараюсь писать в начале простые вещи, а затем более сложные. То о чём вы спрашиваете — это закулисы, а о них я собирался не скоро писать, не говоря о том, что я немного застопорился в блоге, по скольку следующая статья которую я хотел писать о том, что очень сильно меняется в версии 0.2 которую я постараюсь выпустить к 1 февраля (но не факт, что успею). Но если вас интересуют какие либо подробности — Telegram — taetricus.13, почта — 0.cine.developer@gmail.com. Отвечаю не очень оперативно, но отвечаю.
или пример собранного C-кода, который получается с подобного блока?
В этом комментарии есть пример кода на си который иллюстрирует как всё происходит (на самом деле генерируется другой код).
Вот если по Вашим примерам – есть точки, есть линии. Причём точка – tuple двух координат, а линия – tuple двух точек. Я вызываю функцию, передаю туда линию, две точки и два float (t1/t2). Функция должна сделать два Lerp между двумя переданными точками (используя t1/t2), и результаты Lerp'ов записать в line:a и line:b.
Линия, которая передаётся в функцию, не проходит же Copy-on-Write заранее?
Copy-on-Write происходит только в одном случае — изменение данных располагаемых на куче, если на эту кучу есть несколько указателей, Copy-on-Write происходит непосредственно в момент изменения. В указанном вами примере line хранится на стеке и его изменение никогда не вызовет Copy-on-Write, как бы line не изменялся. Предположим, что есть тип BigesFloat который может хранить число любого размера, а данные он хранит на куче. Предположим p1 точка с координатами типа BigestFloat, то line:a = p1 всё равно не вызовет Cope-on-Write, поскольку память на куче не меняется, здесь просто line:a будет хранить указатель который находится и в p1, память по указателю не будет изменена.
Не совсем понимаю, что значит «хранится на стеке», и как может при Вашем подходе на стеке храниться что-то кроме value type variables и указателей на объекты (с счётчиком ссылок).

Я думаю по приведенному вышке примеру на си (из другого комментария) будет понятно, что к чему, но на всякий случай дам пример на cine и во что он генерируется на си.
Вот код на cine:
proc main()
    a := "hello"
    b := a
    c := a
    b = "hello 2"
    c:setFirst('H')
    a.printLn()
    b.printLn()
    c.printLn()

Код на си (генерируется компилятором которые когда допилится станет 0.2, поэтому код отличается от такового из версии 0.1)
Код на си – это хорошо.
Вот только… я вглядывался в то, что происходит при вызове setFirst. Дошёл до setItem, строка 258. Вот зачем так сложно и неоптимально? Или это следствие того, что стандартные функции тоже написаны на Вашем же творении?
bool const __r3 = f__use2__0__f__4__19_3127_5((*slice_));
if (__r3) {
	struct t0 const __r4 = f__clone0__0__f__4__19_110_5((*slice_));
	struct t0 const __r5 = (*slice_);
	*(slice_) = __r4;
	p__free0__0__f__4__19_293_5(__r5);
}

То есть, вместо detach(*slice_), где void detach(t0& slice); сделает всю нужную работу (copy-on-write, если нужен), мы копируем на стек 56 байтов (вызов use), чтобы затем снова скопировать на стек 56 байтов (вызов clone). Зачем ТАК сильно игнорировать указатели?
Насчёт 56 байтов
Я собирал код по Вашей ссылке, и при добавлении строки:
printf("sizeof(a): %lu\n", sizeof(a_));
Получил 56.

Ну и ещё не могу понять, что за магия с useCounter:
printf("a.useCounter: %ld\n", (size_t)(a_.useCounter));
printf("b.useCounter: %ld\n", (size_t)(b_.useCounter));
printf("c.useCounter: %ld\n", (size_t)(c_.useCounter));
Выходит, что useCounter нулевой (т.е. nullptr) у a_/b_, но почему-то не пустой у c_. В чём принципиальная разница? Видимо, в том, что строки «hello» и «hello 2» являются константами, а «Hello» – «собрана на куче»?
Copy-on-Write происходит только в одном случае — изменение данных располагаемых на куче, если на эту кучу есть несколько указателей


Тогда, наверно, «на куче» будет всё, кроме константых строк? Ну ещё константных массивов, по аналогии с int arr[] = { 0, 2, 4, 6, 8};?

proc main()
    a := createLine(createPoint(0, 0), createPoint(1, 1))
    b := a
    a:mutateLine(createPoint(2, 2), createPoint(3, 3), getRandomFloat(0, 1), getRandomFloat(0, 1))
Переменная a – «на стеке» или «на куче»? Так-то на стеке будет лежать только структура, а сами данные будут в куче? Соответственно, в методе mutateLine счётчик на линии будет равен двум, и в случае, если мы будем писать последовательно в line:a и line:b – получим Copy-on-Write при записи в line:a? Но...
В указанном вами примере line хранится на стеке и его изменение никогда не вызовет Copy-on-Write, как бы line не изменялся.
Всё равно не понимаю.
P.S. Баг?
Строки 266-269 – use(newItem) есть, а free(oldItem) – нет.
Вот зачем так сложно и неоптимально?
А что здесь сложного и не оптимального? Узнаём используется ли слайс несколькими объектами, если да клонируем в новый слайс и говорим что старый слайс нам больше не нужен.
Или это следствие того, что стандартные функции тоже написаны на Вашем же творении?
Я стараюсь как можно меньше «пихать» в компилятор и по больше выносить в библиотеки.
мы копируем на стек 56 байтов (вызов use), чтобы затем снова скопировать на стек 56 байтов (вызов clone). Зачем ТАК сильно игнорировать указатели?
Use помечен как always inline так что ничего копироваться не будет, clone просто inline так что есть вероятность того, что clone также будет заинлайнен. Вообще я много изучал как оптимизирует llvm и clang, многие вещи написаны на первый взгляд не оптимально, но они написаны так, чтобы clang хорошо этот код оптимизировал, такую простую оптимизацию как передача значения через указатель, вместо копирования на стэк, clang делает даже на уровне оптимизации O0 (только что проверил на типе размером 56 байт).
Выходит, что useCounter нулевой (т.е. nullptr) у a_/b_, но почему-то не пустой у c_. В чём принципиальная разница? Видимо, в том, что строки «hello» и «hello 2» являются константами, а «Hello» – «собрана на куче»?
Да. Когда строки являются константами — им незачем счётчик, но для изменения буквы в c, строку необходимо было скопировать в кучу.
Тогда, наверно, «на куче» будет всё, кроме константых строк?
Нет. В данный момент только 2 типа имеют данные на куче, это Slice и Fluid.
Ну ещё константных массивов, по аналогии с int arr[] = { 0, 2, 4, 6, 8};?
Из слайсов пока к сожалению только строки так могут.
Переменная a – «на стеке» или «на куче»?
На стэке.
Так-то на стеке будет лежать только структура, а сами данные будут в куче?
Нет, всё на стэке.
Соответственно, в методе mutateLine счётчик на линии будет равен двум
Тут нет ни одного счётчика. Пока он есть только в Slice и Fluid, а здесь только UInt64 и Float.
Всё равно не понимаю.
Давайте приведу пример на си, который изобразит то, что происходит на приведенном вами примере.
#include <inttypes.h>

struct point{
    uint64_t x, y;
};

struct line{
    struct point a, b;
};

struct point createPoint(uint64_t x, uint64_t y){
    return (struct point){.x = x, .y = y};
}

struct line createLine(struct point a, struct point b){
    return (struct line){.a = a, .b = b};
}

void mutateLine(struct line *line, struct point p1, struct point p2, float f1, float f2){
    //здесь line изменяется
}

int main(){
    struct line a = createLine(createPoint(0, 0), createPoint(1, 1)); //a храниться на стэке (на саммом деле там где clang решит)
    struct line b = a; //в a не храниться ни каких указателей на кучу
                       //данные копируются из стэка в стэк (как clang решит)
                       //вызовы use и free - безсмыссленны (для типов без указателей они вообще не вызываются)
    mutateLine(&a, createPoint(2, 2), createPoint(3, 3), getRandomFloat(0, 1), getRandomFloat(0, 1));
    //для того чтобы изменить a, нужно передать ссылку на a
    return 0;
}

Строки 266-269 – use(newItem) есть, а free(oldItem) – нет.
Нет это не баг, use для newItem вызывается в программе явно, а free должен вставлять компилятор, но компилятор видит, что тип UInt8 и не вставляет бессмысленный free.
Мне очень понравилась статья. Сейчас и сам пишу язык, чтобы прокачать навыки. Был бы очень рад, если бы вы поделились своим опытом в этом деле и написали статью на эту тему. Спасибо!
В вашем языке уже есть какие-нибудь новые идеи?

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

А ваш собственный проект сейчас в какой стадии? Если что, здесь в хабе «Компиляторы» много народу с собственными языками и трансляторами (я в их числе). Для вдохновения пошерстите эти публикации. Если вы только начинаете заниматься этой темой, то для более фундаментальной подготовки почитайте классиков (я начинал с гениальной в своей простоте книги Compiler Construction Никлауса Вирта, но может быть, для вас это уже пройденный этап).

Он, к сожалению, пока только в стадии зарождения. На данный момент есть только переменные, а из типов данных только числа и хлипкая реализация массивов. Все компилируется в простой ассемблерный код, синтаксис NASM. Так как опыта довольно мало в этой сфере, приходилось несколько раз начинать сначала, сейчас чувствую, что на верном пути. Нет, этап не пройденный, сейчас дочитываю Креншоу, на работы Вирта ни разу не смотрел, как ни странно. Спасибо большое за литературу!

Был бы очень рад, если бы вы поделились своим опытом в этом деле и написали статью на эту тему

Если есть вопросы — спрашивайте. Telegram — taetricus.13, почта — 0.cine.developer@gmail.com.

Articles