Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Разработка информационных систем Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 38 39 40 41 42 [43] 44 45 46 47 .. 52   вперед  Ctrl
 Re: Новый 1С - подобный язык и среда  [new]
hVostt
Member

Откуда:
Сообщений: 15463
Со стеком вообще перебор. Надо просто разделить объекты в куче (доступные по ссылке) и объекты-значения, и максимально скрыть подробности реализации.

«объект-на-стеке», это либо непонятный мне прорыв, либо какая-то жесть :)
29 апр 17, 18:03    [20446213]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
hVostt, можно попросту так:
о:синоним-типа пч = '<плавающее-число-двойной-точности>'

о:функ Получить-корни-квадратного-уравнения(а -- пч, б -- пч, ц -- пч) -- список
тело
  пусть д = ч:знак(б) * корень(степень(б,2) - 4 * а * ц)
  пусть х1 = (0.д0 - б - д) / (2 * а) 
  пусть х2 = ц / (а * х1) 
  н.список(х1,х2)
кнф

И получим на выходе список из неких значений (тип в статике неизвестен). Либо
о:синоним-типа пч = '<плавающее-число-двойной-точности>'

о:структа корни-квадратного-уравнения 
поля 
  к1 -- пч
  к2 -- пч
кнс

о:функ Получить-корни-квадратного-уравнения(а -- пч, б -- пч, ц -- пч) -- корни-квадратного-уравнения
тело
  пусть д = ч:знак(б) * корень(степень(б,2) - 4 * а * ц)
  пусть х1 = (0.д0 - б - д) / (2 * а) 
  пусть х2 = ц / (а * х1) 
  н.корни-квадратного-уравнения к1 х1 к2 х2 кнк
кнф


С кортежами мы боремся :) Хотя в лиспе они есть.

Вопрос про стек - в том, насколько важна производительность. Чтобы выжать максимум, нужно стараться размещать побольше всего на стеке, т.к. это самый быстрый способ работы с памятью. В стандарте лиспа есть средства это описать, при этом оно вполне совместимо с безопасной сборкой мусора. Другое дело, я не изучал, как реализации это поддерживают.
30 апр 17, 01:23    [20446670]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
hVostt
Member

Откуда:
Сообщений: 15463
budden
И получим на выходе список из неких значений (тип в статике неизвестен).


Вообще, ты бы мог вывести тип для списка, информации для этого достаточно.


budden
н.корни-квадратного-уравнения к1 х1 к2 х2 кнк


Не самый лучший вариант задания значений структуры. Лаконично? Да. Понятно? Совершенно нет. Особенно, когда полей станет чуть больше двух. Такие неоднозначности при чтении надо устранять.
30 апр 17, 01:30    [20446674]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
hVostt
Member

Откуда:
Сообщений: 15463
budden
Вопрос про стек - в том, насколько важна производительность.


Стек не резиновый ))
30 апр 17, 01:33    [20446676]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
Нахлобуч
Почему мешанина кириллицы и латиницы?

Описано прямо перед вашим вопросом.
> Что такое "о:"
сокращение для слова "Определить"
> Правильно ли я понимаю, что корректный идентификатор может включать символ "-" (как в "double-float")?
да. не удержался.
> Что такое "т:"
ответы тут
> Обязательно ли задавать размерность массива?
нет
> Зачем "кнм"?
Нет фигурных скобок. Поэтому если пишем про массив, он начинается с буквы м. Заканчивается массив словом из трёх букв. Первые две - это всегда "кн", а последняя - это начальная буква слова "массив". То же самое кнф.
> Как объявить иммутабельную переменную?
пусть по умолчанию будет создавать иммутабельную переменную (это касается только верхнего уровня, т.е. можно поменять элементы массива, но нельзя записать в эту же переменную другой массив).
> Зачем "(:" и ":)"?
Чтобы отличить вызов ф-ии от выражения. Может, и не нужны и тогда их выброшу потом.
> Что такое "0.д0"?
ЧИсло 0, плавающее, двойной точности.
> Унарный "-" не осилили?
унарный минус опасен в ЯП и ведёт к ошибкам. Яр - не первый язык, где унарный минус запрещён, только я не помню, где ещё его запретили. Исключение - константы, там будут ограничения, чтобы снизить вероятность ошибок.
> Что такое "-ц-"?
Цитата, см. лисп. Реализует идею "код как данные" aka гомоиконность.
> Зачем "тело"?
Затем же, зачем оно в других языках (Паскаль, Transact-SQL, Ада и т.п.)
> Зачем опять "кнм"?
Должно быть ясно из вышенаписанного
> Где создается массив (на куче или в стеке)?
На куче, но ниже я привёл пример, как создать его на стеке (хотя не стоит ждать этого быстро).
30 апр 17, 01:38    [20446678]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
hVostt
Вообще, ты бы мог вывести тип для списка, информации для этого достаточно.

