Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Софт
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 14:17   #1
Alex_San4ez
Новичок
Джуниор
 
Регистрация: 24.02.2013
Сообщений: 6
Радость Язык программирования Astra

Всем привет!

Хотелось бы представить здесь свой проект языка программирования. Назвал Astra (на вопрос "почему?", наверное, не отвечу: просто в один прекрасный день пришло в голову ).

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

Что есть в языке сейчас:
  • Средства работы с переменными (куда ж без них) - здесь небольшой сюрприз: типов данных как таковых в языке нет, что никак не мешает
  • Очень сильная на мой взгляд система массивов
  • Возможность работать с файлами
  • Условия, циклы (while + for как синтаксический сахар)
  • Сегменты для удаления ненужных далее участков кода
  • Блоки switch (пока без поддержки вложенности) - работают с переменными любого типа
  • Длинная арифметика чисел (+ - * / % // - деление без остатка)
  • Пользовательские функции (о встроенных умолчу - куда же без них)
  • Цепочечные сравнения безо всяких ограничений (а-ля a<b<>c>=d=e - можно!)

Что ещё не доработано (не сделано):
  • Длинная арифметика не поддерживается оператором ** (возведение в степень)
  • Нет средств для прямого доступа к памяти через адреса
  • Нет возможности включать файлы в проект из каталога с exe-файлом интерпретатора
  • Отсутствует функция для работы с регулярными выражениями (раньше была, сейчас решил переделать целиком)

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

Вангую множество вопросов на тему "типы данных". Отвечу просто: быстродействие не пострадало никак, зато очень легко собирать числа из составных кусочков (да и с длинной арифметикой полегче).
Кстати о быстродействии. Недавно проводили тестирование на счёт от 1 до 1000000 с выводом их всех на экран. Результаты:
  1. C++ - 42 секунды
  2. C# - 50 секунд
  3. Astra - 51.5 секунды
  4. Pascal - 70 секунд
  5. PHP - 70/90 секунд (в зависимости от способа вывода)

Архив со всем необходимым прикрепил (доки, exe-шник x64 - для Win32 (x86) получилось создать только Debug-exe (с прикрученным тормозным отладчиком), но он тоже в архиве - кучка примеров - есть даже функции из "стандартной библиотеки")
=== Astra.rar ===

Вот кстати небольшой примерчик - определение функций, обрезающих нужные символы с разных крёв строки:
def ltrim(s,c) ; с левого краю
while mid(s,1)=c do let s$,substr(s,2,length(s)-1)
return s
def rtrim(s,c) ; с правого краю
while mid(s,length(s))=c do let s$,substr(s,1,length(s)-1)
return s


Ах да. На данный момент - самая большая моя программа на Astra - это полностью рабочий интерпретатор Brainfuck-а. Тоже находится в архиве

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

Последний раз редактировалось Alex_San4ez; 24.02.2013 в 14:58.
Alex_San4ez вне форума Ответить с цитированием
Старый 24.02.2013, 15:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это компилятор или интерпретатор?
Он как бейсик один оператор - одна строка, или многострочный?
Он как питон требует обязательных отступов?
Цитата:
Очень сильная на мой взгляд система массивов
Поточнее пож. Кортежи, словари, ассоциативные массивы...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2013, 15:08   #3
Alex_San4ez
Новичок
Джуниор
 
Регистрация: 24.02.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это компилятор или интерпретатор?
Он как бейсик один оператор - одна строка, или многострочный?
Он как питон требует обязательных отступов?

Поточнее пож. Кортежи, словари, ассоциативные массивы...
Будем по порядку
1. Интерпретатор. В этом вся забава приведённых результатов теста.
2. Пожалуйста, поподробнее. Я знаю Бейсик, но вот смысл понятия "многострочный" для меня покрыт завесой тайны
3. Он вообще не требует никаких отступов. Все пробелы ставятся на усмотрение автора программы. Пробел между командой и параметрами, всё же, лучше ставить
4. По сути дела, почти всё сразу. Каждый отдельный элемент массива - это отдельная переменная в общем для них участке памяти. Значит, массивы не нужно объявлять, только инициализируем элементы. Похоже на расширяемый вектор. Но дополнение: не обязательно нумеровать элементы по порядку. Это уже а-ля словарь. Причём можно сочетать индексы самых разных типов данных (из-за их же отсутствия): a[10]["trololo"][6.28] - например.

Последний раз редактировалось Alex_San4ez; 24.02.2013 в 15:16.
Alex_San4ez вне форума Ответить с цитированием
Старый 24.02.2013, 15:25   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Цитата:
2. Пожалуйста, поподробнее. Я знаю Бейсик, но вот смысл понятия "многострочный" для меня покрыт завесой тайны
Поддерживает такое?
Цитата:
if Condiniton1 And
Condition2
or
ConditionN
{comment}
then
или только так:
Код:
if Condiniton1 And Condition2 or ConditionN {comment} then
Это учень нужная вещь, например на мелких мониторах, когда весь код перед носом.

Шикарно. На руби и пхп похож. Там не надо тип переменой задавать и разные типы массив есть. Вот бы в delphi так же... ^-^

Последний раз редактировалось Человек_Борща; 24.02.2013 в 15:35.
Человек_Борща вне форума Ответить с цитированием
Старый 24.02.2013, 15:28   #5
Alex_San4ez
Новичок
Джуниор
 
Регистрация: 24.02.2013
Сообщений: 6
По умолчанию

Нет, в таком случае - только однострочный.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Шикарно. На руби и пхп похож. Там не надо тип переменой задавать и разные типы массив есть. Вот бы в delphi так же... ^-^
Кстати говоря, из Руби я заимствовал оператор <=>
Иногда бывает очень полезно, например, определить знак числа: -1, 0 или 1:
def sgn(a)
return a<=>0
Alex_San4ez вне форума Ответить с цитированием
Старый 24.02.2013, 15:39   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,171
По умолчанию

Вопрос: для чего этот язык? Чем он лучше других?
ADSoft вне форума Ответить с цитированием
Старый 24.02.2013, 15:39   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
1. Интерпретатор.
Зачет.
Цитата:
3. Он вообще не требует никаких отступов.
Зачет.
Цитата:
Каждый отдельный элемент массива - это отдельная переменная в общем для них участке памяти.
Для интерпретатора зачет.

Предложение:
Я в своем ЯВУ решил сделать для функций параметризированные параметры полюбому.
Вот например один из моих скриптов для передачи файлов по FTP:
Код:
(a <- '1.1.1.2' '1.1.1.3')
(for i in a
  (if (f := ftp host=i)
    (
	  (writeln 'Подключились к ' i)
	  (call f.del files='d:\n\*')
      (writeln 'Почистились ' i)
      (if (call f.put from='c:\Users\Me\Desktop\n\*.txt' to='d:\n\')
       (
         (writeln 'Передали на ' i)
         (call f.cmd text='msg Коллеги, принимайте')
       )
       (writeln 'Ошибка передачи на ' i)
      )
    )
    (writeln 'Нет связи с ' i)
  )
)
Здесь создается массив "а" с адресами (ассоциативный как и у тебя, это сейчас модно). Далее в цикле по нему идет подключение, и тут я передаю конструктору именованные параметры:host=i. У объекта ftp есть свойство host. которое тут и инициализируется.
Тоже самое: f.del files='d:\n\*'. У этого обьекта есть медод del, которому передается параметр files. Так же ему можно передавать и другие параметры, которые обьясняют методу что ему делать.
Не просто и тупо f.del(''d:\n\*'), а под именем, чтоб было понятно что это.

Тоже самое f.put from='c:\Users\Me\Desktop\n\*.txt' to='d:\n\'
from указывает откуда брать файлы, to - куда их ложить.

Рекомендую и тебе реализовать такое, ибо код становится более читабельным.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2013, 15:47   #8
Alex_San4ez
Новичок
Джуниор
 
Регистрация: 24.02.2013
Сообщений: 6
По умолчанию

Stilet, спасибо, серьёзно подумаю насчёт этого

Цитата:
Вопрос: для чего этот язык? Чем он лучше других?
Ну, вообще, язык этот я делал для себя, по тем параметрам, с которыми мне было бы удобно программировать. Как оказалось, эксперимент удался, и мне всё очень нравится - как пример, программа перевода систем счисления по объёму кода примерно раза в 2 меньше, чем аналогичная на C++. Основной упор, конечно, я делал на длинную арифметику и отсутствие типов данных - что опять же в связке даёт удивительный результат (как я уже говорил выше - числа проще собирать из составных частей; добавлю лишь ещё, что все строковые функции доступны и для чисел без лишних конвертаций туда-сюда).

Ну, а чем лучше - в общем-то, как раз теми спецификациями, о которых я уже упомянул. Где-то реализовано одно, где-то другое. Я вот, например, собрал очень вкусные моменты воедино и решил показать всем, что у меня получилось. А почему бы и нет?
К слову сказать - исходники самого интерпретатора кроссплатформенны, поэтому лишь вопрос времени, когда я доберусь до других ОС. К тому же, мой язык лишён многих минусов других популярных вещичек - опять же, например, не такой строгий контроль за отступами, как в Python.

Последний раз редактировалось Alex_San4ez; 24.02.2013 в 15:58.
Alex_San4ez вне форума Ответить с цитированием
Старый 24.02.2013, 16:11   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Alex_San4ez Посмотреть сообщение
Язык прошёл уже около 7 версий тестирования (с участием только пары человек), теперь пришло время показать всем результаты своей полугодовой работы.
Вопрос первый - зачем?

Поясню: каждый программист изобретал свой собственный язык программирования, причем, зачастую - не один.
Чего именно Вам не доставало в уже придуманных до Вас языках и, самое главное:
Почему Вы думаете, что Ваш язык будет кому-то интересен кроме Вас?
Цитата:
Вангую множество вопросов на тему "типы данных". Отвечу просто: быстродействие не пострадало никак, зато очень легко собирать числа из составных кусочков (да и с длинной арифметикой полегче).
Кстати о быстродействии. Недавно проводили тестирование на счёт от 1 до 1000000 с выводом их всех на экран. Результаты:
  1. C++ - 42 секунды
  2. C# - 50 секунд
  3. Astra - 51.5 секунды
  4. Pascal - 70 секунд
  5. PHP - 70/90 секунд (в зависимости от способа вывода)
Вы хоть сами понимаете, что:
1. Данный "тест" измеряет исключительно свойства функций ввода/вывода используемой ОС и никакого отношения к "быстродействию" языка программирования не имеет.
2. Следовательно, чтобы делать вывод, пострадало или нет "быстродействие" этот тест абсолютно не подходит.

Есть же более или менее стандартные тесты, например, тест Джека Донгарры - переведите его на свой язык, тогда и будет понятно, как обстоит дело с "быстродействием" и как на нем сказалось отсутствие типизации.
s-andriano вне форума Ответить с цитированием
Старый 24.02.2013, 16:18   #10
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,171
По умолчанию

распространённость языка обуславливается богатыми наработка ми на нем.. библиотекам SDK, IDE итд .... у вашего языка думаю просто нет будущего
.. для интереса.. для себя - да хорошая вещь
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык программирования С Mariolka Помощь студентам 11 15.12.2012 20:44
Язык программирования D pproger Общие вопросы по программированию, компьютерный форум 2 24.05.2012 05:01
Язык программирования С++ Jasper92 Свободное общение 2 09.11.2009 13:51
язык программирования Си Ruslan0990kz Общие вопросы C/C++ 1 03.06.2009 22:01