Новый язык
Короче, подумываю создать свой язык для иерархического (:)) структурирования данных. Применять хочу в файлах конфигурации, аналоге реестра Windows, базах данных и т.п. Язык должен стать аналогом XML и других языков описывающих различные данные. Вот примерно так должен будет выглядеть файл, описывающий файл в папке, например:
1[Example.asm] ; имя файла
2[ExtenInfo] ;расширенная информация о файле
3[Long Name[]Example of Application.asm] ;параметр Long Name, [] значит что конечное значение Example of Application.asm - это текст
.[Attributes[bin]01100010] ;параметр Attributes, [bin] значит что конечное значение 01100010 - это двоичное число
.[Type[]ASM File] ; также, как и с Long Name
.[Icon[file]Example.ico] ;файл с иконкой для Example.asm
.[CheckSum[str]W#4-05f;v235c]
2[Opening] ;инфа для файловых оболочек
3[OnOpen[]fasm.exe Example.asm Example.exe] ; после [] стоит командная строка, которая выполняется по двойному щелчку кнопки мыши
.[OnContext[]Open=tinypad[]Compile=fasm.exe Example.asm Example.exe] это в контекстном меню
Собственно типы данных:
1[Text[]This is Text] ;обычный текст
.[Decimal Number[dec]543] ;десятичное (вещественное) число
.[Hex Number[hex]12DE3F] ;шестнадцатеричное число
.[Hex Sequence[hseq]1A00AA10545DA31E34D0FF0 ; последовательность байт
.[Binary Number[bin]0101010001] ;двоичное число
.[Byte Stream[str]F3&44v=\+\\3dSSQQ]; последовательность байт, представленная в виде текста (как в MIME)
.[File[file]/rd/1/config/autorun.cfk]; ссылка на файл конфигурации, работает наподобие асм-директивы include
.[Link[lnk]/Data Types/Text/Text] ;ссылка на параметр в этом файле, или в файле, который связан директивой [file], при запросе параметра, выдаст This is Text
Понятно, что все это похоже на полную чушь и/или на китайскую грамоту, но может кто-нибудь посоветует, как улучшить синтаксис и удобочитаемость кода? Заранее спасибо)
Пока писал эти строчки, уже ответить успели ;)
Короче, подумываю создать свой язык для иерархического (:)) структурирования данных.
Это приветствуется, но надо какое-то вступление, некое разъяснение, какие недостатки XML, YAML, JSON и т.д. будут устранены в новом языке, чем он будет лучше их.
ну ииии что? вообще конечно, пишите, творите, создавайте на здоровье... но смысла то особого я не вижу... хотя бы относительно избыточного синтаксиса, так его в вашей поделки уже в два раза больше чем в xml и конструкции мего монстроподобные. вместо того, что бы делать велосипед доработайте луче xml, устраните его недостатки, мы вам спасибо скажем.
Ну во-первых, это избыточность в XML, в X языке избыточность будет меньше, во-вторых парсер под мой язык будет легче сделать, чем для XML (а операционная система, для которой я его собираюсь сделать, вообще не имеет XML-парсеров и библиотек для работы с XML, поэтому, IMHO, легче сделать с нуля библиотеку для чтения/изменения данных для моего языка, т.к. машина язык X будет быстрее и легче обрабатывать, нежели другие), ну и в-третьих охота выпендрится :D
Так это про XML. А чем он лучше YAML будет? И других подобных языков?
Про это не было сказано. Делайте поддержку стандартного Си, и всё будет. А может у вас уже есть аналог gcc.
Если выпендриться надо не только перед соседом по парте, то для этого всё равно надо будет делать какую-то сравнительную таблицу, с помощью которой можно будет показать преимущества языка.
ааа... и дайте угадаю, ось тоже вашего пера, психиатра подсказать??? ну или дос в противном случае тогда!
ну тогда относительно замечаний, пример с файлом просто ужасен. много лишнего и не нужного! лучше ввести стандартный набор типов и секции, а так же некий универсальный тип объекта, которые мог бы обобщать всю секцию, или даже не знаю такую мего именованную секцию что ли. затем вам надо определиться со структурой, реляционная, дерево и тп. а мего тип "файл" с сотней полей из которых используется два - это есть глупость.
составьте себе план, что вы хотите получить, какие баги исправите, а какие наплодите, бо в противном случае все тут сказанное пустой треп. вы представили кусок чего то непонятно, мы все дружно похихикали и на этом все закончилось. просто по куску воображаемого файла сложно что то сказать, надо иметь представление в целом, хотя бы и очень общие.
ЗЫ:
голословное утверждение. докажите!
ЗЫЗЫ: а вообще вся затея напоминает это. ознакомьтесь.
Нет ось не моего производства, ось эта - KolibriOS.
психиатра точно не надо???:D
Просто я сейчас делом занят, нет времени развернуться во всю мощь, как прежде... А Artem_3A ещё не прокачался, поэтому только толсто может. Но я верю, что он научится менее прямолинейно троллить со временем.
А может лучше не надо фигней страдать?
Как я вижу? Пришёл энтузиаст, который хочет создать свой язык, просит совета. Зачем на него грубо наезжать? Можно дать ссылки на технологии, другие языки, может книжки, чтобы он сам мог понять, нужен ли этот язык.
С другой стороны, для тренировки каких-то умений иногда лучше не перегружаться теорией - не переварится. Для практики можно сделать интерпретатор какого-то своего языка. После этого и чужие технологии будут проще восприниматься.
Например, если захочется усовершенствовать навыки работы с регулярными выражениями, или разобраться с инструментом типа PLY, то разработка языка может помочь.
Или вообще, если кого-то интересует теория синтаксического анализа, то тоже можно так играться.
С другой стороны, для тренировки каких-то умений иногда лучше не перегружаться теорией - не переварится. Для практики можно сделать интерпретатор какого-то своего языка. После этого и чужие технологии будут проще восприниматься.
Например, если захочется усовершенствовать навыки работы с регулярными выражениями, или разобраться с инструментом типа PLY, то разработка языка может помочь.
Или вообще, если кого-то интересует теория синтаксического анализа, то тоже можно так играться.
Ну подсказать и посоветовать != затроллить (в любом виде).
Да че то правда, троллинг во всех его проявлениях достал, не?
Pterox'у респект за терпение. Ну и за целеустремленность, пожалуй.
{
[Position]
{
[X]=[543];
[Y]=[678];
[Z]=[0];
[Type]=[Global];
}
[Orientation]
{
[X]=[rad[3.14]; ///префикс rad - радианы
[Y]=[rad[0];
[Z]=[rad[1.376];
[Type]=[Global];
}
[Def Color]=[h[0F0F0F]; /// префикс h означает что это hex-число
[Enabled]=[bool[1]; /// bool означает bool =)
[X-Ray]=[bool[0];
[Texture]
{
[Stream]=[FD3Scr*$wd&@V#vrKNvrdf!13_d6we...]; ///бинарная посдеовательность представленная как текст (как в base64)
[X Offset]=[%[02];
[Y Offset]=[%[50]; ///%, как вы догадались, - проценты
[Projection]=[UVW];
...
}
[Tags]4]=[Sphere][Сфера][Шар][Globe]; /// массив из четырех строк
[Fixing]=[bool[0]
{
[Fixing Point]
{
[X]=[ref[../Position/X]; ///ссылка на значение координаты Position.X
[Y]=[ref[X]; ///равно [X]
[Z]=[sysval[Random]; ///координату Z определяет системный генератор псевдослучайных чисел
}
}
}
Конечно, я привел этот вариант только для примера, тегов там должно быть куда больше. Вот примерно такой язык будет. Конечно синтаксис не блещет оригинальностью (в отличие от предыдущего :D), но зато интуитивно понятен и прост для редактирования. При этом в файле написаном на ©®Моем Языке©® :) можно хранить хоть какие данные (даже сжатые), название тегов могут быть какие угодные (лишь бы не было управляющих символов {}[]), и при этом присутсвуют дополнительные прибамбасы. В общем, блэкджек и шлюхи обещаются :D А еще открытая спецификация, гы.
А зачем модульность в языке описания данных?
Незачем заморачиваться с изобретением ещё одного YAML, вполне достаточно замутить просто расширение YAML под какую-то конкретную задачу (если таковая наличествует), а если задачи нет - то просто замутить парсер YAML и не париться. Устройство языка - поймёте, устройство парсера - поймёте, парсер - сделаете, продукт не только открытый, но и общепринятый, а это - уверяю вас! - гораздо важнее.
Простой пример: Adobe Photoshop - продукт по большей части закрытый, но чертовски общепринятый, буквально что промышленный стандарт. Свой круг задач этот продукт решает как никакой другой. И решительно никого не волнует проприетарная лицензия, копирайты и прочая муть.
Писать велосипеды - само по себе не зло. Это плохо вот почему: вы тратите время на делание того, что уже сделано, приобретая по сути мёртвые навыки и знания. Придумав свой язык, вы не сможете его использовать, потому что даже если он лучше XML, он точно не лучше JSON/YAML, а значит шансы использовать такой язык кем-то кроме вас невелики. Между тем, вся наша (и ваша) работа строится вокруг ответа на вопрос "для чего?", и вы привлекательны (для пользователей вашего продукта) ровно настолько, насколько привлекателен ваш ответ на этот вопрос. И хотя разработкой "велосипеда" вы легко покажете, насколько вы крутой программист, но такая работа говорит и о том, насколько вы плохи и недальновидны как разработчик и проектировщик.
По этой же причине троллингу подвергается любая попытка сброситься умами и написать ОС под девизом "ибо винда достала" – ибо на самом же деле авторы такой идеи только потратят время, не сделав ничего.
Ну и вообще: пользователям не нужны стандарты и даже продукты, им нужно решение задач. Стандарты нужны продуктам, решающим задачи, но не более того.
Можно ещё проще, если отступы имеют значение для парсера ;) :
class Position:
X = 543
Y = 678
Z = 0
Type = Global
class Orientation:
X = rad(3.14) # функция rad - радианы
Y = rad(0)
Z = rad(1.376)
Type = Global
Def Color = 0x0F0F0F
Enabled = True
X-Ray = False
class Texture:
Stream = bynary("FD3Scr*$wd&@V#vrKNvrdf!13_d6we...") # бинарная посдеовательность представленная как текст
X_Offset = per_cent(2)
Y_Offset = per_cent(50) # %, как вы догадались, - проценты
Projection = "UVW"
Tags = ["Sphere", "Сфера", "Шар", "Globe"] # массив из четырех строк
Fixing = False
# дальше не распарсил, ибо потеряна квадратная скобка...
Кстати, у меня есть парсер для такого формата. Правда, делал не я.
У меня тоже, но я к нему руки таки приложил и продолжаю прикладывать. :D
а что, если текстовый редактор с этими отступами накосячит при сохранении и редактировании (удалит, например)? да и при большом количестве вложенных class'ов работать с этим файлом будет не совсем удобно (большая длина строк)
а если я захочу написать rad(3.14) как текст? конечно программа может и сама определить тип, но если это сразу будет делать парсер, имхо, скорость выполнения увеличится
З.Ы. Также в моём языке можно будет использовать безымянные элементы:
{
=[Text];
=[h[0x4434];
=[b[01010010100];
=[lnk[/0];
}
Или заменит на пробелы.
А почему бы не заключать текст в кавычки? Тогда можно будет в значении использовать и служебные символы, что может пригодится.
Нормально всё. Куча людей используют этот формат:
http://ru.wikipedia.org/wiki/Python
или даже просто
http://python.org/
Большое количество вложенных классов в любом случае неудобно смотреть. Поэтому можно предусмотреть ещё и объекты.
Лучше использовать 4 пробела вместо таба. Или 2, если предполагается, что текст будет распечатан.
[QUOTE=Pterox]да и при большом количестве вложенных class'ов работать с этим файлом будет не совсем удобно (большая длина строк)[/QUOTE]А какая необходимость вкладывать много классов друг в друга? Кстати, существуют ещё пространства имён. Правда, это больше относится не ко вложениям классов, а к наследованию, но лично мне большое количество вложенных классов говорит о не очень хорошем проектировании структуры данных. Или я неправ?
Ах да. Есть же директива #include, разве не поможет она с проблемой глубокой вложенности?
LISP снова переизобретен?
Да, быть может это так :D:D
Lisp может выступать как язык описания данных. Ибо в Lisp нет различия между данными и программами.