С выводом типов я не имею достаточного опыта, чтобы не ошибиться. И так хватает, где на грабли наступить. В лиспе есть компромисс (тип "всё что угодно"), теперь это и в C# добавили, но в лиспе это было тогда, когда C# не было и в планах. Это нормальный вариант, для случаев, когда ставить типы лень или не нужно.

> Не самый лучший вариант задания значений структуры. Лаконично? Да. Понятно? Совершенно нет. Особенно, когда полей станет чуть больше двух. Такие неоднозначности при чтении надо устранять.

Да, это сложный вопрос - я пока точно не решил. Постараюсь всё же сделать так, IDE должна помочь, плюс ограничения на форматирование. Не выйдет - поменяю, варианты есть, например, плюсики перед именами ставить, или (а = б, в = г).
30 апр 17, 01:49    [20446679]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
hVostt
Member

Откуда:
Сообщений: 15463
budden
С выводом типов я не имею достаточного опыта, чтобы не ошибиться.


Это может быть сильной стороной языка, особенно вывод параметризованных типов (коллекции).

budden
В лиспе есть компромисс (тип "всё что угодно"), теперь это и в C# добавили, но в лиспе это было тогда, когда C# не было и в планах.


Не совсем так. Тип «всё что угодно» в C# был с самого начала, это object, потому что все типы платформы наследуют object. Если ты говоришь про dynamic, так это не является типом, а просто синтаксическая конструкция, позволяющая отменить проверку на этапе компиляции, но она никуда не девается в рантайме, так как .NET знает всё о типах всегда во время выполнения.

Насчёт вывода типов, мне нравится как это сделано в Nemerle:

def x = 1; // int
def myList = List(); // generic List[T], T должен выводиться из дальнейшего использования
myList.Add(x);       // благодаря этой строке компилятор определяет тип myList как List[int]
30 апр 17, 02:05    [20446684]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
Vladimir Baskakov
так я догадываюсь, что уши из лиспа торчат. Но, если цель была - ==не меняя русской раскладки== - то она не очень достигнута.

Именно такой цели не было. Была цель переключать её не на каждую новую лексему - это в целом достигнуто.
И, по совести, изучать это все не проще паскаля - даже совсем хреново знающий английский запомнит ключевые слова как иероглифы, а дружественные среды подсветят. А тут - свои иероглифы... кнф.

Паскаль очень прост, если я к нему приближаюсь, то это круто.

> а что еще есть - исключения? ежли дискриминант отрицательный, получился, это как ловить?
По сути здесь нет выбора - исключения есть в рантайм-среде лиспа, поэтому их придётся как-то отрабатывать. Реализовать их легко. Тяжело разгрести последствия. Я пока не осознал, что сталось с checked исключениями в Яве и почему в Rust и Go исключений нет. Скорее всего, будут checked исключения для начала, а там посмотрим.

> объекты, наследование?
Аналогично исключениям: сделать объекты совсем несложно. Сложно разгрести последствия. Вон в С++ до сих пор разгребают. Куча языков без этого спокойно обходятся, например, SQL, Prolog, JavaScript, Rust, Go, 1C, Lua. Определённые планы есть. Войдут ли они в версию 0.5? Пока не знаю, время весьма ограничено.

