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)

клсс

кнцклсс

нуты упрлс

mbivanyuk ★★★★★
()
Ответ на: Склонения и спряжения от Camel

Такое вполне читабельно (язык Кумир):

цел Н = 7
цел таб а[1:Н]
алг 
нач
  цел сч, сч2, индекс, сумма, сумма_текущая
  цел таб б[1:Н]
  сумма := 0
  индекс := 1
  нц для сч от 1 до 10
    сумма_текущая := массив
    если сумма < сумма_текущая то
      сумма := сумма_текущая
      индекс := сч
      нц для сч2 от 1 до Н
        б[сч2] := а[сч2]
      кц
    все
  кц
  вывод индекс, нс
  вывод сумма
кон
 
алг цел массив
нач
  цел сч
  знач := 0
  нц для сч от 1 до Н
    а[сч] := int(rand(0,50))
    вывод а[сч], " "
    знач := знач + а[сч]
  кц
  вывод " - ", знач, нс
кон
monk ★★★★★
()
始
  接口=1234
  開展服務器(接口)
末

вот язык будущего, не?
сокращать ничего не нужно, можно ооочень компактные проги писать ;)

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

Идеи взяты из синтаксиса Java, Erlang, Python. Типизация - Python 3.5 (типизация через двоеточие).
Знаки препинания - Erlang, там идёт так: запятые между операторов, точка с запятой между перегрузками функции, точка в конце определения функции.
Т.к. типизация аргументов через двоеточие, то неплохо тип возвращаемого значения взять после двоеточия.
А именование camelCase-ом из Java.
В общем, из Erlang ещё аргументы (там есть свои хитрости, давно писал, не помню, но то, что «переменные» - то с большой буквы, остальное - для хитрой перегрузки функции).

Я тоже на тему, подобную идее den73 давно думаю.

Хотелось бы скрестить лучшее из Erlang, Java, Python, Lisp (CL или Scheme), и получить что-то вкусное. Только мне очень нравится функциональный стиль. Только я его не полностью освоил, поэтому идея с синтаксисом циклов у меня до сих пор варится в голове.

Правда, я хочу стащить из Erlang только способы общаться между потоками, сами потоки для прикладных приложений зелёными делать не надо. Им не 10k соединений держать.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 2)
Ответ на: комментарий от monk

Такое вполне читабельно (язык Кумир):

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

Транслятор с 1С возможен (и даже есть у меня такой), но совместимости не добиться. У 1С есть принципиальные отличия, которые не позволят сделать языки совместимыми:

- подсчёт ссылок

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

- семантика работы с числами другая. Кажется, там числа даже не double, а какое-то BCD

Это я говорю про 7-ку. 8-ку не знаю.

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

Бывший 10-лет-1сник итт. Для чего это нужно? 1с это замкнутая среда с уникальным (не значит хорошим) уи-фреймворком, аппсервером и набором специфичных дб-объектов, построенная из говна и палок на COM-технологии. Чтобы исполнять 1с-код, нужен проект размером с 1с. Чтобы писать по-русски, я тебе скину патч к луа/луажиту, а если надо, пропатчу топовую 5.3. Скажи только как и куда. Там 10 строк поменять и он полностью русский, не считая запиленных мной лямбд и прочего синтаксического бреда.

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

Кстати, названия нет пока что. Текущее рабочее название s2, но это потому что сначала было 1C, потом надо было отличить, а потом сделать, чтобы название было идентификатором. Предлагайте варианты, поржём.

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

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

Поэтому теперь я _собираюсь_ стать одинэсником.

Завтра я запишусь на курсы 1С. И стану 1С-ником. Потому что это

выгодно и есть вакансии в моём городе.

Искренне сочувствую.

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

Числа не дабл, да. Там афаик 40 знаков точности. Для параметров есть знач. Это как var в паскале и & в крестах, только наоборот.

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

Я тоже на тему, подобную идее den73 давно думаю.

Функциональный стиль не для всех задач. Окно, файл, директория, поток, запись в базе данных - всё это не чисто ФП объекты.

Кстати, я планирую декларацию const, что-нибудь типа pure и, наверное, что-то типа no-cons (не выделяет память в куче). Функции первого класса уже есть в примере. Ща добавлю в список фич.

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

