- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
local money = 0
local auto_money = 0
local auto_money_lvl = 0
local auto_money_buy = 50
local bonus_money_lvl = 0
local bonus_money_buy = 35
local json_pip = require("json")
local bacg = display.newRect(0,0,1080,1920)
local button = display.newRect(160,190,175,175)
button:setFillColor(0,0.4,0.3)
local button_auto = display.newRect(70,400,111,111)
button_auto:setFillColor(0,0.4,0.3)
local button_bonus = display.newRect(250,400,111,111)
button_bonus:setFillColor(0,0.4,0.3)
local text = display.newText("Click", 161, 190, "consolas", 30)
text:setFillColor(1,1,1)
local text1 = display.newText("Money:", 64, -19, "consolas", 30)
text1:setFillColor(0,0.1,0.8)
local text2 = display.newText(money, 200, -16, "consolas", 30)
text2:setFillColor(0,0.1,0.8)
local text3 = display.newText("Auto", 70, 370, "consolas", 30)
text3:setFillColor(1,1,1)
local text4 = display.newText("click", 70, 400, "consolas", 30)
text4:setFillColor(1,1,1)
local text5 = display.newText(auto_money_buy, 70, 437, "consolas", 30)
text5:setFillColor(1,1,1)
local text6 = display.newText("Bonus", 250, 370, "consolas", 30)
text6:setFillColor(1,1,1)
local text7 = display.newText("click", 250, 400, "consolas", 30)
text7:setFillColor(1,1,1)
local text8 = display.newText(bonus_money_buy, 250, 437, "consolas", 30)
text8:setFillColor(1,1,1)
ocal button_shadow = display.newRect(160,280,175,10)
button_shadow:setFillColor(0,0.3,0.4)
local button_shadow_auto = display.newRect(70,460,111,10)
button_shadow_auto:setFillColor(0,0.3,0.4)
local button_shadow_bonus = display.newRect(250,460,111,10)
button_shadow_bonus:setFillColor(0,0.3,0.4)
local copyright = display.newText("KernelCoreSW 2018-2019", 163, 490, "consolas", 23)
copyright:setFillColor(0,0.1,0.8)
local function flapBird (event)
if(event.phase == "began") then
---lvl
if(bonus_money_lvl == 0) then
money = money + 1
end
if(bonus_money_lvl == 1) then
money = money + 2
end
--И еще такого говнаролла штук 10
text2.text = money
end
local function flapBird_bonus (event)
if(event.phase == "began") then
if(money >= bonus_money_buy) then
money = money - bonus_money_buy
bonus_money_buy = bonus_money_buy * 3
bonus_money_lvl = bonus_money_lvl + 1
end
text2.text = money
text8.text = bonus_money_buy
end
end
local function onUpdate (args)
if(auto_money > 40) then
auto_money = 0
end
---------levels
if(auto_money_lvl == 1) then
if(auto_money == 40) then
money = money + 1
text2.text = money
end
end
---------levels end и еще такого говна штук 10
auto_money = auto_money + 1
end
local function load_settings(fileName)
local path = system.pathForFile(fileName, system.ResourceDirectory)
local contents = ""
local myTable = {}
local file = io.open(path, "r")
if(file) then
contents = file:read("*a")
myTable = json.decode(contents)
io.close(file)
return myTable
end
return nil
end
local settings = loadSettings("settings.json")
if(settings) then
money = settings.money
auto_money = settings.auto_money
auto_money_buy = settings.auto_money_buy
auto_money_lvl = settings.auto_money_lvl
bonus_money_lvl = settings.bonus_money_lvl
bonus_money_buy = settings.bonus_money_buy
end
3oJIoTou_xyu 23.10.2019 14:47 # 0
MAPTbIwKA 23.10.2019 15:21 # 0
?
какая трудолюбивая мартышка писала)
так для КАЖДОЙ переменной?!
ахахаха, какая трудолюбивая макака писала
В луа 100500 способов есть серализовать таблицу.
Нужно сделать таблицу настроек, и течь, это и быстрее и правильнее, и удобнее.
Кашу из "логики", ui и сохранения файлов оставим за скобками
3oJIoTou_xyu 23.10.2019 15:25 # 0
MAPTbIwKA 23.10.2019 15:29 # 0
3oJIoTou_xyu 23.10.2019 15:49 # 0
Но я все в рот ебал. Я сделал более лаконичную и по моему мнению правильную реализацию квестов - это через таблы и все это лоадить и тупо по индексам переходить и лоадить по мере необходимости и отрубать то что не нужно, а не все дерьмо держать в ОЗУ.
Чем так
guest8 23.10.2019 16:35 # −999
guest8 23.10.2019 20:01 # −999
guest8 11.05.2020 00:42 # −999
3_dar 24.10.2019 00:21 # 0
guest8 24.10.2019 01:21 # −999
TOPT 24.10.2019 02:08 # 0
guest8 24.10.2019 02:09 # −999
TOPT 24.10.2019 02:16 # 0
guest8 24.10.2019 02:20 # −999
guest8 24.10.2019 02:25 # −999
TOPT 24.10.2019 02:28 # 0
guest8 24.10.2019 02:31 # −999
TOPT 24.10.2019 02:47 # 0
Всё что восточнее Сибири - Китай.
guest8 24.10.2019 02:51 # −999
git 24.10.2019 05:46 # +1
guest8 20.11.2019 02:48 # −999
git 20.11.2019 11:36 # 0
git 24.10.2019 05:45 # 0
Доступ к информационному ресурсу ограничен на основании Федерального закона от 27 июля 2006г. №149-ФЗ "Об информации, информационных технологиях и о защите информации".
TOPT 24.10.2019 05:50 # 0
3oJIoTou_xyu 24.10.2019 12:36 # 0
Dpyrou_Pycoqpo6_CEMA 24.10.2019 12:22 # 0
Konardinho 12.11.2019 01:07 # 0
XYPO3BO3 15.11.2019 20:32 # 0
Тут ещё надо оптимизировать код: заменить двойные кавычки на одинарные. Но я думаю, ты сам справишься.
guest8 15.11.2019 20:37 # −999
XYPO3BO3 16.11.2019 17:39 # 0
guest8 20.11.2019 15:31 # −999
XYPO3BO3 20.11.2019 16:33 # 0
http://govnokod.ru/25520#comment471813
Заметь, Winter в этом примере — это даже не сабрендж, это произвольное подмножество.
guest8 20.11.2019 16:46 # −999
XYPO3BO3 20.11.2019 17:01 # 0
https://mail.python.org/pipermail/python-dev/2000-August/008881.html
Офигеть. С создания языка SETL прошло больше 50 лет.
guest8 20.11.2019 17:15 # −999
XYPO3BO3 20.11.2019 18:50 # 0
nyTuH_nugop 20.11.2019 21:53 # 0
Хорошая попытка, но учебный это всё таки твой Пассаль. И это подтверждается постоянными проёбами, отсутствием каких либо стандартов и полной потерей рынка.
3.14159265 20.11.2019 22:27 # 0
Главная мысль в Обероне — это gc.
Который потом стал повсеместным явлением.
guest8 20.11.2019 23:13 # −999
3.14159265 20.11.2019 22:25 # 0
>У нас есть type, а значит class, struct, хуют, итд -- это булщит.
Всё правильно говорил.
guest8 20.11.2019 22:45 # −999
nyTuH_nugop 20.11.2019 23:09 # 0
guest8 20.11.2019 23:10 # −999
guest8 20.11.2019 23:20 # −999
XYPO3BO3 20.11.2019 23:40 # 0
guest8 20.11.2019 17:18 # −999
nyTuH_nugop 20.11.2019 22:04 # 0
3.14159265 20.11.2019 22:40 # +1
Но в нём было заложено много годных идей.
Например писать тип после переменной, а не до. Или не делать из языка С++0z.
>почему сабренджей нигде нету?
Вот поскольку их нету, то в 2к19 у нас либо либо bounds checking, либо buffer overflow.
Сабренджи — нормальная задумка.
Проблема что в паскале они сделаны на детском уровне, потому пользы от них особой нету.
А нужно так, чтоб любое обращение к строке/массиву по индексу, принимало только subrange [0..length-1].
guest8 20.11.2019 22:47 # −999
nyTuH_nugop 20.11.2019 22:51 # 0
3.14159265 21.11.2019 00:52 # 0
Допустим есть имя пользователя, длина 1-32 символа.
Это String[1..32] (синтаксис условный, в крестошаблонах String<1,32>).
Например пароль: String[8..32].
Пустая строка String[0..0]
Строка фиксированного размера, например хеш-функция, возвращающая md5:
Тогда конкатенация плюсом даёт сложение нижней и верхней границ. Конкатенация коммутативна: от перестановки строк местами тип не меняется.
Взятие подстрок проверяется в компайл-тайме. Индексы — те самые диапазоны.
guest8 21.11.2019 00:53 # −999
guest8 21.11.2019 01:26 # −999
XYPO3BO3 21.11.2019 01:58 # 0
guest8 21.11.2019 02:06 # −999
XYPO3BO3 21.11.2019 02:12 # 0
Да, тут компилятор автовыведет тип хранилища (в данном случае он положит результат в байт, а не в интеджер).
Сишнику же придётся считать размер хранилища самому (считать двоичный логарифм и округлять в большую сторону).
Вот, например, переменная принимает значения от -9000 до +100500. В какой тип её класть? Придётся держать в уме лимиты int8_t, int16_t, int32_t, int64_t. Мы же не дураки и не будем использовать short int, int, long int, long long int, которые на разных платформах будут разными?
guest8 21.11.2019 02:39 # −999
XYPO3BO3 21.11.2019 05:17 # 0
Тут поймали ошибку ещё во время компиляции.
А теперь пример посложнее:
Тут во время выполнения срабатывает проверка:
Компилятор добавил отладочную информацию, которую потом вывел в сосноль дефолтный обработчик исключения.
XYPO3BO3 21.11.2019 05:32 # 0
guest8 20.11.2019 23:05 # −999
XYPO3BO3 20.11.2019 23:50 # 0
Компания «Borland» же в него добавила конструкции из «Модулы» и из языка Ада, получив в итоге довольно мощное средство и сохранив строгость, но при этом не дойдя до перегруженности языка Ада. «Object Pascal», на котором основаны «Турбо Паскаль», «Delphi», «Free Pascal» и несколько тупиковых ветвей, можно рассматривать как отдельный язык программирования.
>> struct
Есть record. Но само слово «record», в отличие от сишного «struct», не нужно писа́ть постоянно, так как его можно использовать только в тайпдефах (слово «type» в «Паскале»).
>> class
В «Standard Pascal» вообще не было ООП. В «Турбо Паскале» появилось слово «object», а в «Delphi» и слово «class» (разница между «object» и «class» в хранилище и в устройстве ТВМ).
3.14159265 21.11.2019 00:39 # +1
Например в раздутом синтаксисе, бойлерплейте и уебанских, неконсистентных циклах.
Для сравнения божественные циклы из Сишки
Для сравнения восхитительный синтаксис циклов из Бейсика:
XYPO3BO3 21.11.2019 00:50 # 0
Do ... loop изначально не было в «Бейсике». Это «Quick BASIC». Do ... loop сделали под впечатлением от «Фортрана» и «Си».
Про шаг согласен. Однако, в Паскале цикл можно делать не только по целым числовым типам, но и по любым перечислимым, к которым относятся и символы (for c:='A' to 'Z' do), и false..true, и перечисления (аналоги сишных енумов, но только со строгой типизацией, без автокаста в целые). Видимо, Вирт решил, что для нечисловых перечислимых типов числовой шаг будет неинтуитивен, поэтому и ограничился двумя значениями (+1 и -1).
guest8 21.11.2019 00:52 # −999
XYPO3BO3 21.11.2019 01:01 # 0
Ты ещё скажи, что свитч-кейс, позволяющий создать устройство Даффа, хороший.
Вообще сишный for есть не во всех языках, основанных на сишном синтаксисе.
3.14159265 21.11.2019 01:07 # +1
switch — основная мерзость сишки. Всего-навсего слегка припудренная версия computed goto из фортранов.
Одни из лучших case, до того как завезли хипстерский паттерн-матчинг были в бейсике
Case a To b, c To d, e, f
3.14159265 21.11.2019 00:56 # 0
for в паскале неюзабелен чуть менее чем полностью.
Лучше бы он сразу сделал for~each по диапазонам, массивам и остальному добру.
>Do ... loop изначально не было в «Бейсике».
Да. Но сделали ведь просто и консистентно. Один синтаксис на все случаи жизни.
Там кстати ещё было Do Until x ... Loop, Do ... Loop Until x что на мой вкус уже излишество, но то такое.
XYPO3BO3 21.11.2019 01:08 # 0
Вообще согласен, что for i:=1 to 3 — это архитектурное излишество для языка, в котором есть диапазоны и множества. Если уж ввели их, то надо их использовать повсюду.
С тем, что совсем неюзабелен, не соглашусь. У него верхняя граница счётчика вычисляется один раз, а не каждую итерацию, как в сишке. Поддерживаются break и continue. Пользоваться можно.
Но вот что нужно писать for x:= Low(range) to High(range) вместо for x in range, это, конечно, плохо.
guest8 21.11.2019 02:12 # −999
Rooster 21.11.2019 04:46 # +2
XYPO3BO3 21.11.2019 04:51 # 0
Rooster 21.11.2019 05:01 # 0
XYPO3BO3 21.11.2019 00:02 # 0
В Паскале две проверки: в компайлтайме (когда индекс принимает очевидное значение) и в рантайме. В TP проверка в рантайме регулируется директивой $R+, в компайлтайме же проверка всегда.
Массивы в Паскале изначально были статическими, поэтому проблем с проверкой не было (динамические появились в поздних поделках вроде «Delphi» и «Free Pascal»). В Паскале нельзя обратиться к несуществующему элементу массива.
Что же касается строк, то у паскалевских строк две длины: объявленная (которую превышать нельзя, ибо реалокатора нет) и текущая. Выход за объявленную длину проверяется. Выход за текущую, увы, нет.
3.14159265 21.11.2019 00:45 # 0
Вот я и говорю что там всё по-детски просто.
Но сама концепция проверять в compile-time хорошая и правильная.
guest8 21.11.2019 00:49 # −999
XYPO3BO3 21.11.2019 00:56 # 0
Паскаль же подобное даже не даст скомпилировать:
https://ideone.com/WQeZxE
P.S. Чуть выше я ошибся: директива $R+ действует и на рантайм, и на компайлтайм.
guest8 21.11.2019 01:00 # −999
XYPO3BO3 21.11.2019 01:17 # 0
3.14159265 21.11.2019 01:20 # 0
XYPO3BO3 21.11.2019 06:55 # 0
http://govnokod.ru/13162#comment180683
В «Ideone» царский код упал, потому что «Ideone» использует питушарский защитник стека («Propolice» или аналогичный).
3.14159265 21.11.2019 01:01 # 0
Возможно ли что-то такое: http://govnokod.ru/25987#comment512947?
XYPO3BO3 21.11.2019 01:17 # 0
Ограничить минимальную длину строки нельзя. В языке Ада можно (там есть динамические предикаты, можно в качестве предиката взять неравенство для функции strlen).
Остальное не понял. Можно задачу поставить чётче?
3.14159265 21.11.2019 01:27 # +1
Допустим я конкатенирую array[0..8] of char и array[0..2] of char.
Хочу на выходе получить автоматом тип array[0..10] of char и соответственно компайл-тайм проверки.
Или я делаю slice(start=2,end=4) на array[0..8] of char. Хочу получить не абстрактную строку а array[0..2] of char.
guest8 21.11.2019 01:30 # −999
3.14159265 21.11.2019 01:41 # 0
У меня есть база данных, в базе лежат таблицы.
В таблицах кроме всего прочего есть поля с типами char(24) и varchar(64).
Вот я и хочу иметь в языке, который пишет в эту базу автоматические проверки введённых данных.
Чтобы не заинсертить данные, которые потом автообрежутся.
Я не хочу на каждое поле каждый раз городить новый тип и в нём руками проверять длины. ЯП обеспечить мне подобного механизма не может.
guest8 21.11.2019 01:45 # −999
3.14159265 21.11.2019 01:53 # 0
В компайл-тайме будет проверяться что я не запихнул в строку больше положенного.
Допустим я написал алгоритм расчёта хеша от пароля, если он будет больше 64 символов, компилятор скажет мне где я ошибся.
Ввод от пользователя будет кидать ему ошибку в рантайме, но и тут есть профит, мне не придётся на всякий раз писать:
Эти ошибки будет генерировать язык, так же, как например при парсинге чисел.
XYPO3BO3 21.11.2019 02:06 # +1
Здесь атрибут 'Last — индекс последнего элемента строки, а поскольку 'First для строки всегда равен единице, то 'Last равен длине.
3.14159265 21.11.2019 02:19 # 0
Не зря Тарас её хвалил
3.14159265 21.11.2019 02:54 # 0
Почитал за контракты-предикаты. Dynamic_Predicate работает как обычный assert, и отваливается в рантайме.
https://steemit.com/ada-lang/@xinta/learning-ada-4-predicates
Note: if you want the compiler to compile the checks, you must enable asssertions. This is done using the compile time option -gnata.
Короче хуйня. Нас спасут только крестошаблоны, bormand или d++.
XYPO3BO3 21.11.2019 03:27 # 0
Выводит:
Седьмая строка — это та, в которой y: MoyaStroka := "short";
Тут компилятор видит, что мы игреку пытаемся присвоить значение короче 10 символов. Правда, выводит ворнинг, а не еррор.
Я почему-то думал, что длину можно использовать только в динамическом предикате. Оказывается, в языке Ада атрибуты — это не совсем функции, они могут проверяться и в компайлтайме.
guest8 21.11.2019 03:41 # −999
XYPO3BO3 21.11.2019 20:35 # 0
guest8 21.11.2019 22:21 # −999
XYPO3BO3 21.11.2019 03:44 # 0
Даже динамический предикат лучше, чем обычный assert: его не нужно писать руками для каждой переменной при каждом присвоении, достаточно один раз описать субтип.
Кстати, статический предикат, если не поймал ошибку во время компиляции, всё равно сгенерирует ассерт, если есть директива pragma Assertion_Policy (Check);
И динамический предикат тоже может вывести ворнинг во время компиляции, если выражение вычислимо в компайлтайме (что-то типа констэкспра):
Правда, жалко, что и Static_Predicate, и Dynamic_Predicate во время компиляции выводят всего лишь ворнинг, а не ошибку.
guest8 21.11.2019 03:46 # −999
XYPO3BO3 21.11.2019 03:58 # 0
Rooster 21.11.2019 04:57 # +1
XYPO3BO3 21.11.2019 15:50 # 0
Дейкстра про язык Ада: «Если Ada собирается выдать стандарт, желательно, чтобы он был недвусмысленно документирован. По меньшей мере две группы попытались сделать это; в результате обе выдали около 600 страниц формального текста. Это гораздо больше, чем необходимо, чтобы удостовериться в невозможности хотя бы твердо установить, что оба документа определяют один и тот же язык. Ошибка очевидной неуправляемости этих двух документов кроется не в двух группах, составивших их, не в принятом ими формализме, а лишь в самом языке: сами не обеспечив формального определения, могут ли его разработчики скрыть, что они предлагают неуправляемого монстра. То, что Ada уменьшит проблемы программирования и увеличит надёжность наших разработок до приемлемых границ, — это лишь одна из тех сказок, в которые могут поверить только люди с военным образованием».
bormand 21.11.2019 15:55 # +3
gost 21.11.2019 16:04 # 0
guest8 21.11.2019 16:06 # −999
gost 21.11.2019 16:11 # 0
guest8 21.11.2019 16:07 # −999
3.14159265 21.11.2019 16:47 # 0
То Вирт возмутился что его идею зашкварили сишкоблядским синтаксисом.
guest8 21.11.2019 17:15 # −999
XYPO3BO3 22.11.2019 15:44 # 0
Rooster 22.11.2019 16:10 # +1
Не надо так говорить, например Чаке Мур'иканец придумал язык Forth.
Он тут недавно на встрече фортеров хвастался, что придумал очередной диалект colorForth'а и научился многопоточно рисовать звездно-полосатый флаг под вендой.
https://www.youtube.com/watch?v=3ML-pJFa8lY
bormand 22.11.2019 17:31 # 0
XYPO3BO3 22.11.2019 17:49 # 0
Rooster 22.11.2019 18:35 # 0
guest8 22.11.2019 17:54 # −999
XYPO3BO3 22.11.2019 18:20 # 0
В «Standard Pascal» по идее вариант должен проверяться, но я не знаю живых реализаций стандартного Паскаля. Придётся стряхивать с них пыль и проверять.
guest8 22.11.2019 20:19 # −999
guest8 22.11.2019 20:44 # −999
XYPO3BO3 22.11.2019 20:53 # 0
XYPO3BO3 23.11.2019 14:45 # 0
«Турбо Паскаль» и «Free Pascal» спокойно разрешают лазить в поле usesTypeScript, даже когда выбран вариант language = PHP. Всё, как в сишном union'е.
Беру «Irie Pascal». Производитель обещает совместимость со «Standard Pascal (i.e. ISO/IEC 7185)». Компилирую, запускаю... Рантайм на втором вызове Dure останавливает программу с сообщением:
guest8 21.11.2019 16:10 # −999
Rooster 21.11.2019 17:53 # 0
guest8 21.11.2019 16:35 # −999
3.14159265 21.11.2019 16:46 # 0
>Вирт не имеет никакого отношения к языку Ада, он его даже критиковал за сложность.
Он просто modern С++ не видел.
Rooster 21.11.2019 18:06 # 0
Интересно, какую часть от плюсов занимает Си.
guest8 21.11.2019 18:19 # −999
XYPO3BO3 21.11.2019 20:35 # 0
guest8 21.11.2019 20:59 # −999
XYPO3BO3 21.11.2019 21:46 # 0
guest8 21.11.2019 22:58 # −999
guest8 23.11.2019 01:40 # −999
guest8 23.11.2019 01:55 # −999
guest8 23.11.2019 01:56 # −999
guest8 21.11.2019 22:32 # −999
Stallman 21.11.2019 22:37 # +1
guest8 21.11.2019 21:18 # −999
XYPO3BO3 21.11.2019 01:53 # +1
Для строк в стандартном Паскале был костыль: промежуточные выражения считались в типе string[255] вне зависимости от того, какой тип имели входящие в выражение переменные. Лишь при присвоении результата вычислений переменной тип усекался.
В «Турбо Паскале» добавили PChar, у которого были те же проблемы, что и у сишки: за выделением памяти и проверкой индекса должен был следить программист, поэтому пользоваться этим типом было опасно.
В «Delphi» появились динамические строки (AnsiString, WideString). Реалокацией их занимался рантайм, размер их не ограничивался.
С операциями над массивами всё плохо. Конкатенировать их знаком «+» нельзя. Строки можно. Объединение множеств считать знаком «+» можно. А вот массивы нельзя.
В FPC, правда, добавили перегрузку операторов:
https://freepascal.org/docs-html/current/ref/refse100.html
Можно перегружать даже ** и ><, которых не было в классическом Паскале.
Функцию конкатенации массивов в RTL не нашёл, зато слайс в FPC всё-таки сделали:
https://freepascal.org/docs-html/current/rtl/system/slice.html
Пример:
Обрати внимание, что функции Low и High вычисляются от массива, который вернула функция Slice. Т. е. функция Slice возвращает массив корректного типа с явным диапазоном индексов.
3.14159265 21.11.2019 02:18 # 0
It returns an array with the same element type as A, but this array is not assignment compatible to any other array, and can therefor only be used in open array arguments to functions.
Ну костыльно как-то.
XYPO3BO3 21.11.2019 02:25 # 0
А так работает:
3.14159265 21.11.2019 02:38 # +1
Потому я против «Паскаль».
Много проверок практичекой пользы не дают, реальные баги не отлавливают, а только заёбывают программиста ошибками компиляции. Реально полезные концепты пока так и не доведены до ума.
Люди отчаиваются и начинают учить кресты.
guest8 21.11.2019 02:45 # −999
3.14159265 21.11.2019 02:50 # +1
Ээээ. У них и так общий тип array.
>В жабе к примеру тоже нельзя кастануть Foo к Bar даже если у них одинаковые поля
Аналогия неверная.
Array55 и Array<Five,Five> можно кастануть в другой Array<Five,Five>.
class Array55 extends Array<Five,Five>
guest8 21.11.2019 02:54 # −999
3.14159265 21.11.2019 03:00 # 0
А в Паскале, как я понял полученный массив можно передать только как open array, что аналогично Array<?,?>
Хуйня какая-то. Вроде и хотели как лучше, а получается как обычно.
guest8 21.11.2019 03:07 # −999
XYPO3BO3 21.11.2019 04:47 # 0
https://cppinsights.io/s/3dce3a9a
gost 21.11.2019 16:10 # 0
А оператор (>﹏<) можно?
Desktop 22.11.2019 18:59 # +1
+_+ "I died"
>_< "GTFO"
~_- "You name it"
Лень проверять, но вроде и запрещённых символов тут нет
XYPO3BO3 22.11.2019 19:03 # 0
https://metacpan.org/pod/distribution/perlsecret/lib/perlsecret.pod
guest8 22.11.2019 20:47 # −999
guest8 22.11.2019 20:51 # −999
XYPO3BO3 22.11.2019 21:01 # 0
Discovered by Philippe Bruhat, 2012. (Alternate nickname: "sperm") Incompatible with "The 'bitwise' feature" in feature introduced in Perl 5.028.
XYPO3BO3 22.11.2019 21:37 # 0
bormand 22.11.2019 21:39 # 0
Скрипты для разбора логов и т.п. на нём норм получаются. А для программ - да, говно.
guest8 22.11.2019 21:59 # −999
XYPO3BO3 22.11.2019 21:06 # 0
Rooster 22.11.2019 21:02 # 0
guest8 22.11.2019 22:00 # −999
moron 22.11.2019 22:24 # 0
guest8 22.11.2019 22:29 # −999
guest8 22.11.2019 22:34 # −999
moron 22.11.2019 22:35 # 0
Скажите после этого, что американцы не тупые. Выдумали религию, в которой надо поклоняться пророку Моронию.
guest8 22.11.2019 22:37 # −999
moron 22.11.2019 22:39 # 0
guest8 22.11.2019 22:43 # −999
gostinho 22.11.2019 22:54 # 0
moron 22.11.2019 23:34 # 0
guest8 22.11.2019 23:35 # −999
moron 22.11.2019 23:38 # 0
moron 23.11.2019 22:17 # 0
guest6 15.11.2020 06:57 # 0
nymuHckuu_nemyx 21.11.2019 02:11 # 0
3.14159265 21.11.2019 01:22 # +1
Проблема Паскаля в том что он ловит только детские ошибки.
А программа, немного сложнее лабы приводит к тем же проблемам что и в сишке.
Обычно массив адресуют переменными. Переменная может прийти аргументом из других функций.
XYPO3BO3 21.11.2019 01:26 # 0
Если скомпилировать с {$R-}, то будет как в сишке: засрётся вся память программы, а об ошибке мы узнаем, только когда ОС убьёт программу за то, что она полезла в чужую память.
3.14159265 21.11.2019 01:28 # +1
А хочется компайл-тайм, как в первом примере.
Потому и говорю: мысль хорошая, реализация детская.
XYPO3BO3 21.11.2019 01:31 # 0
Кстати, про тавтологию:
http://govnokod.ru/25867
3.14159265 21.11.2019 01:34 # 0
type array_index = 0 ... 9;
Тогда я y не смогу записать хуйню, и код не скомпилится.
guest8 21.11.2019 01:37 # −999
XYPO3BO3 21.11.2019 01:56 # 0
https://ideone.com/jaemPr
3.14159265 21.11.2019 02:09 # 0
Осталось научить Паскаль принимать в качестве индекса для array [a..b] только числа типов subrange a..b, плюс те что можно к ним привести.
То есть array [0..100] может принимать на вход 0..100 или 10..50.
Но не может использовать переменную типа byte, который де-факто является 0..255 или например -5..5.
Поскольку тогда в рантайме программа развалится.
Иными словами компилятор, встретив код
XYPO3BO3 21.11.2019 02:20 # 0
Проблема в том, что в Паскале нет интервальной арифметики. Он не может посчитать, чему будет равна func от диапазона.
Да, нам очевидно, что если y:integer (который равен диапазону -MAXINT-1..MAXINT или как там), то и у тождественного отображения игрека будет тот же диапазон значений. Осталось научить этому компилятор.
guest8 21.11.2019 02:23 # −999
Desktop 22.11.2019 19:07 # +1
На той стороне могут вообще ничего не знать про эти ваши ренжи.
3.14159265 22.11.2019 19:14 # +1
Это всё IO. Для него есть 400 код или ошибка ввода.
Но даже тут нам не придётся каждый раз проверять рейндж руками, писать ассерты и кидать исключения.
Главное — быть уверенным что алгоритм не вылазит за пределы буфера.
Desktop 22.11.2019 19:26 # 0
Можно просто придумать более лучший IDL и положиться на силу кодогенереции
nymuHckuu_nemyx 21.11.2019 02:21 # 0
https://ideone.com/8iOfto
XYPO3BO3 17.12.2019 17:12 # 0
guest8 20.11.2019 02:47 # −999
3oJIoTou_xyu 20.11.2019 12:41 # 0
2. Что такое стрикт? https://www.yamaha.com/products/en/network/techdocs/others/lua/strict_lua/
guest8 20.11.2019 15:26 # −999
MAKAKA 17.03.2020 03:51 # 0
guest8 11.05.2020 00:49 # −999
MAKAKA 11.05.2020 05:12 # 0
guest8 11.05.2020 13:42 # −999