ভিজ্যুয়াল প্রোগ্রামিং সরঞ্জামগুলি, কেন তারা সরাসরি এএসটির সাথে কাজ করে না?


25

আমি বেশ কয়েকটি ওপেন সোর্স ভিজ্যুয়াল প্রোগ্রামিংয়ের সরঞ্জামগুলির মতো পেয়েছি যেমন ব্লকলি এবং বন্ধুদের, এবং অন্যান্য প্রকল্পগুলি গিথুব এ হোস্ট করা হয়েছে, তবে অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি সহ সরাসরি কাজ করে এমন কোনও সন্ধান পাইনি।

তা কেন?

আমি জিজ্ঞাসা করছি কারণ একবার আমি আবিষ্কার করেছি যে প্রতিটি সংকলক সংকলন প্রক্রিয়াতে একটি পর্ব রয়েছে যেখানে এটি এসটি-তে উত্স কোডটি বিশ্লেষণ করে, এটি আমার কাছে স্পষ্ট ছিল যে কিছু ভিজ্যুয়াল প্রোগ্রামিং সরঞ্জামগুলি অগ্রগামী উপায়গুলি দেওয়ার জন্য এটির সুবিধা নিতে পারে সরাসরি দৃশ্যমান উপায়ে এএসটি সম্পাদনা করতে, এবং উত্স থেকে নোড-গ্রাফের রাউন্ড ট্রিপ করতে এবং প্রয়োজনে যখন আবার উত্সতে ফিরে আসে।

উদাহরণস্বরূপ, কেউ ভাবতে পারেন যে জাভাস্ক্রিপ্ট এএসটি ভিজ্যুয়ালাইজার থেকে আসল জাভাস্রিপ্ট ভিজ্যুয়াল প্রোগ্রামিং সরঞ্জামে খুব বেশি পার্থক্য নেই।

তো, আমি কী মিস করছি?


10
এএসটিগুলি খুব ভার্বোজ, এবং প্রোগ্রামিংয়ের জন্য খুব সুবিধাজনক নয়। সেগুলি প্রোগ্রামারগুলির জন্য নয়, সংকলকগুলির জন্য ডিজাইন করা হয়েছিল।
যুবাল ফিল্মাস


1
"বিমূর্ত সিনট্যাক্স ট্রি সাথে সরাসরি কাজ" বলতে আপনার অর্থ কী? যুক্তিযুক্তভাবে ব্লক-ভিত্তিক সমস্ত সরঞ্জাম যেমন এএসটি সম্পাদনা করছে: তারা নেস্টিং (বা স্ট্যাকিং, যদি আপনি সেভাবে দেখতে পছন্দ করেন) দ্বারা প্রান্তগুলি উপস্থাপন করেন এবং ব্যবহারকারী গাছটি টানুন এবং ফেলে দিয়ে সম্পাদনা করতে পারবেন।
মাইকেল হোমার

আমাদের অনেকের কাছেই এটি একটি দুর্দান্ত প্রশ্ন, যারা সংকলকরা তাদের পছন্দ করেন। আমি মনে করি সংক্ষিপ্ত উত্তরটি হ'ল আপনি যদি এটি করতে এবং এটি ব্যবহারকারী বান্ধব করে তুলতে পারেন তবে লোকেরা এটি ব্যবহার করবে। একমাত্র সমস্যা হ'ল এটি একটি বড় "যদি"।
মেহরদাদ

2
আপনি লিস্প তাকিয়ে আছে ? "[এটি] এতোটুকু নয় যে লিস্পের কাছে একটি অদ্ভুত বাক্য গঠন রয়েছে কারণ লিস্পের কোনও সিনট্যাক্স নেই You আপনি অন্যান্য পার্স গাছগুলিতে এমন প্রোগ্রাম লিখেন যা সংকলকটির মধ্যে তৈরি হয় যখন অন্যান্য ভাষাগুলি বিশ্লেষণ করা হয় But তবে এই পার্স গাছগুলি আপনার প্রোগ্রামগুলিতে সম্পূর্ণ অ্যাক্সেসযোগ্য। আপনি সেই প্রোগ্রামগুলি লিখতে পারেন যা সেগুলি হেরফের করে ""
ওয়াইল্ডকার্ড

