LINUX.ORG.RU

Ну ладно, можно смеяться и говорить «ненужно»

 ,


7

6

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

Он начался с того, что по работе понадобился транслятор с языка 1С и будет он примерно таким:

  • ключевые слова в кириллице, заточен на русскоязычных пользователей
  • работает через трансляцию в Cl
  • семантика от CL. Пока мало сделано, постепенно буду достраивать мосты до недостающих частей. Но некоторые вещи в семантике CL не годятся и будут заменены (модули, #., на другие пункты будем смотреть)
  • RAII - подобные конструкции
  • опциональная статическая типизация
  • элементы ФП: декларации для контроля мутабельности. Замыкания.
  • eval, REPL
  • опциональные типы примерно как в Rust
  • исключения и отладчик как в лиспе (вызов отладчика до раскрутки стека, во многих случаях возможность выкрутиться из ошибочной ситуации и продолжить выполнение)
  • треды
  • пошаговая отладка отдельных тредов, а также трассировка в лог или на экран
  • лицензия - пока не знаю. Скорее всего MIT, но нужно понять, как всё это соотносится с местным законодательством
  • файлы описания интерфейсов отделены от реализации этих интерфейсов, как в С (спасибо за участие в обсуждении)
  • горячая замена кода, естественно
  • сборка мусора
  • парсер линза, т.е. сразу создаётся фундамент под средства обработки исходников, как в CLang
  • совместное развитие среды, языка и инструментов - для этого я и запилил clcon
  • интерфейс к C (с ограничениями на применение сигналов и тредов в библиотеках)
  • встроенные sql запросы и вообще возможность встраивания других синтаксисов без специального закавычивания - с поддержкой со стороны среды
  • гуй на tcl/tk по технологии клиент-сервер. После версии 1.0 можно обсуждать Qt, но вряд ли будет слой переносимости между разными GUI. Возможно, будет генерация tcl/tk из крупных блоков по метаданным (это для бизнес-приложений скорее).
  • базовая реализация CL - SBCL (из-за лицензии).

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

// -*- package :S2TEST ; coding : utf-8 ; encoding : utf-8 ; -*-
/*
(in-package :s2test)
(named-readtables:in-readtable :buddens-readtable-a)

модуль Пример1;
*/

клсс к () ;
  а : строка = "базя" ;
  б ; 
кнцклсс

клсс к2 (к) ;
  в ; 
кнцклсс 

// здесь полные слова, потому что редкое слово
ГлобальнаяПеременная э;

фнкц МояСтраница() : строка ; 
 перем рез;
 ПостгресСОтдельнымПодключениемВДаннойНити();
 ПостгресПодключиться("db1","pguser","uio123","192.168.184.128");
 //ВОтладчик("ура!");
 рез = "<html><body>Поля глоб. перем. э k2</p>";
 рез = рез + ПоляИЗначенияЭкземпляра (э);
 рез = рез + "<p>" + строка(ПостгресЗапрос("select * from ошибка")) + "
 </p>";
 рез = рез + "<br><a href=""/"">Домой</a></body></html>";
 ПостгресОтключиться();
 Возврат рез;
кнцфнкц

ЗапуститьВебСервер(2425);
ВебСерверГлотатьОшибки(1);

СоздатьГенерируемуюВебСтраницу("/ura",смвл("S2TEST::МояСтраница"));

э = СоздатьОбъект(смвл("к2"));
э.б = 2; 
э.в = 3;

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

★★★★★

Последнее исправление: den73 (всего исправлений: 6)

Ответ на: комментарий от anonymous

а фриланс пых+жабоскрипт почему не катит?

Он же писал, что ему семью надо содержать.

ovk48 ★★★
()
Ответ на: комментарий от anonymous

а фриланс пых+жабоскрипт почему не катит?

Знаю ответ, но не могу сказать.

den73 ★★★★★
() автор топика
Ответ на: комментарий от tired_eyes

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

den73 ★★★★★
() автор топика

смсь, т.к. чнь ннжн

фнкц, кнцклсс, кнцфнкц, змн н {}, бдт кмпктн бъвлн нд сдлть тдльн, ндбн срз псл фнкц псвть см фнкц.

спхв тб ТС.

peregrine ★★★★★
()
Ответ на: комментарий от den73

В Swift это тип с вопросиком, т.е. «что-то или null». Это оно?

Ага. Правда я не знаю как в Swift, но в расте, в отличии от C#, где тоже «опциональные» (nullable) типы получаются при добавлении вопросительного знака, нельзя такой тип просто/случайно «разыменовать».

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

Например?

Ну и в расте, если что, Option/Result - не какие-то магические типы «зашитые в язык», а вполне библиотечная сущность аналог которой можно написать самому.

DarkEld3r ★★★★★
()
Ответ на: комментарий от ovk48

Значит обознался, на свой счет не принимай. Приведенная схема это просто дамп общих модулей, маркетинговое представление обработки обмена данными, рисования квадратиков со стрелочками и окошка раздачи прав. Для устрашения клиента и придания энтерпрайзности :)

arturpub ★★
()
Ответ на: комментарий от DarkEld3r

