HTML یک زبان برنامه نویسی است – یا حداقل از آنچه تصور می کنید به آن نزدیکتر است

HTML بسیاری از مارک های آنلاین است ، که هرگز به “برنامه نویس HTML” معروف خندید یا حداقل فکر می کرد که او بدیهی است که او اشتباه کرده است ، اولین سنگ را پرتاب کند.
این دقیقاً غیر معمول نیست که این جمله را پیدا کنیم که “HTML یک زبان برنامه نویسی است” و دیدن چندین اظهار نظر که برعکس است (از همه چیز درست است) ، اما بسیاری از این نظرات قصد دارند مسخره شوند که گویی شخص برای فکر کردن مانند آن احمق است ، گویی این یک بحث کم عمق و ممنوع است.
مشکل این است که استدلال ها معمولاً نشان می دهد که این یک زبان برنامه نویسی نیست ، نه کاملاً باهوش ترین در جهان ، که باعث ایجاد وضعیت کثیف صحبت از شر شسته شده ، یعنی ریاکاری مشهور می شود.
با این حال این نقش خرگوش این می تواند بسیار عمیق تر و جالب تر از آن چیزی باشد که فکر می کنید ، در واقع یک منطقه خاکستری قابل توجه وجود دارد که یک زبان برنامه نویسی چیست.
بنابراین امروز ما می خواهیم مطالعه کنیم که چگونه دوست تازه کار شما که در HTML “برنامه” برنامه “می کند ، دلیل بیشتری از آنچه فکر می کنید ممکن است باشد.
مورد 1: این یک زبان مارک است
برای بسیاری ، این واقعیت که HTML مخفف است برای پرفعال زبان نشانه این کافی است که آن را به عنوان یک زبان برنامه نویسی نادیده بگیرید ، پس از همه این یک زبان برنامه نویسی نخواهد بود ، بلکه یک علامت گذاری است ، اما هیچ چیزی وجود ندارد که مانع از یک زبان علامت گذاری از زبان برنامه نویسی شود ، برخی از نمونه های این امر خواهد بود:
- XSLT (تحول زبان شیوه ای گسترده) ؛
- SGML (زبان نشانه گذاری عمومی STANDART) ؛
- لاتکس
به عنوان مثال XSLT یک زبان کامل تورینگ است (همانطور که بعداً خواهیم دید یک الزام نیست ، اگرچه نشانگر خوبی است) ، علاوه بر داشتن سازه هایی به عنوان ساختارهای مشروط و تکرار ، و نوشتن الگوریتم ها در آن امکان پذیر است ، مانند دنباله فیبوناچی:
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
match="https://dev.to/">
name="fibonacci">
name="n" select="10"/>
name="a" select="0"/>
name="b" select="1"/>
name="fibonacci">
name="n"/>
name="a"/>
name="b"/>
select="$a"/>
test="$n > 1">
name="fibonacci">
name="n" select="$n - 1"/>
name="a" select="$b"/>
name="b" select="$a + $b"/>
مورد 02: به نام
ادامه استدلال دیگری که در صورت همراهی همراه بوده است ، ایده ای است که همانطور که HTML دارد زبان نشانه به این نام ، این یک زبان مارک دار است و از آنجا که هیچ برنامه نویسی به نام وجود ندارد ، نمی تواند یک زبان برنامه نویسی باشد ، که یک استدلال شرافتمندانه است.
چندین زبان برنامه نویسی چاه دیگر نیز نامهای مبهم مانند JavaScript را به همراه دارند ، که نشان می دهد این یک زبان اسکریپت است و نه یک برنامه نویسی واقعی ، یا PHP (پردازنده Hypertext PHP) که حتی دارای Hypertext به نام است ، که نشان می دهد این نام حتی ممکن است یک نشانگر باشد ، اما نباید یک معیار تعیین کننده برای تصمیم گیری در مورد آن باشد.
نمونه عالی دیگر خود XSLT است که قبلاً دیدیم که حتی اگر این یک زبان مارک باشد ، با زبان نشانه به این نام ، هنوز یک زبان برنامه نویسی است.
مورد 03: HTML ساختار است ، CSS سبک سازی است و JS تعامل است
تنوع نکته قبلی این است که استدلال می شود که از آنجا که HTML مسئولیت تعریف ساختار معنایی یک صفحه وب را بر عهده دارد ، در حالی که CSS برای سبک کردن آن و JS برای اضافه کردن تعامل عمل می کند.
بنابراین ، فقط JS می تواند یک زبان برنامه نویسی در نظر گرفته شود ، پس از همه ، عنصر پویایی و تعامل به اسناد را اضافه می کند.
مشکل این امر این است که هم HTML و هم CSS توانایی هایی برای ایجاد امور امروزه حتی به روشی محدود دارند.
به عنوان مثال ، HTML دارای API POPOVER ، ویژگی های جدید و ویژگی های Commandfor (که امکان فعال کردن برچسب گفتگو بدون J و بیشتر) یا برچسب های تعاملی مانند خلاصه و جزئیات را فراهم می کند.
مورد 04: عدم کنترل جریان
برای بسیاری ، یک زبان فقط در صورت برنامه نویسی می تواند در صورتی باشد که مواردی مانند متغیرها ، ساختارهای مشروط مانند IF یا Switch و ساختارهای تکرار مانند حلقه ها به عنوان مثال.
یکی از ریاکارانه ترین استدلال از همه ، زیرا نشان می دهد که آنها هم موضوع و هم مبتدی را که در حال شوخی هستند درک می کنند.
پس از همه شما به برنامه نویسی ، IFS یا حلقه ها برای برنامه ریزی ، برنامه نویسی عملکردی به ما نشان می دهد که برنامه ریزی بدون تغییر (بدون متغیرها) امکان پذیر است ، ما می توانیم به سادگی از بازگشت به جای حلقه ها استفاده کنیم ، و اگر نیاز به ساختاری نداشته باشد که جریان کد را کنترل کند ، همانطور که Booleans می تواند به عنوان اشیاء یا توابع بیان شود ، و در نتیجه با استفاده از سیستم نوع یا صرفاً با استفاده از سیستم یا به سادگی از طریق سیستم استفاده می شود.
با در نظر گرفتن تنها این ساختارهای متداول ، از زبانهای بزرگی مانند آنهایی که الگوی منطقی و کاربردی را تشکیل می دهند ، و حتی برخی از شیء خالص با جهت گرا را تشکیل می دهند (در اینجا هیچ ساختار کنترل جریان وجود ندارد ، فقط اشیاء).
مورد 05: تورینگ کامل نیست
این شاید بهترین نکته برای تأکید بر اینکه آیا چیزی یک زبان برنامه نویسی است یا خیر ، زیرا این یک متریک بسیار قابل اعتماد برای اکثر موارد است ، پس از همه ، تست تورینگ است ، یک نحو رسمی با معناشناسی تعریف شده دارد و می تواند برای نوشتن برنامه های رایانه ای استفاده شود ، بنابراین یک زبان برنامه نویسی است.
مشکل اینجاست که فقط تورینگ کامل تضمین نمی کند که این یک زبان برنامه نویسی است زیرا مواردی وجود دارد که تورینگ کامل است ، اما آنها به عنوان مثال زبانهای برنامه نویسی نیستند ، به عنوان مثال OA Redstone از بازی Minecraft.
On the other hand, not being Turing complete not automatically disqualifying a language, after all there are some domains that require languages to ban certain things like infinite loops to happen, for example in languages used to design computer chips (such as those produced by Intel or AMD), as these languages produce specifications that reflect the limitations that hardware will have in real life, they end up having limitations that those that are limitations that prevent it from being considered complete turing.
اما پس چه چیزی یک زبان برنامه نویسی را توصیف می کند؟
این یک مسئله پیچیده است ، از آنجا که حتی معیارهایی که قبلاً به عنوان کامل بودن تورینگ تعیین شده اند ، به نظر نمی رسد که برای آن کافی باشد ، اما اگر به یک خط انتزاعی بسیار فلسفی برویم ، و بگوییم که این چیزی خواهد بود که ایجاد یک کامپیوتر را قادر می سازد که کاری را انجام دهد ، حتی سریع نمی تواند برنامه نویسی در نظر گرفته شود ، که به عنوان یک مدرک نیز بسیار مفید نیست.
آنچه تا به امروز برای من حس بیشتری ایجاد کرده است ، این ایده است که باید یک زبان رسمی و معنایی باشد ، درجه ای از بیان کافی برای محاسبات عمومی (کامل یا نزدیک این) و این امکان استدلال در مورد برنامه های آن را فراهم می کند.
بیان به معنای آزادی است که یک زبان ارائه می دهد ، به عنوان مثال در یک زبان تایپ استاتیک ، آزادی پایین تر است ، زیرا سیستم نوع مانع از استفاده از یک نوع از یک نوع در صورت نیاز دیگری می شود.
استدلال به ظرفیت برنامه هایی اشاره دارد که توسط انسان یا رایانه ها بر اساس نحو و معناشناسی رسمی آنها مورد تجزیه و تحلیل قرار می گیرد ، به عنوان مثال می توان به آن x = 1 + 1 نگاه کرد و گفت که x بر اساس مدل رسمی ریاضیات است.
این تعریف براساس توضیحات پیتر ون روی در مورد برنامه نویسی است:
- اول ، یک مدل محاسبه ، که یک سیستم رسمی است که یک زبان را تعریف می کند و چگونه جملات زبان (به عنوان مثال عبارات و بیانیه ها) توسط یک دستگاه انتزاعی اجرا می شود. برای این کتاب ، ما به مدلهای محاسباتی که برای برنامه نویسان مفید و شهودی هستند علاقه مند هستیم.
- دوم ، مجموعه ای از تکنیک های برنامه نویسی و اصول طراحی که برای نوشتن برنامه ها به زبان مدل محاسبه استفاده می شود. ما گاهی اوقات این را یک مدل برنامه نویسی می نامیم. یک مدل برنامه نویسی همیشه در بالای یک مدل محاسبات ساخته شده است.
- سوم ، مجموعه ای از تکنیک های استدلال برای این که شما را در مورد برنامه ها استدلال کنید ، اعتماد به نفس را افزایش دهید که آنها به درستی رفتار می کنند و کارآیی آنها را محاسبه می کنند.
~ پیتر وان روی ، مفاهیم ، تکنیک ها و مدل های برنامه نویسی رایانه ، ص. 29
از آنجا که معیارهای لازم برای درک موارد “خارج از منحنی” را که در بخش های قبلی ذکر کردم ، به ما می دهد ، در حالی که توجیهی را برای نزدیک شدن HTML ارائه می دهد ، اما یک زبان برنامه نویسی نیست.
در این حالت ، این نحو و معناشناسی بسیار خوب تعریف شده است ، می توانید در مورد نتیجه یک “برنامه” HTML “استدلال کنید ، دارای درجه خاصی از بیان است (حتی در سالهای اخیر بیان بیشتری کسب کرده است) ، اما نزدیک نیست که به یک دستگاه تورینگ نزدیک باشید ، هنوز هم زبانی است که بیان آن محدود است فقط در اعلام ساختارهای داده و هیچ چیز دیگری نیست.
گفته می شود ، با بسیاری از مواردی که یک زبان برنامه نویسی را توصیف می کند ، سازگار است ، به همین دلیل در یک معیار کمتر دقیق ، می توان آن را یک زبان برنامه نویسی در نظر گرفت ، حتی اگر از نظر فنی اشتباه باشد ، که دلیل بسیاری از مبتدیان را توضیح می دهد ، یا افراد معمولاً از نظر غیررسمی صحبت می کنند ، مانند این به او مراجعه می کنند.
کاوش در مناطق خاکستری
علیرغم همه آنچه به ما نزدیک می شویم ، اگر وجود مؤلفه های وب را در نظر بگیریم و برخی از امتیازات را در نظر بگیریم ، HTML را می توان یک زبان برنامه نویسی در قوانینی که در بخش قبلی تصمیم گرفتیم در نظر گرفت.
هر آنچه برای HTML وجود ندارد ، بیان بیشتری است ، به طوری که می تواند محاسبات را ایجاد کند و به سادگی ساختارهای داده را اعلام کند.
به حدی که این امر در عمل اتفاق می افتد زیرا الگوی JS یا چارچوب های JS که DSL ها را از طریق HTML (نوع VUE یا SVELTE) اضافه می کنند ، اساساً امکان نوشتن برنامه ها را با آن فراهم می کند.
مشکل این است که موتورهای الگو به حساب نمی آیند زیرا آنها یک زبان جدید هستند که از طریق HTML اجرا می شوند ، بنابراین خود هنوز حساب نمی شود.
و در مورد چارچوب های JS ، اگرچه آنها HTML را بهبود می بخشند ، اما اساساً کدی که می نویسید JS است ، قسمت HTML فقط کاملاً اعلام کننده است.
جالب اینجاست که خود HTML برچسب های جدیدی را کسب کرده است که حتی اگر به صورت اعلانی (مشابه XLST که در بالا ذکر شد) محاسبات را بیان می کنند ، و این همان جایی است که اجزای وب وارد می شوند.
آنها یک وب سایت رسمی هستند که هدف آنها دقیقاً گسترش HTML است که به شما امکان می دهد عناصر جدید معتبر را برای هدیه صفحه ضبط کنید. بنابراین ، ما می توانیم مجموعه ای از مؤلفه های وب را تعریف کنیم که نمادی از محاسبات رسمی هستند ، و به HTML معتبر در صفحه ای که آنها را ضبط می کند ، معتبر می شوند.
تنها مشکل این رویکرد این است که مؤلفه های وب به JS بستگی دارند ، بنابراین برای این کار برای کار باید JS را فقط به عنوان زمان اجرا HTML اعطا کنیم ، همانطور که Bytecode برای جاوا است.
این امتیاز در اینجا معنی دارد و نه برای چارچوب های JS ، زیرا مؤلفه های وب چیزی را به نحو رسمی HTML اضافه نمی کنند ، بنابراین اساساً یک مؤلفه وب جدید می تواند یک برچسب HTML جدید باشد ، و JS در اینجا در معرض هر نقطه ای قرار نمی گیرد ، فقط به عنوان یک جزئیات اجرای عمل می کند ، اگر ما An -HTML را در Python و Propertry Web This Web می خواند. بخشی همچنان یکسان خواهد بود ، در حالی که به عنوان مثال در یک مترجم VUE ، لازم است همه معناشناسی و استدلال را به یک برنامه JS نیز اضافه کنیم.
پایان
در مقاله امروز دیدیم که ایده HTML یک زبان برنامه نویسی است و فقط فراتر از یک شوخی است ، و تعریف آنچه که یک موضوع بسیار عمیق تر از آنچه به نظر می رسد خواهد بود ، بنابراین اگر شما محتوا را جالب دیدید ، در اینجا نظرات شما را برای پیشنهاد تفسیر ما با اجزای وب فکر می کنید ، آیا باید در این مورد یک زبان برنامه نویسی تلقی شود یا نه؟