উত্তর:


28

এই সরঞ্জামগুলি অনেক না বিমূর্ত সিনট্যাক্স গাছ (অথবা বরং সরাসরি এক টু এক এটি কল্পনা) সঙ্গে সরাসরি কাজ। যে Blockly, যা আপনি দেখা করেছি, এবং অন্যান্য ব্লক-ভিত্তিক ভাষা এবং এটা পছন্দ সম্পাদকদের থাকে ( স্ক্র্যাচ , পেনসিল কোড / তরল ফোঁটা , স্ন্যাপ! , জিপি , টাইলযুক্ত গ্রেস , ইত্যাদি)।

এই সিস্টেমগুলি অন্য কোথাও ব্যাখ্যা করার কারণে (স্থান, এবং ইন্টারঅ্যাকশন অসুবিধা) কারণে একটি traditionalতিহ্যবাহী ভার্টেক্স এবং প্রান্তের গ্রাফ উপস্থাপনা দেখায় না, তবে তারা সরাসরি একটি গাছকে উপস্থাপন করছে। একটি নোড বা ব্লক, অন্যের সন্তানের যদি এটি সরাসরি হয়, তবে পিতামাতার মধ্যে শারীরিকভাবে থাকে।


আমি এর মধ্যে একটি সিস্টেম তৈরি করেছি ( টাইল্ড গ্রেস , কাগজ , কাগজ )। আমি আপনাকে নিশ্চয়তা দিতে পারি, এটি সরাসরি এটিএসটির সাথে খুব বেশি কাজ করছে: আপনি পর্দায় যা দেখছেন তা নেস্টেড ডোম উপাদান হিসাবে (যেমন একটি গাছ!) সিনট্যাক্স ট্রিটির সঠিক প্রতিনিধিত্ব।

নেস্টেড টাইল্ড গ্রেস কোডের স্ক্রিনশট

এটি কিছু কোডের এএসটি। মূলটি হ'ল "জন্য ... কর" একটি পদ্ধতি কল নোড। এই নোডের "_ .. _" দিয়ে শুরু করে কিছু শিশু রয়েছে, যার নিজের দুটি সন্তান রয়েছে, একটি "1" নোড এবং একটি "10" নোড। স্ক্রিনে যা আসে তা হ'ল কম্পাইলার ব্যাকএন্ড প্রক্রিয়াটির মাঝামাঝি সময়ে ছড়িয়ে যায় - এটি সিস্টেমটি কীভাবে কাজ করে তা মূলত।

আপনি যদি পছন্দ করেন তবে আপনি এটিকে স্ট্যান্ডার্ড ট্রি লেআউট হিসাবে পর্দার বাইরে আপনার দিকে নির্দেশ করে (এবং তাদের সামনে ব্লক দ্বারা চিহ্নিত) হিসাবে ভাবতে পারেন, তবে বাসা বেঁধে গাছকে দেখানোর মতো বৈধ উপায় ডায়াগ্রাম।

এটি "উত্স থেকে নোড-গ্রাফ এবং পরে প্রয়োজনে যখন উত্স থেকে আবার ফিরে আসবে" রাউন্ড ট্রিপও করবে। আসলে, আপনি নীচের অংশে "কোড ভিউ" ক্লিক করলে এটি ঘটতে পারবেন। আপনি যদি পাঠ্যটি সংশোধন করেন তবে এটি পুনরায় বিংশ্লিষ্ট হবে এবং ফলস্বরূপ গাছ আপনাকে আবার সম্পাদনা করার জন্য রেন্ডার করা হবে এবং আপনি যদি ব্লকগুলি সংশোধন করেন তবে উত্সের সাথে একই জিনিস ঘটে।