ну именно с такими фичами очевидно никто кроме тебя не сделает ))

а вот чтоб русский --- это прикольно вообще, мне нравится, но зараза не взлетит, не межнационально оно :(

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

мертворожденненько :(

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

Кстати, есть такая идея,

cons = пара
car = муж
cdr = жена

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

Не стоит сочувствовать. 1С - это помощь конкретным людям, а это улучшает настроение. И это осмысленная вещь. А вот JavaScript - это бредятина, несмотря на свою популярность.

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

подсчёт ссылок

Чем это с точки зрения использования от GC отличается?

передача всех параметров по ссылке

Это да. Тривиально эмулируется боксингом (все объекты = структуры с одним полем). Нетривиально — через макросы (каждая функция переписывающая параметры является макросом, обновляющим переданные переменные).

семантика работы с числами другая

В 1C 8 очень похоже на стандартный rational (в смысле common lisp). По крайней мере в вычислениях отличий я не нашёл.

monk ★★★★★
()

Ааааа!!!!11 *хлопнулся в обморок*

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

а вот чтоб русский --- это прикольно вообще, мне нравится, но зараза не взлетит, не межнационально оно :(

1С же взлетел.

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

Знаки препинания - Erlang, там идёт так: запятые между операторов, точка с запятой между перегрузками функции, точка в конце определения функции.

Самое упоротое в эрланге как по мне.

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

Чем это с точки зрения использования от GC отличается?

Например, тем, что при выходе из области видимости значение локальной переменной немедленно финализируется, если известно, что на него нет других ссылок. На этом я сделал RAII для 1С 7 (и для Дельфи кстати, через интерфейсы).

Тривиально эмулируется боксингом

Это я уже давно сделал: https://bitbucket.org/budden/budden-tools/src/default/pass-by-ref.lisp?at=def...

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

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

1С же взлетел.

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

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

так вот я и спрашиваю, оно как-то вяжется с одноце? или что это будет-то? вектор развития есть?

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

Ты опоздал лет на 10.

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

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

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

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

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

вектор развития есть?

Вектор развития во многом определяется наличием платёжеспособного спроса.

Я бы предпочёл атаковать нишу Python (потому что лисп быстрее, более масштабируем, и вообще, более правильно спроектирован), Java (из-за лицензий, нативной компиляции и более гибкого языка) и C++ (более простого языка, быстрой компиляции), чем 1С. Из них Python представляется наиболее лёгкой жертвой.

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

Чтобы говорить о развитии, мне нужен один реальный проект, зацепиться. А пока дела обстоят вот так: Ну ладно, можно смеяться и говорить «ненужно» (комментарий)

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

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

Ну то, что до «дб-объектов», можно конечно со скрипом принять, но где ты в архитектуре платформы увидел COM в качестве основы?

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

она поставила цель «бухучет для бухов».

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

ovk48 ★★★
()

Ончь крт атвр тпрь мжно клмпрвть кмксы. Ткл инртсно кк прзоисть эти фкнции?

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

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

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

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

Deleted
()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от Rastafarra

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

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

ну вот лет 10 я за ней и не слежу ))

А зря. Там теперь все примерно вот так: http://s019.radikal.ru/i611/1511/c9/97ed910c7431.png

а что там нынче в целях?

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

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

Это с высокой вероятностью проводник 1с-маркетинга, часто встречающийся элемент франчайзинга

Чойта? Я во франче слава Богу не работаю :) Просто опыт есть.

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

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

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

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

Речь о типе Option или о чём-то другом?

Сказать честно, я прочитал о нём в книжке про Swift. В Swift это тип с вопросиком, т.е. «что-то или null». Это оно? В лиспе, к слову сказать, может быть гораздо больше разных интересных типов, в т.ч. параметрических. Но пока не ясно, буду ли их включать, а сахара для них точно не будет.

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

Завтра я запишусь на курсы 1С. И стану 1С-ником. Потому что это выгодно и есть вакансии в моём городе.

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

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

Как не вспомнить классику: http://lurkmore.so/images/d/d8/Prlng.jpg

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

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