Типы в лиспе: а или б, один из множества, интервал чисел, объект, на котором функция имярек возвращает истину и т.п.

http://www.lispworks.com/documentation/lw50/CLHS/Body/04_bc.htm

Ну и в расте, если что, Option/Result - не какие-то магические типы «зашитые в язык»

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

den73 ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Спасибо. Тоже до конца твой коммент не распарсил. Выбрасывание гласных не всегда сохраняет смысл, всё же мы не Финикийцы.

den73 ★★★★★
() автор топика
Ответ на: комментарий от ovk48

А у тебя откуда дровишки о внутреннем устройстве?

arturpub ★★
()
Ответ на: комментарий от peregrine

бъвлн нд сдлть тдльн, ндбн срз псл фнкц псвть см фнкц.

Это вообще не понял. Так во всех языках. Но будут заголовочные файлы, типа как в С. Для отделения интерфейса от реализации.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Акромя (post-unless), покамест, ежели, авось/неужто (примитивы синхронизации), есьм (identity test), на том русь стоит (not implemented yet).

arturpub ★★
()
Ответ на: комментарий от arturpub

В 1с для сравнения используются <, >, <>, =. Угадай, зачем нужен 1cv7srct.st.

Есть неизбежное зло, а есть «избежное». Знаки сравнения, интуитивно, кажется, что встречаются гораздо реже, чем ограничивающие скобки.

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

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

А шаблоны я не люблю. Я быстро печатаю вместо этого.

den73 ★★★★★
() автор топика
Ответ на: комментарий от arturpub

Акромя (post-unless), покамест, ежели, авось/неужто (примитивы синхронизации), есьм (identity test), на том русь стоит (not implemented yet).

Спасибо, завёл файлик, может пригодится.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

«есьм» кстати, конкретно полезно. В CL 4 вот сколько предикатов равенства: eq,eql,equal,equalp. И к тому ещё =, char=, string=, string-equal, char-equal.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Как же ты свой язык тогда понимаешь?

Объявление надо сделать отдельно, неудобно сразу после функции писать саму функцию.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Тут на форуме есть один товарищ, он всё новые раскладки придумывает. С этим тебе к нему.

тут не в раскладке дело. Тут клавиатура другая нужна, ибо кнопок не хватает. Я себе купил клаву «X7», назначил кнопку для backspace, для переключения кириллицы и ctrl-g для емакса. Но стереотипы не сломать - перестал этим пользоваться.

den73 ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Как же ты свой язык тогда понимаешь?

Так я ж не на всё, а на малое количество недвумсмысленных случаев для самых часто повторяемых слов.

Объявление надо сделать отдельно, неудобно сразу после функции писать >саму функцию.

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

den73 ★★★★★
() автор топика

клсс

Ага, вот этот парень, который придумал creat.

anonymous
()

Кстати, я придумал методику открытия исходников, которая кажется мне более-менее надёжной:

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

2. Славлю сей проект на просторах сетей.

3. Аще кто изъявляет тягу поучаствовать, пусть пишут на ведро битов.

4. Каждый заявивший ся на участие получает ярлык «соискатель», закрыв три прорухи в clcon

5. Когда набирается 5 соискателей (или другое количество «ижица»), открываю исконные письмена.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от mystery

Это же пример только. сначала должно быть

ВебСерверОткрытьПриёмник
ВебСерверСосатьДанные

anonymous
()
Ответ на: комментарий от den73

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

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

и потом еще

ВебСерверТошнить

для отладки

anTaRes ★★★★
()
Ответ на: комментарий от peregrine

// ... int sum(int i, int j); // ... int sum(int i, int j) { return i+j; } // ...

Это так и будет. Будет что-то вроде заголовочников.

den73 ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Да так и будет, но в разных файлах. Как в С. Типы через двоеточие, см. пример. Тут нет разницы, что в классе, что в функции. Мотивация, почему так: потому что LL как его там легче читать, и компилятору, и человеку. Короче, чем меньше раз приходится при чтении текста возвращаться назад, чтобы его понять (или чем меньше стек), тем лучше.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

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

Deleted
()
Ответ на: комментарий от anonymous

Жабоскрипт дал ЛОРу анонiмуса. Даже метакластеры парадигм лиспа не порождали таких гениев.

Virtuos86 ★★★★★
()

В чем преимущество клсс перед «класс», аналогично для прочих сокращений?

ya-betmen ★★★★★
()

Может лучше как-то так:

фун дать_страницу(номер: Число): Строка
    пусть результат = 1
    вернуть результат

Ну и явно лучше:

  • фнцк - фун
  • перем - пусть
  • клс - класс
holuiitipun
()

осталось найти родные аналоги таких слов как:

класс - ясли, дружина?

объект - абракодабра? нечто?

функция - кудесница?

экземпляр - ... вон тот тип, гражданской наружности?

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

anonymous
()
Ответ на: комментарий от cdshines

взять(набор, 5)

Тогда надо взт(набор, 5).

vzzo ★★★
()

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

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

класс - ясли, дружина?

«род»

объект - абракодабра? нечто?

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

nezamudich ★★
()

я тебя уже ненавижу

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.