পেনসিল কোড মূলত একই জিনিসটি করে, এই সময়ে, আরও ভাল ইন্টারফেসের সাথে । এটি যে ব্লকগুলি ব্যবহার করে তা হ'ল কফিস্ক্রিপ্ট এএসটি-র একটি গ্রাফিক্যাল ভিউ। সুতরাং অন্যান্য ব্লক- বা টাইল-ভিত্তিক সিস্টেমগুলিও করুন, যদিও বড় আকারে তাদের মধ্যে কিছু বাসা বাঁধার দিকটি ভিজ্যুয়াল উপস্থাপনায় পুরোপুরি পরিষ্কার করে না, এবং অনেকের পিছনে একটি আসল পাঠ্য ভাষা নেই তাই " সিনট্যাক্স ট্রি "কিছুটা বিভ্রান্তিকর হতে পারে তবে নীতিটি এখানে রয়েছে।


তুমি কি ভুলে গেছেন, তারপর, যে এই সিস্টেমের সত্যিই হয় বিমূর্ত সিনট্যাক্স গাছ সাথে সরাসরি কাজ। আপনি যা দেখেন এবং পরিচালনা করেন তা হ'ল একটি গাছের স্থান-দক্ষ রেন্ডারিং, অনেক ক্ষেত্রে আক্ষরিকভাবে এএসটি একটি সংকলক বা পার্সার উত্পাদন করে।


6

কমপক্ষে দুটি কারণ:

  1. কারণ সোর্স কোড অনেক বেশি সংক্ষিপ্ত উপস্থাপনা। একটি গ্রাফ হিসাবে একটি এএসটি স্থাপন করা আরও অনেক ভিজ্যুয়াল রিয়েল এস্টেট গ্রহণ করতে পারে।

    যতটা সম্ভব প্রসঙ্গযুক্ত প্রোগ্রামারদের পুরষ্কার - যেমন, একই সাথে স্ক্রিনে একসাথে একাধিক কোড উপস্থিত থাকে। প্রসঙ্গ তাদের আরও জটিলতা পরিচালনা করতে সহায়তা করে। (এই কারণেই অনেক প্রোগ্রামাররা এই ক্রেজি ছোট ছোট ফন্ট এবং প্রচুর 30 "স্ক্রিন ব্যবহার করে)"

    যদি আমরা এএসটি গ্রাফ বা গাছ হিসাবে প্রদর্শন করার চেষ্টা করি, তবে আপনি কোনও একক স্ক্রিনে যে পরিমাণ কোডটি ফিট করতে পারেন তা উত্স কোড হিসাবে উপস্থাপিত হওয়ার চেয়ে অনেক কম হবে। এটি বিকাশকারীদের উত্পাদনশীলতার জন্য বিশাল ক্ষতি।

  2. এএসটি সংকলক প্রোগ্রামিংয়ের জন্য, প্রোগ্রামারদের দ্বারা সহজে বোঝার জন্য নয়। যদি আপনি একটি বিদ্যমান এএসটি উপস্থাপনা নেন এবং এটি দৃশ্যত প্রদর্শিত করেন তবে এটি সম্ভবত বিকাশকারীদের পক্ষে বোঝা আরও শক্ত হবে কারণ এএসটিগুলি বিকাশকারীদের শেখার পক্ষে সহজ করার জন্য তৈরি করা হয়নি।

    বিপরীতে, উত্স কোডটি সাধারণত বিকাশকারীদের দ্বারা পঠনযোগ্য / বোঝার জন্য ডিজাইন করা হয়; এটি সাধারণত উত্স কোডের জন্য একটি সমালোচনামূলক নকশার মানদণ্ড, তবে এটিএসটিগুলির জন্য নয়। এএসটিগুলি কেবল সংকলক লেখক দ্বারা বোঝা দরকার, প্রতিদিনের বিকাশকারীদের দ্বারা নয়।

    এবং, যে কোনও ক্ষেত্রে, এএসটি ভাষাটি উত্স ভাষা ছাড়াও দ্বিতীয় ভাষা বিকাশকারীদের শিখতে হবে। জয় নয়।

কিছু অতিরিক্ত সম্ভাব্য কারণে /software//q/119463/34181 দেখুন ।


2
"বিপরীতে, উত্স কোডটি বিকাশকারীদের দ্বারা পঠনযোগ্য / বোধগম্য হওয়ার জন্য ডিজাইন করা হয়েছে" - পাল্টা নমুনা: সর্বাধিক এসোলেংস, পার্ল, লিস্প
জন ডিভোরাক

1
"কারণ সোর্স কোডটি অনেক বেশি সংক্ষিপ্ত উপস্থাপনা" "; "এএসটি ভাষা হ'ল দ্বিতীয় ভাষার বিকাশকারীদের উত্স ভাষা ছাড়াও শিখতে হবে" - এগুলি সমস্ত ভিজ্যুয়াল পিএল এর বিরুদ্ধে যুক্তিযুক্ত তবে এটি ওপি যে বিষয়ে তাত্পর্যপূর্ণ তা ব্যাখ্যা করতে সহায়তা করে না।
রাফেল

"(পর্দা যে এক কারণে কেন অনেক প্রোগ্রামারদের এই পাগল ছোট ফন্ট এবং বিরাট 30 ব্যবহার করেন"।) "- যথেষ্ট প্রসঙ্গ দেখতে আপনি একটি বড় গাধা পর্দা প্রয়োজন, হয়তো তুমি স্প্যাঘেটি-কোডিং;)?
রাফায়েল