> лямбды? с замыканиями?
Ну хз. Это вопрос скорее культурный. Лямбды - очень вкусный вид "семантического сахара", и в лиспе они есть. Т.е. технической проблемы здесь нет. Я бы вместо лямбд предпочёл корутины, но в лиспе их нет. Постараюсь в версии 0.5 без лямбд обойтись. А они вам зачем?

> Итераторы?
Это сахар, несущественный по сложности, что-нибудь сляпаю.

Давайте попробуем пару видов сортировки, допустим пузырек и быструю. Чтобы оценить элегантность, если она есть. те самые преимущества ради которых

Нет времени пока что - нужно же реализовать язык и среду разработки, а это дофигища труда.
30 апр 17, 02:36    [20446687]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
Alibek B.
Member

Откуда:
Сообщений: 3117
budden
ЧИсло 0, плавающее, двойной точности.

Да, я не обманулся в ожиданиях.
Но нужно больше треша.
Почему в коде указано "2" и "4", а не "2.д0" и "4.д0"?
30 апр 17, 11:16    [20446832]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

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

Честно сказать, я не подумал про двойку и четверку, да и в спецификации этот вопрос не освещён. Я помню, что я хотел сделать, но это нигде не записано.

Давайте я вам задам встречный вопрос: сколько, по вашему, будет 22 делить на 7?
30 апр 17, 14:57    [20447049]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
Alibek B.
Member

Откуда:
Сообщений: 3117
budden
сколько, по вашему, будет 22 делить на 7?

22/7 = 3,(142857), если речь о десятичных числах.
Если речь идет о том, как это должно представляться в компьютере, то разумные люди обычно ориентируются на стандарт IEEE 754.
Но как я понимаю, для данного языка программирования это слишком банально, поэтому мне даже любопытно, как в нем будут представляться числа.
30 апр 17, 20:14    [20447452]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
hVostt
Member

Откуда:
Сообщений: 15463
budden
сколько, по вашему, будет 22 делить на 7


Смотря какого типа число 22. В C# следующие операции дают разный результат:

var a = 22 / 7;    // 3
var b = 22d / 7;   // 3.14285714285714
var c = 22m / 7;   // 3.1428571428571428571428571429
30 апр 17, 20:32    [20447469]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
Cane Cat Fisher
budden
пусть X1 -- double-float = (: 0.д0 - B - D :) делить (: 2 умножить A :)
пусть X2 -- double-float = C делить (: A умножить X1 :)


А почему у всех скобок двоеточия? Чтобы смайлики получались?

ПО идее да, но вообще это исключение неоднозначности - круглые скобки перегружены. Впрочем, я про это уже писал.
2 май 17, 10:22    [20448951]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
hVostt
budden
double-float и т.п. - это слова из лиспа.


Почему бы не взять «число» для double и «целое» для int (или long)?

Потому что в лиспе есть тип число, которого подтипами являются целое и плавающее. А также целое неограниченной точности и рациональные дроби.
2 май 17, 10:23    [20448954]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
Vladimir Baskakov
Member

Откуда:
Сообщений: 1948
Лямбды, синтаксически удобно реализованные - штука хорошая - открывают дорогу функциональщине, которая обрабатывает самые разные структуры данных.

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

этот, кумир страшный лаконичен. страшно лаконичен.
http://inf1.info/kumir/gcd-lcm

эль76 .... фиг знает, есть желание изобресть - так может на предшественников поглядеть, сколько их было и каких?
ведь было же
http://www.compiler.su/ekskurs-v-istoriyu-razrabotok-yazykov-programmirovaniya-i-kompilyatorov-v-sssr.php

ну, дело то хозяйское. фантазировать так фантазировать, от души, чего там.
2 май 17, 12:15    [20449515]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
Нахлобуч
Member

Откуда: https://hglabhq.com
Сообщений: 3939
budden,

>> Что такое "о:"
> сокращение для слова "Определить"
Есть еще какое-то поведение, кроме "определения"?

