Что-то давно не писал у себя в блоге
Запись от CoderHuligan размещена 29.01.2022 в 15:16
Показов 4046
Комментарии 31
|
Давненько сюда не заходил. Активно изучаю ассемблер, подтягиваю знания по компиляторам. Хотелось бы создать минималистичный язык программирования с широкими возможностями, который бы ПООЩРЯЛ НЕструктурный стиль, который ближе всего автоматам. Нечто среднее между basic и oberon, но проще их обоих. Также хотелось бы изолировать его от особенностей ОС, чтобы он имел свою микросреду исполнения, включая в себя свой экран, свои графические функции. Нечто вроде ос в самой ос, где есть ядро, вокруг которого крутятся приложения-модули. Не знаю, нужно ли это кому либо кроме меня, но в любом случае я уверен, что это то что нужно ради истины. У профи свои языки - пусть ими и занимаются. Я не профи, поэтому буду заниматься тем, что хочу. Может кому либо это и понравится. ЯП(Язык Программирования) - модульный. Это значит, что каждый модуль может загружаться отдельно по первому требованию (как в среде Black Box). Примерный синтаксис:
Вместо них переходы из состояния в состояние. Напомню, что сокрытие состояний не позволяет описывать алгоритмы в диаграммах UML. Состояния должны быть явно выделены. В данном диалекте они имеют цифровые метки - номера строк, как в basic. Чтобы поименовать конкретное состояние и защитить его от изменения, когда происходит пересчет меток, то перед меткой-состоянием ставится комментарий. Этот комментарий фигурирует и в тех-документации на приложение. Это сильно облегчает язык и помогает быстро его освоить. О дальнейших шагах буду сообщать, если решусь на это. Писать будем вместе.
| |||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 31
Комментарии
-
послушай была тут недавно тема такая:
пацан запутался там в бизнес-логике и у него депрессия.
я посоветовал ему сделать на конечных автоматах и сослался на тебя,
как на крутого спеца в энтих конечных автоматах.
Помоги ему сделать торгового робота,
он расставит их клоны по биржам.
они будут рубить бабло, почти уверен, что Лаборант щедро поделится с тем, кто ему вселит такой оптимизм.
а потом ты сможешь такой яз забабахать, что Маск без работы останется,
потому что любой дворник сможет на этом язе ракеты прогать....Запись от XLAT размещена 29.01.2022 в 15:34
-
Запись от CoderHuligan размещена 29.01.2022 в 15:59
-
Добавлю.
Звездочка после имени переменной означает, что эта переменная видима из вне процедуры. Это исключает поле параметров после имени процедуры при её объявлении. Звездочка после имени процедуры означает, что она видна в других модулях.
Рекурсия запрещена. Это позволяет иметь свой пул переменных, которые видимы только в данной процедуре. Свой пул переменных позволяет при повторном обращении к процедуре не передавать параметры, которые уже инициализированы и не должны быть переинициализированы. Это ускоряет код. Например, у нас есть функция которая принимает два параметра: первый имя массива, а второй его длину. при повторном вызове данной функции не нужно заново передавать длину массива, так как в пуле переменных это значение уже проинициализировано.
Также язык включает в себя: строки высшего уровня произвольной длины; обычные массивы произвольной длины, в том числе многомерные; гетерогенные массивы на списках; гетерогенные массивы на массивах(векторах). Кортеж это гетерогенный массив произвольной длины, который состоит из данных любых типов. Это придает мощность языку.Запись от CoderHuligan размещена 29.01.2022 в 16:12
-
Запись от CoderHuligan размещена 29.01.2022 в 16:15
-
Метки внутри процедур видны извне?
Сообщение от CoderHuligan
Запись от politoto размещена 29.01.2022 в 16:45
-
ок, напишу открытым текстом, но кратко:
Если Лаборант провалит своих роботов,
то твой яз тоже обречён - ты его просто не сможешь написать,
почему?
ну, это, эээ, примета такая...
экзистенциальные риски будущего имеют причины в настоящем,
провал локального события в будущем, как свидетельство нестабильной состоятельности системы в целом.
т.е. чо я хочу сказать то:
ты, я, лаборант это как спутанные фотоны, все мы в одной упряжке.
...Запись от XLAT размещена 29.01.2022 в 17:03
-
Запись от CoderHuligan размещена 29.01.2022 в 17:11
-
Запись от CoderHuligan размещена 29.01.2022 в 17:13
-
Запись от XLAT размещена 29.01.2022 в 17:47
-
Проблема в том, что название языка программирования, которое видится мне, взирая не тексты тут и в сравнении с собственными соображениями - представляется нечто ...
да конечно-же case - это не то, то - массив процедур или меток, чтобы так писать - нужно иметь некий склад ума исключающий условности и условия, заменяющий любой их характер и приоритет правилами по принципу - не порождать новых сущностей без необходимости.
Итак название -
stalker trail (тропа сталкера)...ну потому что написание кода исходя из таких соображений действительно напоминает движение по узкой тропе...
а название связанное с даосизмом было-бы не гуд.Запись от Hrethgir размещена 29.01.2022 в 23:25
-
и главное -исходя из диапазона допустимых значений можно приучить нейронку объявлять массивы меток, процедур, предлагать действия с ведущей переменной. Ведущая переменная - та переменная значение которой определяет индекс ячейки в массиве процедур или меток.
То-есть...можно сделать ассистента ижитькодить припеваючи, не вспоминая особа это...Илон Маска.
Но опять-же, такое программирование наверное будет не для всех подходяще, так как требует постоянной стандартизации решений везде и во всем. А это многим не нравится. Поэтому да - кодить припеваючи это позволит, а вот по жизни - не подыграет вообще никак.Запись от Hrethgir размещена 29.01.2022 в 23:33
-
Можно просто - stalker. назвать.. Тут в самом названии есть слово talk, которое по ангийски значит разговор, а по русски толк - значит толковый язык
Можно просто добавить процедурный тип, как в паскале и присваивать его векторам. при этом можно будет эмулировать ооп. А метки сделать вычислимыми, то есть их можно будет присваивать переменным и вычислять в ран-тайм. Я еще не знаю оставить выражения или избавиться от них.
Например, вместо x := а + b * a - c, писать * b a; + b a; - x b c; . это префиксная запись без вложений. результат вычисления отдельной команды-операции присваивается первому аргументу. если первый аргумент равен 0, то он не участвует в операции. Таким образом можно вычислять сразу много аргументов: + a b c d e: при этом произойдет сложение всех аргументов, а результат будет помещен в первый аргумент. Такая запись позволяет читать программу слева направо как книгу, так как тут отсутствуют вложенные конструкции благодаря отсутствию выражений. Все делается через регистры-переменные. Тут нет стека - все переменные явные и их можно "потрогать".Запись от CoderHuligan размещена 30.01.2022 в 12:06
-
Но такая запись будет слишком неуклюжей и длинной. Гораздо лучше поступить по другому и применить полную скобочную запись, которая позволяет отказаться от запоминания таблицы приоритетов для последующего чтения листингов программ. Например сишное выражение:
превращается вC 1
a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z'
при этом мы явно задаем порядок вычисления выражения, а при последующей верификации кода не нужно помнить таблицу приоритетов. Это сильно разгружает мозг программиста. а запись получается не намного длиннее исходной бесскобочной.C 1
((a >= 'a') && (a <= 'z')) || ((a >= 'A') && (a <= 'Z'))
Алгоритм разбора получается очень простым, а значит и быстрым.
Хотя могут быть возможные подводные камни, о которых хотелось бы услышать.Запись от CoderHuligan размещена 30.01.2022 в 15:05
-
Без IDE, которая бы рисовала стрелочками переходы, разбираться в этом будет трудно.
э-э-э... а не проще саму метку поименовать, раз все равно имя используется?
Как это должно выглядеть в коде? То есть у нас есть функция FF с глобальной переменной a, есть функция GG с глобальной переменной a и есть функция HH, тоже с глобальной переменной a, которая двух предыдущих вызывает.
C 1 2 3
int ff(int a){return a+1;} int gg(int a){return a*2;} int hh(int a){return ff( gg( sin(a) ) );}
Да в общем-то подводный камень один: большое количество скобок здорово затрудняет чтение и увеличивает риск поставить пятую закрывающую скобку не там.
Хотя тут тоже IDE с графическим режимом могла бы помочь: разнести группы скобок по вертикали, что-то вроде такого:
x = ( ( ( (a+1)*b ) + 3) / (c - 5) )
Только отступы не такие больше, а на четверть высоты где-то.Запись от COKPOWEHEU размещена 03.02.2022 в 10:10
-
Отступы - зло, по определению. Экран-то не резиновый.. Но это неизбежная дань привычкам.. Надо Рапиру реанимировать, вот чего не хватает! Там и множества из Setl и кортежи, и записи - всё что надо было. И он гораздо круче, чем паскаль с бейсиком. Но ввести метки и безусловные переходы. отталкивает русский синтаксис? Кого-то обязательно оттолкнет, это неизбежно. К сожалению Рапиру до сих пор никто не реанимировал, а зря.. В общем если приниматься за такое, то это конечно арх-сложная задача. и по идее ей должен заниматься коллектив. Лексер с парсером я допустим сделаю сам. Даже транслятор в виртуальню машину, в её байт-код сделаю. С трансляцией в машинный код сложнее. Надо подключать MASM. Хотя бы под вирт-машину сделать - это уже будет рабочий вариант.Запись от CoderHuligan размещена 03.02.2022 в 12:11
-
Запись от vantfiles размещена 03.02.2022 в 13:31
-
Запись от COKPOWEHEU размещена 03.02.2022 в 13:55
-
Зло не отступы, а низкий уровень квалификации. Если у вас с коде отступы заставляют улетать код за границы экрана, это значит одно, вы не доучились, и не умеете грамотно организовывать код.
Сообщение от CoderHuligan
Запись от voral размещена 03.02.2022 в 16:13
-
И компактней! Чем и привлекает forth! Однако! Меня лично очень напрягают вот эти: rot, dup, over, ведь они ну никак не относятся к смыслу решаемой проблемы, а только стек обслуживают. там все вертится вокруг этого стека, а то и двух. Это было бы хорошо если не было бы так печально.. А компутер это смею напмнить машина-то регистровая, а не стековая. И стек там всего лишь атрибут данности определенной парадигме.. Нет, forth не подходит, увы..
Разве что под капотом вирт-машины будет крутиться..
А для этого и создают доки, где все это должно быть прописано.
В идеале код должен идти в колонку сверху вниз, statement за statement. Тогда его можно писать в две-три колонки, и редакторы, которые на это способны есть. Говорят что vim на это способен.
А гуишный редактор можно сделать с подсветкой меток и переходов стрелочками и цветом.Запись от CoderHuligan размещена 03.02.2022 в 17:49
-
Вы опять путаете теплое с мягким.
Сообщение от CoderHuligan
Отступы ни как вообще не запрещают коду идти снизу вверх... Он всегда так идет. Тут вы опять пытаетесь неумение ограничивать вложенность блоков маскировать под выдуманные проблемы.
Писать код видя перед глазами несколько колонок.... Хм. Зачем?
Хотя. Изредка так делаю. Например удобно по каким то сиюминутным причинам видеть другую часть этого же файла, ну добавляю. ни каких проблем. Все перед глазами.
Более того вот прямо сейчас перед глазами (по ширине): колонка дерева проекта, код и окно браузера (правда монитор 21:9).
Вертикальная черта, которой ИДЕ показывает оптимальную длину строк (настраивается, но по умолчанию 80), сейчас по середине поля редактирования кода, т.е. я вообще без каких либо проблем могу разделить на две колонки.Запись от voral размещена 03.02.2022 в 18:09

Порезвимся напоследок.