1
@ রাফেল সম্ভবত, তবে এটিতে রিফ্যাক্টরিংয়ের চেয়ে অর্থ নিক্ষেপের কম প্রচেষ্টা!
Kroltan

3
@ জনডভোরাক, ... এলআইএসপি হ'ল একটি পাল্টে দেওয়া নমুনা কারণ এএসটি হ'ল ভাষা - যা এটিকেই তার অভিব্যক্তিপূর্ণ শক্তি দেয়; আপনার অন্যান্য এলআইএসপি কোডটি পুনরায় সংযুক্ত করে এমন এলআইএসপি কোড লেখা লিখন কোডের মতোই সহজ যা স্ট্যান্ডার্ড এলআইএসপি ডাটা স্ট্রাকচারকে সংশোধন করে ... যা এলআইএসপি কোডে লেখা থাকে ঠিক তেমনই । এটি অর্ধ শতাব্দী ধরে স্থায়ী হওয়ার একটি কারণ রয়েছে - পরিবারের নকশাটি অস্বাভাবিকভাবে প্রকাশযুক্ত। গো এর অ্যাসিঙ্ক এক্সটেনশানগুলি ভাষা এবং রানটাইমের গভীরে গভীরভাবে প্লাবিত করতে হয়েছিল; ক্লোজারের জন্য, এটি কেবল একটি গ্রন্থাগার। আরও দেখুন: গড় পিটিয়ে
চার্লস ডাফি

3

সংকলকগণের দ্বারা সাধারণ এএসটি বরং জটিল এবং ভার্বোস। নির্দেশিত গ্রাফ উপস্থাপনা দ্রুত অনুসরণ করা বেশ শক্ত হয়ে উঠবে। তবে সিএসের দুটি বৃহত অঞ্চল রয়েছে যেখানে এএসটি ব্যবহার করা হয়।

  1. লিস্প ভাষা আসলে এএসটি হিসাবে লেখা হয়। প্রোগ্রামের উত্স কোডটি তালিকা হিসাবে লিখিত হয় এবং সংকলক এবং / অথবা দোভাষী দ্বারা সরাসরি ব্যবহৃত হয় (যার উপর ভিত্তি করে রূপটি ব্যবহৃত হচ্ছে)।
  2. মডেলিংয়ের ভাষা, যেমন ইউএমএল এবং অনেক ভিজ্যুয়াল ডোমেন নির্দিষ্ট ভাষাগুলি গ্রাফিক্যাল নোটেশনগুলি ব্যবহার করে যা সাধারণ সাধারণ উদ্দেশ্য ভাষা এএসটির চেয়ে বিমূর্ততার উচ্চ স্তরে কার্যকর বিমূর্ত সিনট্যাক্স গ্রাফ (এএসজি) are
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.