>> Правильно ли я понимаю, что корректный идентификатор может включать символ "-" (как в "double-float")?
>да. не удержался.
Я правильно понимаю, что "(: 0.д0 - B-D :)" уже не будет являться валидной конструкцией?

>> Унарный "-" не осилили?
> унарный минус опасен в ЯП и ведёт к ошибкам. Яр - не первый язык, где унарный минус запрещён, только я не помню, где ещё его запретили. Исключение - константы, там будут ограничения, чтобы снизить вероятность ошибок.
Впервые слышу про опасность унарных операторов. Логического "не" тоже не будет?

>> Зачем "тело"?
> Затем же, зачем оно в других языках (Паскаль, Transact-SQL, Ада и т.п.)
В Паскале, например, оно нужно для того, чтобы отделить тело подпрограммы от списка локальных переменных. У вас какое обоснование?
2 май 17, 13:20    [20449834]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
hVostt
Member

Откуда:
Сообщений: 15463
Нахлобуч
Впервые слышу про опасность унарных операторов. Логического "не" тоже не будет?


Как по мне тоже, целое откровение. Узнаю много нового
2 май 17, 15:57    [20450692]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
Продолжаю обработку очереди... Если что пропустил - напишите снова, пожалуйста.

Alibek B.:
> 22/7 = 3,(142857), если речь о десятичных числах.
hVostt
> Смотря какого типа число 22.
Итак, Alibek B. попал в ловушку, в которую попадают очень многие. 22 и 7 я выбрал не случайно - это цифры со Stack Overflow. И это ещё простой случай. Может быть ситуация, когда у нас все вычисления в double и тут какой-то кусок попался в виде single-precision по недосмотру. И - привет, интегралы, привет, турбулентные потоки. Кроме того, в 1С деньги - вроде как не плавающие числа вообще (привет, баланс за год).

И соответственно, возникает вопрос: как избежать таких ловушек? Пока этот вопрос в Яре открыт, но я склоняюсь к тому, чтобы запретить неявные преобразования типов в арифметических операциях. Более того, оказывается, что операция "делить" - перегружена в любом ЯП, поскольку можно поделить два целых, два плавающих и целое на плавающие. Перегрузка операций снижает надёжность языка. Хотите верьте, хотите нет - но это так и это придумал не я. Убеждать не буду - для этого есть учебники, например, Себеста.

Поэтому следующий шаг - сделать _разные_ операции деления для разных типов чисел. Так сделано в Ocaml - есть "плюс" и "плюс с точкой". На самом деле тут пока решение не принято, но я склоняюсь к Lisp Way. Т.е. есть идентификатор с именем"плюс" и идентификатор с именем "делить". Можно определить такой идентификатор в своём пространстве имён и проимпортировать его в программу. Так мы получаем полный контроль над происходящим без перегрузки операций: операции выглядят одинаково (как слово "поделить" или как значок "/"), но при этом это не перегруженная операция, а разные и их надёжность выше. Это менее надёжно, чем ввести визуально непохожее деление, но я понимаю, что шансов продвинуть язык с визуально непохожим делением для разных типов данных ещё меньше :)

Касаемо 0.д0 - конечно, это неудобно. В лиспе есть переменная *read-default-float-format*, которая это контролирует. Нужно лишь слегка её ограничить, потому что она динамическая и сделать её какой-нибудь прагмой, чтобы можно было глядя в статический исходник (не в скрипт), понять, какого типа будет этот числовой литерал.

Наверное, можно даже нарастить её до того, чтобы 2 сразу превращалось в плавающее число. Правда, тогда будет проблема с возведением в квадрат, потому что возведение в степень 2.0 делается через логарифмирование - дольше и не так точно.
2 май 17, 16:01    [20450717]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
hVostt
Member

Откуда:
Сообщений: 15463
budden
Итак, Alibek B. попал в ловушку, в которую попадают очень многие. 22 и 7 я выбрал не случайно - это цифры со Stack Overflow. И это ещё простой случай.


Не совсем понял, в какую ловушку он попал, ну да ладно.

budden
Может быть ситуация, когда у нас все вычисления в double и тут какой-то кусок попался в виде single-precision по недосмотру


Чтобы не колупать никому мозг, ни себе, ни программистам, надо отказаться от поддержки single, или сделать её сложной.


budden
Кроме того, в 1С деньги - вроде как не плавающие числа вообще (привет, баланс за год).


Не вроде как, а для финансовых вычислений не стоит вообще использовать операции с плавающей запятой. Для этого в современных языках есть специальные типы. В C# это Decimal.


budden
И соответственно, возникает вопрос: как избежать таких ловушек?


Всё просто, убрать лишнее. Оставь минимальный набор типов, необходимых для реализации алгоритмов. Не надо пытаться по мощности и охвату соответствовать Си.
2 май 17, 16:15    [20450796]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
hVostt,
> Не совсем понял, в какую ловушку он попал, ну да ладно.
Попробуйте найти в ответе Alibek. B хоть минимальный намёк на то, что 22/7 = 3 .
2 май 17, 16:19    [20450821]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
> Чтобы не колупать никому мозг, ни себе, ни программистам, надо отказаться от поддержки single, или сделать её сложной.
Я привёл этот пример только потому, что сам с ним сталкивался примерно год назад.
Single убрать можно, но проблема перепутывания double с деньгами и с целыми числами останется. Если пойти дальше этим путём, то вообще останемся без чисел.

> Не вроде как, а для финансовых вычислений не стоит вообще использовать операции с плавающей запятой.
Для бухгалтерских - возможно. Для финансовых - нет. Курс доллара упал на 1.34543%. Это уже не деньги. Это плавающее число.
2 май 17, 16:23    [20450847]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
Никанор Кузьмич
Member

Откуда: Москва
Сообщений: 382
hVostt
Не совсем понял, в какую ловушку он попал
Элементарно, Ватсон Он дал правильный ответ, а надо было - тот, который задумал ТС.
budden
Попробуйте найти в ответе Alibek. B хоть минимальный намёк на то, что 22/7 = 3 .
А 22/7 не равно 3, вот в чем проблема. При этом округлять результат можно четырьмя разными способами, а можно вообще не округлять и возвращать вещественное число. Не надо выдавать собственные привычки за истину в последней инстанции.
2 май 17, 16:45    [20450949]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
Тут вопрос вне очереди. Как перевести на Русский функцию assert? Ничего лучше, чем Убедиться, я не смог придумать.
На другом форуме договорились до того, чтобы перевести как Ъ. Думаю, один Ъ - это слишком жирно, а вот три ъъъ (от слова труъ). А может быть, сделать просто ТруЪ? Интересны ваши мнения.
2 май 17, 16:46    [20450952]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 57392
Блог
budden
Как перевести на Русский функцию assert?

"авось".
2 май 17, 16:48    [20450961]     Ответить | Цитировать Сообщить модератору
 Re: Новый 1С - подобный язык и среда  [new]
budden
Member

Откуда:
Сообщений: 1060
Никанор Кузьмич, вопрос про 22 и 7 - это вполне годный вопрос для собеседования при найме программиста.

Правильные ответы были бы:
а) уточните, что такое 22 и 7
б) расписать все варианты, включая 3.

Если человек дал частный ответ, не задумавшись о том, что вопрос сформулирован двусмысленно, то это значит, что он и в своей программе будет считать, что 22/7 - это плавающее число. Подумайте сами, взяли ли бы вы Alibek B. на работу программистом, если бы он дал такой ответ на собеседовании?


> А 22/7 не равно 3, вот в чем проблема.
Вы неправду пишете. Правильно было бы: "иногда 22/7 не равно 3". Без оговорок, как вы написали, ваш ответ вполне неправильный.
2 май 17, 16:53    [20450992]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 38 39 40 41 42 [43] 44 45 46 47 .. 52   вперед  Ctrl
Все форумы / Разработка информационных систем Ответить